Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot//simgrid/simgrid
authorChristophe Thiéry <christopho128@gmail.com>
Wed, 20 Apr 2011 13:31:56 +0000 (15:31 +0200)
committerChristophe Thiéry <christopho128@gmail.com>
Wed, 20 Apr 2011 13:31:56 +0000 (15:31 +0200)
src/surf/network_gtnets.c
src/surf/surf_routing_rulebased.c

index 798320b..fa43713 100644 (file)
@@ -434,7 +434,6 @@ static int get_latency_limited(surf_action_t action)
 }
 #endif
 
-#ifdef HAVE_GTNETS
 void surf_network_model_init_GTNETS(const char *filename)
 {
   if (surf_network_model)
@@ -455,4 +454,3 @@ void surf_network_model_init_GTNETS(const char *filename)
   update_model_description(surf_network_model_description,
                            "GTNets", surf_network_model);
 }
-#endif
index cce71e2..9055898 100644 (file)
@@ -250,10 +250,11 @@ static xbt_dynar_t rulebased_get_onelink_routes(routing_component_t rc)
   //find router
   char *router = NULL;
   xbt_dict_foreach(routing->dict_processing_units, c1, k1, d1) {
-    if (strstr (k1, "router")){
+    if (rc->get_network_element_type(k1) == SURF_NETWORK_ELEMENT_ROUTER){
       router = k1;
     }
   }
+
   if (!router){
     xbt_die ("rulebased_get_onelink_routes works only if the AS is a cluster, sorry.");
   }
@@ -262,17 +263,23 @@ static xbt_dynar_t rulebased_get_onelink_routes(routing_component_t rc)
     route_extended_t route = rulebased_get_route (rc, router, k1);
 
     int number_of_links = xbt_dynar_length(route->generic_route.link_list);
-    if (number_of_links != 3) {
-      xbt_die ("rulebased_get_onelink_routes works only if the AS is a cluster, sorry.");
-    }
 
-    void *link_ptr;
-    xbt_dynar_get_cpy (route->generic_route.link_list, 2, &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);
+    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->generic_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);
+    }
   }
   return ret;
 }