Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Replace stupid char* by doubles in the cluster struct to avoid tons of useless printf...
authorNavarrop <Pierre.Navarro@imag.fr>
Fri, 4 Nov 2011 10:51:00 +0000 (11:51 +0100)
committerNavarrop <Pierre.Navarro@imag.fr>
Fri, 4 Nov 2011 10:51:00 +0000 (11:51 +0100)
src/include/surf/surfxml_parse_values.h
src/surf/surf.c
src/surf/surf_private.h
src/surf/surf_routing.c
src/surf/surfxml_parse.c
teshsuite/simdag/platforms/basic_parsing_test.c
teshsuite/simdag/platforms/one_cluster.xml

index 1d9c5eb..9a5d9a9 100644 (file)
@@ -38,12 +38,12 @@ typedef struct s_cluster {
        char* V_cluster_prefix;
        char* V_cluster_suffix;
        char* V_cluster_radical;
-       char* S_cluster_power;
-       char* S_cluster_core;
-       char* S_cluster_bw;
-       char* S_cluster_lat;
-       char* S_cluster_bb_bw;
-       char* S_cluster_bb_lat;
+       double S_cluster_power;
+       int S_cluster_core;
+       double S_cluster_bw;
+       double S_cluster_lat;
+       double S_cluster_bb_bw;
+       double S_cluster_bb_lat;
        char* S_cluster_router_id;
        int V_cluster_sharing_policy;
        int V_cluster_bb_sharing_policy;
index 47d6bb7..95cdc8f 100644 (file)
@@ -390,6 +390,7 @@ void surf_exit(void)
   xbt_lib_free(&host_lib);
   xbt_lib_free(&link_lib);
   xbt_lib_free(&as_router_lib);
+  xbt_dict_free(&cluster_host_link);
 
   tmgr_finalize();
   surf_parse_lex_destroy();
index 806c3fd..f67846a 100644 (file)
@@ -30,6 +30,7 @@ extern double sg_gtnets_jitter;
 extern int sg_gtnets_jitter_seed;
 #endif
 
+extern xbt_dict_t cluster_host_link;
 
 extern const char *surf_action_state_names[6];
 
index 3898679..cfdc466 100644 (file)
@@ -44,6 +44,7 @@ static const char *dst = NULL;        /* temporary store the destination name of
 static char *gw_src = NULL;     /* temporary store the gateway source name of a route */
 static char *gw_dst = NULL;     /* temporary store the gateway destination name of a route */
 static double_f_cpvoid_t get_link_latency = NULL;
+xbt_dict_t cluster_host_link = NULL; /* for tag cluster */
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_route, surf, "Routing part of surf");
 
@@ -187,7 +188,9 @@ static void parse_E_host(void)
  */
 static void parse_S_host_XML(void)
 {
-       parse_S_host(A_surfxml_host_id, A_surfxml_host_coordinates);
+//     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);
 }
 static void parse_E_host_XML(void)
 {
@@ -1500,6 +1503,9 @@ static void routing_parse_Econfig(void)
 
 void routing_parse_Scluster(void)
 {
+  if(!cluster_host_link)
+         cluster_host_link = xbt_dict_new();
+
   static int AX_ptr = 0;
   char *host_id, *groups, *link_id = NULL;
   char *availability_file = xbt_strdup(A_surfxml_cluster_availability_file);
@@ -1519,6 +1525,8 @@ void routing_parse_Scluster(void)
   xbt_dynar_t radical_ends;
   int cluster_sharing_policy = AX_surfxml_cluster_sharing_policy;
   int cluster_bb_sharing_policy = AX_surfxml_cluster_bb_sharing_policy;
+  if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX)
+         xbt_dict_set(cluster_host_link,struct_cluster->V_cluster_id,bprintf("fullduplex"),free);
 
   static unsigned int surfxml_buffer_stack_stack_ptr = 1;
   static unsigned int surfxml_buffer_stack_stack[1024];
@@ -1528,8 +1536,8 @@ void routing_parse_Scluster(void)
   surfxml_bufferstack_push(1);
 
   SURFXML_BUFFER_SET(AS_id, struct_cluster->V_cluster_id);
-  SURFXML_BUFFER_SET(AS_routing, "RuleBased");
-  XBT_DEBUG("<AS id=\"%s\"\trouting=\"RuleBased\">", struct_cluster->V_cluster_id);
+  SURFXML_BUFFER_SET(AS_routing, "Cluster");
+  XBT_DEBUG("<AS id=\"%s\"\trouting=\"Cluster\">", struct_cluster->V_cluster_id);
   SURFXML_START_TAG(AS);
 
   radical_elements = xbt_str_split(struct_cluster->V_cluster_radical, ",");
@@ -1537,69 +1545,99 @@ void routing_parse_Scluster(void)
     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 *));
