double sg_tcp_gamma = 0.0;
-static void link_free(void *nw_link)
-{
- xbt_dict_free(&(((link_CM02_t) nw_link)->properties));
- surf_resource_free(nw_link);
-}
static link_CM02_t link_new(char *name,
double bw_initial,
tmgr_trace_t bw_trace,
double lat_initial,
tmgr_trace_t lat_trace,
- e_surf_link_state_t
+ e_surf_resource_state_t
state_initial,
tmgr_trace_t state_trace,
e_surf_link_sharing_policy_t
policy, xbt_dict_t properties)
{
- link_CM02_t nw_link = xbt_new0(s_link_CM02_t, 1);
+ link_CM02_t nw_link = (link_CM02_t)
+ surf_resource_lmm_new(sizeof(s_link_CM02_t),
+ surf_network_model,name,properties,
+ network_maxmin_system, bandwidth_factor * bw_initial,
+ history,
+ state_initial,state_trace,
+ bw_initial,bw_trace);
+
xbt_assert1(!xbt_dict_get_or_null(surf_network_model->resource_set, name),
"Link '%s' declared several times in the platform file.", name);
- nw_link->generic_resource.model = surf_network_model;
- nw_link->generic_resource.name = name;
- nw_link->bw_current = bw_initial;
- if (bw_trace)
- nw_link->bw_event =
- tmgr_history_add_trace(history, bw_trace, 0.0, 0, nw_link);
nw_link->lat_current = lat_initial;
if (lat_trace)
nw_link->lat_event =
tmgr_history_add_trace(history, lat_trace, 0.0, 0, nw_link);
- nw_link->state_current = state_initial;
- if (state_trace)
- nw_link->state_event =
- tmgr_history_add_trace(history, state_trace, 0.0, 0, nw_link);
-
- nw_link->constraint =
- lmm_constraint_new(network_maxmin_system, nw_link,
- bandwidth_factor * nw_link->bw_current);
if (policy == SURF_LINK_FATPIPE)
- lmm_constraint_shared(nw_link->constraint);
-
- nw_link->properties = properties;
-
- current_property_set = properties;
+ lmm_constraint_shared(nw_link->lmm_resource.constraint);
- xbt_dict_set(surf_network_model->resource_set, name, nw_link, link_free);
+ xbt_dict_set(surf_network_model->resource_set, name, nw_link, surf_resource_free);
return nw_link;
}
tmgr_trace_t bw_trace;
double lat_initial;
tmgr_trace_t lat_trace;
- e_surf_link_state_t state_initial_link = SURF_LINK_ON;
+ 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;
|| (A_surfxml_link_state ==
A_surfxml_link_state_OFF), "Invalid state");
if (A_surfxml_link_state == A_surfxml_link_state_ON)
- state_initial_link = SURF_LINK_ON;
+ state_initial_link = SURF_RESOURCE_ON;
else if (A_surfxml_link_state == A_surfxml_link_state_OFF)
- state_initial_link = SURF_LINK_OFF;
+ state_initial_link = SURF_RESOURCE_OFF;
if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_SHARED)
policy_initial_link = SURF_LINK_SHARED;
xbt_assert2(trace, "Cannot connect trace %s to link %s: trace undefined",
trace_name, elm);
- link->state_event = tmgr_history_add_trace(history, trace, 0.0, 0, link);
+ link->lmm_resource.state_event = tmgr_history_add_trace(history, trace, 0.0, 0, link);
}
xbt_dict_foreach(trace_connect_list_bandwidth, cursor, trace_name, elm) {
xbt_assert2(trace, "Cannot connect trace %s to link %s: trace undefined",
trace_name, elm);
- link->bw_event = tmgr_history_add_trace(history, trace, 0.0, 0, link);
+ link->lmm_resource.power.event = tmgr_history_add_trace(history, trace, 0.0, 0, link);
}
xbt_dict_foreach(trace_connect_list_latency, cursor, trace_name, elm) {
static int resource_used(void *resource_id)
{
return lmm_constraint_used(network_maxmin_system,
- ((link_CM02_t) resource_id)->constraint);
+ ((surf_resource_lmm_t) resource_id)->constraint);
}
static int action_unref(surf_action_t action)
/* "%lg" " for event %p\n", surf_get_clock(), nw_link->name, */
/* value, event_type); */
- if (event_type == nw_link->bw_event) {
+ if (event_type == nw_link->lmm_resource.power.event) {
double delta =
- weight_S_parameter / value - weight_S_parameter / nw_link->bw_current;
+ weight_S_parameter / value - weight_S_parameter / nw_link->lmm_resource.power.current;
lmm_variable_t var = NULL;
lmm_element_t elem = NULL;
surf_action_network_CM02_t action = NULL;
- nw_link->bw_current = value;
- lmm_update_constraint_bound(network_maxmin_system, nw_link->constraint,
- bandwidth_factor * nw_link->bw_current);
+ nw_link->lmm_resource.power.current = value;
+ lmm_update_constraint_bound(network_maxmin_system, nw_link->lmm_resource.constraint,
+ bandwidth_factor * nw_link->lmm_resource.power.current);
if (weight_S_parameter > 0) {
while ((var = lmm_get_var_from_cnst
- (network_maxmin_system, nw_link->constraint, &elem))) {
+ (network_maxmin_system, nw_link->lmm_resource.constraint, &elem))) {
action = lmm_variable_id(var);
action->weight += delta;
if (!(action->suspended))
nw_link->lat_current = value;
while ((var = lmm_get_var_from_cnst
- (network_maxmin_system, nw_link->constraint, &elem))) {
+ (network_maxmin_system, nw_link->lmm_resource.constraint, &elem))) {
action = lmm_variable_id(var);
action->lat_current += delta;
action->weight += delta;
action->weight);
}
- } else if (event_type == nw_link->state_event) {
+ } else if (event_type == nw_link->lmm_resource.state_event) {
if (value > 0)
- nw_link->state_current = SURF_LINK_ON;
+ nw_link->lmm_resource.state_current = SURF_RESOURCE_ON;
else {
- lmm_constraint_t cnst = nw_link->constraint;
+ lmm_constraint_t cnst = nw_link->lmm_resource.constraint;
lmm_variable_t var = NULL;
lmm_element_t elem = NULL;
- nw_link->state_current = SURF_LINK_OFF;
+ nw_link->lmm_resource.state_current = SURF_RESOURCE_OFF;
while ((var = lmm_get_var_from_cnst
(network_maxmin_system, cnst, &elem))) {
surf_action_t action = lmm_variable_id(var);
"You're trying to send data from %s to %s but there is no connection between these two hosts.",
src_name, dst_name);
- action = xbt_new0(s_surf_action_network_CM02_t, 1);
-
- action->generic_action.refcount = 1;
- action->generic_action.cost = size;
- action->generic_action.remains = size;
- action->generic_action.max_duration = NO_MAX_DURATION;
- action->generic_action.start = surf_get_clock();
- action->generic_action.finish = -1.0;
- action->generic_action.model_type = surf_network_model;
- action->suspended = 0; /* Should be useless because of the
- calloc but it seems to help valgrind... */
- action->generic_action.state_set =
- surf_network_model->states.running_action_set;
-
link_CM02_t link;
+ int failed=0;
xbt_dynar_foreach(route,i,link) {
- if (link->state_current == SURF_LINK_OFF) {
- action->generic_action.state_set =
- surf_network_model->states.failed_action_set;
+ if (link->lmm_resource.state_current == SURF_RESOURCE_OFF) {
+ failed = 1;
break;
}
}
+ action = surf_action_new(sizeof(s_surf_action_network_CM02_t),size,surf_network_model,failed);
xbt_swag_insert(action, action->generic_action.state_set);
action->rate = rate;
xbt_dynar_foreach(route,i,link) {
action->latency += link->lat_current;
action->weight +=
- link->lat_current + weight_S_parameter / link->bw_current;
+ link->lat_current + weight_S_parameter / link->lmm_resource.power.current;
}
/* LARGE PLATFORMS HACK:
Add src->link and dst->link latencies */
}
xbt_dynar_foreach(route,i,link) {
- lmm_expand(network_maxmin_system, link->constraint,
+ lmm_expand(network_maxmin_system, link->lmm_resource.constraint,
action->variable, 1.0);
}
/* LARGE PLATFORMS HACK:
static double get_link_bandwidth(const void *link)
{
- return ((link_CM02_t) link)->bw_current;
+ return ((link_CM02_t) link)->lmm_resource.power.current;
}
static double get_link_latency(const void *link)
static int link_shared(const void *link)
{
- return lmm_constraint_is_shared(((link_CM02_t) link)->constraint);
-}
-
-static xbt_dict_t get_properties(void *link)
-{
- return ((link_CM02_t) link)->properties;
+ return lmm_constraint_is_shared(((surf_resource_lmm_t) link)->constraint);
}
static void action_suspend(surf_action_t action)
surf_network_model->extension.network.get_link_latency = get_link_latency;
surf_network_model->extension.network.link_shared = link_shared;
- surf_network_model->get_properties = get_properties;
-
if (!network_maxmin_system)
network_maxmin_system = lmm_system_new();
- routing_model_full_create(sizeof(link_CM02_t),
+ routing_model_create(sizeof(link_CM02_t),
link_new(xbt_strdup("__loopback__"),
498000000, NULL, 0.000015, NULL,
- SURF_LINK_ON, NULL, SURF_LINK_FATPIPE, NULL));
+ SURF_RESOURCE_ON, NULL, SURF_LINK_FATPIPE, NULL));
}
/************************************************************************/