Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
what is that pimple, for god's sake??
[simgrid.git] / src / surf / surf_routing.c
index b5a2578..de758a1 100644 (file)
@@ -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);