Fix routing: only consider gateway addresses for routes_here (ie: the GW must belong...
authorClaudio-Daniel Freire <claudio-daniel.freire@inria.fr>
Mon, 23 May 2011 15:39:01 +0000 (17:39 +0200)
committerClaudio-Daniel Freire <claudio-daniel.freire@inria.fr>
Mon, 23 May 2011 15:39:01 +0000 (17:39 +0200)
src/nepi/testbeds/planetlab/interfaces.py
src/nepi/testbeds/planetlab/node.py

index 0567102..d266864 100644 (file)
@@ -42,6 +42,8 @@ class NodeIface(object):
             self.address, self.netmask,
             self.lladdr,
         )
+    
+    __repr__ = __str__
 
     def add_address(self, address, netprefix, broadcast):
         raise RuntimeError, "Cannot add explicit addresses to public interface"
@@ -101,6 +103,8 @@ class _CrossIface(object):
               self.tun_addr,
               self.tun_port ) 
         )
+    
+    __repr__ = __str__
 
 class TunIface(object):
     _PROTO_MAP = tunproto.TUN_PROTO_MAP
@@ -159,13 +163,16 @@ class TunIface(object):
         
 
     def __str__(self):
-        return "%s<ip:%s/%s %s%s>" % (
+        return "%s<ip:%s/%s %s%s%s>" % (
             self.__class__.__name__,
             self.address, self.netprefix,
             " up" if self.up else " down",
             " snat" if self.snat else "",
+            (" p2p %s" % (self.pointopoint,)) if self.pointopoint else "",
         )
     
+    __repr__ = __str__
+    
     @property
     def if_name(self):
         if self.peer_proto_impl:
@@ -186,17 +193,15 @@ class TunIface(object):
             myNet = ipaddr.IPNetwork("%s/%d" % (addr, prefix))
             gwIp = ipaddr.IPNetwork(nexthop)
             
-            tgtIp = ipaddr.IPNetwork(dest 
-                + (("/%d" % destprefix) if destprefix else "") )
-            
-            if gwIp in myNet or tgtIp in myNet:
-                return True
-            
             if self.pointopoint:
                 peerIp = ipaddr.IPNetwork(self.pointopoint)
                 
                 if gwIp == peerIp:
                     return True
+            else:
+                if gwIp in myNet:
+                    return True
+        return False
     
     def add_address(self, address, netprefix, broadcast):
         if (self.address or self.netprefix or self.netmask) is not None:
index 1e52a51..0b5b9de 100644 (file)
@@ -334,7 +334,7 @@ class Node(object):
                     "- PL can only handle rules over virtual interfaces. Candidates are: %s" % (route,devs)
         
         (out,err),proc = server.popen_ssh_command(
-            "( sudo -S bash -c 'cat /vsys/vroute.out >&2' & ) ; sudo -S bash -c 'cat > /vsys/vroute.in'" % dict(
+            "( sudo -S bash -c 'cat /vsys/vroute.out >&2' & ) ; sudo -S bash -c 'cat > /vsys/vroute.in' ; sleep 0.1" % dict(
                 home = server.shell_escape(self.home_path)),
             host = self.hostname,
             port = None,
@@ -346,7 +346,7 @@ class Node(object):
             )
         
         if proc.wait() or err:
-            raise RuntimeError, "Could not set routes: %s%s" % (out,err)
+            raise RuntimeError, "Could not set routes (%s) errors: %s%s" % (rules,out,err)