Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Parser cleanup: simplify structure's fields' names
[simgrid.git] / src / surf / surf_routing.c
index bd20167..d81bfe5 100644 (file)
@@ -53,7 +53,6 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_route, surf, "Routing part of surf");
 
 static void routing_parse_Speer(void);          /* peer bypass */
 static void routing_parse_Srandom(void);        /* random bypass */
-static void routing_parse_Erandom(void);        /* random bypass */
 
 static char* replace_random_parameter(char * chaine);
 static void clean_routing_after_parse(void);
@@ -102,62 +101,29 @@ struct s_model_type routing_models[] = { {"Full",
 /**
  * \brief Add a "host" to the network element list
  */
-static void parse_S_host(const char *host_id, const char* coord)
-{
+static void parse_S_host(sg_platf_host_cbarg_t host) {
   network_element_info_t info = NULL;
   if (current_routing->hierarchy == SURF_ROUTING_NULL)
     current_routing->hierarchy = SURF_ROUTING_BASE;
-  xbt_assert(!xbt_lib_get_or_null(host_lib, host_id,ROUTING_HOST_LEVEL),
+  xbt_assert(!xbt_lib_get_or_null(host_lib, host->id,ROUTING_HOST_LEVEL),
               "Reading a host, processing unit \"%s\" already exists",
-              host_id);
+              host->id);
   xbt_assert(current_routing->set_processing_unit,
               "no defined method \"set_processing_unit\" in \"%s\"",
               current_routing->name);
-  (*(current_routing->set_processing_unit)) (current_routing, host_id);
+  (*(current_routing->set_processing_unit)) (current_routing, host->id);
   info = xbt_new0(s_network_element_info_t, 1);
   info->rc_component = current_routing;
   info->rc_type = SURF_NETWORK_ELEMENT_HOST;
-  xbt_lib_set(host_lib,host_id,ROUTING_HOST_LEVEL,(void *) info);
-  if (strcmp(coord,"")) {
-       if(!COORD_HOST_LEVEL) xbt_die("To use coordinates, you must set configuration 'coordinates' to 'yes'");
-    xbt_dynar_t ctn = xbt_str_split_str(coord, " ");
+  xbt_lib_set(host_lib,host->id,ROUTING_HOST_LEVEL,(void *) info);
+  if (host->coord && strcmp(host->coord,"")) {
+    if(!COORD_HOST_LEVEL) xbt_die("To use coordinates, you must set configuration 'coordinates' to 'yes'");
+    xbt_dynar_t ctn = xbt_str_split_str(host->coord, " ");
     xbt_dynar_shrink(ctn, 0);
-    xbt_lib_set(host_lib,host_id,COORD_HOST_LEVEL,(void *) ctn);
+    xbt_lib_set(host_lib,host->id,COORD_HOST_LEVEL,(void *) ctn);
   }
 }
 
-static void parse_E_host(void)
-{
-        xbt_dict_cursor_t cursor = NULL;
-         char *key;
-         char *elem;
-
-         xbt_dict_foreach(current_property_set, cursor, key, elem) {
-                 XBT_DEBUG("property : %s = %s",key,elem);
-               }
-}
-
-/*
- * \brief Add a host to the network element list from XML
- */
-static void parse_S_host_XML(sg_platf_host_cbarg_t h)
-{
-       parse_S_host(h->V_host_id, h->V_host_coord);
-}
-static void parse_E_host_XML(void)
-{
-       parse_E_host();
-}
-
-/*
- * \brief Add a host to the network element list from lua script
- */
-static void parse_S_host_lua(const char *host_id, const char *coord)
-{
-  parse_S_host(host_id, coord);
-}
-
-
 /**
  * \brief Add a "router" to the network element list
  */
@@ -787,7 +753,6 @@ void surf_parse_models_setup()
   if (surf_parse_models_setup_already_called)
     return;
   surf_parse_models_setup_already_called=1;
-  routing_parse_Erandom();
   surf_config_models_setup();
 }
 
@@ -910,8 +875,7 @@ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_
   current_routing = NULL;
 
   /* parse generic elements */
-  sg_platf_host_add_cb(parse_S_host_XML);
-  surfxml_add_callback(ETag_surfxml_host_cb_list, &parse_E_host_XML);
+  sg_platf_host_add_cb(parse_S_host);
   sg_platf_router_add_cb(parse_S_router);
 
   surfxml_add_callback(STag_surfxml_route_cb_list,
@@ -937,8 +901,7 @@ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_
   surfxml_add_callback(STag_surfxml_peer_cb_list,
                          &routing_parse_Speer);
 
-  surfxml_add_callback(ETag_surfxml_platform_cb_list,
-                                                 &clean_routing_after_parse);
+  sg_platf_postparse_add_cb(clean_routing_after_parse);
 
 #ifdef HAVE_TRACING
   instr_routing_define_callbacks();
@@ -947,10 +910,10 @@ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_
 
 void surf_parse_add_callback_config(void)
 {
-       surfxml_add_callback(STag_surfxml_prop_cb_list, &parse_properties_XML);
-       surfxml_add_callback(STag_surfxml_random_cb_list, &routing_parse_Srandom);
+  surfxml_add_callback(STag_surfxml_random_cb_list, &routing_parse_Srandom);
 }
 
+
 /* ************************************************** */
 /* ********** PATERN FOR NEW ROUTING **************** */
 
@@ -1421,6 +1384,7 @@ void routing_parse_Scluster(void)
   char *host_id, *groups, *link_id = NULL;
 
   s_sg_platf_host_cbarg_t host;
+  s_sg_platf_link_cbarg_t link;
 
   if( strcmp(struct_cluster->V_cluster_availability_file,"")
          || strcmp(struct_cluster->V_cluster_state_file,"") )
@@ -1461,13 +1425,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);
-               host.V_host_id = host_id;
+               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);
+                 host.power_trace = tmgr_trace_new(tmp_availability_file);
                  xbt_free(tmp_availability_file);
                }
                else
@@ -1478,7 +1442,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);
-                 host.V_host_state_trace = tmgr_trace_new(tmp_state_file);
+                 host.state_trace = tmgr_trace_new(tmp_state_file);
                  xbt_free(tmp_state_file);
                }
                else
