X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Fresources%2Fns3%2Fns3wifiphy.py;h=331c944401790712754ab8e96b1b17edd431c340;hb=6285ca51026efb69642eea9dfc7c480e722d84a9;hp=8b6166ace2dcc67a9faccf021a56a0b99d5c2cf0;hpb=68adac66099b08e3daae7a84b29af0f7c69ee955;p=nepi.git diff --git a/src/nepi/resources/ns3/ns3wifiphy.py b/src/nepi/resources/ns3/ns3wifiphy.py index 8b6166ac..331c9444 100644 --- a/src/nepi/resources/ns3/ns3wifiphy.py +++ b/src/nepi/resources/ns3/ns3wifiphy.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,29 +16,53 @@ # # Author: Alina Quereilhac +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 NS3BaseWifiPhy(NS3Base): _rtype = "abstract::ns3::WifiPhy" + @classmethod + def _register_attributes(cls): + standard = Attribute("Standard", "Wireless standard", + default = "WIFI_PHY_STANDARD_80211a", + allowed = WIFI_STANDARDS.keys(), + 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 = "WifiPhy not connected to device" self.error(msg) - raise RuntimeError, msg + raise RuntimeError(msg) return devices[0] + @property + def channel(self): + from nepi.resources.ns3.ns3wifichannel import NS3BaseWifiChannel + channels = self.get_connected(NS3BaseWifiChannel.get_rtype()) + + if not channels: + msg = "WifiPhy not connected to channel" + self.error(msg) + raise RuntimeError(msg) + + return channels[0] + @property def _rms_to_wait(self): rms = set() @@ -49,9 +72,16 @@ class NS3BaseWifiPhy(NS3Base): def _connect_object(self): device = self.device if device.uuid not in self.connected: - self.simulation.invoke(device.uuid, "SetPhy", self.uuid) - self.simulator.invoke(self.uuid, "SetDevice", device.uuid) self._connected.add(device.uuid) - self.simulator.invoke(self.uuid, "SetMobility", self.node.uuid) + self.simulation.invoke(self.uuid, "SetMobility", self.node.uuid) + + standard = self.get("Standard") + self.simulation.invoke(self.uuid, "ConfigureStandard", WIFI_STANDARDS[standard]) + + self.simulation.invoke(self.uuid, "SetDevice", device.uuid) + + self.simulation.invoke(self.uuid, "SetChannel", self.channel.uuid) + + self.simulation.invoke(device.uuid, "SetPhy", self.uuid)