-      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_dict_set(patterns, "radical", bprintf("%d", start), xbt_free);
-      A_surfxml_host_state = A_surfxml_host_state_ON;
-
-      XBT_DEBUG("<host\tid=\"%s\"\tpower=\"%s\">", host_id, struct_cluster->S_cluster_power);
-      SURFXML_BUFFER_SET(host_id, host_id);
-      SURFXML_BUFFER_SET(host_power, struct_cluster->S_cluster_power);
-
-      if(!strcmp(A_surfxml_cluster_availability_file,"")){
+               surf_parse_get_int(&start, xbt_dynar_get_as(radical_ends, 0, char *));
+               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_dict_set(patterns, "radical", bprintf("%d", start), xbt_free);
+
+               XBT_DEBUG("<host\tid=\"%s\"\tpower=\"%f\">", host_id, struct_cluster->S_cluster_power);
+               struct_host = xbt_new0(s_hostSG_t, 1);
+               struct_host->V_host_id = host_id;
+               if(!strcmp(A_surfxml_cluster_availability_file,"")){
                  char* tmp_availability_file = xbt_strdup(availability_file);
                  xbt_str_varsubst(tmp_availability_file,patterns);
                  XBT_DEBUG("\tavailability_file=\"%s\"",tmp_availability_file);
-             SURFXML_BUFFER_SET(host_availability_file, tmp_availability_file);
-             xbt_free(tmp_availability_file);
-      }
-      else
-      {
+                 struct_host->V_host_power_trace = tmgr_trace_new(tmp_availability_file);
+                 xbt_free(tmp_availability_file);
+               }
+               else
+               {
                  XBT_DEBUG("\tavailability_file=\"\"");
-                 SURFXML_BUFFER_SET(host_availability_file, "");
-      }
-      if(!strcmp(A_surfxml_cluster_state_file,"")){
+               }
+               if(!strcmp(A_surfxml_cluster_state_file,"")){
                  char *tmp_state_file = xbt_strdup(state_file);
                  xbt_str_varsubst(tmp_state_file,patterns);
                  XBT_DEBUG("\tstate_file=\"%s\"",tmp_state_file);
-             SURFXML_BUFFER_SET(host_state_file, tmp_state_file);
-             xbt_free(tmp_state_file);
-      }
-      else
-      {
-         XBT_DEBUG("\tstate_file=\"\"");
-         SURFXML_BUFFER_SET(host_state_file, "");
-      }
-
-      SURFXML_BUFFER_SET(host_core, struct_cluster->S_cluster_core);
-      SURFXML_BUFFER_SET(host_availability, "1.0");
-      SURFXML_BUFFER_SET(host_coordinates, "");
-      SURFXML_START_TAG(host);
-      SURFXML_END_TAG(host);
-      XBT_DEBUG("</host>");
-
-      A_surfxml_link_state = A_surfxml_link_state_ON;
-      A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
-      if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX)
-         {A_surfxml_link_sharing_policy =  A_surfxml_link_sharing_policy_FULLDUPLEX;}
-      if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FATPIPE)
-         {A_surfxml_link_sharing_policy =  A_surfxml_link_sharing_policy_FATPIPE;}
-
-      XBT_DEBUG("<link\tid=\"%s\"\tbw=\"%s\"\tlat=\"%s\"/>", link_id,struct_cluster->S_cluster_bw, struct_cluster->S_cluster_lat);
-
-      SURFXML_BUFFER_SET(link_id, link_id);
-      SURFXML_BUFFER_SET(link_bandwidth, struct_cluster->S_cluster_bw);
-      SURFXML_BUFFER_SET(link_latency, struct_cluster->S_cluster_lat);
-      SURFXML_BUFFER_SET(link_bandwidth_file, "");
-      SURFXML_BUFFER_SET(link_latency_file, "");
-      SURFXML_BUFFER_SET(link_state_file, "");
-      SURFXML_START_TAG(link);
-      SURFXML_END_TAG(link);
+                 struct_host->V_host_state_trace = tmgr_trace_new(tmp_state_file);
+                 xbt_free(tmp_state_file);
+               }
+               else
+               {
+                 XBT_DEBUG("\tstate_file=\"\"");
+               }
 
