X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5a45f2d9f4342bcad2a27090d22c36bb36d007e4..e7f673d15e75da1cf81d9d02186fbc936a21ffad:/src/surf/surf_routing.c diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index 494eb2f866..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 */ -void routing_AS_init(const char *AS_id, const 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; - const char *wanted = AS_routing; int cpt; /* 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); @@ -503,7 +501,7 @@ 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), @@ -524,7 +522,7 @@ void routing_AS_end(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) { routing_AS_end(A_surfxml_AS_id); } @@ -835,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 * @@ -876,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) @@ -973,7 +987,7 @@ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_ &parse_E_bypassRoute_store_route); surfxml_add_callback(STag_surfxml_AS_cb_list, &parse_S_AS); - surfxml_add_callback(ETag_surfxml_AS_cb_list, &parse_E_AS_XML); + surfxml_add_callback(ETag_surfxml_AS_cb_list, &parse_E_AS); surfxml_add_callback(STag_surfxml_cluster_cb_list, &routing_parse_Scluster); @@ -982,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(); @@ -994,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 **************** */ @@ -1483,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); @@ -1864,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); @@ -2100,17 +2105,16 @@ 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 */