-static routing_component_t generic_processing_units_exist(routing_component_t rc, char* element) {
- routing_component_t element_as;
- element_as = xbt_dict_get_or_null(global_routing->where_network_elements,element);
- if(element_as==rc) return element_as;
- return generic_as_exist(rc,element_as);
-}
-
-static void generic_src_dst_check(routing_component_t rc, const char* src, const char* dst) {
-
- routing_component_t src_as = xbt_dict_get_or_null(global_routing->where_network_elements,src);
- routing_component_t dst_as = xbt_dict_get_or_null(global_routing->where_network_elements,dst);
-
- xbt_assert3(src_as != NULL && dst_as != NULL,
- "Ask for route \"from\"(%s) or \"to\"(%s) no found at AS \"%s\"",src,dst,rc->name);
- xbt_assert4(src_as == dst_as,
- "The src(%s in %s) and dst(%s in %s) are in differents AS",src,src_as->name,dst,dst_as->name);
- xbt_assert2(rc == dst_as,
- "The routing component of src and dst is not the same as the network elements belong (%s==%s)",rc->name,dst_as->name);
-}
-
-static void routing_full_parse_Scluster(void)
-{
- static int AX_ptr = 0;
-
- char *cluster_id = A_surfxml_cluster_id;
- char *cluster_prefix = A_surfxml_cluster_prefix;
- char *cluster_suffix = A_surfxml_cluster_suffix;
- char *cluster_radical = A_surfxml_cluster_radical;
- char *cluster_power = A_surfxml_cluster_power;
- char *cluster_bw = A_surfxml_cluster_bw;
- char *cluster_lat = A_surfxml_cluster_lat;
- char *cluster_bb_bw = A_surfxml_cluster_bb_bw;
- char *cluster_bb_lat = A_surfxml_cluster_bb_lat;
- char *host_id, *groups, *link_id;
- char *router_id, *link_router, *link_backbone, *route_src_dst;
- unsigned int iter;
- int start, end, i;
- xbt_dynar_t radical_elements;
- xbt_dynar_t radical_ends;
-
- static unsigned int surfxml_buffer_stack_stack_ptr = 1;
- static unsigned int surfxml_buffer_stack_stack[1024];
-
- surfxml_buffer_stack_stack[0]= 0;
-
- surfxml_bufferstack_push(1);
-
- DEBUG1("<AS id=\"%s\"\trouting=\"RuleBased\">",cluster_id);
- SURFXML_BUFFER_SET(AS_id, cluster_id);
- SURFXML_BUFFER_SET(AS_routing, "RuleBased");
- SURFXML_START_TAG(AS);
-
- radical_elements = xbt_str_split(cluster_radical, ",");
- xbt_dynar_foreach(radical_elements, iter, groups)
- {
- radical_ends = xbt_str_split(groups, "-");
- switch (xbt_dynar_length(radical_ends))
- {
+static void routing_parse_Speer(void)
+{
+ static int AX_ptr = 0;
+
+ char *peer_id = A_surfxml_peer_id;
+ char *peer_power = A_surfxml_peer_power;
+ char *peer_bw_in = A_surfxml_peer_bw_in;
+ char *peer_bw_out = A_surfxml_peer_bw_out;
+ char *peer_lat = A_surfxml_peer_lat;
+ char *peer_coord = A_surfxml_peer_coordinates;
+ char *peer_state_file = A_surfxml_peer_state_file;
+ char *peer_availability_file = A_surfxml_peer_availability_file;
+
+ char *host_id = NULL;
+ char *router_id, *link_router, *link_backbone, *link_id_up, *link_id_down;
+
+ static unsigned int surfxml_buffer_stack_stack_ptr = 1;
+ static unsigned int surfxml_buffer_stack_stack[1024];
+
+ surfxml_buffer_stack_stack[0] = 0;
+
+ surfxml_bufferstack_push(1);
+
+ SURFXML_BUFFER_SET(AS_id, peer_id);
+
+ SURFXML_BUFFER_SET(AS_routing, "Full");
+ XBT_DEBUG("<AS id=\"%s\"\trouting=\"Full\">", peer_id);
+
+ 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_BUFFER_SET(host_coordinates, "");
+ 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;
+ 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;
+ 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\"", host_id, router_id);
+ XBT_DEBUG("symmetrical=\"NO\">");
+ SURFXML_BUFFER_SET(route_src, host_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;
+ 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, host_id);
+ XBT_DEBUG("symmetrical=\"NO\">");
+ SURFXML_BUFFER_SET(route_src, router_id);
+ SURFXML_BUFFER_SET(route_dst, host_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;
+ 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);
+ free(host_id);
+ free(router_id);
+ free(link_router);
+ free(link_backbone);
+ free(link_id_up);
+ free(link_id_down);
+ 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;
+ char *rd_name = NULL;
+ char *rd_value;
+ 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);
+ 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)) {