-      free(link_id);
-      free(host_id);
-      break;
+               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();
+               XBT_DEBUG("</host>");
+
+               A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
+               if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX)
+               {A_surfxml_link_sharing_policy =  A_surfxml_link_sharing_policy_FULLDUPLEX;}
+               if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FATPIPE)
+               {A_surfxml_link_sharing_policy =  A_surfxml_link_sharing_policy_FATPIPE;}
+
+               XBT_DEBUG("<link\tid=\"%s\"\tbw=\"%f\"\tlat=\"%f\"/>", link_id,struct_cluster->S_cluster_bw, struct_cluster->S_cluster_lat);
+
+               struct_lnk = xbt_new0(s_link_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;
+               }
+               STag_surfxml_link_cluster();
+
+               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();
+               xbt_free(struct_host->V_host_id);
+               struct_host->V_host_power_peak = 0.0;
+               struct_host->V_host_core = 0;
+               struct_host->V_host_power_scale = 0.0;
+               struct_host->V_host_state_initial = SURF_RESOURCE_ON;
+               struct_host->V_host_power_trace = NULL;
+               struct_host->V_host_state_trace = NULL;
+               xbt_free(struct_host->V_host_coord);
+               xbt_free(struct_host);
+
+               ETag_surfxml_link();
+               xbt_free(struct_lnk->V_link_id);
+               struct_lnk->V_link_bandwidth = 0;
+               struct_lnk->V_link_bandwidth_file = NULL;
+               struct_lnk->V_link_latency = 0;
+               struct_lnk->V_link_latency_file = NULL;
+               struct_lnk->V_link_state = SURF_RESOURCE_ON;
+               struct_lnk->V_link_state_file = NULL;
+               struct_lnk->V_link_sharing_policy = 0;
+               xbt_free(struct_lnk);
+
+               break;
 
     case 2:
 
@@ -1607,67 +1645,98 @@ void routing_parse_Scluster(void)
                          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);
