typedef struct t_link_attr
{
+ //mandatory attributes
const char* id;
double bandwidth;
double latency;
+ // Optional attributes
+ const char* bandwidth_trace;
+ const char* latency_trace;
+ const char* state_trace;
+ int state_initial;
+ int policy;
}link_attr,*p_link_attr;
typedef struct t_route_attr
}
+/**
+ * create link resource via network model
+ */
+static void create_link(const char *name,
+ double bw_initial,const char *trace,double lat_initial,
+ const char* latency_trace,int state_init, const char* state_trace,int policy)
+{
+ tmgr_trace_t bw_trace;
+ tmgr_trace_t lat_trace;
+ e_surf_resource_state_t state_initial_link = SURF_RESOURCE_ON;
+ e_surf_link_sharing_policy_t policy_initial_link = SURF_LINK_SHARED;
+ tmgr_trace_t st_trace;
+ if(trace)
+ bw_trace = tmgr_trace_new(trace);
+ else
+ bw_trace = tmgr_trace_new("");
+
+ if(latency_trace)
+ lat_trace = tmgr_trace_new(latency_trace);
+ else
+ lat_trace = tmgr_trace_new("");
+
+ if(state_trace)
+ st_trace = tmgr_trace_new(state_trace);
+ else
+ st_trace = tmgr_trace_new("");
+
+ if(state_init == -1)
+ state_initial_link = SURF_RESOURCE_OFF;
+ if(policy == -1)
+ policy_initial_link = SURF_LINK_FATPIPE;
+
+ surf_link_create_resource(xbt_strdup(name), bw_initial, bw_trace,
+ lat_initial, lat_trace, state_initial_link, st_trace,
+ policy_initial_link, xbt_dict_new());
+}
+
+
/*
*create host resource via workstation_ptask_L07 model [for SimDag]
*/
const char* id;
double bandwidth,latency;
+ const char* bandwidth_trace;
+ const char* latency_trace;
+ const char* state_trace;
+ int state_initial,policy;
+
//get values from the table passed as argument
if (lua_istable(L,-1)) {
// get Id Value
latency = lua_tonumber(L,-1);
lua_pop(L,1);
+ /*Optional Arguments */
+
+ //get bandwidth_trace value
+ lua_pushstring(L,"bandwidth_trace");
+ lua_gettable(L, -2 );
+ bandwidth_trace = lua_tostring(L,-1);
+ lua_pop(L,1);
+
+ //get latency_trace value
+ lua_pushstring(L,"latency_trace");
+ lua_gettable(L, -2 );
+ latency_trace = lua_tostring(L,-1);
+ lua_pop(L,1);
+
+ //get state_trace value
+ lua_pushstring(L,"state_trace");
+ lua_gettable(L, -2 );
+ state_trace = lua_tostring(L,-1);
+ lua_pop(L,1);
+
+ //get state_initial value
+ lua_pushstring(L,"state_initial");
+ lua_gettable(L, -2 );
+ state_initial = lua_tonumber(L,-1);
+ lua_pop(L,1);
+
+
+ //get policy value
+ lua_pushstring(L,"policy");
+ lua_gettable(L, -2 );
+ policy = lua_tonumber(L,-1);
+ lua_pop(L,1);
+
} else {
ERROR0("Bad Arguments to create link, Should be a table with named arguments");
return -1;
link->id = id;
link->bandwidth = bandwidth;
link->latency = latency;
+ link->bandwidth_trace = bandwidth_trace;
+ link->latency_trace = latency_trace;
+ link->state_trace = state_trace;
+ link->state_initial= state_initial;
+ link->policy = policy;
xbt_dynar_push(link_list_d,&link);
return 0;
}
//add Links
xbt_dynar_foreach(link_list_d,i,p_link)
{
- surf_link_create_resource((char*)p_link->id,p_link->bandwidth,p_link->latency);
+ /*(const char *name,
+ double bw_initial,const char *trace,double lat_initial,
+ const char* latency_trace,int state_init, const char* state_trace,int policy)*/
+ create_link(p_link->id,p_link->bandwidth,p_link->bandwidth_trace,p_link->latency,
+ p_link->latency_trace,p_link->state_initial,p_link->state_trace,p_link->policy);
}
// add route
xbt_dynar_foreach(route_list_d,i,p_route)
SURF_RESOURCE_OFF = 0 /**< Down & broken */
} e_surf_resource_state_t;
+ typedef enum {
+ SURF_LINK_SHARED = 1,
+ SURF_LINK_FATPIPE = 0
+ } e_surf_link_sharing_policy_t;
+
/** @Brief Specify that we use that action */
XBT_PUBLIC(void) surf_action_ref(surf_action_t action);
/** @brief Creates a new action.
/**
* FIXME : still improvaleb [this should be done in the binding code]
*/
-XBT_PUBLIC(void) network_create_resource(char *name,
- double initial_bandwidth,double initial_latency);
XBT_PUBLIC(void) workstation_link_create_resource(char *name,
double initial_bandwidth,double initial_latency);
double (*get_link_bandwidth) (const void *link);
double (*get_link_latency) (const void *link);
int (*link_shared) (const void *link);
- void (*create_resource) (char *name,double bw_initial,double lat_initial);
void (*add_traces)(void);
+ void (*create_resource)(char *name,
+ double bw_initial,
+ tmgr_trace_t bw_trace,
+ double lat_initial,
+ tmgr_trace_t lat_trace,
+ e_surf_resource_state_t
+ state_initial,
+ tmgr_trace_t state_trace,
+ e_surf_link_sharing_policy_t policy,
+ xbt_dict_t properties);
} s_surf_model_extension_network_t;
/** \brief Workstation model extension public
xbt_dict_t(*get_properties) (const void *resource);
void (*link_create_resource) (char *name,double bw_initial,double lat_initial);
void (*cpu_create_resource)(char *name, double power_peak,
- double power_scale,
- tmgr_trace_t power_trace,
- e_surf_resource_state_t state_initial,
- tmgr_trace_t state_trace,
- xbt_dict_t cpu_properties);
+ double power_scale,
+ tmgr_trace_t power_trace,
+ e_surf_resource_state_t state_initial,
+ tmgr_trace_t state_trace,
+ xbt_dict_t cpu_properties);
void (*add_traces) (void);
+
} s_surf_model_extension_workstation_t;
+
+
+
/** \brief Model datatype
* \ingroup SURF_models
*
/**
* create link resource
* see surfxml_parse.c
- * FIXME : shoudl have the same prototype as net_link_new
*/
XBT_PUBLIC(void) surf_link_create_resource(char *name,
- double bw_initial,double lat_initial);
+ double bw_initial,
+ tmgr_trace_t bw_trace,
+ double lat_initial,
+ tmgr_trace_t lat_trace,
+ e_surf_resource_state_t
+ state_initial,
+ tmgr_trace_t state_trace,
+ e_surf_link_sharing_policy_t policy,
+ xbt_dict_t properties);
XBT_PUBLIC(void) surf_wsL07_link_create_resource(char *name,
}
+static void net_create_resource(char *name,
+ double bw_initial,
+ tmgr_trace_t bw_trace,
+ double lat_initial,
+ tmgr_trace_t lat_trace,
+ e_surf_resource_state_t
+ state_initial,
+ tmgr_trace_t state_trace,
+ e_surf_link_sharing_policy_t policy,
+ xbt_dict_t properties)
+{
+ net_link_new(name, bw_initial, bw_trace,
+ lat_initial, lat_trace, state_initial, state_trace,
+ policy, xbt_dict_new());
+}
static void net_add_traces(void)
{
xbt_dict_cursor_t cursor = NULL;
action->max_duration = duration;
}
-
-/**
- * FIXME : this should be done in the binding code !!
- */
-void network_create_resource(char *name,
- double initial_bandwidth,double initial_latency)
-{
-
- char* name_link;
- double bw_initial;
- tmgr_trace_t bw_trace;
- double lat_initial;
- tmgr_trace_t lat_trace;
- e_surf_resource_state_t state_initial_link = SURF_RESOURCE_ON;
- e_surf_link_sharing_policy_t policy_initial_link = SURF_LINK_SHARED;
- tmgr_trace_t state_trace;
-
- name_link = xbt_strdup(name);
- bw_initial = initial_bandwidth;
- bw_trace = tmgr_trace_new("");
- lat_initial = initial_latency;
- lat_trace = tmgr_trace_new("");
- // FIXME Hard Coded Values
- //state_initial_link = SURF_RESOURCE_ON;
- //policy_initial_link = SURF_LINK_SHARED;
- state_trace = tmgr_trace_new("");
-
- net_link_new(name_link, bw_initial, bw_trace,
- lat_initial, lat_trace, state_initial_link, state_trace,
- policy_initial_link, xbt_dict_new());
-}
-
static void net_finalize(void)
{
surf_model_exit(surf_network_model);
surf_network_model->extension.network.get_link_bandwidth =
net_get_link_bandwidth;
surf_network_model->extension.network.link_shared = net_link_shared;
- surf_network_model->extension.network.create_resource = network_create_resource;
surf_network_model->extension.network.add_traces = net_add_traces;
+ surf_network_model->extension.network.create_resource = net_create_resource;
if (!network_maxmin_system)
network_maxmin_system = lmm_system_new();
extern const char *surf_action_state_names[6];
-typedef enum {
- SURF_LINK_SHARED = 1,
- SURF_LINK_FATPIPE = 0
-} e_surf_link_sharing_policy_t;
-
typedef struct surf_model_private {
int (*resource_used) (void *resource_id);
/* Share the resources to the actions and return in how much time
*/
void surf_link_create_resource(char *name,
double bw_initial,
- double lat_initial)
+ tmgr_trace_t bw_trace,
+ double lat_initial,
+ tmgr_trace_t lat_trace,
+ e_surf_resource_state_t
+ state_initial,
+ tmgr_trace_t state_trace,
+ e_surf_link_sharing_policy_t policy,
+ xbt_dict_t properties)
{
return surf_network_model->extension.network.
- create_resource(name,bw_initial,lat_initial);
+ create_resource(name,bw_initial,bw_trace,lat_initial,lat_trace,
+ state_initial,state_trace,policy,properties);
}