Forced ns-3 node to wait for ARP protocol to be initialized to avoid segmentation...
authorAlina Quereilhac <alina.quereilhac@inria.fr>
Wed, 25 Jun 2014 13:34:39 +0000 (15:34 +0200)
committerAlina Quereilhac <alina.quereilhac@inria.fr>
Wed, 25 Jun 2014 13:34:39 +0000 (15:34 +0200)
src/nepi/resources/ns3/ns3arpl3protocol.py
src/nepi/resources/ns3/ns3node.py

index b40c581..36ff047 100644 (file)
@@ -39,6 +39,8 @@ class NS3BaseArpL3Protocol(NS3Base):
     @property
     def _rms_to_wait(self):
         rms = set()
-        rms.add(self.node)
+        rms.add(self.simulation)
         return rms
 
+    def _connect_object(self):
+        pass
index 8598979..aadcf40 100644 (file)
@@ -55,6 +55,13 @@ class NS3BaseNode(NS3Base):
         if ipv4s: return ipv4s[0]
         return None
 
+    @property
+    def arp(self):
+        from nepi.resources.ns3.ns3arpl3protocol import NS3BaseArpL3Protocol
+        arps = self.get_connected(NS3BaseArpL3Protocol.get_rtype())
+        if arps: return arps[0]
+        return None
+
     @property
     def mobility(self):
         from nepi.resources.ns3.ns3mobilitymodel import NS3BaseMobilityModel
@@ -90,6 +97,10 @@ class NS3BaseNode(NS3Base):
         if ipv4:
             rms.add(ipv4)
 
+        arp = self.arp
+        if arp:
+            rms.add(arp)
+
         mobility = self.mobility
         if mobility:
             rms.add(mobility)
@@ -113,10 +124,20 @@ class NS3BaseNode(NS3Base):
         ipv4 = self.ipv4
         if ipv4:
             self.simulation.invoke(self.uuid, "AggregateObject", ipv4.uuid)
+            self._connected.add(ipv4.uuid)
+            ipv4._connected.add(self.uuid)
+
+        arp = self.arp
+        if arp:
+            self.simulation.invoke(self.uuid, "AggregateObject", arp.uuid)
+            self._connected.add(arp.uuid)
+            arp._connected.add(self.uuid)
 
         mobility = self.mobility
         if mobility:
             self.simulation.invoke(self.uuid, "AggregateObject", mobility.uuid)
+            self._connected.add(mobility.uuid)
+            mobility._connected.add(self.uuid)
 
     def _add_dce(self, dceapplications):
         dceapp = dceapplications[0]