X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Fresources%2Fns3%2Fns3netdevice.py;h=946f01a1c5fbda92d9cd714233234f85b17f47a7;hb=6285ca51026efb69642eea9dfc7c480e722d84a9;hp=074f07547c9ec948b329828f5d55df695c35308e;hpb=a46d3807241cf45324ef9e46ee2d8eb98ccb4f9d;p=nepi.git diff --git a/src/nepi/resources/ns3/ns3netdevice.py b/src/nepi/resources/ns3/ns3netdevice.py index 074f0754..946f01a1 100644 --- a/src/nepi/resources/ns3/ns3netdevice.py +++ b/src/nepi/resources/ns3/ns3netdevice.py @@ -3,9 +3,8 @@ # Copyright (C) 2014 INRIA # # This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation; # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -24,8 +23,6 @@ from nepi.resources.ns3.ns3base import NS3Base import ipaddr -# TODO: Validate that device must be connected to queue!! If not a segmentation fault occurs - @clsinit_copy class NS3BaseNetDevice(NS3Base): _rtype = "abstract::ns3::NetDevice" @@ -68,7 +65,7 @@ class NS3BaseNetDevice(NS3Base): if not nodes: msg = "Device not connected to node" self.error(msg) - raise RuntimeError, msg + raise RuntimeError(msg) return nodes[0] @@ -80,10 +77,22 @@ class NS3BaseNetDevice(NS3Base): if not channels: msg = "Device not connected to channel" self.error(msg) - raise RuntimeError, msg + raise RuntimeError(msg) return channels[0] + @property + def queue(self): + from nepi.resources.ns3.ns3queue import NS3BaseQueue + queue = self.get_connected(NS3BaseQueue.get_rtype()) + + if not queue: + msg = "Device not connected to queue" + self.error(msg) + raise RuntimeError(msg) + + return queue[0] + @property def ascii_helper_uuid(self): if not self._ascii_helper_uuid: @@ -106,6 +115,8 @@ class NS3BaseNetDevice(NS3Base): classname = "WimaxHelper" elif rtype == "ns3::WifiNetDevice": classname = "YansWifiPhyHelper" + elif rtype == "ns3::FdNetDevice": + classname = "FdNetDeviceHelper" self._device_helper_uuid = self.simulation.create(classname) @@ -113,16 +124,7 @@ class NS3BaseNetDevice(NS3Base): @property def _rms_to_wait(self): - rms = set() - - node = self.node - rms.add(node) - - ipv4 = node.ipv4 - if node.ipv4: - rms.add(ipv4) - - rms.add(self.channel) + rms = set([self.node, self.channel]) return rms def _configure_object(self): @@ -213,4 +215,8 @@ class NS3BaseNetDevice(NS3Base): if channel and channel.uuid not in self.connected: self.simulation.invoke(self.uuid, "Attach", channel.uuid) self._connected.add(channel.uuid) + + # Verify that the device has a queue. If no queue is added a segfault + # error occurs + queue = self.queue