- }
-
- xbt_dynar_free(&path_src);
- xbt_dynar_free(&path_dst);
-
- route_extended_t new_e_route = NULL;
-
- if (e_route_bypass) {
- void *link;
- unsigned int cpt = 0;
- new_e_route = xbt_new0(s_route_extended_t, 1);
- new_e_route->src_gateway = xbt_strdup(e_route_bypass->src_gateway);
- new_e_route->dst_gateway = xbt_strdup(e_route_bypass->dst_gateway);
- new_e_route->generic_route.link_list =
- xbt_dynar_new(global_routing->size_of_link, NULL);
- xbt_dynar_foreach(e_route_bypass->generic_route.link_list, cpt, link) {
- xbt_dynar_push(new_e_route->generic_route.link_list, &link);
- }
- }
-
- return new_e_route;
-}
-
-/* ************************************************************************** */
-/* ************************* GENERIC AUX FUNCTIONS ************************** */
-
-route_t
-generic_new_route(e_surf_routing_hierarchy_t hierarchy,
- void *data, int order)
-{
-
- char *link_name;
- route_t new_route;
- unsigned int cpt;
- xbt_dynar_t links = NULL, links_id = NULL;
-
- new_route = xbt_new0(s_route_t, 1);
- new_route->link_list =
- xbt_dynar_new(global_routing->size_of_link, NULL);
-
- xbt_assert(hierarchy == SURF_ROUTING_BASE,
- "the hierarchy type is not SURF_ROUTING_BASE");
-
- links = ((route_t) data)->link_list;
-
-
- links_id = new_route->link_list;
-
- xbt_dynar_foreach(links, cpt, link_name) {
-
- void *link =
- xbt_lib_get_or_null(link_lib, link_name, SURF_LINK_LEVEL);
- if (link) {
- if (order)
- xbt_dynar_push(links_id, &link);
- else
- xbt_dynar_unshift(links_id, &link);
- } else
- THROWF(mismatch_error, 0, "Link %s not found", link_name);
- }
-
- return new_route;
-}
-
-route_extended_t
-generic_new_extended_route(e_surf_routing_hierarchy_t hierarchy,
- void *data, int order)
-{
-
- char *link_name;
- route_extended_t e_route, new_e_route;
- route_t route;
- unsigned int cpt;
- xbt_dynar_t links = NULL, links_id = NULL;
-
- new_e_route = xbt_new0(s_route_extended_t, 1);
- new_e_route->generic_route.link_list =
- xbt_dynar_new(global_routing->size_of_link, NULL);
- new_e_route->src_gateway = NULL;
- new_e_route->dst_gateway = NULL;
-
- xbt_assert(hierarchy == SURF_ROUTING_BASE
- || hierarchy == SURF_ROUTING_RECURSIVE,
- "the hierarchy type is not defined");
-
- if (hierarchy == SURF_ROUTING_BASE) {
-
- route = (route_t) data;
- links = route->link_list;
-
- } else if (hierarchy == SURF_ROUTING_RECURSIVE) {
-
- e_route = (route_extended_t) data;
- xbt_assert(e_route->src_gateway
- && e_route->dst_gateway, "bad gateway, is null");
- links = e_route->generic_route.link_list;
-
- /* remeber not erase the gateway names */
- new_e_route->src_gateway = strdup(e_route->src_gateway);
- new_e_route->dst_gateway = strdup(e_route->dst_gateway);
- }
-
- links_id = new_e_route->generic_route.link_list;
-
- xbt_dynar_foreach(links, cpt, link_name) {
-
- void *link =
- xbt_lib_get_or_null(link_lib, link_name, SURF_LINK_LEVEL);
- if (link) {
- if (order)
- xbt_dynar_push(links_id, &link);
- else
- xbt_dynar_unshift(links_id, &link);
- } else
- THROWF(mismatch_error, 0, "Link %s not found", link_name);
- }
-
- return new_e_route;
-}
-
-void generic_free_route(route_t route)
-{
- if (route) {
- xbt_dynar_free(&(route->link_list));
- xbt_free(route);
- }
-}
-
-void generic_free_extended_route(route_extended_t e_route)
-{
- if (e_route) {
- xbt_dynar_free(&(e_route->generic_route.link_list));
- if (e_route->src_gateway)
- xbt_free(e_route->src_gateway);
- if (e_route->dst_gateway)
- xbt_free(e_route->dst_gateway);
- xbt_free(e_route);
- }
-}
-
-static routing_component_t generic_as_exist(routing_component_t find_from,
- routing_component_t to_find)
-{
- //return to_find; // FIXME: BYPASSERROR OF FOREACH WITH BREAK
- xbt_dict_cursor_t cursor = NULL;
- char *key;
- int found = 0;
- routing_component_t elem;
- xbt_dict_foreach(find_from->routing_sons, cursor, key, elem) {
- if (to_find == elem || generic_as_exist(elem, to_find)) {
- found = 1;