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}
};
/* 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;
}
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)) ();
}
}
/* ************************************************************************** */
/* *************************** FLOYD ROUTING ******************************** */
routing_component_t model_floyd_create(void); /* create structures for floyd routing model */
-void model_floyd_load(void); /* load parse functions for floyd routing model */
-void model_floyd_unload(void); /* unload parse functions for floyd routing model */
void model_floyd_end(void); /* finalize the creation of floyd routing model */
void model_floyd_set_route(routing_component_t rc, const char *src,
const char *dst, name_route_extended_t route);
routing_component_t model_dijkstra_both_create(int cached); /* create by calling dijkstra or dijkstracache */
routing_component_t model_dijkstra_create(void); /* create structures for dijkstra routing model */
routing_component_t model_dijkstracache_create(void); /* create structures for dijkstracache routing model */
-void model_dijkstra_both_load(void); /* load parse functions for dijkstra routing model */
-void model_dijkstra_both_unload(void); /* unload parse functions for dijkstra routing model */
void model_dijkstra_both_end(void); /* finalize the creation of dijkstra routing model */
void model_dijkstra_both_set_route (routing_component_t rc, const char *src,
const char *dst, name_route_extended_t route);
/* ************************************************************************** */
/* *************************** FULL ROUTING ********************************* */
routing_component_t model_full_create(void); /* create structures for full routing model */
-void model_full_load(void); /* load parse functions for full routing model */
-void model_full_unload(void); /* unload parse functions for full routing model */
void model_full_end(void); /* finalize the creation of full routing model */
void model_full_set_route( /* Set the route and ASroute between src and dst */
routing_component_t rc, const char *src, const char *dst, name_route_extended_t route);
/* ************************************************************************** */
/* ******************************* NO ROUTING ******************************* */
routing_component_t model_none_create(void); /* none routing model */
-void model_none_load(void); /* none routing model */
-void model_none_unload(void); /* none routing model */
-void model_none_end(void); /* none routing model */
#endif /* _SURF_SURF_ROUTING_PRIVATE_H */