X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/85c342932c60954a7e1c9430742bfff2b28c31a8..2dba2db9e7afc3db8eb181ae8f85e09a6399d1d5:/src/surf/surf_routing.c diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index b5a2578952..de758a14e7 100644 --- a/src/surf/surf_routing.c +++ b/src/surf/surf_routing.c @@ -46,7 +46,6 @@ static const char *src = NULL; /* temporary store the source name of a route */ static const char *dst = NULL; /* temporary store the destination name of a route */ static char *gw_src = NULL; /* temporary store the gateway source name of a route */ static char *gw_dst = NULL; /* temporary store the gateway destination name of a route */ -static double_f_cpvoid_t get_link_latency = NULL; XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_route, surf, "Routing part of surf"); @@ -71,26 +70,24 @@ typedef enum { struct s_model_type routing_models[] = { {"Full", "Full routing data (fast, large memory requirements, fully expressive)", - model_full_create, model_full_load, model_full_unload, model_full_end}, + model_full_create, NULL,NULL, model_full_end}, {"Floyd", "Floyd routing data (slow initialization, fast lookup, lesser memory requirements, shortest path routing only)", - model_floyd_create, model_floyd_load, model_floyd_unload, model_floyd_end}, + model_floyd_create, NULL,NULL, model_floyd_end}, {"Dijkstra", "Dijkstra routing data (fast initialization, slow lookup, small memory requirements, shortest path routing only)", - model_dijkstra_create, model_dijkstra_both_load, - model_dijkstra_both_unload, model_dijkstra_both_end}, + model_dijkstra_create, NULL,NULL, model_dijkstra_both_end}, {"DijkstraCache", "Dijkstra routing data (fast initialization, fast lookup, small memory requirements, shortest path routing only)", - model_dijkstracache_create, model_dijkstra_both_load, - model_dijkstra_both_unload, model_dijkstra_both_end}, + model_dijkstracache_create, NULL,NULL, model_dijkstra_both_end}, {"none", "No routing (usable with Constant network only)", - model_none_create, model_none_load, model_none_unload, model_none_end}, + model_none_create, NULL, NULL, NULL}, {"RuleBased", "Rule-Based routing data (...)", - model_rulebased_create, model_none_load, model_none_unload, model_none_end}, + model_rulebased_create, NULL, NULL, NULL}, {"Vivaldi", "Vivaldi routing", - model_vivaldi_create, model_none_load, model_none_unload, model_none_end}, + model_vivaldi_create, NULL, NULL, NULL}, {"Cluster", "Cluster routing", - model_cluster_create, model_none_load, model_cluster_unload, model_none_end}, + model_cluster_create, NULL, NULL, NULL}, {NULL, NULL, NULL, NULL, NULL, NULL} }; @@ -350,13 +347,15 @@ void routing_AS_open(const char *AS_id, const char *wanted_routing_type) /* add to the father element list */ (*(current_routing->set_autonomous_system)) (current_routing, AS_id); /* unload the prev parse rules */ - (*(current_routing->routing->unload)) (); + 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 */ - (*(new_routing->routing->load)) (); + if (new_routing->routing->load) + (*(new_routing->routing->load)) (); /* set the new current component of the tree */ current_routing = new_routing; } @@ -388,10 +387,12 @@ void routing_AS_close() xbt_lib_set(as_router_lib, current_routing->name, ROUTING_ASR_LEVEL, (void *) info); - (*(current_routing->routing->unload)) (); - (*(current_routing->routing->end)) (); + 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) + if (current_routing != NULL && current_routing->routing->load != NULL) (*(current_routing->routing->load)) (); } } @@ -814,8 +815,7 @@ e_surf_network_element_type_t get_network_element_type(const char *name) * * Make a global routing structure and set all the parsing functions. */ -void routing_model_create(size_t size_of_links, void *loopback, - double_f_cpvoid_t get_link_latency_fun) +void routing_model_create(size_t size_of_links, void *loopback) { /* config the uniq global routing */ global_routing = xbt_new0(s_routing_global_t, 1); @@ -831,7 +831,6 @@ void routing_model_create(size_t size_of_links, void *loopback, global_routing->loopback = loopback; global_routing->size_of_link = size_of_links; global_routing->last_route = NULL; - get_link_latency = get_link_latency_fun; /* no current routing at moment */ current_routing = NULL; } @@ -954,7 +953,7 @@ double generic_get_link_latency(routing_component_t rc, route = route ? route : rc->get_route(rc, src, dst); xbt_dynar_foreach(route->generic_route.link_list, i, link) { - latency += get_link_latency(link); + latency += surf_network_model->extension.network.get_link_latency(link); } if (need_to_clean) generic_free_extended_route(route);