X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/8cc10e99f53995bc7486e4467b4e6ad8d7be3460..3072be2de56fbf379bb67604b4aef9701cc76244:/src/surf/surf_routing.c diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index d1a77e1a39..f7bd97df6e 100644 --- a/src/surf/surf_routing.c +++ b/src/surf/surf_routing.c @@ -37,8 +37,8 @@ static xbt_dict_t random_value = NULL; /* Global vars */ routing_global_t global_routing = NULL; -routing_component_t current_routing = NULL; -model_type_t current_routing_model = NULL; +AS_t current_routing = NULL; +routing_model_description_t current_routing_model = NULL; /* global parse functions */ xbt_dynar_t link_list = NULL; /* temporary store of current list link of a route */ @@ -70,25 +70,25 @@ typedef enum { struct s_model_type routing_models[] = { {"Full", "Full routing data (fast, large memory requirements, fully expressive)", - model_full_create, NULL,NULL, model_full_end}, + model_full_create, model_full_end}, {"Floyd", "Floyd routing data (slow initialization, fast lookup, lesser memory requirements, shortest path routing only)", - model_floyd_create, NULL,NULL, model_floyd_end}, + model_floyd_create, model_floyd_end}, {"Dijkstra", "Dijkstra routing data (fast initialization, slow lookup, small memory requirements, shortest path routing only)", - model_dijkstra_create, NULL,NULL, model_dijkstra_both_end}, + model_dijkstra_create, model_dijkstra_both_end}, {"DijkstraCache", "Dijkstra routing data (fast initialization, fast lookup, small memory requirements, shortest path routing only)", - model_dijkstracache_create, NULL,NULL, model_dijkstra_both_end}, + model_dijkstracache_create, model_dijkstra_both_end}, {"none", "No routing (usable with Constant network only)", - model_none_create, NULL, NULL, NULL}, + model_none_create, NULL}, {"RuleBased", "Rule-Based routing data (...)", - model_rulebased_create, NULL, NULL, NULL}, + model_rulebased_create, NULL}, {"Vivaldi", "Vivaldi routing", - model_vivaldi_create, NULL, NULL, NULL}, + model_vivaldi_create, NULL}, {"Cluster", "Cluster routing", - model_cluster_create, NULL, NULL, NULL}, - {NULL, NULL, NULL, NULL, NULL, NULL} + model_cluster_create, NULL}, + {NULL, NULL, NULL, NULL} }; /** @@ -228,7 +228,7 @@ static void routing_parse_link_ctn(void) */ static void routing_parse_E_route(void) { - name_route_extended_t route = xbt_new0(s_name_route_extended_t, 1); + route_extended_t route = xbt_new0(s_route_extended_t, 1); route->generic_route.link_list = link_list; xbt_assert(current_routing->parse_route, "no defined method \"set_route\" in \"%s\"", @@ -244,7 +244,7 @@ static void routing_parse_E_route(void) */ static void routing_parse_E_ASroute(void) { - name_route_extended_t e_route = xbt_new0(s_name_route_extended_t, 1); + route_extended_t e_route = xbt_new0(s_route_extended_t, 1); e_route->generic_route.link_list = link_list; e_route->src_gateway = xbt_strdup(gw_src); e_route->dst_gateway = xbt_strdup(gw_dst); @@ -294,12 +294,10 @@ static void routing_parse_E_bypassRoute(void) */ void routing_AS_begin(const char *AS_id, const char *wanted_routing_type) { - routing_component_t new_routing; - model_type_t model = NULL; + AS_t new_routing; + routing_model_description_t model = NULL; int cpt; - surf_parse_models_setup(); /* ensure that the models are created after the last tag and before the first -like */ - /* search the routing model */ for (cpt = 0; routing_models[cpt].name; cpt++) if (!strcmp(wanted_routing_type, routing_models[cpt].name)) @@ -315,7 +313,7 @@ void routing_AS_begin(const char *AS_id, const char *wanted_routing_type) } /* make a new routing component */ - new_routing = (routing_component_t) (*(model->create)) (); + new_routing = (AS_t) (*(model->create)) (); new_routing->routing = model; new_routing->hierarchy = SURF_ROUTING_NULL; new_routing->name = xbt_strdup(AS_id); @@ -342,16 +340,9 @@ void routing_AS_begin(const char *AS_id, const char *wanted_routing_type) (void *) new_routing, NULL); /* add to the father element list */ (*(current_routing->parse_AS)) (current_routing, AS_id); - /* unload the prev parse rules */ - if (current_routing->routing->unload) - (*(current_routing->routing->unload)) (); - } else { THROWF(arg_error, 0, "All defined components must be belong to a AS"); } - /* set the new parse rules */ - if (new_routing->routing->load) - (*(new_routing->routing->load)) (); /* set the new current component of the tree */ current_routing = new_routing; } @@ -383,36 +374,14 @@ void routing_AS_end() xbt_lib_set(as_router_lib, current_routing->name, ROUTING_ASR_LEVEL, (void *) info); - if (current_routing->routing->unload) - (*(current_routing->routing->unload)) (); if (current_routing->routing->end) (*(current_routing->routing->end)) (); current_routing = current_routing->routing_father; - if (current_routing != NULL && current_routing->routing->load != NULL) - (*(current_routing->routing->load)) (); } } /* 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_lib_get_or_null(host_lib, name, - ROUTING_HOST_LEVEL))->rc_component; - return as_comp->name; -} - - /** * \brief Get the AS father and the first elements of the chain * @@ -423,21 +392,21 @@ static char *elements_As_name(const char *name) * father in the chain */ static void elements_father(const char *src, const char *dst, - routing_component_t * res_father, - routing_component_t * res_src, - routing_component_t * res_dst) + AS_t * res_father, + AS_t * res_src, + AS_t * res_dst) { xbt_assert(src && dst, "bad parameters for \"elements_father\" method"); #define ELEMENTS_FATHER_MAXDEPTH 16 /* increase if it is not enough */ - routing_component_t src_as, dst_as; - routing_component_t path_src[ELEMENTS_FATHER_MAXDEPTH]; - routing_component_t path_dst[ELEMENTS_FATHER_MAXDEPTH]; + AS_t src_as, dst_as; + AS_t path_src[ELEMENTS_FATHER_MAXDEPTH]; + AS_t path_dst[ELEMENTS_FATHER_MAXDEPTH]; int index_src = 0; int index_dst = 0; - routing_component_t current; - routing_component_t current_src; - routing_component_t current_dst; - routing_component_t father; + AS_t current; + AS_t current_src; + AS_t current_dst; + AS_t father; /* (1) find the as where the src and dst are located */ network_element_info_t src_data = xbt_lib_get_or_null(host_lib, src, @@ -505,9 +474,9 @@ static void _get_route_latency(const char *src, const char *dst, XBT_DEBUG("Solve route/latency \"%s\" to \"%s\"", src, dst); xbt_assert(src && dst, "bad parameters for \"_get_route_latency\" method"); - routing_component_t common_father; - routing_component_t src_father; - routing_component_t dst_father; + AS_t common_father; + AS_t src_father; + AS_t dst_father; elements_father(src, dst, &common_father, &src_father, &dst_father); if (src_father == dst_father) { /* SURF_ROUTING_BASE */ @@ -700,19 +669,6 @@ 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; - surf_config_models_setup(); -} - - /** * \brief Recursive function for finalize * @@ -721,12 +677,12 @@ void surf_parse_models_setup() * This fuction is call by "finalize". It allow to finalize the * AS or routing components. It delete all the structures. */ -static void _finalize(routing_component_t rc) +static void _finalize(AS_t rc) { if (rc) { xbt_dict_cursor_t cursor = NULL; char *key; - routing_component_t elem; + AS_t elem; xbt_dict_foreach(rc->routing_sons, cursor, key, elem) { _finalize(elem); } @@ -744,7 +700,7 @@ static void _finalize(routing_component_t rc) * \brief Generic method: delete all the routing structures * * walk through the routing components tree and delete the structures - * by calling the differents "finalize" functions in each routing component + * by calling the different "finalize" functions in each routing component */ static void finalize(void) { @@ -754,11 +710,9 @@ 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) +static xbt_dynar_t recursive_get_onelink_routes(AS_t rc) { xbt_dynar_t ret = xbt_dynar_new(sizeof(onelink_t), xbt_free); @@ -774,7 +728,7 @@ static xbt_dynar_t recursive_get_onelink_routes(routing_component_t rc) //recursing char *key; xbt_dict_cursor_t cursor = NULL; - routing_component_t rc_child; + AS_t rc_child; xbt_dict_foreach(rc->routing_sons, cursor, key, rc_child) { xbt_dynar_t onelink_child = recursive_get_onelink_routes(rc_child); if (onelink_child) { @@ -1089,30 +1043,6 @@ static void routing_parse_cluster(void) XBT_DEBUG(" "); } -/* - * This function take a string and replace parameters from patterns dict. - * It returns the new value. - */ -static char *replace_random_parameter(char *string) -{ - char *test_string = NULL; - - if (xbt_dict_size(random_value) == 0) - return string; - - string = xbt_str_varsubst(string, patterns); // for patterns of cluster - test_string = bprintf("${%s}", string); - test_string = xbt_str_varsubst(test_string, random_value); //Add ${xxxxx} for random Generator - - if (strcmp(test_string, "")) { //if not empty, keep this value. - xbt_free(string); - string = test_string; - } //In other case take old value (without ${}) - else - free(test_string); - return string; -} - static void routing_parse_postparse(void) { xbt_dict_free(&random_value);