- THROW_UNIMPLEMENTED;
-// //We have already bypass cluster routes with network NS3
-// if(!strcmp(surf_network_model->name,"network NS3"))
-// return ret;
-//
-// AS_rulebased_t routing = (AS_rulebased_t)rc;
-//
-// xbt_dict_cursor_t c1 = NULL;
-// char *k1, *d1;
-//
-// //find router
-// char *router = NULL;
-// xbt_dict_foreach(routing->dict_processing_units, c1, k1, d1) {
-// if (routing_get_network_element_type(k1) == SURF_NETWORK_ELEMENT_ROUTER){
-// router = k1;
-// break;
-// }
-// }
-//
-// if (!router)
-// xbt_die ("rulebased_get_onelink_routes works only if the AS is a cluster, sorry.");
-//
-// xbt_dict_foreach(routing->dict_processing_units, c1, k1, d1) {
-// route_t route = xbt_new0(s_route_t,1);
-// route->link_list = xbt_dynar_new(global_routing->size_of_link,NULL);
-// rulebased_get_route_and_latency (rc, router, k1, route,NULL);
-//
-// int number_of_links = xbt_dynar_length(route->link_list);
-//
-// if(number_of_links == 1) {
-// //loopback
-// }
-// else{
-// if (number_of_links != 2) {
-// xbt_die ("rulebased_get_onelink_routes works only if the AS is a cluster, sorry.");
-// }
-//
-// void *link_ptr;
-// xbt_dynar_get_cpy (route->link_list, 1, &link_ptr);
-// onelink_t onelink = xbt_new0 (s_onelink_t, 1);
-// onelink->src = xbt_strdup (k1);
-// onelink->dst = xbt_strdup (router);
-// onelink->link_ptr = link_ptr;
-// xbt_dynar_push (ret, &onelink);
-// }
-// }
+ //We have already bypass cluster routes with network NS3
+ if(!strcmp(surf_network_model->name,"network NS3"))
+ return ret;
+
+ char *k1;
+
+ //find router
+ sg_routing_edge_t router = NULL;
+ xbt_lib_cursor_t cursor;
+ xbt_lib_foreach(as_router_lib, cursor, k1, router)
+ {
+ if (router->rc_type == SURF_NETWORK_ELEMENT_ROUTER)
+ break;
+ }
+
+ if (!router)
+ xbt_die ("rulebased_get_onelink_routes works only if the AS is a cluster, sorry.");
+
+ sg_routing_edge_t host = NULL;
+ xbt_lib_foreach(as_router_lib, cursor, k1, host){
+ void *link_ptr;
+ sg_platf_route_cbarg_t route = xbt_new0(s_sg_platf_route_cbarg_t,1);
+ route->link_list = xbt_dynar_new(sizeof(sg_routing_link_t),NULL);
+ rulebased_get_route_and_latency (rc, router, host, route,NULL);
+
+ switch (xbt_dynar_length(route->link_list)) {
+ case 1:
+ //loopback
+ break;
+ case 2:
+ xbt_dynar_get_cpy (route->link_list, 1, &link_ptr);
+ onelink_t onelink = xbt_new0 (s_onelink_t, 1);
+ onelink->src = host;
+ onelink->dst = router;
+ onelink->link_ptr = link_ptr;
+ xbt_dynar_push (ret, &onelink);
+ break;
+ default:
+ xbt_die("rulebased_get_onelink_routes works only if the AS is a cluster, sorry.");
+ break;
+ }
+ }