-                 xbt_dict_set(patterns, "radical", bprintf("%d", i), xbt_free);
-                 A_surfxml_host_state = A_surfxml_host_state_ON;
-
-             XBT_DEBUG("<host\tid=\"%s\"\tpower=\"%s\">", host_id, struct_cluster->S_cluster_power);
-             SURFXML_BUFFER_SET(host_id, host_id);
-             SURFXML_BUFFER_SET(host_power, struct_cluster->S_cluster_power);
-
-             if(!strcmp(A_surfxml_cluster_availability_file,"")){
-                         char* tmp_availability_file = xbt_strdup(availability_file);
-                         xbt_str_varsubst(tmp_availability_file,patterns);
-                         XBT_DEBUG("\tavailability_file=\"%s\"",tmp_availability_file);
-                     SURFXML_BUFFER_SET(host_availability_file, tmp_availability_file);
-                     xbt_free(tmp_availability_file);
-             }
-             else
-             {
-                         XBT_DEBUG("\tavailability_file=\"\"");
-                         SURFXML_BUFFER_SET(host_availability_file, "");
-             }
-             if(!strcmp(A_surfxml_cluster_state_file,"")){
-                         char *tmp_state_file = xbt_strdup(state_file);
-                         xbt_str_varsubst(tmp_state_file,patterns);
-                         XBT_DEBUG("\tstate_file=\"%s\"",tmp_state_file);
-                     SURFXML_BUFFER_SET(host_state_file, tmp_state_file);
-                     xbt_free(tmp_state_file);
-             }
-             else
-             {
-                 XBT_DEBUG("\tstate_file=\"\"");
-                 SURFXML_BUFFER_SET(host_state_file, "");
-             }
-
-             SURFXML_BUFFER_SET(host_core, struct_cluster->S_cluster_core);
-             SURFXML_BUFFER_SET(host_availability, "1.0");
-             SURFXML_BUFFER_SET(host_coordinates, "");
-             SURFXML_START_TAG(host);
-             SURFXML_END_TAG(host);
-             XBT_DEBUG("</host>");
-
-                 A_surfxml_link_state = A_surfxml_link_state_ON;
-                 A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
-                 if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX)
-                 {A_surfxml_link_sharing_policy =  A_surfxml_link_sharing_policy_FULLDUPLEX;}
-                 if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FATPIPE)
-                 {A_surfxml_link_sharing_policy =  A_surfxml_link_sharing_policy_FATPIPE;}
-
-                 XBT_DEBUG("<link\tid=\"%s\"\tbw=\"%s\"\tlat=\"%s\"/>", link_id,struct_cluster->S_cluster_bw, struct_cluster->S_cluster_lat);
-
-                 SURFXML_BUFFER_SET(link_id, link_id);
-                 SURFXML_BUFFER_SET(link_bandwidth, struct_cluster->S_cluster_bw);
-                 SURFXML_BUFFER_SET(link_latency, struct_cluster->S_cluster_lat);
-                 SURFXML_BUFFER_SET(link_bandwidth_file, "");
-                 SURFXML_BUFFER_SET(link_latency_file, "");
-                 SURFXML_BUFFER_SET(link_state_file, "");
-                 SURFXML_START_TAG(link);
-                 SURFXML_END_TAG(link);
-
-                 free(link_id);
-                 free(host_id);
+               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);
+               xbt_dict_set(patterns, "radical", bprintf("%d", i), xbt_free);
+               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_hostSG_t, 1);
+               struct_host->V_host_id = host_id;
+               if(!strcmp(A_surfxml_cluster_availability_file,"")){
+                 char* tmp_availability_file = xbt_strdup(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);
+                 xbt_free(tmp_availability_file);
+               }
+               else
+               {
+                 XBT_DEBUG("\tavailability_file=\"\"");
+               }
+               if(!strcmp(A_surfxml_cluster_state_file,"")){
+                 char *tmp_state_file = xbt_strdup(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);
+                 xbt_free(tmp_state_file);
+               }
+               else
+               {
+                 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 = xbt_strdup("");
+               STag_surfxml_host_cluster();
+               XBT_DEBUG("</host>");
+
+               A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
+               if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX)
+               {A_surfxml_link_sharing_policy =  A_surfxml_link_sharing_policy_FULLDUPLEX;}
+               if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FATPIPE)
+               {A_surfxml_link_sharing_policy =  A_surfxml_link_sharing_policy_FATPIPE;}
+
+               XBT_DEBUG("<link\tid=\"%s\"\tbw=\"%f\"\tlat=\"%f\"/>", link_id,struct_cluster->S_cluster_bw, struct_cluster->S_cluster_lat);
+
+               struct_lnk = xbt_new0(s_link_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;
+               }
+               STag_surfxml_link_cluster();
+
+               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();
+               xbt_free(struct_host->V_host_id);
+               struct_host->V_host_power_peak = 0.0;
+               struct_host->V_host_core = 0;
+               struct_host->V_host_power_scale = 0.0;
+               struct_host->V_host_state_initial = SURF_RESOURCE_ON;
+               struct_host->V_host_power_trace = NULL;
+               struct_host->V_host_state_trace = NULL;
+               xbt_free(struct_host->V_host_coord);
+               xbt_free(struct_host);
+
+               ETag_surfxml_link();
+               xbt_free(struct_lnk->V_link_id);
+               struct_lnk->V_link_bandwidth = 0;
+               struct_lnk->V_link_bandwidth_file = NULL;
+               struct_lnk->V_link_latency = 0;
+               struct_lnk->V_link_latency_file = NULL;
+               struct_lnk->V_link_state = SURF_RESOURCE_ON;
+               struct_lnk->V_link_state_file = NULL;
+               struct_lnk->V_link_sharing_policy = 0;
+               xbt_free(struct_lnk);
       }
       break;
 
@@ -1687,22 +1756,37 @@ void routing_parse_Scluster(void)
   SURFXML_START_TAG(router);
   SURFXML_END_TAG(router);
 
