X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/91e521435c701002a0cf201df2496863519c2157..b4f3e7d89378a667637e4771a4cd84ef6925e6f3:/src/surf/surf_routing.c diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index 8c35d2f659..72c4bc0514 100644 --- a/src/surf/surf_routing.c +++ b/src/surf/surf_routing.c @@ -232,11 +232,10 @@ static void parse_S_host(const char *host_id, const char* coord) info->rc_type = SURF_NETWORK_ELEMENT_HOST; xbt_dict_set(global_routing->where_network_elements, host_id, (void *) info, xbt_free); - if (strcmp(coord,"")) { - xbt_dynar_t ctn = xbt_str_split_str(coord, " "); - xbt_dynar_shrink(ctn,0); - xbt_dict_set (coordinates,host_id,ctn,NULL); + xbt_dynar_t ctn = xbt_str_split_str(coord, " "); + xbt_dynar_shrink(ctn, 0); + xbt_dict_set(coordinates, host_id, ctn, xbt_dynar_free_voidp); } } @@ -297,9 +296,9 @@ static void parse_S_router(void) xbt_dict_set(global_routing->where_network_elements, A_surfxml_router_id, (void *) info, xbt_free); if (strcmp(A_surfxml_router_coordinates,"")) { - xbt_dynar_t ctn = xbt_str_split_str(A_surfxml_router_coordinates, " "); - xbt_dynar_shrink(ctn,0); - xbt_dict_set (coordinates,A_surfxml_router_id,ctn,NULL); + xbt_dynar_t ctn = xbt_str_split_str(A_surfxml_router_coordinates, " "); + xbt_dynar_shrink(ctn, 0); + xbt_dict_set(coordinates, A_surfxml_router_id, ctn, xbt_dynar_free_voidp); } } @@ -549,10 +548,10 @@ static void parse_S_AS_XML(void) parse_S_AS(A_surfxml_AS_id, A_surfxml_AS_routing); if (strcmp(A_surfxml_AS_coordinates,"")) { - XBT_DEBUG("%s coordinates : %s",A_surfxml_AS_id,A_surfxml_AS_coordinates); - xbt_dynar_t ctn = xbt_str_split_str(A_surfxml_AS_coordinates, " "); - xbt_dynar_shrink(ctn,0); - xbt_dict_set (coordinates,A_surfxml_AS_id,ctn,NULL); + XBT_DEBUG("%s coordinates : %s", A_surfxml_AS_id, A_surfxml_AS_coordinates); + xbt_dynar_t ctn = xbt_str_split_str(A_surfxml_AS_coordinates, " "); + xbt_dynar_shrink(ctn, 0); + xbt_dict_set(coordinates, A_surfxml_AS_id, ctn, xbt_dynar_free_voidp); } } @@ -1073,7 +1072,8 @@ static e_surf_network_element_type_t get_network_element_type(const char *name) { network_element_info_t rc = NULL; - rc = xbt_dict_get(global_routing->where_network_elements, name); + rc = xbt_dict_get_or_null(global_routing->where_network_elements, name); + if(!rc) return SURF_NETWORK_ELEMENT_NULL; return rc->rc_type; } @@ -1379,9 +1379,14 @@ static void model_full_set_route(routing_component_t rc, const char *src, { if(!route->dst_gateway && !route->src_gateway) XBT_DEBUG("Load Route from \"%s\" to \"%s\"", src, dst); - else + else{ XBT_DEBUG("Load ASroute from \"%s(%s)\" to \"%s(%s)\"", src, route->src_gateway, dst, route->dst_gateway); + if(global_routing->get_network_element_type((const char*)route->dst_gateway) == SURF_NETWORK_ELEMENT_NULL) + xbt_die("The dst_gateway '%s' does not exist!",route->dst_gateway); + if(global_routing->get_network_element_type((const char*)route->src_gateway) == SURF_NETWORK_ELEMENT_NULL) + xbt_die("The src_gateway '%s' does not exist!",route->src_gateway); + } TO_ROUTE_FULL(*src_id, *dst_id) = generic_new_extended_route(rc->hierarchy,route,1); xbt_dynar_shrink(TO_ROUTE_FULL(*src_id, *dst_id)->generic_route.link_list, 0); } @@ -1748,10 +1753,14 @@ static void model_floyd_set_route(routing_component_t rc, const char *src, { if(!route->dst_gateway && !route->src_gateway) XBT_DEBUG("Load Route from \"%s\" to \"%s\"", src, dst); - else - XBT_DEBUG("Load ASroute from \"%s(%s)\" to \"%s(%s)\"", src, + else{ + XBT_DEBUG("Load ASroute from \"%s(%s)\" to \"%s(%s)\"", src, route->src_gateway, dst, route->dst_gateway); - + if(global_routing->get_network_element_type((const char*)route->dst_gateway) == SURF_NETWORK_ELEMENT_NULL) + xbt_die("The dst_gateway '%s' does not exist!",route->dst_gateway); + if(global_routing->get_network_element_type((const char*)route->src_gateway) == SURF_NETWORK_ELEMENT_NULL) + xbt_die("The src_gateway '%s' does not exist!",route->src_gateway); + } TO_FLOYD_LINK(*src_id, *dst_id) = generic_new_extended_route(rc->hierarchy, route, 1); TO_FLOYD_PRED(*src_id, *dst_id) = *src_id; @@ -2226,7 +2235,7 @@ static void *model_dijkstra_both_create(int cached) new_component->generic_routing.set_autonomous_system = generic_set_autonomous_system; new_component->generic_routing.set_route = model_dijkstra_both_set_route; - new_component->generic_routing.set_ASroute = model_dijkstra_both_set_route; //TODO + new_component->generic_routing.set_ASroute = model_dijkstra_both_set_route; new_component->generic_routing.set_bypassroute = generic_set_bypassroute; new_component->generic_routing.get_route = dijkstra_get_route; new_component->generic_routing.get_latency = generic_get_link_latency; @@ -2316,9 +2325,14 @@ static void model_dijkstra_both_set_route (routing_component_t rc, const char *s if(!route->dst_gateway && !route->src_gateway) XBT_DEBUG("Load Route from \"%s\" to \"%s\"", src, dst); - else + else{ XBT_DEBUG("Load ASroute from \"%s(%s)\" to \"%s(%s)\"", src, route->src_gateway, dst, route->dst_gateway); + if(global_routing->get_network_element_type((const char*)route->dst_gateway) == SURF_NETWORK_ELEMENT_NULL) + xbt_die("The dst_gateway '%s' does not exist!",route->dst_gateway); + if(global_routing->get_network_element_type((const char*)route->src_gateway) == SURF_NETWORK_ELEMENT_NULL) + xbt_die("The src_gateway '%s' does not exist!",route->src_gateway); + } route_extended_t e_route = generic_new_extended_route(current_routing->hierarchy, route, 1); @@ -2504,9 +2518,8 @@ static char *remplace(char *value, const char **src_list, int src_size, param_list = dst_list; param_size = dst_size; } else { - xbt_die(bprintf( - "bad string parameter, support only \"src\" and \"dst\", at offset: %d (\"%s\")", - i, value)); + xbt_die("bad string parameter, support only \"src\" and \"dst\", " + "at offset: %d (\"%s\")", i, value); } i = i + 3; @@ -2605,8 +2618,8 @@ static route_extended_t rulebased_get_route(routing_component_t rc, are_processing_units = 0; rule_list = routing->list_ASroute; } else - xbt_die(bprintf("Ask for route \"from\"(%s) or \"to\"(%s) no found in the local table", - src, dst)); + xbt_die("Ask for route \"from\"(%s) or \"to\"(%s) no found in " + "the local table", src, dst); int rc_src = -1; int rc_dst = -1; @@ -2622,6 +2635,7 @@ static route_extended_t rulebased_get_route(routing_component_t rc, int ovector_dst[OVECCOUNT]; const char **list_src = NULL; const char **list_dst = NULL; + int res; xbt_dynar_foreach(rule_list, cpt, ruleroute) { rc_src = pcre_exec(ruleroute->re_src, NULL, src, src_length, 0, 0, @@ -2631,12 +2645,10 @@ static route_extended_t rulebased_get_route(routing_component_t rc, pcre_exec(ruleroute->re_dst, NULL, dst, dst_length, 0, 0, ovector_dst, OVECCOUNT); if (rc_dst >= 0) { - xbt_assert1(!pcre_get_substring_list - (src, ovector_src, rc_src, &list_src), - "error solving substring list for src \"%s\"", src); - xbt_assert1(!pcre_get_substring_list - (dst, ovector_dst, rc_dst, &list_dst), - "error solving substring list for src \"%s\"", dst); + res = pcre_get_substring_list(src, ovector_src, rc_src, &list_src); + xbt_assert1(!res, "error solving substring list for src \"%s\"", src); + res = pcre_get_substring_list(dst, ovector_dst, rc_dst, &list_dst); + xbt_assert1(!res, "error solving substring list for src \"%s\"", dst); char *link_name; xbt_dynar_foreach(ruleroute->re_str_link, cpt, link_name) { char *new_link_name = @@ -3386,30 +3398,33 @@ static void routing_parse_Scluster(void) #endif link_id = bprintf("%s_link_%d", cluster_id, start); - xbt_dict_set(patterns,"radical",bprintf("%d",start),NULL); + xbt_dict_set(patterns, "radical", bprintf("%d", start), xbt_free); temp_cluster_power = bprintf("%s",cluster_power); - temp_cluster_power = bprintf("%s",replace_random_parameter(temp_cluster_power)); + temp_cluster_power = replace_random_parameter(temp_cluster_power); XBT_DEBUG("", host_id, temp_cluster_power); A_surfxml_host_state = A_surfxml_host_state_ON; SURFXML_BUFFER_SET(host_id, host_id); SURFXML_BUFFER_SET(host_power, temp_cluster_power); SURFXML_BUFFER_SET(host_core, cluster_core); SURFXML_BUFFER_SET(host_availability, "1.0"); - availability_file = bprintf("%s",cluster_availability_file); - state_file = bprintf("%s",cluster_state_file); - XBT_DEBUG("\tavailability_file=\"%s\"",xbt_str_varsubst(availability_file,patterns)); - XBT_DEBUG("\tstate_file=\"%s\"",xbt_str_varsubst(state_file,patterns)); - SURFXML_BUFFER_SET(host_availability_file, xbt_str_varsubst(availability_file,patterns)); - SURFXML_BUFFER_SET(host_state_file, xbt_str_varsubst(state_file,patterns)); - XBT_DEBUG(""); + SURFXML_BUFFER_SET(host_coordinates, ""); + xbt_free(availability_file); + availability_file = bprintf("%s",cluster_availability_file); + xbt_free(state_file); + state_file = bprintf("%s",cluster_state_file); + XBT_DEBUG("\tavailability_file=\"%s\"",xbt_str_varsubst(availability_file,patterns)); + XBT_DEBUG("\tstate_file=\"%s\"",xbt_str_varsubst(state_file,patterns)); + SURFXML_BUFFER_SET(host_availability_file, xbt_str_varsubst(availability_file,patterns)); + SURFXML_BUFFER_SET(host_state_file, xbt_str_varsubst(state_file,patterns)); + XBT_DEBUG(""); SURFXML_START_TAG(host); SURFXML_END_TAG(host); temp_cluster_bw = bprintf("%s",cluster_bw); - temp_cluster_bw = bprintf("%s",replace_random_parameter(temp_cluster_bw)); + temp_cluster_bw = replace_random_parameter(temp_cluster_bw); temp_cluster_lat = bprintf("%s",cluster_lat); - temp_cluster_lat = bprintf("%s",replace_random_parameter(temp_cluster_lat)); + temp_cluster_lat = replace_random_parameter(temp_cluster_lat); XBT_DEBUG("", link_id,temp_cluster_bw, cluster_lat); A_surfxml_link_state = A_surfxml_link_state_ON; A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; @@ -3426,6 +3441,8 @@ static void routing_parse_Scluster(void) SURFXML_START_TAG(link); SURFXML_END_TAG(link); + xbt_free(temp_cluster_bw); + xbt_free(temp_cluster_lat); free(link_id); free(host_id); break; @@ -3442,29 +3459,34 @@ static void routing_parse_Scluster(void) #endif link_id = bprintf("%s_link_%d", cluster_id, i); - xbt_dict_set(patterns,"radical",bprintf("%d",i),NULL); + xbt_dict_set(patterns, "radical", bprintf("%d", i), xbt_free); temp_cluster_power = bprintf("%s",cluster_power); - temp_cluster_power = bprintf("%s",replace_random_parameter(temp_cluster_power)); + temp_cluster_power = replace_random_parameter(temp_cluster_power); XBT_DEBUG("", host_id, temp_cluster_power); A_surfxml_host_state = A_surfxml_host_state_ON; SURFXML_BUFFER_SET(host_id, host_id); SURFXML_BUFFER_SET(host_power, temp_cluster_power); SURFXML_BUFFER_SET(host_core, cluster_core); - SURFXML_BUFFER_SET(host_availability, "1.0"); - availability_file = bprintf("%s",cluster_availability_file); - state_file = bprintf("%s",cluster_state_file); - XBT_DEBUG("\tavailability_file=\"%s\"",xbt_str_varsubst(availability_file,patterns)); - XBT_DEBUG("\tstate_file=\"%s\"",xbt_str_varsubst(state_file,patterns)); - SURFXML_BUFFER_SET(host_availability_file, xbt_str_varsubst(availability_file,patterns)); - SURFXML_BUFFER_SET(host_state_file, xbt_str_varsubst(state_file,patterns)); - XBT_DEBUG(""); + SURFXML_BUFFER_SET(host_availability, "1.0"); + SURFXML_BUFFER_SET(host_coordinates, ""); + xbt_free(availability_file); + availability_file = bprintf("%s",cluster_availability_file); + xbt_free(state_file); + state_file = bprintf("%s",cluster_state_file); + XBT_DEBUG("\tavailability_file=\"%s\"",xbt_str_varsubst(availability_file,patterns)); + XBT_DEBUG("\tstate_file=\"%s\"",xbt_str_varsubst(state_file,patterns)); + SURFXML_BUFFER_SET(host_availability_file, xbt_str_varsubst(availability_file,patterns)); + SURFXML_BUFFER_SET(host_state_file, xbt_str_varsubst(state_file,patterns)); + XBT_DEBUG(""); SURFXML_START_TAG(host); SURFXML_END_TAG(host); + xbt_free(temp_cluster_power); + temp_cluster_bw = bprintf("%s",cluster_bw); - temp_cluster_bw = bprintf("%s",replace_random_parameter(temp_cluster_bw)); + temp_cluster_bw = replace_random_parameter(temp_cluster_bw); temp_cluster_lat = bprintf("%s",cluster_lat); - temp_cluster_lat = bprintf("%s",replace_random_parameter(temp_cluster_lat)); + temp_cluster_lat = replace_random_parameter(temp_cluster_lat); XBT_DEBUG("", link_id,temp_cluster_bw, cluster_lat); A_surfxml_link_state = A_surfxml_link_state_ON; A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; @@ -3481,6 +3503,8 @@ static void routing_parse_Scluster(void) SURFXML_START_TAG(link); SURFXML_END_TAG(link); + xbt_free(temp_cluster_bw); + xbt_free(temp_cluster_lat); free(link_id); free(host_id); } @@ -3507,11 +3531,11 @@ static void routing_parse_Scluster(void) SURFXML_END_TAG(router); //TODO - xbt_dict_set(patterns,"radical",bprintf("_router"),NULL); + xbt_dict_set(patterns, "radical", bprintf("_router"), xbt_free); temp_cluster_bw = bprintf("%s",cluster_bw); - temp_cluster_bw = bprintf("%s",replace_random_parameter(temp_cluster_bw)); + temp_cluster_bw = replace_random_parameter(temp_cluster_bw); temp_cluster_lat = bprintf("%s",cluster_lat); - temp_cluster_lat = bprintf("%s",replace_random_parameter(temp_cluster_lat)); + temp_cluster_lat = replace_random_parameter(temp_cluster_lat); XBT_DEBUG("", link_router,temp_cluster_bw, temp_cluster_lat); A_surfxml_link_state = A_surfxml_link_state_ON; A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; @@ -3528,6 +3552,9 @@ static void routing_parse_Scluster(void) SURFXML_START_TAG(link); SURFXML_END_TAG(link); + xbt_free(temp_cluster_bw); + xbt_free(temp_cluster_lat); + XBT_DEBUG("", link_backbone,cluster_bb_bw, cluster_bb_lat); A_surfxml_link_state = A_surfxml_link_state_ON; A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; @@ -3670,10 +3697,10 @@ static void routing_parse_Scluster(void) } } xbt_dynar_free(&tab_elements_num); - free(router_id); #endif + free(router_id); free(link_backbone); free(link_router); xbt_dict_free(&patterns); @@ -3692,23 +3719,21 @@ static void routing_parse_Scluster(void) */ static char* replace_random_parameter(char * string) { - char *temp_string = NULL; - char *test_string = NULL; + char *test_string = NULL; - if(xbt_dict_size(random_value)==0) - return string; + if(xbt_dict_size(random_value)==0) + return string; - temp_string = bprintf("%s",string); - temp_string = xbt_str_varsubst(temp_string,patterns); // for patterns of cluster - test_string = bprintf("${%s}",temp_string); - test_string = xbt_str_varsubst(test_string,random_value); //Add ${xxxxx} for random Generator + string = xbt_str_varsubst(string, patterns); // for patterns of cluster + test_string = bprintf("${%s}", string); + test_string = xbt_str_varsubst(test_string,random_value); //Add ${xxxxx} for random Generator - if(strcmp(test_string,"")) //if not empty, keep this value. - string = bprintf("%s",test_string); - else //In other case take old value (without ${}) - string = bprintf("%s",temp_string); + if (strcmp(test_string,"")) { //if not empty, keep this value. + xbt_free(string); + string = test_string; + } //In other case take old value (without ${}) - return string; + return string; } static void routing_parse_Speer(void) @@ -3773,6 +3798,7 @@ static void routing_parse_Speer(void) 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);