/* Global vars */
routing_global_t global_routing = NULL;
routing_component_t current_routing = NULL;
-model_type_t current_routing_model = 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 */
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}
};
/**
*/
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\"",
*/
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);
* @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;
+ routing_model_description_t model = NULL;
int cpt;
- surf_parse_models_setup(); /* ensure that the models are created after the last <config> tag and before the first <AS>-like */
-
/* search the routing model */
for (cpt = 0; routing_models[cpt].name; cpt++)
if (!strcmp(wanted_routing_type, routing_models[cpt].name))
(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;
}
* even if you add stuff to a closed AS
*
*/
-void routing_AS_close()
+void routing_AS_end()
{
if (current_routing == NULL) {
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)) ();
}
}
return latency;
}
-static int surf_parse_models_setup_already_called = 0;
-/* Call the last initialization functions, that must be called after the
- * <config> 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
*
* \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)
{
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)
xbt_dynar_t radical_ends;
XBT_DEBUG("<AS id=\"%s\"\trouting=\"Cluster\">", 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, ",");
xbt_dict_free(&patterns);
XBT_DEBUG("</AS>");
- sg_platf_new_AS_close();
+ sg_platf_new_AS_end();
XBT_DEBUG(" ");
}
surfxml_bufferstack_push(1);
XBT_DEBUG("<AS id=\"%s\"\trouting=\"Full\">", 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);
SURFXML_END_TAG(route);
XBT_DEBUG("</AS>");
- sg_platf_new_AS_close();
+ sg_platf_new_AS_end();
XBT_DEBUG(" ");
//xbt_dynar_free(&tab_elements_num);