From 17119b59b0bb5193bcd703eda86e732e3bb9ace6 Mon Sep 17 00:00:00 2001 From: Claudio-Daniel Freire Date: Mon, 23 May 2011 17:39:01 +0200 Subject: [PATCH] Fix routing: only consider gateway addresses for routes_here (ie: the GW must belong to the interface's network, the rest doesn't really matter) --- src/nepi/testbeds/planetlab/interfaces.py | 19 ++++++++++++------- src/nepi/testbeds/planetlab/node.py | 4 ++-- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/nepi/testbeds/planetlab/interfaces.py b/src/nepi/testbeds/planetlab/interfaces.py index 05671024..d2668645 100644 --- a/src/nepi/testbeds/planetlab/interfaces.py +++ b/src/nepi/testbeds/planetlab/interfaces.py @@ -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" % ( + return "%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: diff --git a/src/nepi/testbeds/planetlab/node.py b/src/nepi/testbeds/planetlab/node.py index 1e52a51a..0b5b9de8 100644 --- a/src/nepi/testbeds/planetlab/node.py +++ b/src/nepi/testbeds/planetlab/node.py @@ -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) -- 2.43.0