X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Fresources%2Fns3%2Fns3wifiphy.py;h=331c944401790712754ab8e96b1b17edd431c340;hb=6285ca51026efb69642eea9dfc7c480e722d84a9;hp=a1f01b7485c5b4762b9051b006cc9382cad7d422;hpb=fbc7c758e1464d3af686062505fde706fc92b47c;p=nepi.git diff --git a/src/nepi/resources/ns3/ns3wifiphy.py b/src/nepi/resources/ns3/ns3wifiphy.py index a1f01b74..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,35 +16,72 @@ # # 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()) - if devices: return devices[0] - return None + 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) + + return devices[0] @property - def others_to_wait(self): - others = set() - device = self.device - if device: others.add(device) - return others + 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() + rms.add(self.device) + return rms def _connect_object(self): device = self.device - if device and device.uuid not in self.connected: - self.simulator.invoke(device.uuid, "SetPhy", self.uuid) - self.simulator.invoke(self.uuid, "SetDevice", device.uuid) + if device.uuid not in self.connected: self._connected.add(device.uuid) - node = device.node - if node: - self.simulator.invoke(self.uuid, "SetMobility", 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)