X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/7603bbaf493afa6c3e499bd7bc0cd15ae832378b..9438858cc5e254b4b2c2a19bcc9b1e93302831ba:/src/surf/surf_routing.c diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index 0c874c8866..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); @@ -1053,7 +1077,6 @@ static e_surf_network_element_type_t get_network_element_type(const char */ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_t get_link_latency_fun) { - /* config the uniq global routing */ global_routing = xbt_new0(s_routing_global_t, 1); global_routing->where_network_elements = xbt_dict_new(); @@ -1104,16 +1127,26 @@ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_ surfxml_add_callback(STag_surfxml_peer_cb_list, &routing_parse_Speer); - surfxml_add_callback(STag_surfxml_config_cb_list, - &routing_parse_Sconfig); - surfxml_add_callback(ETag_surfxml_config_cb_list, - &routing_parse_Econfig); - #ifdef HAVE_TRACING instr_routing_define_callbacks(); #endif } +void surf_parse_add_callback_config(void) +{ + 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); +} + /* ************************************************************************** */ /* *************************** FULL ROUTING ********************************* */ @@ -3243,20 +3276,23 @@ static void generic_src_dst_check(routing_component_t rc, const char *src, static void routing_parse_Sconfig(void) { - //TODO - DEBUG0("WARNING tag config not yet implemented."); - DEBUG1("Configuration name = %s",A_surfxml_config_id); + DEBUG1("START configuration name = %s",A_surfxml_config_id); } static void routing_parse_Econfig(void) { - //TODO xbt_dict_cursor_t cursor = NULL; char *key; char *elem; + char *cfg; xbt_dict_foreach(current_property_set, cursor, key, elem) { - DEBUG2("property : %s = %s",key,elem); + cfg = bprintf("%s:%s",key,elem); + 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); } + DEBUG1("End configuration name = %s",A_surfxml_config_id); } static void routing_parse_Scluster(void) @@ -3650,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);