IP and routing fixes for ns3
[nepi.git] / examples / wireless_overlay.py
index 92d054e..d735f56 100644 (file)
@@ -110,7 +110,7 @@ class WirelessOverlay(object):
     def add_ns3_fdnd(self, ns3_desc, node):
         fdnd = ns3_desc.create("ns3::FdNetDevice")
         node.connector("devs").connect(fdnd.connector("node"))
-        fdnd.enable_trace("FdPcapTrace")
+        #fdnd.enable_trace("FdPcapTrace")
         return fdnd
 
     def add_ns3_node(self, ns3_desc):
@@ -144,7 +144,7 @@ class WirelessOverlay(object):
         wifi.connector("mac").connect(mac.connector("dev"))
         wifi.connector("manager").connect(manager.connector("dev"))
 
-        phy.enable_trace("YansWifiPhyPcapTrace")
+        #phy.enable_trace("YansWifiPhyPcapTrace")
         return wifi, phy
 
     def add_ns3_constant_mobility(self, ns3_desc, node, x, y, z):
@@ -191,6 +191,9 @@ class WirelessOverlay(object):
         iface.set_attribute_value("label", label_prefix+"iface")
         iface.connector("inet").connect(inet.connector("devs"))
         node.connector("devs").connect(iface.connector("node"))
+        forwarder = pl_desc.create("MulticastForwarder")
+        forwarder.enable_trace("stderr")
+        node.connector("apps").connect(forwarder.connector("node"))
         return node, iface
 
     def add_ns3_in_pl(self, exp_desc, pl_desc, pl_node, pl_iface, root):
@@ -251,10 +254,11 @@ class WirelessOverlay(object):
 
     def add_pl_ns3_tunchan_connection(self, pl_desc, pl_node, pl_addr,
             ns3_desc, ns3_node, ns3_addr):
-        pl_tap = pl_desc.create("TapInterface")
+        pl_tap = pl_desc.create("TunInterface")
         self.add_ip_address(pl_tap, pl_addr, 30)
         pl_node.connector("devs").connect(pl_tap.connector("node"))
         ns3_fdnd = ns3_desc.create("ns3::FdNetDevice")
+        ns3_fdnd.enable_trace("FdPcapTrace")
         self.add_ip_address(ns3_fdnd, ns3_addr, 30)
         ns3_node.connector("devs").connect(ns3_fdnd.connector("node"))
         ns3_tc = ns3_desc.create("ns3::Nepi::TunChannel")
@@ -263,14 +267,20 @@ class WirelessOverlay(object):
 
     def add_pl_netns_connection(self, pl_desc, pl_node, pl_addr,
             netns_desc, netns_node, netns_addr):
-        pl_tap = pl_desc.create("TapInterface")
+        pl_tap = pl_desc.create("TunInterface")
+        #pl_tap.set_attribute_value("tun_cipher", "PLAIN") 
+        pl_tap.set_attribute_value("multicast", True) 
+        #pl_tap.enable_trace("pcap")
+        #pl_tap.enable_trace("packets")
         self.add_ip_address(pl_tap, pl_addr, 30)
         pl_node.connector("devs").connect(pl_tap.connector("node"))
-        netns_tap = netns_desc.create("TapNodeInterface")
+        netns_tap = netns_desc.create("TunNodeInterface")
         netns_tap.set_attribute_value("up", True)
+        netns_tap.set_attribute_value("mtu", 1448)
         self.add_ip_address(netns_tap, netns_addr, 30)
         netns_node.connector("devs").connect(netns_tap.connector("node"))
         netns_tunchannel = netns_desc.create("TunChannel")
+        #netns_tunchannel.set_attribute_value("tun_cipher", "PLAIN") 
         netns_tunchannel.connector("->fd").connect(netns_tap.connector("fd->"))
         pl_tap.connector("tcp").connect(netns_tunchannel.connector("tcp"))
 