@@ -1486,14 +1450,15 @@ void routing_parse_Scluster(void)
                  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 = "";
+               host.power_peak = struct_cluster->S_cluster_power;
+               host.power_scale = 1.0;
+               host.core_amount = struct_cluster->S_cluster_core;
+               host.initial_state = SURF_RESOURCE_ON;
+               host.coord = "";
                sg_platf_new_host(&host);
                XBT_DEBUG("</host>");
 
+
                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;}
@@ -1502,29 +1467,31 @@ void routing_parse_Scluster(void)
 
                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_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;
+               memset(&link,0,sizeof(link));
+               link.V_link_id = link_id;
+               link.V_link_bandwidth = struct_cluster->S_cluster_bw;
+               link.V_link_latency = struct_cluster->S_cluster_lat;
+               link.V_link_bandwidth_file = NULL;
+               link.V_link_latency_file = NULL;
+               link.V_link_state_file = NULL;
+               link.V_link_state = SURF_RESOURCE_ON;
+               link.V_link_sharing_policy = A_surfxml_link_sharing_policy;
+
+               switch (A_surfxml_link_sharing_policy) {
+               case A_surfxml_link_sharing_policy_SHARED:
+                       link.V_policy_initial_link = SURF_LINK_SHARED;
+                       break;
+               case A_surfxml_link_sharing_policy_FATPIPE:
+                 link.V_policy_initial_link = SURF_LINK_FATPIPE;
+                 break;
+               case A_surfxml_link_sharing_policy_FULLDUPLEX:
+                 link.V_policy_initial_link = SURF_LINK_FULLDUPLEX;
+                 break;
+               case AU_surfxml_link_sharing_policy:
+                 surf_parse_error(bprintf("Invalid sharing policy in cluster %s (please report this bug, this shouldn't happen)",struct_cluster->V_cluster_id));
                }
-               surf_parse_link();
 
