Add gretap support for full mesh tunnel
authorWei-Chun Chao <weichunc@plumgrid.com>
Wed, 26 Aug 2015 21:57:21 +0000 (14:57 -0700)
committerWei-Chun Chao <weichunc@plumgrid.com>
Wed, 26 Aug 2015 23:15:47 +0000 (16:15 -0700)
Signed-off-by: Wei-Chun Chao <weichunc@plumgrid.com>
examples/distributed_bridge/main.py
examples/distributed_bridge/tunnel_mesh.py

index f47e71a..056443e 100755 (executable)
@@ -9,12 +9,22 @@ from simulation import Simulation
 from subprocess import PIPE, call, Popen
 import re
 
-dhcp = 0
 multicast = 1
-if len(argv) > 1 and argv[1] == "mesh":
+dhcp = 0
+gretap = 0
+
+if "mesh" in argv:
+    multicast = 0
+
+if "dhcp" in argv:
+    dhcp = 1
+    multicast = 0
+
+if "gretap" in argv:
+    gretap = 1
     multicast = 0
-    if len(argv) > 2 and argv[2] == "dhcp":
-       dhcp = 1
+
+print("multicast %d dhcp %d gretap %d" % (multicast, dhcp, gretap))
 
 ipr = IPRoute()
 ipdb = IPDB(nl=ipr)
@@ -37,7 +47,7 @@ class TunnelSimulation(Simulation):
             if multicast:
               cmd = ["python", "tunnel.py", str(i)]
             else:
-              cmd = ["python", "tunnel_mesh.py", str(num_hosts), str(i), str(dhcp)]
+              cmd = ["python", "tunnel_mesh.py", str(num_hosts), str(i), str(dhcp), str(gretap)]
             p = NSPopen(host_info[i][0].nl.netns, cmd, stdin=PIPE)
             self.processes.append(p)
         with self.ipdb.create(ifname="br-fabric", kind="bridge") as br:
index 05d3a5e..64700a1 100644 (file)
@@ -17,6 +17,7 @@ from subprocess import call, Popen, PIPE
 num_hosts = int(argv[1])
 host_id = int(argv[2])
 dhcp = int(argv[3])
+gretap = int(argv[4])
 
 b = BPF(src_file="tunnel_mesh.c")
 ingress_fn = b.load_func("handle_ingress", BPF.SCHED_CLS)
@@ -38,13 +39,19 @@ d_serv = []
 d_client = []
 
 def run():
-    with ipdb.create(ifname="vxlan0", kind="vxlan", vxlan_id=0,
-                     vxlan_link=ifc, vxlan_port=htons(4789),
-                     vxlan_flowbased=True,
-                     vxlan_collect_metadata=True,
-                     vxlan_learning=False) as vx:
-        vx.up()
-        ifc_gc.append(vx.ifname)
+    if gretap:
+        with ipdb.create(ifname="gretap1", kind="gretap", gre_ikey=0, gre_okey=0,
+                         gre_local='172.16.1.%d' % (100 + host_id),
+                         gre_ttl=16, gre_collect_metadata=1) as vx:
+            vx.up()
+            ifc_gc.append(vx.ifname)
+    else:
+        with ipdb.create(ifname="vxlan0", kind="vxlan", vxlan_id=0,
+                         vxlan_link=ifc, vxlan_port=htons(4789),
+                         vxlan_collect_metadata=True,
+                         vxlan_learning=False) as vx:
+            vx.up()
+            ifc_gc.append(vx.ifname)
 
     conf[c_int(1)] = c_int(vx.index)