X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/62da5664b681577c99a3b0f51d8395876e7ecdf5..54623b547b0714909b759cae7c21a8469ee40c28:/src/surf/surf_routing.c diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index 2ac012e27b..2bc91e53b3 100644 --- a/src/surf/surf_routing.c +++ b/src/surf/surf_routing.c @@ -170,8 +170,6 @@ static char *gw_src = NULL; /* temporary store the gateway source name of a static char *gw_dst = NULL; /* temporary store the gateway destination name of a route */ static xbt_dynar_t link_list = NULL; /* temporary store of current list link of a route */ -static xbt_dict_t coordinates = NULL; - static double eculidean_dist_comp(int index, xbt_dynar_t src, xbt_dynar_t dst) { @@ -188,8 +186,13 @@ static double vivaldi_get_link_latency (routing_component_t rc,const char *src, { double euclidean_dist; xbt_dynar_t src_ctn, dst_ctn; - src_ctn = xbt_dict_get(coordinates, src); - dst_ctn = xbt_dict_get(coordinates, dst); + src_ctn = xbt_lib_get_or_null(host_lib, src, COORD_HOST_LEVEL); + if(!src_ctn) src_ctn = xbt_lib_get_or_null(as_router_lib, src, COORD_ASR_LEVEL); + dst_ctn = xbt_lib_get_or_null(host_lib, dst, COORD_HOST_LEVEL); + if(!dst_ctn) dst_ctn = xbt_lib_get_or_null(as_router_lib, dst, COORD_ASR_LEVEL); + + if(dst_ctn == NULL || src_ctn == NULL) + xbt_die("Coord src '%s' :%p dst '%s' :%p",src,src_ctn,dst,dst_ctn); euclidean_dist = sqrt (eculidean_dist_comp(0,src_ctn,dst_ctn)+eculidean_dist_comp(1,src_ctn,dst_ctn)) +fabs(atof(xbt_dynar_get_as(src_ctn, 2, char *)))+fabs(atof(xbt_dynar_get_as(dst_ctn, 2, char *))); @@ -207,7 +210,7 @@ static double vivaldi_get_link_latency (routing_component_t rc,const char *src, 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_lib_set(host_lib, host_id, COORD_HOST_LEVEL, ctn); } */ } @@ -232,9 +235,10 @@ static void parse_S_host(const char *host_id, const char* coord) 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_dynar_shrink(ctn, 0); - xbt_dict_set(coordinates, host_id, ctn, xbt_dynar_free_voidp); + xbt_lib_set(host_lib,host_id,COORD_HOST_LEVEL,(void *) ctn); } } @@ -293,9 +297,10 @@ static void parse_S_router(const char *router_id) xbt_lib_set(as_router_lib,router_id,ROUTING_ASR_LEVEL,(void *) info); if (strcmp(A_surfxml_router_coordinates,"")) { - xbt_dynar_t ctn = xbt_str_split_str(A_surfxml_router_coordinates, " "); - xbt_dynar_shrink(ctn, 0); - xbt_lib_set(as_router_lib,router_id,COORD_ASR_LEVEL,(void *) ctn); + if(!COORD_ASR_LEVEL) xbt_die("To use coordinates, you must set configuration 'coordinates' to 'yes'"); + xbt_dynar_t ctn = xbt_str_split_str(A_surfxml_router_coordinates, " "); + xbt_dynar_shrink(ctn, 0); + xbt_lib_set(as_router_lib,router_id,COORD_ASR_LEVEL,(void *) ctn); } } @@ -561,10 +566,11 @@ static void parse_S_AS_XML(void) parse_S_AS(A_surfxml_AS_id, A_surfxml_AS_routing); if (strcmp(A_surfxml_AS_coordinates,"")) { + if(!COORD_ASR_LEVEL) xbt_die("To use coordinates, you must set configuration 'coordinates' to 'yes'"); 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); + xbt_lib_set(as_router_lib,A_surfxml_AS_id,COORD_ASR_LEVEL,(void *) ctn); } } @@ -1037,7 +1043,6 @@ static void finalize(void) { /* delete recursibly all the tree */ _finalize(global_routing->root); - xbt_dict_free(&(coordinates)); /* delete last_route */ xbt_dynar_free(&(global_routing->last_route)); /* delete global routing structure */ @@ -1114,8 +1119,6 @@ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_ /* no current routing at moment */ current_routing = NULL; - coordinates = xbt_dict_new(); - /* parse generic elements */ surfxml_add_callback(STag_surfxml_host_cb_list, &parse_S_host_XML); surfxml_add_callback(ETag_surfxml_host_cb_list, &parse_E_host_XML); @@ -1379,7 +1382,7 @@ static void model_full_set_route(routing_component_t rc, const char *src, xbt_dynar_t link_route_to_test = xbt_dynar_new(global_routing->size_of_link, NULL); xbt_dynar_foreach(route->generic_route.link_list,i,link_name) { - void *link = xbt_dict_get_or_null(surf_network_model->resource_set, link_name); + void *link = xbt_lib_get_or_null(link_lib, link_name, SURF_LINK_LEVEL); xbt_assert1(link,"Link : '%s' doesn't exists.",link_name); xbt_dynar_push(link_route_to_test,&link); } @@ -1423,7 +1426,7 @@ static void model_full_set_route(routing_component_t rc, const char *src, for(i=xbt_dynar_length(route->generic_route.link_list) ;i>0 ;i--) { link_name = xbt_dynar_get_as(route->generic_route.link_list,i-1,void *); - void *link = xbt_dict_get_or_null(surf_network_model->resource_set, link_name); + void *link = xbt_lib_get_or_null(link_lib, link_name, SURF_LINK_LEVEL); xbt_assert1(link,"Link : '%s' doesn't exists.",link_name); xbt_dynar_push(link_route_to_test,&link); } @@ -1751,7 +1754,7 @@ static void model_floyd_set_route(routing_component_t rc, const char *src, xbt_dynar_t link_route_to_test = xbt_dynar_new(global_routing->size_of_link, NULL); xbt_dynar_foreach(route->generic_route.link_list,cpt,link_name) { - void *link = xbt_dict_get_or_null(surf_network_model->resource_set, link_name); + void *link = xbt_lib_get_or_null(link_lib, link_name, SURF_LINK_LEVEL); xbt_assert1(link,"Link : '%s' doesn't exists.",link_name); xbt_dynar_push(link_route_to_test,&link); } @@ -1796,7 +1799,7 @@ static void model_floyd_set_route(routing_component_t rc, const char *src, for(i=xbt_dynar_length(route->generic_route.link_list) ;i>0 ;i--) { link_name = xbt_dynar_get_as(route->generic_route.link_list,i-1,void *); - void *link = xbt_dict_get_or_null(surf_network_model->resource_set, link_name); + void *link = xbt_lib_get_or_null(link_lib, link_name, SURF_LINK_LEVEL); xbt_assert1(link,"Link : '%s' doesn't exists.",link_name); xbt_dynar_push(link_route_to_test,&link); } @@ -2665,8 +2668,7 @@ static route_extended_t rulebased_get_route(routing_component_t rc, char *new_link_name = remplace(link_name, list_src, rc_src, list_dst, rc_dst); void *link = - xbt_dict_get_or_null(surf_network_model->resource_set, - new_link_name); + xbt_lib_get_or_null(link_lib, new_link_name, SURF_LINK_LEVEL); if (link) xbt_dynar_push(links_list, &link); else @@ -2990,14 +2992,17 @@ static route_extended_t generic_get_bypassroute(routing_component_t rc, routing_component_t *current_dst = NULL; /* (1) find the as where the src and dst are located */ - src_as = ((network_element_info_t) - xbt_lib_get_or_null(host_lib, src, ROUTING_HOST_LEVEL))->rc_component; - dst_as = ((network_element_info_t) - xbt_lib_get_or_null(host_lib, dst, ROUTING_HOST_LEVEL))->rc_component; - xbt_assert2(src_as - && dst_as, - "Ask for route \"from\"(%s) or \"to\"(%s) no found", src, - dst); + void * src_data = xbt_lib_get_or_null(host_lib,src, ROUTING_HOST_LEVEL); + void * dst_data = xbt_lib_get_or_null(host_lib,dst, ROUTING_HOST_LEVEL); + if(!src_data) src_data = xbt_lib_get_or_null(as_router_lib,src, ROUTING_ASR_LEVEL); + if(!dst_data) dst_data = xbt_lib_get_or_null(as_router_lib,dst, ROUTING_ASR_LEVEL); + + if(src_data == NULL || dst_data == NULL) + xbt_die("Ask for route \"from\"(%s) or \"to\"(%s) no found at AS \"%s\"", + src, dst, rc->name); + + src_as = ((network_element_info_t)src_data)->rc_component; + dst_as = ((network_element_info_t)dst_data)->rc_component; /* (2) find the path to the root routing component */ path_src = xbt_dynar_new(sizeof(routing_component_t), NULL); @@ -3135,7 +3140,7 @@ generic_new_route(e_surf_routing_hierarchy_t hierarchy, xbt_dynar_foreach(links, cpt, link_name) { void *link = - xbt_dict_get_or_null(surf_network_model->resource_set, link_name); + xbt_lib_get_or_null(link_lib, link_name, SURF_LINK_LEVEL); if (link) { if (order) xbt_dynar_push(links_id, &link); @@ -3191,7 +3196,7 @@ generic_new_extended_route(e_surf_routing_hierarchy_t hierarchy, xbt_dynar_foreach(links, cpt, link_name) { void *link = - xbt_dict_get_or_null(surf_network_model->resource_set, link_name); + xbt_lib_get_or_null(link_lib, link_name, SURF_LINK_LEVEL); if (link) { if (order) xbt_dynar_push(links_id, &link); @@ -3384,9 +3389,11 @@ static void routing_parse_Scluster(void) SURFXML_BUFFER_SET(AS_id, cluster_id); #ifdef HAVE_PCRE_LIB SURFXML_BUFFER_SET(AS_routing, "RuleBased"); + SURFXML_BUFFER_SET(AS_coordinates, ""); XBT_DEBUG("", cluster_id); #else SURFXML_BUFFER_SET(AS_routing, "Full"); + SURFXML_BUFFER_SET(AS_coordinates, ""); XBT_DEBUG("", cluster_id); #endif SURFXML_START_TAG(AS); @@ -3534,6 +3541,7 @@ static void routing_parse_Scluster(void) XBT_DEBUG("", router_id); SURFXML_BUFFER_SET(router_id, router_id); + SURFXML_BUFFER_SET(router_coordinates, ""); SURFXML_START_TAG(router); SURFXML_END_TAG(router);