X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/8353ca761ac086a2dffa56a6b1c862f19b803879..e7f673d15e75da1cf81d9d02186fbc936a21ffad:/src/surf/surf_routing.c diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index 3cd7a0287c..78d9f4667e 100644 --- a/src/surf/surf_routing.c +++ b/src/surf/surf_routing.c @@ -55,7 +55,7 @@ static void routing_parse_Sconfig(void); /* config Tag */ static void routing_parse_Econfig(void); /* config Tag */ static char* replace_random_parameter(char * chaine); -static void clean_dict_random(void); +static void clean_routing_after_parse(void); /* this lines are only for replace use like index in the model table */ typedef enum { @@ -419,22 +419,20 @@ static void parse_E_bypassRoute_store_route(void) * make the new structure and * set the parsing functions to allows parsing the part of the routing tree */ -static void parse_S_AS(char *AS_id, char *AS_routing) +void routing_AS_init(const char *AS_id, const char *wanted_routing_type) { routing_component_t new_routing; model_type_t model = NULL; - char *wanted = AS_routing; int cpt; - /* seach the routing model */ + /* search the routing model */ for (cpt = 0; routing_models[cpt].name; cpt++) - if (!strcmp(wanted, routing_models[cpt].name)) + if (!strcmp(wanted_routing_type, routing_models[cpt].name)) model = &routing_models[cpt]; /* if its not exist, error */ if (model == NULL) { fprintf(stderr, "Routing model %s not found. Existing models:\n", - wanted); + wanted_routing_type); for (cpt = 0; routing_models[cpt].name; cpt++) - if (!strcmp(wanted, routing_models[cpt].name)) fprintf(stderr, " %s: %s\n", routing_models[cpt].name, routing_models[cpt].desc); xbt_die(NULL); @@ -487,17 +485,9 @@ static void parse_S_AS(char *AS_id, char *AS_routing) /* * Detect the routing model type of the routing component from XML platforms */ -static void parse_S_AS_XML(void) +static void parse_S_AS(void) { - parse_S_AS(A_surfxml_AS_id, A_surfxml_AS_routing); -} - -/* - * define the routing model type of routing component from lua script - */ -static void parse_S_AS_lua(char *id, char *mode) -{ - parse_S_AS(id, mode); + routing_AS_init(A_surfxml_AS_id, A_surfxml_AS_routing); } @@ -507,11 +497,11 @@ static void parse_S_AS_lua(char *id, char *mode) * When you finish to read the routing component, other structures must be created. * the "end" method allow to do that for any routing model type */ -static void parse_E_AS(const char *AS_id) +void routing_AS_end(const char *AS_id) { if (current_routing == NULL) { - THROWF(arg_error, 0, "Close AS(%s), that never open", AS_id); + THROWF(arg_error, 0, "Close AS(%s), that were never opened", AS_id); } else { network_element_info_t info = NULL; xbt_assert(!xbt_lib_get_or_null(as_router_lib,current_routing->name, ROUTING_ASR_LEVEL), @@ -532,17 +522,9 @@ static void parse_E_AS(const char *AS_id) /* * \brief Finish the creation of a new routing component from XML */ -static void parse_E_AS_XML(void) +static void parse_E_AS(void) { - parse_E_AS(A_surfxml_AS_id); -} - -/* - * \brief Finish the creation of a new routing component from lua - */ -static void parse_E_AS_lua(const char *id) -{ - parse_E_AS(id); + routing_AS_end(A_surfxml_AS_id); } /* Aux Business methods */ @@ -851,6 +833,20 @@ static double get_latency(const char *src, const char *dst) return latency; } +static int surf_parse_models_setup_already_called=0; +/* Call the last initialization functions, that must be called after the + * tag, if any, and before the first of cluster|peer|AS|trace|trace_connect + */ +void surf_parse_models_setup() +{ + if (surf_parse_models_setup_already_called) + return; + surf_parse_models_setup_already_called=1; + routing_parse_Erandom(); + surf_config_models_setup(); +} + + /** * \brief Recursive function for finalize * @@ -892,6 +888,8 @@ static void finalize(void) xbt_dynar_free(&(global_routing->last_route)); /* delete global routing structure */ xbt_free(global_routing); + /* make sure that we will reinit the models while loading the platf once reinited -- HACK but there is no proper surf_routing_init() */ + surf_parse_models_setup_already_called = 0; } static xbt_dynar_t recursive_get_onelink_routes(routing_component_t rc) @@ -988,8 +986,8 @@ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_ surfxml_add_callback(ETag_surfxml_bypassRoute_cb_list, &parse_E_bypassRoute_store_route); - surfxml_add_callback(STag_surfxml_AS_cb_list, &parse_S_AS_XML); - surfxml_add_callback(ETag_surfxml_AS_cb_list, &parse_E_AS_XML); + surfxml_add_callback(STag_surfxml_AS_cb_list, &parse_S_AS); + surfxml_add_callback(ETag_surfxml_AS_cb_list, &parse_E_AS); surfxml_add_callback(STag_surfxml_cluster_cb_list, &routing_parse_Scluster); @@ -998,7 +996,7 @@ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_ &routing_parse_Speer); surfxml_add_callback(ETag_surfxml_platform_cb_list, - &clean_dict_random); + &clean_routing_after_parse); #ifdef HAVE_TRACING instr_routing_define_callbacks(); @@ -1010,18 +1008,9 @@ 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_XML); - surfxml_add_callback(STag_surfxml_AS_cb_list, &surf_parse_models_setup); surfxml_add_callback(STag_surfxml_random_cb_list, &routing_parse_Srandom); } -void surf_parse_models_setup() -{ - routing_parse_Erandom(); - surfxml_del_callback(STag_surfxml_AS_cb_list, surf_parse_models_setup); - surf_config_models_setup(platform_filename); - free(platform_filename); -} - /* ************************************************** */ /* ********** PATERN FOR NEW ROUTING **************** */ @@ -1499,7 +1488,7 @@ static void routing_parse_Econfig(void) if(xbt_cfg_is_default_value(_surf_cfg_set, key)) xbt_cfg_set_parse(_surf_cfg_set, cfg); else - XBT_INFO("The custom configuration '%s' is already define by user!",key); + XBT_INFO("The custom configuration '%s' is already defined by user!",key); free(cfg); } XBT_DEBUG("End configuration name = %s",A_surfxml_config_id); @@ -1694,7 +1683,7 @@ void routing_parse_Scluster(void) SURFXML_START_TAG(router); SURFXML_END_TAG(router); - if(struct_cluster->S_cluster_bb_bw && struct_cluster->S_cluster_bb_lat){ + if( strcmp(struct_cluster->S_cluster_bb_bw,"") && strcmp(struct_cluster->S_cluster_bb_lat,"") ){ char *link_backbone = bprintf("%s_backbone", struct_cluster->V_cluster_id); XBT_DEBUG("", link_backbone,struct_cluster->S_cluster_bb_bw, struct_cluster->S_cluster_bb_lat); A_surfxml_link_state = A_surfxml_link_state_ON; @@ -1740,7 +1729,7 @@ void routing_parse_Scluster(void) A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO; SURFXML_START_TAG(route); - if(struct_cluster->S_cluster_bb_bw && struct_cluster->S_cluster_bb_lat){ + if( strcmp(struct_cluster->S_cluster_bb_bw,"") && strcmp(struct_cluster->S_cluster_bb_lat,"") ){ XBT_DEBUG("", pcre_link_backbone); SURFXML_BUFFER_SET(link_ctn_id, pcre_link_backbone); A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE; @@ -1767,7 +1756,7 @@ void routing_parse_Scluster(void) SURFXML_START_TAG(link_ctn); SURFXML_END_TAG(link_ctn); - if(struct_cluster->S_cluster_bb_bw && struct_cluster->S_cluster_bb_lat){ + if( strcmp(struct_cluster->S_cluster_bb_bw,"") && strcmp(struct_cluster->S_cluster_bb_lat,"") ){ XBT_DEBUG("", pcre_link_backbone); SURFXML_BUFFER_SET(link_ctn_id, pcre_link_backbone); A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE; @@ -1786,7 +1775,7 @@ void routing_parse_Scluster(void) A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO; SURFXML_START_TAG(route); - if(struct_cluster->S_cluster_bb_bw && struct_cluster->S_cluster_bb_lat){ + if( strcmp(struct_cluster->S_cluster_bb_bw,"") && strcmp(struct_cluster->S_cluster_bb_lat,"") ){ XBT_DEBUG("", pcre_link_backbone); SURFXML_BUFFER_SET(link_ctn_id, pcre_link_backbone); A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE; @@ -1821,7 +1810,7 @@ void routing_parse_Scluster(void) SURFXML_START_TAG(link_ctn); SURFXML_END_TAG(link_ctn); - if(struct_cluster->S_cluster_bb_bw && struct_cluster->S_cluster_bb_lat){ + if( strcmp(struct_cluster->S_cluster_bb_bw,"") && strcmp(struct_cluster->S_cluster_bb_lat,"") ){ XBT_DEBUG("", pcre_link_backbone); SURFXML_BUFFER_SET(link_ctn_id, pcre_link_backbone); A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE; @@ -1880,7 +1869,7 @@ static char* replace_random_parameter(char * string) return string; } -static void clean_dict_random(void) +static void clean_routing_after_parse(void) { xbt_dict_free(&random_value); xbt_dict_free(&patterns); @@ -2116,36 +2105,20 @@ static void routing_parse_Srandom(void) static void routing_parse_Erandom(void) { - xbt_dict_cursor_t cursor = NULL; + /*xbt_dict_cursor_t cursor = NULL; char *key; char *elem; xbt_dict_foreach(random_value, cursor, key, elem) { XBT_DEBUG("%s = %s",key,elem); } - +*/ } - /* * New methods to init the routing model component from the lua script */ -/* - * calling parse_S_AS_lua with lua values - */ -void routing_AS_init(const char *AS_id, const char *AS_routing) -{ - parse_S_AS_lua((char *) AS_id, (char *) AS_routing); -} - -/* - * calling parse_E_AS_lua to fisnish the creation of routing component - */ -void routing_AS_end(const char *AS_id) -{ - parse_E_AS_lua((char *) AS_id); -} /* * add a host to the network element list