-               ETag_surfxml_host();
-               ETag_surfxml_link();
+               sg_platf_new_link(&link);
 
                surf_parsing_link_up_down_t info = xbt_new0(s_surf_parsing_link_up_down_t, 1);
                if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FULLDUPLEX){
@@ -1556,13 +1523,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);
-               host.V_host_id = host_id;
+               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);
+                 host.power_trace = tmgr_trace_new(tmp_availability_file);
                  xbt_free(tmp_availability_file);
                }
                else
@@ -1573,7 +1540,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);
-                 host.V_host_state_trace = tmgr_trace_new(tmp_state_file);
+                 host.state_trace = tmgr_trace_new(tmp_state_file);
                  xbt_free(tmp_state_file);
                }
                else
@@ -1581,11 +1548,11 @@ void routing_parse_Scluster(void)
                  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 = "";
+               host.power_peak = struct_cluster->S_cluster_power;
+               host.power_scale = 1.0;
+               host.core_amount = struct_cluster->S_cluster_core;
+               host.initial_state = SURF_RESOURCE_ON;
+               host.coord = "";
                sg_platf_new_host(&host);
                XBT_DEBUG("</host>");
 
@@ -1597,28 +1564,27 @@ void routing_parse_Scluster(void)
 
                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_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;
+               memset(&link,0,sizeof(link));
+               link.V_link_id = link_id;
+               link.V_link_bandwidth = struct_cluster->S_cluster_bw;
+               link.V_link_latency = struct_cluster->S_cluster_lat;
+               link.V_link_bandwidth_file = NULL;
+               link.V_link_latency_file = NULL;
+               link.V_link_state_file = NULL;
+               link.V_link_state = SURF_RESOURCE_ON;
+               link.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;
+                       link.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;
+                        link.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;
+                        link.V_policy_initial_link = SURF_LINK_FULLDUPLEX;
                }
-               surf_parse_link();
+               sg_platf_new_link(&link);
 
-               ETag_surfxml_host();
                ETag_surfxml_link();
 
                surf_parsing_link_up_down_t info = xbt_new0(s_surf_parsing_link_up_down_t, 1);
