add required parameter ifc_name for additional ifc adding to ns
authorYonghong Song <yhs@plumgrid.com>
Sat, 11 Jul 2015 05:58:59 +0000 (22:58 -0700)
committerYonghong Song <yhs@plumgrid.com>
Sat, 11 Jul 2015 06:17:53 +0000 (23:17 -0700)
    o make some long lines in python codes shorter
    o use python style unused variable name "_"

Signed-off-by: Yonghong Song <yhs@plumgrid.com>
examples/simulation.py
examples/vlan_learning.py
tests/cc/test_brb.py
tests/cc/test_brb2.py

index cbf94e2..3885e97 100644 (file)
@@ -15,8 +15,12 @@ class Simulation(object):
         self.released = False
 
     # helper function to add additional ifc to namespace
-    def _ns_add_ifc(self, name, ns_ifc, in_ifc=None, out_ifc=None, ipaddr=None,
-                    macaddr=None, fn=None, cmd=None, action="ok", disable_ipv6=False):
+    # if called directly outside Simulation class, "ifc_base_name" should be
+    # different from "name", the "ifc_base_name" and "name" are the same for
+    # the first ifc created by namespace
+    def _ns_add_ifc(self, name, ns_ifc, ifc_base_name, in_ifc=None, out_ifc=None,
+                    ipaddr=None, macaddr=None, fn=None, cmd=None, action="ok",
+                    disable_ipv6=False):
         if name in self.ipdbs:
             ns_ipdb = self.ipdbs[name]
         else:
@@ -24,8 +28,8 @@ class Simulation(object):
         if in_ifc:
             in_ifname = in_ifc.ifname
         else:
-            out_ifc = self.ipdb.create(ifname="%s%sa" % (name, ns_ifc), kind="veth",
-                                       peer="%s%sb" % (name, ns_ifc)).commit()
+            out_ifc = self.ipdb.create(ifname="%sa" % ifc_base_name, kind="veth",
+                                       peer="%sb" % ifc_base_name).commit()
             in_ifc = self.ipdb.interfaces[out_ifc.peer]
             in_ifname = in_ifc.ifname
         with in_ifc as v:
@@ -40,8 +44,10 @@ class Simulation(object):
             v.up()
         # if required, disable ipv6 before attaching the filter
         if disable_ipv6:
-            subprocess.call(["sysctl", "-q", "-w", "net.ipv6.conf." + out_ifc.ifname+ ".disable_ipv6=1"])
-            nsp = NSPopen(ns_ipdb.nl.netns, ["sysctl", "-q", "-w", "net.ipv6.conf." + ns_ifc + ".disable_ipv6=1"])
+            subprocess.call(["sysctl", "-q", "-w",
+                             "net.ipv6.conf." + out_ifc.ifname+ ".disable_ipv6=1"])
+            nsp = NSPopen(ns_ipdb.nl.netns,
+                          ["sysctl", "-q", "-w", "net.ipv6.conf." + ns_ifc + ".disable_ipv6=1"])
             nsp.wait(); nsp.release()
         if fn and out_ifc:
             self.ipdb.nl.tc("add", "ingress", out_ifc["index"], "ffff:")
@@ -55,8 +61,9 @@ class Simulation(object):
     # helper function to create a namespace and a veth connecting it
     def _create_ns(self, name, in_ifc=None, out_ifc=None, ipaddr=None,
                    macaddr=None, fn=None, cmd=None, action="ok", disable_ipv6=False):
-        (ns_ipdb, out_ifc, in_ifc) = self._ns_add_ifc(name, "eth0", in_ifc, out_ifc, ipaddr,
-                                                      macaddr, fn, cmd, action, disable_ipv6)
+        (ns_ipdb, out_ifc, in_ifc) = self._ns_add_ifc(name, "eth0", name, in_ifc, out_ifc,
+                                                      ipaddr, macaddr, fn, cmd, action,
+                                                      disable_ipv6)
         self.ipdbs[ns_ipdb.nl.netns] = ns_ipdb
         self.namespaces.append(ns_ipdb.nl)
         return (ns_ipdb, out_ifc, in_ifc)
index 923cb65..e4e5f50 100644 (file)
@@ -91,7 +91,7 @@ class VlanSimulation(Simulation):
                        ((i >> 16) & 0xff, (i >> 8) & 0xff, i & 0xff))
 
             # assign this client to the given worker
-            idx = self.ipdb.interfaces["worker%deth0a" % i]["index"]
+            idx = self.ipdb.interfaces["worker%da" % i]["index"]
             mac = int(macaddr.replace(":", ""), 16)
             ingress[ingress.Key(mac)] = ingress.Leaf(idx, 0, 0)
 
