- route_extended_t e_route = NULL;
- if (route) {
- e_route = common_father->get_route(common_father, src, dst);
- xbt_assert(e_route, "no route between \"%s\" and \"%s\"", src, dst);
- *route = e_route->generic_route.link_list;
- }
- if (latency) {
- *latency = common_father->get_latency(common_father, src, dst, e_route);
- xbt_assert(*latency >= 0.0,
- "latency error on route between \"%s\" and \"%s\"", src, dst);
- }
- if (e_route) {
- xbt_free(e_route->src_gateway);
- xbt_free(e_route->dst_gateway);
- xbt_free(e_route);
- }
-
- } else { /* SURF_ROUTING_RECURSIVE */
-
- route_extended_t e_route_bypass = NULL;
- if (common_father->get_bypass_route)
- e_route_bypass = common_father->get_bypass_route(common_father, src, dst);
-
- xbt_assert(!latency || !e_route_bypass,
- "Bypass cannot work yet with get_latency");
-
- route_extended_t e_route_cnt = e_route_bypass
- ? e_route_bypass : common_father->get_route(common_father,
- src_father->name,
- dst_father->name);
-
- xbt_assert(e_route_cnt, "no route between \"%s\" and \"%s\"",
- src_father->name, dst_father->name);
-
- xbt_assert((e_route_cnt->src_gateway == NULL) ==
- (e_route_cnt->dst_gateway == NULL),
- "bad gateway for route between \"%s\" and \"%s\"", src, dst);
-
- if (route) {
- *route = xbt_dynar_new(global_routing->size_of_link, NULL);
- }
- if (latency) {
- *latency = common_father->get_latency(common_father,
- src_father->name, dst_father->name,
- e_route_cnt);
- xbt_assert(*latency >= 0.0,
- "latency error on route between \"%s\" and \"%s\"",
- src_father->name, dst_father->name);
- }