Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Register the generic <AS> callback soon enough
[simgrid.git] / src / surf / surf_routing.c
index c9fb2c5..349b8cf 100644 (file)
@@ -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\tid=\"%s\"\tpower=\"%f\">", 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 = "";
-       surf_parse_host();
+       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("</host>");
 
        A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
@@ -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,6 +1614,8 @@ 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:
@@ -1641,14 +1624,13 @@ void routing_parse_Scluster(void)
                link_id = bprintf("%s_link_%d", struct_cluster->V_cluster_id, start);
 
                XBT_DEBUG("<host\tid=\"%s\"\tpower=\"%f\">", host_id, struct_cluster->S_cluster_power);
-               struct_host = xbt_new0(s_surf_parsing_host_arg_t, 1);
-               struct_host->V_host_id = host_id;
+               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);
-                 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
@@ -1659,7 +1641,7 @@ void routing_parse_Scluster(void)
                  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
@@ -1667,12 +1649,12 @@ void routing_parse_Scluster(void)
                  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 = "";
-               surf_parse_host();
+               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("</host>");
 
                A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
@@ -1723,14 +1705,13 @@ void routing_parse_Scluster(void)
                A_surfxml_host_state = A_surfxml_host_state_ON;
 
                XBT_DEBUG("<host\tid=\"%s\"\tpower=\"%f\">", host_id, struct_cluster->S_cluster_power);
-               struct_host = xbt_new0(s_surf_parsing_host_arg_t, 1);
-               struct_host->V_host_id = host_id;
+               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);
-                 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
@@ -1741,7 +1722,7 @@ void routing_parse_Scluster(void)
                  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
@@ -1749,12 +1730,12 @@ void routing_parse_Scluster(void)
                  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 = "";
-               surf_parse_host();
+               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("</host>");
 
                A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;