+ SURFXML_START_TAG(AS);
+
+ XBT_DEBUG(" ");
+ host_id = bprintf("peer_%s", peer_id);
+ router_id = bprintf("router_%s", peer_id);
+ link_id_up = bprintf("link_%s_up", peer_id);
+ link_id_down = bprintf("link_%s_down", peer_id);
+
+ link_router = bprintf("%s_link_router", peer_id);
+ link_backbone = bprintf("%s_backbone", peer_id);
+
+ XBT_DEBUG("<host\tid=\"%s\"\tpower=\"%s\"/>", host_id, peer_power);
+ A_surfxml_host_state = A_surfxml_host_state_ON;
+ SURFXML_BUFFER_SET(host_id, host_id);
+ SURFXML_BUFFER_SET(host_power, peer_power);
+ SURFXML_BUFFER_SET(host_availability, "1.0");
+ SURFXML_BUFFER_SET(host_availability_file, peer_availability_file);
+ SURFXML_BUFFER_SET(host_state_file, peer_state_file);
+ SURFXML_START_TAG(host);
+ SURFXML_END_TAG(host);
+
+ XBT_DEBUG("<router id=\"%s\"\tcoordinates=\"%s\"/>", router_id, peer_coord);
+ SURFXML_BUFFER_SET(router_id, router_id);
+ SURFXML_BUFFER_SET(router_coordinates, peer_coord);
+ SURFXML_START_TAG(router);
+ SURFXML_END_TAG(router);
+
+ XBT_DEBUG("<link\tid=\"%s\"\tbw=\"%s\"\tlat=\"%s\"/>", link_id_up, peer_bw_in, peer_lat);
+ A_surfxml_link_state = A_surfxml_link_state_ON;
+ A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
+ if(peer_sharing_policy == A_surfxml_peer_sharing_policy_FULLDUPLEX)
+{A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FULLDUPLEX;}
+ SURFXML_BUFFER_SET(link_id, link_id_up);
+ SURFXML_BUFFER_SET(link_bandwidth, peer_bw_in);
+ SURFXML_BUFFER_SET(link_latency, peer_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);
+
+ XBT_DEBUG("<link\tid=\"%s\"\tbw=\"%s\"\tlat=\"%s\"/>", link_id_down, peer_bw_out, peer_lat);
+ A_surfxml_link_state = A_surfxml_link_state_ON;
+ A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
+ if(peer_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX)
+{A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FULLDUPLEX;}
+ SURFXML_BUFFER_SET(link_id, link_id_down);
+ SURFXML_BUFFER_SET(link_bandwidth, peer_bw_out);
+ SURFXML_BUFFER_SET(link_latency, peer_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);
+
+ XBT_DEBUG(" ");
+
+ // begin here
+ XBT_DEBUG("<route\tsrc=\"%s\"\tdst=\"%s\"", peer_id, router_id);
+ XBT_DEBUG("symmetrical=\"NO\">");
+ SURFXML_BUFFER_SET(route_src, peer_id);
+ SURFXML_BUFFER_SET(route_dst, router_id);
+ A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO;
+ SURFXML_START_TAG(route);
+
+ XBT_DEBUG("<link_ctn\tid=\"%s\"/>", link_id_up);
+ SURFXML_BUFFER_SET(link_ctn_id, link_id_up);
+ A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
+ if(peer_sharing_policy == A_surfxml_peer_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);
+
+ //Opposite Route
+ XBT_DEBUG("<route\tsrc=\"%s\"\tdst=\"%s\"", router_id, peer_id);
+ XBT_DEBUG("symmetrical=\"NO\">");
+ SURFXML_BUFFER_SET(route_src, router_id);
+ SURFXML_BUFFER_SET(route_dst, peer_id);
+ A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO;
+ SURFXML_START_TAG(route);
+
+ XBT_DEBUG("<link_ctn\tid=\"%s\"/>", link_id_down);
+ SURFXML_BUFFER_SET(link_ctn_id, link_id_down);
+ A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
+ if(peer_sharing_policy == A_surfxml_peer_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);
+
+ XBT_DEBUG("</AS>");
+ SURFXML_END_TAG(AS);
+ XBT_DEBUG(" ");
+
+ //xbt_dynar_free(&tab_elements_num);
+
+ surfxml_bufferstack_pop(1);
+}
+
+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;
+ surf_parse_get_double(&mean,A_surfxml_random_mean);
+ surf_parse_get_double(&std,A_surfxml_random_std_deviation);
+ surf_parse_get_double(&min,A_surfxml_random_min);
+ surf_parse_get_double(&max,A_surfxml_random_max);
+ surf_parse_get_double(&seed,A_surfxml_random_seed);
+
+ double res = 0;
+ int i = 0;
+ random_data_t random = xbt_new0(s_random_data_t, 1);
+
+ 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)
+ THROW2(arg_error, 0, "random->max < random->min (%f < %f)", max, min);
+ if (mean < min)
+ THROW2(arg_error, 0, "random->mean < random->min (%f < %f)", mean,
+ min);
+ if (mean > max)
+ THROW2(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)
+ THROW2(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);
+ xbt_dict_set(random_value, random_id, bprintf("%f",res), 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_assert1(!xbt_dict_get_or_null(random_value,random_id),"Custom Random '%s' already exists !",random_id);
+ res = random_generate(random);
+ xbt_dict_set(random_value, bprintf("%s%d",random_id,atoi(xbt_dynar_getfirst_as(radical_ends,char *))), bprintf("%f",res), free);
+ 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++) {
+ xbt_assert1(!xbt_dict_get_or_null(random_value,random_id),"Custom Random '%s' already exists !",bprintf("%s%d",random_id,i));
+ res = random_generate(random);
+ xbt_dict_set(random_value, bprintf("%s%d",random_id,i), bprintf("%f",res), free);
+ }
+ break;
+ default:
+ XBT_INFO("Malformed radical");
+ }
+ res = random_generate(random);
+ xbt_dict_set(random_value, bprintf("%s_router",random_id), bprintf("%f",res), free);