X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d0d164cd894ef7a55ed4a319c896519bc97416c0..2393024691b60fb2054ced4a41d146759091136c:/src/surf/surf_routing.c diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index adbff025ca..f3c23703d0 100644 --- a/src/surf/surf_routing.c +++ b/src/surf/surf_routing.c @@ -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} }; /** @@ -101,10 +101,8 @@ static void parse_S_host(sg_platf_host_cbarg_t host) current_routing->hierarchy = SURF_ROUTING_BASE; xbt_assert(!xbt_lib_get_or_null(host_lib, host->id, ROUTING_HOST_LEVEL), "Reading a host, processing unit \"%s\" already exists", host->id); - xbt_assert(current_routing->set_processing_unit, - "no defined method \"set_processing_unit\" in \"%s\"", - current_routing->name); - (*(current_routing->set_processing_unit)) (current_routing, host->id); + + (*(current_routing->parse_PU)) (current_routing, host->id); info = xbt_new0(s_network_element_info_t, 1); info->rc_component = current_routing; info->rc_type = SURF_NETWORK_ELEMENT_HOST; @@ -130,10 +128,8 @@ static void parse_S_router(sg_platf_router_cbarg_t router) xbt_assert(!xbt_lib_get_or_null(as_router_lib, router->id, ROUTING_ASR_LEVEL), "Reading a router, processing unit \"%s\" already exists", router->id); - xbt_assert(current_routing->set_processing_unit, - "no defined method \"set_processing_unit\" in \"%s\"", - current_routing->name); - (*(current_routing->set_processing_unit)) (current_routing, router->id); + + (*(current_routing->parse_PU)) (current_routing, router->id); info = xbt_new0(s_network_element_info_t, 1); info->rc_component = current_routing; info->rc_type = SURF_NETWORK_ELEMENT_ROUTER; @@ -234,10 +230,10 @@ static void routing_parse_E_route(void) { name_route_extended_t route = xbt_new0(s_name_route_extended_t, 1); route->generic_route.link_list = link_list; - xbt_assert(current_routing->set_route, + xbt_assert(current_routing->parse_route, "no defined method \"set_route\" in \"%s\"", current_routing->name); - (*(current_routing->set_route)) (current_routing, src, dst, route); + (*(current_routing->parse_route)) (current_routing, src, dst, route); link_list = NULL; src = NULL; dst = NULL; @@ -252,10 +248,10 @@ static void routing_parse_E_ASroute(void) e_route->generic_route.link_list = link_list; e_route->src_gateway = xbt_strdup(gw_src); e_route->dst_gateway = xbt_strdup(gw_dst); - xbt_assert(current_routing->set_ASroute, + xbt_assert(current_routing->parse_ASroute, "no defined method \"set_ASroute\" in \"%s\"", current_routing->name); - (*(current_routing->set_ASroute)) (current_routing, src, dst, e_route); + (*(current_routing->parse_ASroute)) (current_routing, src, dst, e_route); link_list = NULL; src = NULL; dst = NULL; @@ -272,10 +268,10 @@ static void routing_parse_E_bypassRoute(void) e_route->generic_route.link_list = link_list; e_route->src_gateway = xbt_strdup(gw_src); e_route->dst_gateway = xbt_strdup(gw_dst); - xbt_assert(current_routing->set_bypassroute, + xbt_assert(current_routing->parse_bypassroute, "Bypassing mechanism not implemented by routing '%s'", current_routing->name); - (*(current_routing->set_bypassroute)) (current_routing, src, dst, e_route); + (*(current_routing->parse_bypassroute)) (current_routing, src, dst, e_route); link_list = NULL; src = NULL; dst = NULL; @@ -296,14 +292,12 @@ static void routing_parse_E_bypassRoute(void) * @param AS_id name of this autonomous system. Must be unique in the platform * @param wanted_routing_type one of Full, Floyd, Dijkstra or similar. Full list in the variable routing_models, in src/surf/surf_routing.c */ -void routing_AS_open(const char *AS_id, const char *wanted_routing_type) +void routing_AS_begin(const char *AS_id, const char *wanted_routing_type) { routing_component_t new_routing; model_type_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)) @@ -345,17 +339,10 @@ void routing_AS_open(const char *AS_id, const char *wanted_routing_type) xbt_dict_set(current_routing->routing_sons, AS_id, (void *) new_routing, NULL); /* add to the father element list */ - (*(current_routing->set_autonomous_system)) (current_routing, AS_id); - /* unload the prev parse rules */ - if (current_routing->routing->unload) - (*(current_routing->routing->unload)) (); - + (*(current_routing->parse_AS)) (current_routing, AS_id); } 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; } @@ -371,7 +358,7 @@ void routing_AS_open(const char *AS_id, const char *wanted_routing_type) * even if you add stuff to a closed AS * */ -void routing_AS_close() +void routing_AS_end() { if (current_routing == NULL) { @@ -387,13 +374,9 @@ void routing_AS_close() 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)) (); } } @@ -704,19 +687,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 * @@ -748,7 +718,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) { @@ -758,8 +728,6 @@ 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) @@ -905,7 +873,7 @@ static void routing_parse_cluster(void) xbt_dynar_t radical_ends; XBT_DEBUG("", struct_cluster->id); - sg_platf_new_AS_open(struct_cluster->id, "Cluster"); + sg_platf_new_AS_begin(struct_cluster->id, "Cluster"); //Make all hosts radical_elements = xbt_str_split(struct_cluster->radical, ","); @@ -1089,7 +1057,7 @@ static void routing_parse_cluster(void) xbt_dict_free(&patterns); XBT_DEBUG(""); - sg_platf_new_AS_close(); + sg_platf_new_AS_end(); XBT_DEBUG(" "); } @@ -1137,7 +1105,7 @@ static void routing_parse_peer(sg_platf_peer_cbarg_t peer) surfxml_bufferstack_push(1); XBT_DEBUG("", peer->id); - sg_platf_new_AS_open(peer->id, "Full"); + sg_platf_new_AS_begin(peer->id, "Full"); XBT_DEBUG(" "); host_id = HOST_PEER(peer->id); @@ -1223,7 +1191,7 @@ static void routing_parse_peer(sg_platf_peer_cbarg_t peer) SURFXML_END_TAG(route); XBT_DEBUG(""); - sg_platf_new_AS_close(); + sg_platf_new_AS_end(); XBT_DEBUG(" "); //xbt_dynar_free(&tab_elements_num);