@@ -1667,22 +1633,22 @@ void routing_parse_Scluster(void)
          if(AX_surfxml_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_surf_parsing_link_arg_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;
+         memset(&link,0,sizeof(link));
+         link.V_link_id = link_backbone;
+         link.V_link_bandwidth = struct_cluster->S_cluster_bb_bw;
+         link.V_link_latency = struct_cluster->S_cluster_bb_lat;
+         link.V_link_bandwidth_file = NULL;
+         link.V_link_latency_file = NULL;
+         link.V_link_state_file = NULL;
+         link.V_link_state = SURF_RESOURCE_ON;
+         link.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;
+                 link.V_policy_initial_link = SURF_LINK_SHARED;
          else
-                 struct_lnk->V_policy_initial_link = SURF_LINK_FATPIPE;
+                 link.V_policy_initial_link = SURF_LINK_FATPIPE;
 
-         surf_parse_link();
+         sg_platf_new_link(&link);
          ETag_surfxml_link();
 
          surf_parsing_link_up_down_t info = xbt_new0(s_surf_parsing_link_up_down_t, 1);
@@ -1871,136 +1837,111 @@ static void routing_parse_Speer(void)
 
 static void routing_parse_Srandom(void)
 {
-         double mean, std, min, max, seed;
-         char *random_id = A_surfxml_random_id;
-         char *random_radical = A_surfxml_random_radical;
-         char *rd_name = NULL;
-         char *rd_value;
-         mean = surf_parse_get_double(A_surfxml_random_mean);
-         std  = surf_parse_get_double(A_surfxml_random_std_deviation);
-         min  = surf_parse_get_double(A_surfxml_random_min);
-         max  = surf_parse_get_double(A_surfxml_random_max);
-         seed = surf_parse_get_double(A_surfxml_random_seed);
-
-         double res = 0;
-         int i = 0;
-         random_data_t random = xbt_new0(s_random_data_t, 1);
+    double mean, std, min, max, seed;
+    char *random_id = A_surfxml_random_id;
+    char *random_radical = A_surfxml_random_radical;
+    char *rd_name = NULL;
+    char *rd_value;
+    mean = surf_parse_get_double(A_surfxml_random_mean);
+    std  = surf_parse_get_double(A_surfxml_random_std_deviation);
+    min  = surf_parse_get_double(A_surfxml_random_min);
+    max  = surf_parse_get_double(A_surfxml_random_max);
+    seed = surf_parse_get_double(A_surfxml_random_seed);
+
+    double res = 0;
+    int i = 0;
+    random_data_t random = xbt_new0(s_random_data_t, 1);
           char *tmpbuf;
 
-         xbt_dynar_t radical_elements;
-         unsigned int iter;
-         char *groups;
-         int start, end;
-         xbt_dynar_t radical_ends;
-
-         random->generator = A_surfxml_random_generator;
-         random->seed = seed;
-         random->min = min;
-         random->max = max;
-
-         /* Check user stupidities */
-         if (max < min)
-           THROWF(arg_error, 0, "random->max < random->min (%f < %f)", max, min);
-         if (mean < min)
-           THROWF(arg_error, 0, "random->mean < random->min (%f < %f)", mean,
-                  min);
-         if (mean > max)
-           THROWF(arg_error, 0, "random->mean > random->max (%f > %f)", mean,
-                  max);
-
-         /* normalize the mean and standard deviation before storing */
-         random->mean = (mean - min) / (max - min);
-         random->std = std / (max - min);
-
-         if (random->mean * (1 - random->mean) < random->std * random->std)
-           THROWF(arg_error, 0, "Invalid mean and standard deviation (%f and %f)",
-                  random->mean, random->std);
-
-         XBT_DEBUG("id = '%s' min = '%f' max = '%f' mean = '%f' std_deviatinon = '%f' generator = '%d' seed = '%ld' radical = '%s'",
-         random_id,
-         random->min,
-         random->max,
-         random->mean,
-         random->std,
-         random->generator,
-         random->seed,
-         random_radical);
-
-         if(xbt_dict_size(random_value)==0)
-                 random_value = xbt_dict_new();
-
-         if(!strcmp(random_radical,""))
-         {
-                 res = random_generate(random);
-                 rd_value = bprintf("%f",res);
-                 xbt_dict_set(random_value, random_id, rd_value, free);
-         }
-         else
-         {
-                 radical_elements = xbt_str_split(random_radical, ",");
-                 xbt_dynar_foreach(radical_elements, iter, groups) {
-                       radical_ends = xbt_str_split(groups, "-");
-                       switch (xbt_dynar_length(radical_ends)) {
-                       case 1:
-                                         xbt_assert(!xbt_dict_get_or_null(random_value,random_id),"Custom Random '%s' already exists !",random_id);
-                                         res = random_generate(random);
+    xbt_dynar_t radical_elements;
+    unsigned int iter;
+    char *groups;
+    int start, end;
+    xbt_dynar_t radical_ends;
+
+    random->generator = A_surfxml_random_generator;
+    random->seed = seed;
+    random->min = min;
+    random->max = max;
+
+    /* Check user stupidities */
+    if (max < min)
+      THROWF(arg_error, 0, "random->max < random->min (%f < %f)", max, min);
+    if (mean < min)
+      THROWF(arg_error, 0, "random->mean < random->min (%f < %f)", mean,
+       min);
+    if (mean > max)
+      THROWF(arg_error, 0, "random->mean > random->max (%f > %f)", mean,
+       max);
+
+    /* normalize the mean and standard deviation before storing */
+    random->mean = (mean - min) / (max - min);
+    random->std = std / (max - min);
+
+    if (random->mean * (1 - random->mean) < random->std * random->std)
+      THROWF(arg_error, 0, "Invalid mean and standard deviation (%f and %f)",
+       random->mean, random->std);
+
+    XBT_DEBUG("id = '%s' min = '%f' max = '%f' mean = '%f' std_deviatinon = '%f' generator = '%d' seed = '%ld' radical = '%s'",
+    random_id,
+    random->min,
+    random->max,
+    random->mean,
+    random->std,
+    random->generator,
+    random->seed,
+    random_radical);
+
+    if(xbt_dict_size(random_value)==0)
+      random_value = xbt_dict_new();
+
+    if(!strcmp(random_radical,""))
+    {
+      res = random_generate(random);
+      rd_value = bprintf("%f",res);
+      xbt_dict_set(random_value, random_id, rd_value, free);
+    }
+    else
+    {
+      radical_elements = xbt_str_split(random_radical, ",");
+      xbt_dynar_foreach(radical_elements, iter, groups) {
+      radical_ends = xbt_str_split(groups, "-");
+      switch (xbt_dynar_length(radical_ends)) {
+      case 1:
+            xbt_assert(!xbt_dict_get_or_null(random_value,random_id),"Custom Random '%s' already exists !",random_id);
+            res = random_generate(random);
                                           tmpbuf = bprintf("%s%d",random_id,atoi(xbt_dynar_getfirst_as(radical_ends,char *)));
                                           xbt_dict_set(random_value, tmpbuf, bprintf("%f",res), free);
                                           xbt_free(tmpbuf);
-                                         break;
-
-                       case 2:
-                             start = surf_parse_get_int(xbt_dynar_get_as(radical_ends, 0, char *));
-                             end = surf_parse_get_int(xbt_dynar_get_as(radical_ends, 1, char *));
-                                         for (i = start; i <= end; i++) {
-                                                 xbt_assert(!xbt_dict_get_or_null(random_value,random_id),"Custom Random '%s' already exists !",bprintf("%s%d",random_id,i));
-                                                 res = random_generate(random);
+            break;
+
+      case 2:
+            start = surf_parse_get_int(xbt_dynar_get_as(radical_ends, 0, char *));
+            end = surf_parse_get_int(xbt_dynar_get_as(radical_ends, 1, char *));
+            for (i = start; i <= end; i++) {
+              xbt_assert(!xbt_dict_get_or_null(random_value,random_id),"Custom Random '%s' already exists !",bprintf("%s%d",random_id,i));
+              res = random_generate(random);
                           tmpbuf = bprintf("%s%d",random_id,i);
-                                                 xbt_dict_set(random_value, tmpbuf, bprintf("%f",res), free);
+              xbt_dict_set(random_value, tmpbuf, bprintf("%f",res), free);
                           xbt_free(tmpbuf);
-                                         }
-                                         break;
-                       default:
-                               XBT_INFO("Malformed radical");
-                               break;
-                       }
-                       res = random_generate(random);
-                       rd_name  = bprintf("%s_router",random_id);
-                       rd_value = bprintf("%f",res);
-                       xbt_dict_set(random_value, rd_name, rd_value, free);
-
-                       xbt_dynar_free(&radical_ends);
-                 }
-                 free(rd_name);
-                 xbt_dynar_free(&radical_elements);
-         }
-}
-
-static void routing_parse_Erandom(void)
-{
-       /*xbt_dict_cursor_t cursor = NULL;
-       char *key;
-       char *elem;
+            }
+            break;
+      default:
+        XBT_INFO("Malformed radical");
+        break;
+      }
+      res = random_generate(random);
+      rd_name  = bprintf("%s_router",random_id);
+      rd_value = bprintf("%f",res);
+      xbt_dict_set(random_value, rd_name, rd_value, free);
 
-       xbt_dict_foreach(random_value, cursor, key, elem) {
-         XBT_DEBUG("%s = %s",key,elem);
-       }
-*/
+      xbt_dynar_free(&radical_ends);
+      }
+      free(rd_name);
+      xbt_dynar_free(&radical_elements);
+    }
 }
 
-/*
- * New methods to init the routing model component from the lua script
- */
-
-
-/*
- * add a host to the network element list
- */
-
-void routing_add_host(const char *host_id)
-{
-  parse_S_host_lua((char *) host_id, (char*)""); // FIXME propagate coordinate system to lua
-}
 
 /*
  * Set a new link on the actual list of link for a route or ASroute