@@ -337,13 +347,13 @@ class WirelessOverlay(object):
         netns_addr = (self.base_addr%1)
         self.add_pl_netns_connection(pl_desc, pl_node1, pl_addr,
             netns_desc, netns_node, netns_addr)
-
+        
         # connection PL1/NS3
         pl_addr = (self.base_addr%5)
         ns3_addr = (self.base_addr%6)
         self.add_pl_ns3_connection(pl_desc, pl_node1, pl_addr,
             ns3_desc, ap_node, ns3_addr)
-
+        
         # APPLICATIONS
         command = "xterm" 
         app = netns_desc.create("Application")
@@ -351,6 +361,32 @@ class WirelessOverlay(object):
         app.set_attribute_value("user", self.user)
         app.connector("node").connect(netns_node.connector("apps"))
 
+        # applications
+        #target = "{#[%s].addr[0].[Address]#}" % label
+        servers = []
+        clients = []
+        net = 0
+        target = self.base_addr%2
+        local = self.base_addr%1
+        port = 5065
+        command = "sleep 2; vlc -I dummy %s --miface-addr=%s --sout '#udp{dst=%s:%d}' vlc://quit" \
+            % (local,self.movie, target, port)
+        vlc_server = netns_desc.create("Application")
+        vlc_server.set_attribute_value("command", command)
+        vlc_server.set_attribute_value("user", self.user)
+        vlc_server.connector("node").connect(netns_node.connector("apps"))
+        servers.append(vlc_server.guid)
+
+        command = "sudo dbus-uuidgen --ensure; vlc -vvv -I dummy udp://@%s:%d --sout '#std{access=file,mux=ts,dst=big_buck_bunny_stream.ts}' "  % (target, port)
+        vlc_client = pl_desc.create("Application")
+        vlc_client.set_attribute_value("buildDepends", "vlc")
+        vlc_client.set_attribute_value("rpmFusion", True)
+        vlc_client.set_attribute_value("command", command)
+        vlc_client.enable_trace("stdout")
+        vlc_client.enable_trace("stderr")
+        vlc_client.connector("node").connect(pl_node1.connector("apps"))
+        clients.append(vlc_client.guid)
+
         # ROUTES
         self.add_route(netns_node, (self.base_addr%32), 27, (self.base_addr%2))
         self.add_route(netns_node, (self.base_addr%4), 30, (self.base_addr%2))
@@ -358,7 +394,7 @@ class WirelessOverlay(object):
         self.add_route(pl_node1, (self.base_addr%32), 27, (self.base_addr%6))
 
         self.add_route(ap_node, (self.base_addr%0), 30, (self.base_addr%5))
-
+        
         xml = exp_desc.to_xml()
         controller = ExperimentController(xml, self.root_dir)
         controller.start()
@@ -369,25 +405,6 @@ class WirelessOverlay(object):
         controller.shutdown()
 
         """
-            # applications
-            #target = "{#[%s].addr[0].[Address]#}" % label
-            target = self.base_addr%(net+1)
-            port = 5000 + net + 1
-            command = "vlc -I dummy %s --sout '#rtp{dst=%s,port=%d,mux=ts}' vlc://quit" \
-                % (self.movie, target, port)
-            vlc_server = netns_desc.create("Application")
-            vlc_server.set_attribute_value("command", command)
-            vlc_server.set_attribute_value("user", self.user)
-            vlc_server.connector("node").connect(server.connector("apps"))
-            servers.append(vlc_server.guid)
-
-            command = "vlc rtp://%s:%d/test.ts" % (target, port)
-            vlc_client = netns_desc.create("Application")
-            vlc_client.set_attribute_value("command", command)
-            vlc_client.set_attribute_value("user", self.user)
-            vlc_client.connector("node").connect(nodei.connector("apps"))
-            clients.append(vlc_client.guid)
-
         xml = exp_desc.to_xml()
         controller = ExperimentController(xml, self.root_dir)
         controller.start()