applied the except and raise fixers to the master branch to close the gap with py3
[nepi.git] / src / nepi / resources / ns3 / ns3netdevice.py
index 074f075..946f01a 100644 (file)
@@ -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