-  if( strcmp(struct_cluster->S_cluster_bb_bw,"")  && strcmp(struct_cluster->S_cluster_bb_lat,"")  ){
-  char *link_backbone = bprintf("%s_backbone", struct_cluster->V_cluster_id);
-  XBT_DEBUG("<link\tid=\"%s\" bw=\"%s\" lat=\"%s\"/>", link_backbone,struct_cluster->S_cluster_bb_bw, struct_cluster->S_cluster_bb_lat);
-  A_surfxml_link_state = A_surfxml_link_state_ON;
-  A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
-  if(cluster_bb_sharing_policy == A_surfxml_cluster_bb_sharing_policy_FATPIPE)
-  {A_surfxml_link_sharing_policy =  A_surfxml_link_sharing_policy_FATPIPE;}
-  SURFXML_BUFFER_SET(link_id, link_backbone);
-  SURFXML_BUFFER_SET(link_bandwidth, struct_cluster->S_cluster_bb_bw);
-  SURFXML_BUFFER_SET(link_latency, struct_cluster->S_cluster_bb_lat);
-  SURFXML_BUFFER_SET(link_bandwidth_file, "");
-  SURFXML_BUFFER_SET(link_latency_file, "");
-  SURFXML_BUFFER_SET(link_state_file, "");
-  SURFXML_START_TAG(link);
-  SURFXML_END_TAG(link);
-  free(link_backbone);
+  if( (struct_cluster->S_cluster_bb_bw!= 0)  && (struct_cluster->S_cluster_bb_lat!=0)  ){
+         char *link_backbone = bprintf("%s_backbone", struct_cluster->V_cluster_id);
+         XBT_DEBUG("<link\tid=\"%s\" bw=\"%f\" lat=\"%f\"/>", link_backbone,struct_cluster->S_cluster_bb_bw, struct_cluster->S_cluster_bb_lat);
+
+         A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
+         if(cluster_bb_sharing_policy == A_surfxml_cluster_bb_sharing_policy_FATPIPE)
+         {A_surfxml_link_sharing_policy =  A_surfxml_link_sharing_policy_FATPIPE;}
+
+         struct_lnk = xbt_new0(s_link_t, 1);
+         struct_lnk->V_link_id = link_backbone;
+         struct_lnk->V_link_bandwidth = struct_cluster->S_cluster_bb_bw;
+         struct_lnk->V_link_latency = struct_cluster->S_cluster_bb_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;
+         }
+
+         STag_surfxml_link_cluster();
+         ETag_surfxml_link();
+         free(link_backbone);
   }
 
   XBT_DEBUG(" ");
@@ -1717,127 +1801,9 @@ void routing_parse_Scluster(void)
       free(old_suffix);
     }
   }
-  route_src_dst = bprintf("%s(.*)%s", struct_cluster->V_cluster_prefix, new_suffix);
+
   xbt_dynar_free(&radical_elements);
   xbt_free(new_suffix);
