X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/fe6bf06966aa6183e31705b167ff36d77b49d0ed..02b7b97c6140acd91203e555f3ee999f7abf353c:/src/surf/surf_routing.c
diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c
index 9c7b5fb8b5..349b8cf2a0 100644
--- a/src/surf/surf_routing.c
+++ b/src/surf/surf_routing.c
@@ -186,11 +186,9 @@ static void parse_E_host(void)
/*
* \brief Add a host to the network element list from XML
*/
-static void parse_S_host_XML(void)
+static void parse_S_host_XML(surf_parsing_host_arg_t h)
{
-// XBT_INFO("parse_S_host_XML");
-// XBT_INFO("'%s' '%s'",struct_host->V_host_id, struct_host->V_host_coord);
- parse_S_host(struct_host->V_host_id, struct_host->V_host_coord);
+ parse_S_host(h->V_host_id, h->V_host_coord);
}
static void parse_E_host_XML(void)
{
@@ -489,15 +487,6 @@ void routing_AS_init(const char *AS_id, const char *wanted_routing_type)
current_routing = new_routing;
}
-/*
- * Detect the routing model type of the routing component from XML platforms
- */
-static void parse_S_AS(void)
-{
- routing_AS_init(A_surfxml_AS_id, A_surfxml_AS_routing);
-}
-
-
/**
* \brief Finish the creation of a new routing component
*
@@ -526,14 +515,6 @@ void routing_AS_end(const char *AS_id)
}
}
-/*
- * \brief Finish the creation of a new routing component from XML
- */
-static void parse_E_AS(void)
-{
- routing_AS_end(A_surfxml_AS_id);
-}
-
/* Aux Business methods */
/**
@@ -972,7 +953,7 @@ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_
current_routing = NULL;
/* parse generic elements */
- surfxml_add_callback(STag_surfxml_host_cb_list, &parse_S_host_XML);
+ surf_parse_host_add_cb(parse_S_host_XML);
surfxml_add_callback(ETag_surfxml_host_cb_list, &parse_E_host_XML);
surfxml_add_callback(STag_surfxml_router_cb_list, &parse_S_router_XML);
@@ -993,9 +974,6 @@ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_
surfxml_add_callback(ETag_surfxml_bypassRoute_cb_list,
&parse_E_bypassRoute_store_route);
- surfxml_add_callback(STag_surfxml_AS_cb_list, &parse_S_AS);
- surfxml_add_callback(ETag_surfxml_AS_cb_list, &parse_E_AS);
-
surfxml_add_callback(STag_surfxml_cluster_cb_list,
&routing_parse_Scluster);
@@ -1504,6 +1482,8 @@ static void routing_parse_Econfig(void)
static void parse_create_host_link(int i)
{
char *host_id, *link_id = NULL;
+ s_surf_parsing_host_arg_t host;
+ memset(&host,0,sizeof(host));
host_id = bprintf("%s%d%s", struct_cluster->V_cluster_prefix, i, struct_cluster->V_cluster_suffix);
link_id = bprintf("%s_link_%d", struct_cluster->V_cluster_id, i);
@@ -1511,14 +1491,13 @@ static void parse_create_host_link(int i)
A_surfxml_host_state = A_surfxml_host_state_ON;
XBT_DEBUG("", host_id, struct_cluster->S_cluster_power);
- struct_host = xbt_new0(s_surf_parsing_host_arg_t, 1);
- struct_host->V_host_id = xbt_strdup(host_id);
+ host.V_host_id = xbt_strdup(host_id);
if(strcmp(struct_cluster->V_cluster_availability_file,"")){
xbt_dict_set(patterns, "radical", bprintf("%d", i), xbt_free);
char* tmp_availability_file = xbt_strdup(struct_cluster->V_cluster_availability_file);
xbt_str_varsubst(tmp_availability_file,patterns);
XBT_DEBUG("\tavailability_file=\"%s\"",tmp_availability_file);
- struct_host->V_host_power_trace = tmgr_trace_new(tmp_availability_file);
+ host.V_host_power_trace = tmgr_trace_new(tmp_availability_file);
xbt_free(tmp_availability_file);
}
else
@@ -1529,7 +1508,7 @@ static void parse_create_host_link(int i)
char *tmp_state_file = xbt_strdup(struct_cluster->V_cluster_state_file);
xbt_str_varsubst(tmp_state_file,patterns);
XBT_DEBUG("\tstate_file=\"%s\"",tmp_state_file);
- struct_host->V_host_state_trace = tmgr_trace_new(tmp_state_file);
+ host.V_host_state_trace = tmgr_trace_new(tmp_state_file);
xbt_free(tmp_state_file);
}
else
@@ -1537,12 +1516,12 @@ static void parse_create_host_link(int i)
XBT_DEBUG("\tstate_file=\"\"");
}
- struct_host->V_host_power_peak = struct_cluster->S_cluster_power;
- struct_host->V_host_power_scale = 1.0;
- struct_host->V_host_core = struct_cluster->S_cluster_core;
- struct_host->V_host_state_initial = SURF_RESOURCE_ON;
- struct_host->V_host_coord = "";
- STag_surfxml_host_cluster();
+ host.V_host_power_peak = struct_cluster->S_cluster_power;
+ host.V_host_power_scale = 1.0;
+ host.V_host_core = struct_cluster->S_cluster_core;
+ host.V_host_state_initial = SURF_RESOURCE_ON;
+ host.V_host_coord = "";
+ surf_parse_host(&host);
XBT_DEBUG("");
A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
@@ -1572,7 +1551,7 @@ static void parse_create_host_link(int i)
else if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FULLDUPLEX)
struct_lnk->V_policy_initial_link = SURF_LINK_FULLDUPLEX;
}
- STag_surfxml_link_cluster();
+ surf_parse_link();
ETag_surfxml_host();
ETag_surfxml_link();
@@ -1604,6 +1583,8 @@ void routing_parse_Scluster(void)
static int AX_ptr = 0;
char *host_id, *groups, *link_id = NULL;
+ s_surf_parsing_host_arg_t host;
+
if( strcmp(struct_cluster->V_cluster_availability_file,"")
|| strcmp(struct_cluster->V_cluster_state_file,"") )
{
@@ -1633,20 +1614,167 @@ void routing_parse_Scluster(void)
//Make all hosts
radical_elements = xbt_str_split(struct_cluster->V_cluster_radical, ",");
xbt_dynar_foreach(radical_elements, iter, groups) {
+ memset(&host,0,sizeof(host));
+
radical_ends = xbt_str_split(groups, "-");
switch (xbt_dynar_length(radical_ends)) {
case 1:
surf_parse_get_int(&start, xbt_dynar_get_as(radical_ends, 0, char *));
- parse_create_host_link(start);
+ host_id = bprintf("%s%d%s", struct_cluster->V_cluster_prefix, start, struct_cluster->V_cluster_suffix);
+ link_id = bprintf("%s_link_%d", struct_cluster->V_cluster_id, start);
+
+ XBT_DEBUG("", host_id, struct_cluster->S_cluster_power);
+ host.V_host_id = host_id;
+ if(strcmp(struct_cluster->V_cluster_availability_file,"")){
+ xbt_dict_set(patterns, "radical", bprintf("%d", start), xbt_free);
+ char* tmp_availability_file = xbt_strdup(struct_cluster->V_cluster_availability_file);
+ xbt_str_varsubst(tmp_availability_file,patterns);
+ XBT_DEBUG("\tavailability_file=\"%s\"",tmp_availability_file);
+ host.V_host_power_trace = tmgr_trace_new(tmp_availability_file);
+ xbt_free(tmp_availability_file);
+ }
+ else
+ {
+ XBT_DEBUG("\tavailability_file=\"\"");
+ }
+ if(strcmp(struct_cluster->V_cluster_state_file,"")){
+ char *tmp_state_file = xbt_strdup(struct_cluster->V_cluster_state_file);
+ xbt_str_varsubst(tmp_state_file,patterns);
+ XBT_DEBUG("\tstate_file=\"%s\"",tmp_state_file);
+ host.V_host_state_trace = tmgr_trace_new(tmp_state_file);
+ xbt_free(tmp_state_file);
+ }
+ else
+ {
+ XBT_DEBUG("\tstate_file=\"\"");
+ }
+
+ host.V_host_power_peak = struct_cluster->S_cluster_power;
+ host.V_host_power_scale = 1.0;
+ host.V_host_core = struct_cluster->S_cluster_core;
+ host.V_host_state_initial = SURF_RESOURCE_ON;
+ host.V_host_coord = "";
+ surf_parse_host(&host);
+ XBT_DEBUG("");
+
+ A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
+ if(struct_cluster->V_cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX)
+ {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FULLDUPLEX;}
+ if(struct_cluster->V_cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FATPIPE)
+ {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FATPIPE;}
+
+ XBT_DEBUG("", link_id,struct_cluster->S_cluster_bw, struct_cluster->S_cluster_lat);
+
+ struct_lnk = xbt_new0(s_surf_parsing_link_arg_t, 1);
+ struct_lnk->V_link_id = link_id;
+ struct_lnk->V_link_bandwidth = struct_cluster->S_cluster_bw;
+ struct_lnk->V_link_latency = struct_cluster->S_cluster_lat;
+ struct_lnk->V_link_bandwidth_file = NULL;
+ struct_lnk->V_link_latency_file = NULL;
+ struct_lnk->V_link_state_file = NULL;
+ struct_lnk->V_link_state = SURF_RESOURCE_ON;
+ struct_lnk->V_link_sharing_policy = A_surfxml_link_sharing_policy;
+
+ if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_SHARED)
+ struct_lnk->V_policy_initial_link = SURF_LINK_SHARED;
+ else
+ {
+ if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FATPIPE)
+ struct_lnk->V_policy_initial_link = SURF_LINK_FATPIPE;
+ else if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FULLDUPLEX)
+ struct_lnk->V_policy_initial_link = SURF_LINK_FULLDUPLEX;
+ }
+ surf_parse_link();
+
+ xbt_dict_set(cluster_host_link,host_id,strdup(link_id),free);
+// XBT_INFO("key '%s' Value '%s'",host_id,link_id);
+ ETag_surfxml_host();
+ ETag_surfxml_link();
+
break;
case 2:
- surf_parse_get_int(&start, xbt_dynar_get_as(radical_ends, 0, char *));
- surf_parse_get_int(&end, xbt_dynar_get_as(radical_ends, 1, char *));
- for (i = start; i <= end; i++) {
- parse_create_host_link(i);
+
+ surf_parse_get_int(&start,
+ xbt_dynar_get_as(radical_ends, 0, char *));
+ surf_parse_get_int(&end, xbt_dynar_get_as(radical_ends, 1, char *));
+ for (i = start; i <= end; i++) {
+ host_id = bprintf("%s%d%s", struct_cluster->V_cluster_prefix, i, struct_cluster->V_cluster_suffix);
+ link_id = bprintf("%s_link_%d", struct_cluster->V_cluster_id, i);
+
+ A_surfxml_host_state = A_surfxml_host_state_ON;
+
+ XBT_DEBUG("", host_id, struct_cluster->S_cluster_power);
+ host.V_host_id = host_id;
+ if(strcmp(struct_cluster->V_cluster_availability_file,"")){
+ xbt_dict_set(patterns, "radical", bprintf("%d", i), xbt_free);
+ char* tmp_availability_file = xbt_strdup(struct_cluster->V_cluster_availability_file);
+ xbt_str_varsubst(tmp_availability_file,patterns);
+ XBT_DEBUG("\tavailability_file=\"%s\"",tmp_availability_file);
+ host.V_host_power_trace = tmgr_trace_new(tmp_availability_file);
+ xbt_free(tmp_availability_file);
}
- break;
+ else
+ {
+ XBT_DEBUG("\tavailability_file=\"\"");
+ }
+ if(strcmp(struct_cluster->V_cluster_state_file,"")){
+ char *tmp_state_file = xbt_strdup(struct_cluster->V_cluster_state_file);
+ xbt_str_varsubst(tmp_state_file,patterns);
+ XBT_DEBUG("\tstate_file=\"%s\"",tmp_state_file);
+ host.V_host_state_trace = tmgr_trace_new(tmp_state_file);
+ xbt_free(tmp_state_file);
+ }
+ else
+ {
+ XBT_DEBUG("\tstate_file=\"\"");
+ }
+
+ host.V_host_power_peak = struct_cluster->S_cluster_power;
+ host.V_host_power_scale = 1.0;
+ host.V_host_core = struct_cluster->S_cluster_core;
+ host.V_host_state_initial = SURF_RESOURCE_ON;
+ host.V_host_coord = "";
+ surf_parse_host(&host);
+ XBT_DEBUG("");
+
+ A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
+ if(struct_cluster->V_cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX)
+ {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FULLDUPLEX;}
+ if(struct_cluster->V_cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FATPIPE)
+ {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FATPIPE;}
+
+ XBT_DEBUG("", link_id,struct_cluster->S_cluster_bw, struct_cluster->S_cluster_lat);
+
+ struct_lnk = xbt_new0(s_surf_parsing_link_arg_t, 1);
+ struct_lnk->V_link_id = link_id;
+ struct_lnk->V_link_bandwidth = struct_cluster->S_cluster_bw;
+ struct_lnk->V_link_latency = struct_cluster->S_cluster_lat;
+ struct_lnk->V_link_bandwidth_file = NULL;
+ struct_lnk->V_link_latency_file = NULL;
+ struct_lnk->V_link_state_file = NULL;
+ struct_lnk->V_link_state = SURF_RESOURCE_ON;
+ struct_lnk->V_link_sharing_policy = A_surfxml_link_sharing_policy;
+
+ if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_SHARED)
+ struct_lnk->V_policy_initial_link = SURF_LINK_SHARED;
+ else
+ {
+ if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FATPIPE)
+ struct_lnk->V_policy_initial_link = SURF_LINK_FATPIPE;
+ else if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FULLDUPLEX)
+ struct_lnk->V_policy_initial_link = SURF_LINK_FULLDUPLEX;
+ }
+ surf_parse_link();
+
+ xbt_dict_set(cluster_host_link,host_id,strdup(link_id),free);
+// XBT_INFO("key '%s' Value '%s'",host_id,link_id);
+
+ ETag_surfxml_host();
+ ETag_surfxml_link();
+
+ }
+ break;
default:
XBT_DEBUG("Malformed radical");
@@ -1689,7 +1817,7 @@ void routing_parse_Scluster(void)
else
struct_lnk->V_policy_initial_link = SURF_LINK_FATPIPE;
- STag_surfxml_link_cluster();
+ surf_parse_link();
ETag_surfxml_link();
surf_parsing_link_up_down_t info = xbt_new0(s_surf_parsing_link_up_down_t, 1);