index 5d130b8..e1d9c4f 100755 (executable)
@@ -156,31 +156,42 @@ class TestBPFSocket(TestCase):
 
             # set up the topology
             self.set_default_const()
-            (ns1_ipdb, self.ns1_eth_out, unused) = sim._create_ns(self.ns1, ipaddr=self.vm1_ip+'/24', fn=self.pem_fn, action='drop',
-                                                                  disable_ipv6=True)
-            (ns2_ipdb, self.ns2_eth_out, unused) = sim._create_ns(self.ns2, ipaddr=self.vm2_ip+'/24', fn=self.pem_fn, action='drop',
-                                                                  disable_ipv6=True)
+            (ns1_ipdb, self.ns1_eth_out, _) = sim._create_ns(self.ns1, ipaddr=self.vm1_ip+'/24',
+                                                             fn=self.pem_fn, action='drop',
+                                                             disable_ipv6=True)
+            (ns2_ipdb, self.ns2_eth_out, _) = sim._create_ns(self.ns2, ipaddr=self.vm2_ip+'/24',
+                                                             fn=self.pem_fn, action='drop',
+                                                             disable_ipv6=True)
             ns1_ipdb.routes.add({'dst': self.vm2_rtr_mask, 'gateway': self.vm1_rtr_ip}).commit()
             ns2_ipdb.routes.add({'dst': self.vm1_rtr_mask, 'gateway': self.vm2_rtr_ip}).commit()
             self.vm1_mac = ns1_ipdb.interfaces['eth0'].address
             self.vm2_mac = ns2_ipdb.interfaces['eth0'].address
 
-            (rt_ipdb, self.nsrtr_eth0_out, unused) = sim._create_ns(self.ns_router, ipaddr=self.vm1_rtr_ip+'/24', fn=self.br1_fn,
-                                                                    action='drop', disable_ipv6=True)
-            (rt_ipdb, self.nsrtr_eth1_out, unused) = sim._ns_add_ifc(self.ns_router, "eth1", ipaddr=self.vm2_rtr_ip+'/24',
-                                                                     fn=self.br2_fn, action='drop', disable_ipv6=True)
-            nsp = NSPopen(rt_ipdb.nl.netns, ["sysctl", "-w", "net.ipv4.ip_forward=1"]); nsp.wait(); nsp.release()
+            (_, self.nsrtr_eth0_out, _) = sim._create_ns(self.ns_router, ipaddr=self.vm1_rtr_ip+'/24',
+                                                         fn=self.br1_fn, action='drop',
+                                                         disable_ipv6=True)
+            (rt_ipdb, self.nsrtr_eth1_out, _) = sim._ns_add_ifc(self.ns_router, "eth1", "ns_router2",
+                                                                ipaddr=self.vm2_rtr_ip+'/24',
+                                                                fn=self.br2_fn, action='drop',
+                                                                disable_ipv6=True)
+            nsp = NSPopen(rt_ipdb.nl.netns, ["sysctl", "-w", "net.ipv4.ip_forward=1"])
+            nsp.wait(); nsp.release()
 
             # configure maps
             self.config_maps()
 
             # our bridge is not smart enough, so send arping for router learning to prevent router
             # from sending out arp request
-            nsp = NSPopen(ns1_ipdb.nl.netns, ["arping", "-w", "1", "-c", "1", "-I", "eth0", self.vm1_rtr_ip]); nsp.wait(); nsp.release()
-            nsp = NSPopen(ns2_ipdb.nl.netns, ["arping", "-w", "1", "-c", "1", "-I", "eth0", self.vm2_rtr_ip]); nsp.wait(); nsp.release()
+            nsp = NSPopen(ns1_ipdb.nl.netns,
+                          ["arping", "-w", "1", "-c", "1", "-I", "eth0", self.vm1_rtr_ip])
+            nsp.wait(); nsp.release()
+            nsp = NSPopen(ns2_ipdb.nl.netns,
+                          ["arping", "-w", "1", "-c", "1", "-I", "eth0", self.vm2_rtr_ip])
+            nsp.wait(); nsp.release()
 
             # ping
-            nsp = NSPopen(ns1_ipdb.nl.netns, ["ping", self.vm2_ip, "-c", "2"]); nsp.wait(); nsp.release()
+            nsp = NSPopen(ns1_ipdb.nl.netns, ["ping", self.vm2_ip, "-c", "2"])
+            nsp.wait(); nsp.release()
             # pem_stats only counts pem->bridge traffic, each VM has 4: arping/arp request/2 icmp request
             # total 8 packets should be counted
             self.assertEqual(self.pem_stats[c_uint(0)].value, 8)