-
-  char *pcre_link_src = bprintf("%s_link_$1src", struct_cluster->V_cluster_id);
-  char *pcre_link_backbone = bprintf("%s_backbone", struct_cluster->V_cluster_id);
-  char *pcre_link_dst = bprintf("%s_link_$1dst", struct_cluster->V_cluster_id);
-
-  //from router to router
-  XBT_DEBUG("<route\tsrc=\"%s\"\tdst=\"%s\"", struct_cluster->S_cluster_router_id, struct_cluster->S_cluster_router_id);
-  XBT_DEBUG("symmetrical=\"NO\">");
-  SURFXML_BUFFER_SET(route_src, struct_cluster->S_cluster_router_id);
-  SURFXML_BUFFER_SET(route_dst, struct_cluster->S_cluster_router_id);
-  A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO;
-  SURFXML_START_TAG(route);
-
-  if( strcmp(struct_cluster->S_cluster_bb_bw,"")  && strcmp(struct_cluster->S_cluster_bb_lat,"")  ){
-  XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_backbone);
-  SURFXML_BUFFER_SET(link_ctn_id, pcre_link_backbone);
-  A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
-  SURFXML_START_TAG(link_ctn);
-  SURFXML_END_TAG(link_ctn);
-  }
-
-  XBT_DEBUG("</route>");
-  SURFXML_END_TAG(route);
-
-  //from host to router
-  XBT_DEBUG("<route\tsrc=\"%s\"\tdst=\"%s\"", route_src_dst, struct_cluster->S_cluster_router_id);
-  XBT_DEBUG("symmetrical=\"NO\">");
-  SURFXML_BUFFER_SET(route_src, route_src_dst);
-  SURFXML_BUFFER_SET(route_dst, struct_cluster->S_cluster_router_id);
-  A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO;
-  SURFXML_START_TAG(route);
-
-  XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_src);
-  SURFXML_BUFFER_SET(link_ctn_id, pcre_link_src);
-  A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
-  if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX)
-  {A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_UP;}
-  SURFXML_START_TAG(link_ctn);
-  SURFXML_END_TAG(link_ctn);
-
-  if( strcmp(struct_cluster->S_cluster_bb_bw,"")  && strcmp(struct_cluster->S_cluster_bb_lat,"")  ){
-  XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_backbone);
-  SURFXML_BUFFER_SET(link_ctn_id, pcre_link_backbone);
-  A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
-  SURFXML_START_TAG(link_ctn);
-  SURFXML_END_TAG(link_ctn);
-  }
-
-  XBT_DEBUG("</route>");
-  SURFXML_END_TAG(route);
-
-  //from router to host
-  XBT_DEBUG("<route\tsrc=\"%s\"\tdst=\"%s\"", struct_cluster->S_cluster_router_id, route_src_dst);
-  XBT_DEBUG("symmetrical=\"NO\">");
-  SURFXML_BUFFER_SET(route_src, struct_cluster->S_cluster_router_id);
-  SURFXML_BUFFER_SET(route_dst, route_src_dst);
-  A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO;
-  SURFXML_START_TAG(route);
-
-  if( strcmp(struct_cluster->S_cluster_bb_bw,"")  && strcmp(struct_cluster->S_cluster_bb_lat,"")  ){
-  XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_backbone);
-  SURFXML_BUFFER_SET(link_ctn_id, pcre_link_backbone);
-  A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
-  SURFXML_START_TAG(link_ctn);
-  SURFXML_END_TAG(link_ctn);
-  }
-
-  XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_dst);
-  SURFXML_BUFFER_SET(link_ctn_id, pcre_link_dst);
-  A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
-  if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX)
-  {A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_UP;}
-  SURFXML_START_TAG(link_ctn);
-  SURFXML_END_TAG(link_ctn);
-
-  XBT_DEBUG("</route>");
-  SURFXML_END_TAG(route);
-
-  //from host to host
-  XBT_DEBUG("<route\tsrc=\"%s\"\tdst=\"%s\"", route_src_dst, route_src_dst);
-  XBT_DEBUG("symmetrical=\"NO\">");
-  SURFXML_BUFFER_SET(route_src, route_src_dst);
-  SURFXML_BUFFER_SET(route_dst, route_src_dst);
-  A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO;
-  SURFXML_START_TAG(route);
-
-  XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_src);
-  SURFXML_BUFFER_SET(link_ctn_id, pcre_link_src);
-  A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
-  if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX)
-  {A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_UP;}
-  SURFXML_START_TAG(link_ctn);
-  SURFXML_END_TAG(link_ctn);
-
-  if( strcmp(struct_cluster->S_cluster_bb_bw,"")  && strcmp(struct_cluster->S_cluster_bb_lat,"")  ){
-  XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_backbone);
-  SURFXML_BUFFER_SET(link_ctn_id, pcre_link_backbone);
-  A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
-  SURFXML_START_TAG(link_ctn);
-  SURFXML_END_TAG(link_ctn);
-  }
-
-  XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_dst);
-  SURFXML_BUFFER_SET(link_ctn_id, pcre_link_dst);
-  A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
-  if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX)
-  {A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_DOWN;}
-  SURFXML_START_TAG(link_ctn);
-  SURFXML_END_TAG(link_ctn);
-
-  XBT_DEBUG("</route>");
-  SURFXML_END_TAG(route);
-
-  free(pcre_link_dst);
-  free(pcre_link_backbone);
-  free(pcre_link_src);
-  free(route_src_dst);
-
   xbt_free(availability_file);
   xbt_free(state_file);
 
@@ -1848,6 +1814,14 @@ void routing_parse_Scluster(void)
   XBT_DEBUG(" ");
 
   surfxml_bufferstack_pop(1);
