From 559d7cdec8fc89dffca1dc3c9392ad44eb0a1d11 Mon Sep 17 00:00:00 2001
From: Alina Quereilhac <alina.quereilhac@inria.fr>
Date: Thu, 27 Nov 2014 00:27:34 +0100
Subject: [PATCH] Adding dummy ns3 fd-net-device test

---
 src/nepi/resources/ns3/ns3fdnetdevice.py   | 22 ++++++++++++++++
 src/nepi/resources/ns3/ns3pipechanel.py    | 29 ++++++++--------------
 test/resources/linux/ns3/ns3fdnetdevice.py |  3 ---
 3 files changed, 33 insertions(+), 21 deletions(-)

diff --git a/src/nepi/resources/ns3/ns3fdnetdevice.py b/src/nepi/resources/ns3/ns3fdnetdevice.py
index 3e42d23c..e4fdbd76 100644
--- a/src/nepi/resources/ns3/ns3fdnetdevice.py
+++ b/src/nepi/resources/ns3/ns3fdnetdevice.py
@@ -39,4 +39,26 @@ class NS3BaseFdNetDevice(NS3BaseNetDevice):
         if node and node.uuid not in self.connected:
             self.simulation.invoke(node.uuid, "AddDevice", self.uuid)
             self._connected.add(node.uuid)
+
+    def _instantiate_object(self):
+        """ just validate that the simulator is in real time
+        mode, otherwise it is not going to work
+        """
+
+        mode = self.simulation.get("simulatorImplementationType")
+        if mode != "ns3::RealtimeSimulatorImpl":
+            msg = "The simulation must run in real time!!"
+            self.error(msg)
+            raise RuntimeError, msg
         
+        super(NS3BaseFdNetDevice, self)._instantiate_object()
+
+    def send_fd(self, fd):
+        import passfd
+        import socket
+        
+        address = self.simulation.invoke(self.uuid, "recvFD")
+        sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
+        sock.connect(address)
+        passfd.sendfd(sock, fd, '0')
+
diff --git a/src/nepi/resources/ns3/ns3pipechanel.py b/src/nepi/resources/ns3/ns3pipechanel.py
index c74b24d6..b9da5204 100644
--- a/src/nepi/resources/ns3/ns3pipechanel.py
+++ b/src/nepi/resources/ns3/ns3pipechanel.py
@@ -58,14 +58,9 @@ class NS3BasePipeChannel(NS3Base):
 
     def _instantiate_object(self):
         """ The pipe channel does not really exists as an ns-3 object.
-        Do nothing, just validate that the simulator is in real time
-        mode, otherwise it is not going to work.
+        Do nothing.
         """
-        mode = self.simulator.get("simulatorImplementationType")
-        if mode != "ns3::RealtimeSimulatorImpl":
-            msg = "The simulation must run in real time!!"
-                self.error(msg)
-                raise RuntimeError, msg
+        pass
 
     def _connect_object(self):
         dev1 = self.devices[0]
@@ -73,17 +68,15 @@ class NS3BasePipeChannel(NS3Base):
 
         if dev1.uuid not in self.connected and dev2.uuid not in self.connected:
             (s0, s1) = socket.socketpair(socket.AF_UNIX, socket.SOCK_STREAM, 0)
-            self._send_fd(dev1, s0)
-            self._send_fd(dev2, s1)
+            
+            dev1.send_fd(s0)
 
-    def _send_fd(self, dev, fd):
-        import passfd
-        
-        address = self.simulation.invoke(dev.uuid, "recvFD")
-        sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
-        sock.connect(address)
-        passfd.sendfd(sock, fd, '0')
+            self._connected.add(dev1.uuid)
+            dev1._connected.add(self.uuid)
+
+            dev2.send_fd(s1)
+
+            self._connected.add(dev2.uuid)
+            dev2._connected.add(self.uuid)
 
-        self._connected.add(dev.uuid)
-        dev._connected.add(self.uuid)
 
diff --git a/test/resources/linux/ns3/ns3fdnetdevice.py b/test/resources/linux/ns3/ns3fdnetdevice.py
index 326ac458..b4bbc92c 100755
--- a/test/resources/linux/ns3/ns3fdnetdevice.py
+++ b/test/resources/linux/ns3/ns3fdnetdevice.py
@@ -51,9 +51,6 @@ def add_fd_device(ec, node, ip, prefix):
     ec.set(dev, "prefix", prefix)
     ec.register_connection(node, dev)
 
-    #queue = ec.register_resource("ns3::DropTailQueue")
-    #ec.register_connection(dev, queue)
-
     return dev
 
 class LinuxNS3FdNetDeviceTest(unittest.TestCase):
-- 
2.47.0