2 # NEPI, a framework to manage network experiments
3 # Copyright (C) 2014 INRIA
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation, either version 3 of the License, or
8 # (at your option) any later version.
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 from nepi.execution.attribute import Attribute, Flags, Types
20 from nepi.execution.trace import Trace, TraceAttr
21 from nepi.execution.resource import ResourceManager, clsinit_copy, \
23 from nepi.resources.ns3.ns3wifiremotestationmanager import NS3BaseWifiRemoteStationManager
26 class NS3RraaWifiManager(NS3BaseWifiRemoteStationManager):
27 _rtype = "ns3::RraaWifiManager"
30 def _register_attributes(cls):
32 attr_basic = Attribute("Basic",
33 "If true the RRAA-BASIC algorithm will be used, otherwise the RRAA wil be used",
38 flags = Flags.Reserved | Flags.Construct)
40 cls._register_attribute(attr_basic)
42 attr_timeout = Attribute("Timeout",
43 "Timeout for the RRAA BASIC loss estimaton block (s)",
45 default = "+50000000.0ns",
48 flags = Flags.Reserved | Flags.Construct)
50 cls._register_attribute(attr_timeout)
52 attr_ewndfor54mbps = Attribute("ewndFor54mbps",
53 "ewnd parameter for 54 Mbs data mode",
58 flags = Flags.Reserved | Flags.Construct)
60 cls._register_attribute(attr_ewndfor54mbps)
62 attr_ewndfor48mbps = Attribute("ewndFor48mbps",
63 "ewnd parameter for 48 Mbs data mode",
68 flags = Flags.Reserved | Flags.Construct)
70 cls._register_attribute(attr_ewndfor48mbps)
72 attr_ewndfor36mbps = Attribute("ewndFor36mbps",
73 "ewnd parameter for 36 Mbs data mode",
78 flags = Flags.Reserved | Flags.Construct)
80 cls._register_attribute(attr_ewndfor36mbps)
82 attr_ewndfor24mbps = Attribute("ewndFor24mbps",
83 "ewnd parameter for 24 Mbs data mode",
88 flags = Flags.Reserved | Flags.Construct)
90 cls._register_attribute(attr_ewndfor24mbps)
92 attr_ewndfor18mbps = Attribute("ewndFor18mbps",
93 "ewnd parameter for 18 Mbs data mode",
98 flags = Flags.Reserved | Flags.Construct)
100 cls._register_attribute(attr_ewndfor18mbps)
102 attr_ewndfor12mbps = Attribute("ewndFor12mbps",
103 "ewnd parameter for 12 Mbs data mode",
104 type = Types.Integer,
108 flags = Flags.Reserved | Flags.Construct)
110 cls._register_attribute(attr_ewndfor12mbps)
112 attr_ewndfor9mbps = Attribute("ewndFor9mbps",
113 "ewnd parameter for 9 Mbs data mode",
114 type = Types.Integer,
118 flags = Flags.Reserved | Flags.Construct)
120 cls._register_attribute(attr_ewndfor9mbps)
122 attr_ewndfor6mbps = Attribute("ewndFor6mbps",
123 "ewnd parameter for 6 Mbs data mode",
124 type = Types.Integer,
128 flags = Flags.Reserved | Flags.Construct)
130 cls._register_attribute(attr_ewndfor6mbps)
132 attr_porifor48mbps = Attribute("poriFor48mbps",
133 "Pori parameter for 48 Mbs data mode",
138 flags = Flags.Reserved | Flags.Construct)
140 cls._register_attribute(attr_porifor48mbps)
142 attr_porifor36mbps = Attribute("poriFor36mbps",
143 "Pori parameter for 36 Mbs data mode",
148 flags = Flags.Reserved | Flags.Construct)
150 cls._register_attribute(attr_porifor36mbps)
152 attr_porifor24mbps = Attribute("poriFor24mbps",
153 "Pori parameter for 24 Mbs data mode",
158 flags = Flags.Reserved | Flags.Construct)
160 cls._register_attribute(attr_porifor24mbps)
162 attr_porifor18mbps = Attribute("poriFor18mbps",
163 "Pori parameter for 18 Mbs data mode",
168 flags = Flags.Reserved | Flags.Construct)
170 cls._register_attribute(attr_porifor18mbps)
172 attr_porifor12mbps = Attribute("poriFor12mbps",
173 "Pori parameter for 12 Mbs data mode",
178 flags = Flags.Reserved | Flags.Construct)
180 cls._register_attribute(attr_porifor12mbps)
182 attr_porifor9mbps = Attribute("poriFor9mbps",
183 "Pori parameter for 9 Mbs data mode",
188 flags = Flags.Reserved | Flags.Construct)
190 cls._register_attribute(attr_porifor9mbps)
192 attr_porifor6mbps = Attribute("poriFor6mbps",
193 "Pori parameter for 6 Mbs data mode",
198 flags = Flags.Reserved | Flags.Construct)
200 cls._register_attribute(attr_porifor6mbps)
202 attr_pmtlfor54mbps = Attribute("pmtlFor54mbps",
203 "Pmtl parameter for 54 Mbs data mode",
208 flags = Flags.Reserved | Flags.Construct)
210 cls._register_attribute(attr_pmtlfor54mbps)
212 attr_pmtlfor48mbps = Attribute("pmtlFor48mbps",
213 "Pmtl parameter for 48 Mbs data mode",
218 flags = Flags.Reserved | Flags.Construct)
220 cls._register_attribute(attr_pmtlfor48mbps)
222 attr_pmtlfor36mbps = Attribute("pmtlFor36mbps",
223 "Pmtl parameter for 36 Mbs data mode",
228 flags = Flags.Reserved | Flags.Construct)
230 cls._register_attribute(attr_pmtlfor36mbps)
232 attr_pmtlfor24mbps = Attribute("pmtlFor24mbps",
233 "Pmtl parameter for 24 Mbs data mode",
238 flags = Flags.Reserved | Flags.Construct)
240 cls._register_attribute(attr_pmtlfor24mbps)
242 attr_pmtlfor18mbps = Attribute("pmtlFor18mbps",
243 "Pmtl parameter for 18 Mbs data mode",
248 flags = Flags.Reserved | Flags.Construct)
250 cls._register_attribute(attr_pmtlfor18mbps)
252 attr_pmtlfor12mbps = Attribute("pmtlFor12mbps",
253 "Pmtl parameter for 12 Mbs data mode",
258 flags = Flags.Reserved | Flags.Construct)
260 cls._register_attribute(attr_pmtlfor12mbps)
262 attr_pmtlfor9mbps = Attribute("pmtlFor9mbps",
263 "Pmtl parameter for 9 Mbs data mode",
268 flags = Flags.Reserved | Flags.Construct)
270 cls._register_attribute(attr_pmtlfor9mbps)
272 attr_islowlatency = Attribute("IsLowLatency",
273 "If true, we attempt to modelize a so-called low-latency device: a device where decisions about tx parameters can be made on a per-packet basis and feedback about the transmission of each packet is obtained before sending the next. Otherwise, we modelize a high-latency device, that is a device where we cannot update our decision about tx parameters after every packet transmission.",
278 flags = Flags.Reserved | Flags.Construct)
280 cls._register_attribute(attr_islowlatency)
282 attr_maxssrc = Attribute("MaxSsrc",
283 "The maximum number of retransmission attempts for an RTS. This value will not have any effect on some rate control algorithms.",
284 type = Types.Integer,
288 flags = Flags.Reserved | Flags.Construct)
290 cls._register_attribute(attr_maxssrc)
292 attr_maxslrc = Attribute("MaxSlrc",
293 "The maximum number of retransmission attempts for a DATA packet. This value will not have any effect on some rate control algorithms.",
294 type = Types.Integer,
298 flags = Flags.Reserved | Flags.Construct)
300 cls._register_attribute(attr_maxslrc)
302 attr_rtsctsthreshold = Attribute("RtsCtsThreshold",
303 "If the size of the data packet + LLC header + MAC header + FCS trailer is bigger than this value, we use an RTS/CTS handshake before sending the data, as per IEEE Std. 802.11-2012, Section 9.3.5. This value will not have any effect on some rate control algorithms.",
304 type = Types.Integer,
308 flags = Flags.Reserved | Flags.Construct)
310 cls._register_attribute(attr_rtsctsthreshold)
312 attr_fragmentationthreshold = Attribute("FragmentationThreshold",
313 "If the size of the data packet + LLC header + MAC header + FCS trailer is biggerthan this value, we fragment it such that the size of the fragments are equal or smaller than this value, as per IEEE Std. 802.11-2012, Section 9.5. This value will not have any effect on some rate control algorithms.",
314 type = Types.Integer,
318 flags = Flags.Reserved | Flags.Construct)
320 cls._register_attribute(attr_fragmentationthreshold)
322 attr_nonunicastmode = Attribute("NonUnicastMode",
323 "Wifi mode used for non-unicast transmissions.",
325 default = "Invalid-WifiMode",
328 flags = Flags.Reserved | Flags.Construct)
330 cls._register_attribute(attr_nonunicastmode)
332 attr_defaulttxpowerlevel = Attribute("DefaultTxPowerLevel",
333 "Default power level to be used for transmissions. This is the power level that is used by all those WifiManagers that do notimplement TX power control.",
334 type = Types.Integer,
338 flags = Flags.Reserved | Flags.Construct)
340 cls._register_attribute(attr_defaulttxpowerlevel)
345 def _register_traces(cls):
347 mactxrtsfailed = Trace("MacTxRtsFailed", "The transmission of a RTS by the MAC layer has failed")
349 cls._register_trace(mactxrtsfailed)
351 mactxdatafailed = Trace("MacTxDataFailed", "The transmission of a data packet by the MAC layer has failed")
353 cls._register_trace(mactxdatafailed)
355 mactxfinalrtsfailed = Trace("MacTxFinalRtsFailed", "The transmission of a RTS has exceeded the maximum number of attempts")
357 cls._register_trace(mactxfinalrtsfailed)
359 mactxfinaldatafailed = Trace("MacTxFinalDataFailed", "The transmission of a data packet has exceeded the maximum number of attempts")
361 cls._register_trace(mactxfinaldatafailed)
365 def __init__(self, ec, guid):
366 super(NS3RraaWifiManager, self).__init__(ec, guid)
367 self._home = "ns3-rraa-wifi-manager-%s" % self.guid