X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f780443504c3b73f0b9d1c58c6c5a21e2affce2d..0c539f5e2d25206246bb12e6dc036b108ea778e5:/src/surf/surf_routing.c diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index b053b28ea9..f9c921ab14 100644 --- a/src/surf/surf_routing.c +++ b/src/surf/surf_routing.c @@ -18,6 +18,7 @@ #include "xbt/config.h" #include "xbt/graph.h" #include "xbt/set.h" +#include "surf/surfxml_parse.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_route, surf, "Routing part of surf"); @@ -175,8 +176,7 @@ static double eculidean_dist_comp(int index, xbt_dynar_t src, xbt_dynar_t dst) } -static double vivaldi_get_link_latency (routing_component_t rc, - const char *src, const char *dst) +static double vivaldi_get_link_latency (routing_component_t rc,const char *src, const char *dst) { double euclidean_dist; xbt_dynar_t src_ctn, dst_ctn; @@ -540,6 +540,13 @@ static void parse_S_AS(char *AS_id, char *AS_routing) static void parse_S_AS_XML(void) { parse_S_AS(A_surfxml_AS_id, A_surfxml_AS_routing); + + if (strcmp(A_surfxml_AS_coordinates,"")) { + DEBUG2("%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); + } } /* @@ -599,6 +606,24 @@ static void parse_E_AS_lua(const char *id) /* Aux Business methods */ +/** + * \brief Get the AS name of the element + * + * \param name the host name + * + */ +static char* elements_As_name(const char *name) +{ + routing_component_t as_comp; + + /* (1) find the as where the host is located */ + as_comp = ((network_element_info_t) + xbt_dict_get_or_null(global_routing->where_network_elements, + name))->rc_component; + return as_comp->name; +} + + /** * \brief Get the AS father and the first elements of the chain * @@ -801,7 +826,6 @@ static double _get_latency(const char *src, const char *dst) double latency, latency_src, latency_dst = 0.0; DEBUG2("Solve route \"%s\" to \"%s\"", src, dst); - xbt_assert0(src && dst, "bad parameters for \"_get_route\" method"); route_extended_t e_route_cnt; @@ -825,7 +849,6 @@ static double _get_latency(const char *src, const char *dst) } else latency = 0; } else { /* SURF_ROUTING_RECURSIVE */ route_extended_t e_route_bypass = NULL; - if (common_father->get_bypass_route) e_route_bypass = (*(common_father->get_bypass_route)) (common_father, src, dst); @@ -844,8 +867,9 @@ static double _get_latency(const char *src, const char *dst) "bad gateway for route between \"%s\" and \"%s\"", src, dst); latency = - (*(common_father->get_latency)) (common_father, e_route_cnt->src_gateway, - e_route_cnt->src_gateway); + (*(common_father->get_latency)) (common_father, elements_As_name(src), + elements_As_name(dst)); + xbt_assert2(latency>=0, "no route between \"%s\" and \"%s\"", src_father->name, dst_father->name); @@ -1108,12 +1132,19 @@ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_ #endif } -void surf_config_add_callback(void) +void surf_parse_add_callback_config(void) { - surf_parse_reset_parser(); surfxml_add_callback(STag_surfxml_config_cb_list, &routing_parse_Sconfig); surfxml_add_callback(ETag_surfxml_config_cb_list, &routing_parse_Econfig); surfxml_add_callback(STag_surfxml_prop_cb_list, &parse_properties); + surfxml_add_callback(STag_surfxml_AS_cb_list, &surf_parse_models_setup); +} + +void surf_parse_models_setup() +{ + surfxml_del_callback(STag_surfxml_AS_cb_list, surf_parse_models_setup); + surf_config_models_setup(platform_filename); + free(platform_filename); } /* ************************************************************************** */ @@ -3251,14 +3282,12 @@ static void routing_parse_Sconfig(void) static void routing_parse_Econfig(void) { xbt_dict_cursor_t cursor = NULL; - xbt_cfgelm_t variable; char *key; char *elem; char *cfg; xbt_dict_foreach(current_property_set, cursor, key, elem) { cfg = bprintf("%s:%s",key,elem); - variable = xbt_cfgelm_get(_surf_cfg_set, key, xbt_cfgelm_any); - if(variable->isdefault) + if(xbt_cfg_is_default_value(_surf_cfg_set, key)) xbt_cfg_set_parse(_surf_cfg_set, cfg); else INFO1("The custom configuration '%s' is already define by user!",key); @@ -3657,6 +3686,7 @@ static void routing_parse_Speer(void) surfxml_bufferstack_push(1); SURFXML_BUFFER_SET(AS_id, peer_id); + SURFXML_BUFFER_SET(AS_coordinates, peer_coord); #ifdef HAVE_PCRE_LIB SURFXML_BUFFER_SET(AS_routing, "RuleBased"); DEBUG1("", peer_id);