@@ -188,23 +199,26 @@ class TestBPFSocket(TestCase):
             # iperf, run server on the background
             nsp_server = NSPopen(ns2_ipdb.nl.netns, ["iperf", "-s", "-xSCD"])
             sleep(1)
-            nsp = NSPopen(ns1_ipdb.nl.netns, ["iperf", "-c", self.vm2_ip, "-t", "1", "-xSC"]); nsp.wait(); nsp.release()
+            nsp = NSPopen(ns1_ipdb.nl.netns, ["iperf", "-c", self.vm2_ip, "-t", "1", "-xSC"])
+            nsp.wait(); nsp.release()
             nsp_server.kill(); nsp_server.wait(); nsp.release()
 
             # netperf, run server on the background
             nsp_server = NSPopen(ns2_ipdb.nl.netns, ["netserver"])
             sleep(1)
-            nsp = NSPopen(ns1_ipdb.nl.netns, ["netperf", "-l", "1", "-H", self.vm2_ip, "--", "-m", "65160"]); nsp.wait(); nsp.release()
-            nsp = NSPopen(ns1_ipdb.nl.netns, ["netperf", "-l", "1", "-H", self.vm2_ip, "-t", "TCP_RR"]); nsp.wait(); nsp.release()
+            nsp = NSPopen(ns1_ipdb.nl.netns, ["netperf", "-l", "1", "-H", self.vm2_ip, "--", "-m", "65160"])
+            nsp.wait(); nsp.release()
+            nsp = NSPopen(ns1_ipdb.nl.netns, ["netperf", "-l", "1", "-H", self.vm2_ip, "-t", "TCP_RR"])
+            nsp.wait(); nsp.release()
             nsp_server.kill(); nsp_server.wait(); nsp.release()
 
         finally:
             # this is a little bit hacker, but we want to be sure to remove all created interfaces
             # ns1_eth_out, ns2_eth_out, nsrtr_eth0_out, nsrtr_eth1_out
-            if "ns1eth0a" in ipdb.interfaces: ipdb.interfaces.ns1eth0a.remove().commit()
-            if "ns2eth0a" in ipdb.interfaces: ipdb.interfaces.ns2eth0a.remove().commit()
-            if "ns_routereth0a" in ipdb.interfaces: ipdb.interfaces.ns_routereth0a.remove().commit()
-            if "ns_routereth1a" in ipdb.interfaces: ipdb.interfaces.ns_routereth1a.remove().commit()
+            if "ns1a" in ipdb.interfaces: ipdb.interfaces.ns1a.remove().commit()
+            if "ns2a" in ipdb.interfaces: ipdb.interfaces.ns2a.remove().commit()
+            if "ns_routera" in ipdb.interfaces: ipdb.interfaces.ns_routera.remove().commit()
+            if "ns_router2a" in ipdb.interfaces: ipdb.interfaces.ns_router2a.remove().commit()
             sim.release()
             ipdb.release()
 
index f7cc6dc..8200301 100755 (executable)
@@ -134,19 +134,23 @@ class TestBPFSocket(TestCase):
 
             # set up the topology
             self.set_default_const()
-            (ns1_ipdb, self.ns1_eth_out, unused) = sim._create_ns(self.ns1, ipaddr=self.vm1_ip+'/24', fn=self.pem_fn,
-                                                                  action='drop', disable_ipv6=True)
-            (ns2_ipdb, self.ns2_eth_out, unused) = sim._create_ns(self.ns2, ipaddr=self.vm2_ip+'/24', fn=self.pem_fn,
-                                                                  action='drop', disable_ipv6=True)
+            (ns1_ipdb, self.ns1_eth_out, _) = sim._create_ns(self.ns1, ipaddr=self.vm1_ip+'/24',
+                                                             fn=self.pem_fn, action='drop',
+                                                             disable_ipv6=True)
+            (ns2_ipdb, self.ns2_eth_out, _) = sim._create_ns(self.ns2, ipaddr=self.vm2_ip+'/24',
+                                                             fn=self.pem_fn, action='drop',
+                                                             disable_ipv6=True)
             ns1_ipdb.routes.add({'dst': self.vm2_rtr_mask, 'gateway': self.vm1_rtr_ip}).commit()
             ns2_ipdb.routes.add({'dst': self.vm1_rtr_mask, 'gateway': self.vm2_rtr_ip}).commit()
 
