X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/8353ca761ac086a2dffa56a6b1c862f19b803879..5901b83edba40e5e7baa8197acc502e2b26b66da:/src/surf/surf_routing.c diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index 3cd7a0287c..25f4fa6b59 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 */ @@ -988,8 +970,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 +980,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,16 +992,20 @@ 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); } +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(); - surfxml_del_callback(STag_surfxml_AS_cb_list, surf_parse_models_setup); - surf_config_models_setup(platform_filename); - free(platform_filename); + surf_config_models_setup(); } /* ************************************************** */ @@ -1499,7 +1485,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 +1680,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 +1726,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 +1753,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 +1772,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 +1807,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,10 +1866,11 @@ 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); + surf_parse_models_setup_already_called = 0; /* make sure that this function will be called again when reloading a platf */ } static void routing_parse_Speer(void) @@ -2116,36 +2103,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