X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Fresources%2Fns3%2Fns3wifimac.py;h=801a2ee24b23ee93306fbb78f8cc894315570dfa;hb=3fe2e6f7812888dc1366915545dd2243ff6fb1bb;hp=700f6cb48c7b7cd13a56d5dfc8923f77856a9045;hpb=68adac66099b08e3daae7a84b29af0f7c69ee955;p=nepi.git diff --git a/src/nepi/resources/ns3/ns3wifimac.py b/src/nepi/resources/ns3/ns3wifimac.py index 700f6cb4..801a2ee2 100644 --- a/src/nepi/resources/ns3/ns3wifimac.py +++ b/src/nepi/resources/ns3/ns3wifimac.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 @@ -17,26 +16,43 @@ # # Author: Alina Quereilhac +from six import PY3 + +from nepi.execution.attribute import Attribute, Flags, Types from nepi.execution.resource import clsinit_copy from nepi.resources.ns3.ns3base import NS3Base +from nepi.resources.ns3.ns3wifinetdevice import WIFI_STANDARDS @clsinit_copy class NS3BaseWifiMac(NS3Base): _rtype = "abstract::ns3::WifiMac" + @classmethod + def _register_attributes(cls): + # stay safe and keep extra list() added by 2to3 + allowed = WIFI_STANDARDS.keys() + if PY3: allowed = list(allowed) + standard = Attribute("Standard", "Wireless standard", + default = "WIFI_PHY_STANDARD_80211a", + allowed = allowed, + type = Types.Enumerate, + flags = Flags.Design) + + cls._register_attribute(standard) + @property def node(self): return self.device.node @property def device(self): - from nepi.resources.ns3.ns3device import NS3BaseNetDevice - devices = self.get_connected(NS3BaseNetDevice.get_rtype()) + from nepi.resources.ns3.ns3wifinetdevice import NS3BaseWifiNetDevice + devices = self.get_connected(NS3BaseWifiNetDevice.get_rtype()) if not devices: msg = "WifiMac not connected to device" self.error(msg) - raise RuntimeError, msg + raise RuntimeError(msg) return devices[0] @@ -49,6 +65,20 @@ class NS3BaseWifiMac(NS3Base): def _connect_object(self): device = self.device if device.uuid not in self.connected: - self.simulation.invoke(device.uuid, "SetMac", self.uuid) self._connected.add(device.uuid) + self.simulation.invoke(device.uuid, "SetMac", self.uuid) + + standard = self.get("Standard") + self.simulation.invoke(self.uuid, "ConfigureStandard", WIFI_STANDARDS[standard]) + + # Delayed configuration of MAC address + mac = device.get("mac") + if mac: + mac_uuid = self.simulation.create("Mac48Address", mac) + else: + mac_uuid = self.simulation.invoke("singleton::Mac48Address", "Allocate") + + self.simulation.invoke(self.uuid, "SetAddress", mac_uuid) + +