-            (rt_ipdb, self.nsrtr_eth0_out, unused) = sim._create_ns(self.ns_router, ipaddr=self.vm1_rtr_ip+'/24',
-                                                                    disable_ipv6=True)
-            (rt_ipdb, self.nsrtr_eth1_out, unused) = sim._ns_add_ifc(self.ns_router, "eth1", ipaddr=self.vm2_rtr_ip+'/24',
-                                                                     disable_ipv6=True)
+            (_, self.nsrtr_eth0_out, _) = sim._create_ns(self.ns_router, ipaddr=self.vm1_rtr_ip+'/24',
+                                                         disable_ipv6=True)
+            (rt_ipdb, self.nsrtr_eth1_out, _) = sim._ns_add_ifc(self.ns_router, "eth1", "ns_router2",
+                                                                ipaddr=self.vm2_rtr_ip+'/24',
+                                                                disable_ipv6=True)
             # enable ip forwarding in router ns
-            nsp = NSPopen(rt_ipdb.nl.netns, ["sysctl", "-w", "net.ipv4.ip_forward=1"]); nsp.wait(); nsp.release()
+            nsp = NSPopen(rt_ipdb.nl.netns, ["sysctl", "-w", "net.ipv4.ip_forward=1"])
+            nsp.wait(); nsp.release()
 
             # for each VM connecting to pem, there will be a corresponding veth connecting to the bridge
             self.setup_br(self.br1, self.nsrtr_eth0_out.ifname, self.veth_pem_2_br1, self.veth_br1_2_pem)
@@ -163,23 +167,26 @@ class TestBPFSocket(TestCase):
             # iperf, run server on the background
             nsp_server = NSPopen(ns2_ipdb.nl.netns, ["iperf", "-s", "-xSCD"])
             sleep(1)
-            nsp = NSPopen(ns1_ipdb.nl.netns, ["iperf", "-c", self.vm2_ip, "-t", "1", "-xSC"]); nsp.wait(); nsp.release()
+            nsp = NSPopen(ns1_ipdb.nl.netns, ["iperf", "-c", self.vm2_ip, "-t", "1", "-xSC"])
+            nsp.wait(); nsp.release()
             nsp_server.kill(); nsp_server.wait(); nsp.release()
 
             # netperf, run server on the background
             nsp_server = NSPopen(ns2_ipdb.nl.netns, ["netserver"])
             sleep(1)
-            nsp = NSPopen(ns1_ipdb.nl.netns, ["netperf", "-l", "1", "-H", self.vm2_ip, "--", "-m", "65160"]); nsp.wait(); nsp.release()
-            nsp = NSPopen(ns1_ipdb.nl.netns, ["netperf", "-l", "1", "-H", self.vm2_ip, "-t", "TCP_RR"]); nsp.wait(); nsp.release()
+            nsp = NSPopen(ns1_ipdb.nl.netns, ["netperf", "-l", "1", "-H", self.vm2_ip, "--", "-m", "65160"])
+            nsp.wait(); nsp.release()
+            nsp = NSPopen(ns1_ipdb.nl.netns, ["netperf", "-l", "1", "-H", self.vm2_ip, "-t", "TCP_RR"])
+            nsp.wait(); nsp.release()
             nsp_server.kill(); nsp_server.wait(); nsp.release()
 
         finally:
             # this is a little bit hacker, but we want to be sure to remove all created interfaces
             # ns1_eth_out, ns2_eth_out, nsrtr_eth0_out, nsrtr_eth1_out
-            if "ns1eth0a" in ipdb.interfaces: ipdb.interfaces.ns1eth0a.remove().commit()
-            if "ns2eth0a" in ipdb.interfaces: ipdb.interfaces.ns2eth0a.remove().commit()
-            if "ns_routereth0a" in ipdb.interfaces: ipdb.interfaces.ns_routereth0a.remove().commit()
-            if "ns_routereth1a" in ipdb.interfaces: ipdb.interfaces.ns_routereth1a.remove().commit()
+            if "ns1a" in ipdb.interfaces: ipdb.interfaces.ns1a.remove().commit()
+            if "ns2a" in ipdb.interfaces: ipdb.interfaces.ns2a.remove().commit()
+            if "ns_routera" in ipdb.interfaces: ipdb.interfaces.ns_routera.remove().commit()
+            if "ns_router2a" in ipdb.interfaces: ipdb.interfaces.ns_router2a.remove().commit()
 
             if self.br1 in ipdb.interfaces: ipdb.interfaces[self.br1].remove().commit()
             if self.br2 in ipdb.interfaces: ipdb.interfaces[self.br2].remove().commit()