/**
* Routing logic
*/
+typedef struct s_routing_component *routing_component_t;
typedef struct s_model_type {
const char *name;
const char *desc;
- void *(*create) ();
+ routing_component_t (*create) ();
void (*load) ();
void (*unload) ();
void (*end) ();
}
/* Creation routing model functions */
-void *model_cluster_create(void)
+routing_component_t model_cluster_create(void)
{
- routing_component_cluster_t new_component = model_rulebased_create();
- new_component->generic_routing.get_route = cluster_get_route;
+ routing_component_t new_component = model_rulebased_create();
+ new_component->get_route = cluster_get_route;
- return new_component;
+ return (routing_component_t) new_component;
}
void model_cluster_unload(void) {
// xbt_dict_free(&cluster_host_link); //FIXME: do it once the module management is clean in routing
/* Creation routing model functions */
-void *model_dijkstra_both_create(int cached)
+routing_component_t model_dijkstra_both_create(int cached)
{
routing_component_dijkstra_t new_component =
xbt_new0(s_routing_component_dijkstra_t, 1);
new_component->generic_routing.to_index = xbt_dict_new();
new_component->generic_routing.bypassRoutes = xbt_dict_new();
new_component->generic_routing.get_network_element_type = get_network_element_type;
- return new_component;
+ return (routing_component_t)new_component;
}
-void *model_dijkstra_create(void)
+routing_component_t model_dijkstra_create(void)
{
return model_dijkstra_both_create(0);
}
-void *model_dijkstracache_create(void)
+routing_component_t model_dijkstracache_create(void)
{
return model_dijkstra_both_create(1);
}
}
}
-void *model_floyd_create(void)
+routing_component_t model_floyd_create(void)
{
routing_component_floyd_t new_component =
xbt_new0(s_routing_component_floyd_t, 1);
new_component->generic_routing.to_index = xbt_dict_new();
new_component->generic_routing.bypassRoutes = xbt_dict_new();
new_component->generic_routing.get_network_element_type = get_network_element_type;
- return new_component;
+ return (routing_component_t)new_component;
}
void model_floyd_load(void)
/* Routing model structure */
-typedef struct {
+typedef struct s_routing_component_full {
s_routing_component_t generic_routing;
route_extended_t *routing_table;
} s_routing_component_full_t, *routing_component_full_t;
/* Creation routing model functions */
-void *model_full_create(void)
+routing_component_t model_full_create(void)
{
routing_component_full_t new_component =
xbt_new0(s_routing_component_full_t, 1);
new_component->generic_routing.to_index = xbt_dict_new();
new_component->generic_routing.bypassRoutes = xbt_dict_new();
new_component->generic_routing.get_network_element_type = get_network_element_type;
- return new_component;
+ return (routing_component_t) new_component;
}
void model_full_load(void)
}
/* Creation routing model functions */
-void *model_none_create(void)
+routing_component_t model_none_create(void)
{
routing_component_none_t new_component =
xbt_new0(s_routing_component_none_t, 1);
none_get_onelink_routes;
new_component->generic_routing.get_bypass_route = none_get_bypass_route;
new_component->generic_routing.finalize = none_finalize;
- return new_component;
+ return (routing_component_t) new_component;
}
void model_none_load(void)
/* ************************************************************************** */
/* *************************** FLOYD ROUTING ******************************** */
-void *model_floyd_create(void); /* create structures for floyd routing model */
+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 */
/* ************************************************** */
/* ************** RULE-BASED ROUTING **************** */
-void *model_rulebased_create(void); /* create structures for rulebased routing model */
+routing_component_t model_rulebased_create(void); /* create structures for rulebased routing model */
/* ************************************************** */
/* ************** Cluster ROUTING **************** */
-void *model_cluster_create(void); /* create structures for cluster routing model */
+routing_component_t model_cluster_create(void); /* create structures for cluster routing model */
void model_cluster_unload(void); /* Finalize the routing model */
void surf_routing_cluster_add_link(const char* host_id,surf_parsing_link_up_down_t info);
/* ************************************************** */
/* ************** Vivaldi ROUTING **************** */
-void *model_vivaldi_create(void); /* create structures for vivaldi routing model */
+routing_component_t model_vivaldi_create(void); /* create structures for vivaldi routing model */
#define HOST_PEER(peername) bprintf("peer_%s", peername)
#define ROUTER_PEER(peername) bprintf("router_%s", peername)
#define LINK_UP_PEER(peername) bprintf("link_%s_up", peername)
/* ************************************************************************** */
/* ********** Dijkstra & Dijkstra Cached ROUTING **************************** */
-void *model_dijkstra_both_create(int cached); /* create by calling dijkstra or dijkstracache */
-void *model_dijkstra_create(void); /* create structures for dijkstra routing model */
-void *model_dijkstracache_create(void); /* create structures for dijkstracache routing model */
+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 */
/* ************************************************************************** */
/* *************************** FULL ROUTING ********************************* */
-void *model_full_create(void); /* create structures for full routing model */
+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 */
/* ************************************************************************** */
/* ******************************* NO ROUTING ******************************* */
-void *model_none_create(void); /* none routing model */
+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 */
}
/* Creation routing model functions */
-void *model_rulebased_create(void)
+routing_component_t model_rulebased_create(void)
{
routing_component_rulebased_t new_component =
xbt_new0(s_routing_component_rulebased_t, 1);
new_component->list_ASroute =
xbt_dynar_new(sizeof(rule_route_extended_t),
&rule_route_extended_free);
- return new_component;
+ return (routing_component_t) new_component;
}
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_route_vivaldi, surf, "Routing part of surf");
-/* Routing model structure */
-
-typedef struct {
- s_routing_component_t generic_routing;
- xbt_dict_t dict_processing_units;
- xbt_dict_t dict_autonomous_systems;
-} s_routing_component_vivaldi_t, *routing_component_vivaldi_t;
-
-/* Parse routing model functions */
-
-static route_extended_t vivaldi_get_route(routing_component_t rc,
- const char *src,
- const char *dst);
-
/* Business methods */
static route_extended_t vivaldi_get_route(routing_component_t rc,
const char *src,
}
/* Creation routing model functions */
-void *model_vivaldi_create(void)
+routing_component_t model_vivaldi_create(void)
{
- routing_component_vivaldi_t new_component = model_none_create();
- new_component->generic_routing.get_route = vivaldi_get_route;
- new_component->generic_routing.get_latency = vivaldi_get_link_latency;
+ routing_component_t new_component = model_none_create();
+ new_component->get_route = vivaldi_get_route;
+ new_component->get_latency = vivaldi_get_link_latency;
return new_component;
}