From 77eb367d7b25428f2e46bed392de3cfa81f5be20 Mon Sep 17 00:00:00 2001 From: Alina Quereilhac Date: Wed, 25 Jun 2014 15:34:39 +0200 Subject: [PATCH] Forced ns-3 node to wait for ARP protocol to be initialized to avoid segmentation fault --- src/nepi/resources/ns3/ns3arpl3protocol.py | 4 +++- src/nepi/resources/ns3/ns3node.py | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/nepi/resources/ns3/ns3arpl3protocol.py b/src/nepi/resources/ns3/ns3arpl3protocol.py index b40c5812..36ff0473 100644 --- a/src/nepi/resources/ns3/ns3arpl3protocol.py +++ b/src/nepi/resources/ns3/ns3arpl3protocol.py @@ -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 diff --git a/src/nepi/resources/ns3/ns3node.py b/src/nepi/resources/ns3/ns3node.py index 85989790..aadcf40b 100644 --- a/src/nepi/resources/ns3/ns3node.py +++ b/src/nepi/resources/ns3/ns3node.py @@ -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] -- 2.47.0