+
+//  xbt_dict_cursor_t cursor = NULL;
+//  char *key,*data;
+//
+//  XBT_INFO("\n");
+//  xbt_dict_foreach(cluster_host_link,cursor,key,data){
+//       XBT_INFO("%s : %s",key,data);
+//  }
 }
 /*
  * This function take a string and replace parameters from patterns dict.
index 8889e75..4c38b8d 100644 (file)
@@ -314,17 +314,12 @@ void STag_surfxml_host(void){
 
        surfxml_call_cb_functions(STag_surfxml_host_cb_list);
 }
+void STag_surfxml_host_cluster(void){
+       surfxml_call_cb_functions(STag_surfxml_host_cb_list);
+}
 void ETag_surfxml_host(void){
        surfxml_call_cb_functions(ETag_surfxml_host_cb_list);
-       //xbt_free(struct_host->V_host_id);
-       struct_host->V_host_power_peak = 0.0;
-       struct_host->V_host_core = 0;
-       struct_host->V_host_power_scale = 0.0;
-       struct_host->V_host_state_initial = SURF_RESOURCE_ON;
-       struct_host->V_host_power_trace = NULL;
-       struct_host->V_host_state_trace = NULL;
-       xbt_free(struct_host->V_host_coord);
-       //xbt_free(host);
+//     xbt_free(struct_host->V_host_id);
 }
 
 void STag_surfxml_router(void){
@@ -348,12 +343,14 @@ void STag_surfxml_cluster(void){
        struct_cluster->V_cluster_prefix = xbt_strdup(A_surfxml_cluster_prefix);
        struct_cluster->V_cluster_suffix = xbt_strdup(A_surfxml_cluster_suffix);
        struct_cluster->V_cluster_radical = xbt_strdup(A_surfxml_cluster_radical);
-       struct_cluster->S_cluster_power = xbt_strdup(A_surfxml_cluster_power);
-       struct_cluster->S_cluster_core = xbt_strdup(A_surfxml_cluster_core);
-       struct_cluster->S_cluster_bw = xbt_strdup(A_surfxml_cluster_bw);
-       struct_cluster->S_cluster_lat = xbt_strdup(A_surfxml_cluster_lat);
-       struct_cluster->S_cluster_bb_bw = xbt_strdup(A_surfxml_cluster_bb_bw);
-       struct_cluster->S_cluster_bb_lat = xbt_strdup(A_surfxml_cluster_bb_lat);
+       surf_parse_get_double(&struct_cluster->S_cluster_power,A_surfxml_cluster_power);
+       surf_parse_get_int(&struct_cluster->S_cluster_core,A_surfxml_cluster_core);
+       surf_parse_get_double(&struct_cluster->S_cluster_bw,A_surfxml_cluster_bw);
+       surf_parse_get_double(&struct_cluster->S_cluster_lat,A_surfxml_cluster_lat);
+       if(strcmp(A_surfxml_cluster_bb_bw,""))
+               surf_parse_get_double(&struct_cluster->S_cluster_bb_bw,A_surfxml_cluster_bb_bw);
+       if(strcmp(A_surfxml_cluster_bb_lat,""))
+               surf_parse_get_double(&struct_cluster->S_cluster_bb_lat,A_surfxml_cluster_bb_lat);
        if(!strcmp(A_surfxml_cluster_router_id,""))
                struct_cluster->S_cluster_router_id = bprintf("%s%s_router%s",
                                struct_cluster->V_cluster_prefix,
@@ -373,12 +370,12 @@ void ETag_surfxml_cluster(void){
        xbt_free(struct_cluster->V_cluster_prefix);
        xbt_free(struct_cluster->V_cluster_suffix);
        xbt_free(struct_cluster->V_cluster_radical);
-       xbt_free(struct_cluster->S_cluster_power);
-       xbt_free(struct_cluster->S_cluster_core);
-       xbt_free(struct_cluster->S_cluster_bw);
-       xbt_free(struct_cluster->S_cluster_lat);
-       xbt_free(struct_cluster->S_cluster_bb_bw);
-       xbt_free(struct_cluster->S_cluster_bb_lat);
+       struct_cluster->S_cluster_power = 0;
+       struct_cluster->S_cluster_core = 0;
+       struct_cluster->S_cluster_bw = 0;
+       struct_cluster->S_cluster_lat = 0;
+       struct_cluster->S_cluster_bb_bw = 0;
+       struct_cluster->S_cluster_bb_lat = 0;
        xbt_free(struct_cluster->S_cluster_router_id);
        struct_cluster->V_cluster_sharing_policy = 0;
        struct_cluster->V_cluster_bb_sharing_policy = 0;
@@ -437,20 +434,13 @@ void STag_surfxml_link(void){
                 struct_lnk->V_policy_initial_link = SURF_LINK_FULLDUPLEX;
        }
 
-
+       surfxml_call_cb_functions(STag_surfxml_link_cb_list);
+}
+void STag_surfxml_link_cluster(void){
        surfxml_call_cb_functions(STag_surfxml_link_cb_list);
 }
 void ETag_surfxml_link(void){
        surfxml_call_cb_functions(ETag_surfxml_link_cb_list);
-       xbt_free(struct_lnk->V_link_id);
-       struct_lnk->V_link_bandwidth = 0;
-       struct_lnk->V_link_bandwidth_file = NULL;
-       struct_lnk->V_link_latency = 0;
-       struct_lnk->V_link_latency_file = NULL;
-       struct_lnk->V_link_state = SURF_RESOURCE_ON;
-       struct_lnk->V_link_state_file = NULL;
-       struct_lnk->V_link_sharing_policy = 0;
-       xbt_free(struct_lnk);
 }
 
 void STag_surfxml_route(void){
index 7e3f5e3..c2b4668 100644 (file)
@@ -33,9 +33,7 @@ int main(int argc, char **argv)
          SD_workstation_get_number(), SD_link_get_number());
 
   if (argc >= 3) {
-  for(i=1;i<argc;i++)
-  {
-               if (!strcmp(argv[i], "ONE_LINK")) {
+               if (!strcmp(argv[2], "ONE_LINK")) {
                  workstations = SD_workstation_get_list();
                  w1 = workstations[0];
                  w2 = workstations[1];
@@ -55,37 +53,33 @@ int main(int argc, char **argv)
                  printf("Route latency = %f, route bandwidth = %f\n",
                                 SD_route_get_current_latency(w1, w2),
                                 SD_route_get_current_bandwidth(w1, w2));
-                 i=argc;
-               }else{
-                       if (!strcmp(argv[i], "FULL_LINK")) {
-                         workstations = SD_workstation_get_list();
-                         list_size = SD_workstation_get_number();
-                         for (i = 0; i < list_size; i++) {
-                               w1 = workstations[i];
-                               name1 = SD_workstation_get_name(w1);
-                               for (j = 0; j < list_size; j++) {
-                                 w2 = workstations[j];
-                                 name2 = SD_workstation_get_name(w2);
-                                 printf("Route between %s and %s\n", name1, name2);
-                                 route = SD_route_get_list(w1, w2);
-                                 route_size = SD_route_get_size(w1, w2);
-                                 printf("\tRoute size %d\n", route_size);
-                                 for (k = 0; k < route_size; k++) {
-                                       printf("\tLink %s: latency = %f, bandwidth = %f\n",
-                                                  SD_link_get_name(route[k]),
-                                                  SD_link_get_current_latency(route[k]),
-                                                  SD_link_get_current_bandwidth(route[k]));
-                                 }
-                                 printf("\tRoute latency = %f, route bandwidth = %f\n",
-                                                SD_route_get_current_latency(w1, w2),
-                                                SD_route_get_current_bandwidth(w1, w2));
-                               }
+               }
+               if (!strcmp(argv[2], "FULL_LINK")) {
+                 workstations = SD_workstation_get_list();
+                 list_size = SD_workstation_get_number();
+                 for (i = 0; i < list_size; i++) {
+                       w1 = workstations[i];
+                       name1 = SD_workstation_get_name(w1);
+                       for (j = 0; j < list_size; j++) {
+                         w2 = workstations[j];
+                         name2 = SD_workstation_get_name(w2);
+                         printf("Route between %s and %s\n", name1, name2);
+                         route = SD_route_get_list(w1, w2);
+                         route_size = SD_route_get_size(w1, w2);
+                         printf("\tRoute size %d\n", route_size);
+                         for (k = 0; k < route_size; k++) {
+                               printf("\tLink %s: latency = %f, bandwidth = %f\n",
+                                          SD_link_get_name(route[k]),
+                                          SD_link_get_current_latency(route[k]),
+                                          SD_link_get_current_bandwidth(route[k]));
                          }
-                         i=argc;
+                         printf("\tRoute latency = %f, route bandwidth = %f\n",
+                                        SD_route_get_current_latency(w1, w2),
+                                        SD_route_get_current_bandwidth(w1, w2));
                        }
+                 }
                }
   }
-  }
 
   SD_exit();
   return 0;
index e2c1eed..4294239 100644 (file)
@@ -3,7 +3,7 @@
 <platform version="3">
 <AS id="AS0" routing="Full">
   <cluster id="bob_cluster" prefix="bob" suffix=".hamburger.edu"
-   radical="0,2-4,6" power="1000000000.00" bw="125000000.00" lat="5e-5"
+   radical="0-99999" power="1000000000.00" bw="125000000.00" lat="5e-5"
    bb_bw="2250000000.00" bb_lat="5e-4"/>
 </AS>
 </platform>