bfae1062c553b9e4fb32d15796f9880090dcaf61
[nepi.git] / src / nepi / resources / ns3 / classes / rraa_wifi_manager.py
1 #
2 #    NEPI, a framework to manage network experiments
3 #    Copyright (C) 2014 INRIA
4 #
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.
9 #
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.
14 #
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/>.
17 #
18
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, \
22         ResourceState, reschedule_delay
23 from nepi.resources.ns3.ns3wifiremotestationmanager import NS3BaseWifiRemoteStationManager 
24
25 @clsinit_copy
26 class NS3RraaWifiManager(NS3BaseWifiRemoteStationManager):
27     _rtype = "ns3::RraaWifiManager"
28
29     @classmethod
30     def _register_attributes(cls):
31         
32         attr_basic = Attribute("Basic",
33             "If true the RRAA-BASIC algorithm will be used, otherwise the RRAA wil be used",
34             type = Types.Bool,
35             default = "False",  
36             allowed = None,
37             range = None,    
38             flags = Flags.Reserved | Flags.Construct)
39
40         cls._register_attribute(attr_basic)
41
42         attr_timeout = Attribute("Timeout",
43             "Timeout for the RRAA BASIC loss estimaton block (s)",
44             type = Types.String,
45             default = "+50000000.0ns",  
46             allowed = None,
47             range = None,    
48             flags = Flags.Reserved | Flags.Construct)
49
50         cls._register_attribute(attr_timeout)
51
52         attr_ewndfor54mbps = Attribute("ewndFor54mbps",
53             "ewnd parameter for 54 Mbs data mode",
54             type = Types.Integer,
55             default = "40",  
56             allowed = None,
57             range = None,    
58             flags = Flags.Reserved | Flags.Construct)
59
60         cls._register_attribute(attr_ewndfor54mbps)
61
62         attr_ewndfor48mbps = Attribute("ewndFor48mbps",
63             "ewnd parameter for 48 Mbs data mode",
64             type = Types.Integer,
65             default = "40",  
66             allowed = None,
67             range = None,    
68             flags = Flags.Reserved | Flags.Construct)
69
70         cls._register_attribute(attr_ewndfor48mbps)
71
72         attr_ewndfor36mbps = Attribute("ewndFor36mbps",
73             "ewnd parameter for 36 Mbs data mode",
74             type = Types.Integer,
75             default = "40",  
76             allowed = None,
77             range = None,    
78             flags = Flags.Reserved | Flags.Construct)
79
80         cls._register_attribute(attr_ewndfor36mbps)
81
82         attr_ewndfor24mbps = Attribute("ewndFor24mbps",
83             "ewnd parameter for 24 Mbs data mode",
84             type = Types.Integer,
85             default = "40",  
86             allowed = None,
87             range = None,    
88             flags = Flags.Reserved | Flags.Construct)
89
90         cls._register_attribute(attr_ewndfor24mbps)
91
92         attr_ewndfor18mbps = Attribute("ewndFor18mbps",
93             "ewnd parameter for 18 Mbs data mode",
94             type = Types.Integer,
95             default = "20",  
96             allowed = None,
97             range = None,    
98             flags = Flags.Reserved | Flags.Construct)
99
100         cls._register_attribute(attr_ewndfor18mbps)
101
102         attr_ewndfor12mbps = Attribute("ewndFor12mbps",
103             "ewnd parameter for 12 Mbs data mode",
104             type = Types.Integer,
105             default = "20",  
106             allowed = None,
107             range = None,    
108             flags = Flags.Reserved | Flags.Construct)
109
110         cls._register_attribute(attr_ewndfor12mbps)
111
112         attr_ewndfor9mbps = Attribute("ewndFor9mbps",
113             "ewnd parameter for 9 Mbs data mode",
114             type = Types.Integer,
115             default = "10",  
116             allowed = None,
117             range = None,    
118             flags = Flags.Reserved | Flags.Construct)
119
120         cls._register_attribute(attr_ewndfor9mbps)
121
122         attr_ewndfor6mbps = Attribute("ewndFor6mbps",
123             "ewnd parameter for 6 Mbs data mode",
124             type = Types.Integer,
125             default = "6",  
126             allowed = None,
127             range = None,    
128             flags = Flags.Reserved | Flags.Construct)
129
130         cls._register_attribute(attr_ewndfor6mbps)
131
132         attr_porifor48mbps = Attribute("poriFor48mbps",
133             "Pori parameter for 48 Mbs data mode",
134             type = Types.Double,
135             default = "0.047",  
136             allowed = None,
137             range = None,    
138             flags = Flags.Reserved | Flags.Construct)
139
140         cls._register_attribute(attr_porifor48mbps)
141
142         attr_porifor36mbps = Attribute("poriFor36mbps",
143             "Pori parameter for 36 Mbs data mode",
144             type = Types.Double,
145             default = "0.115",  
146             allowed = None,
147             range = None,    
148             flags = Flags.Reserved | Flags.Construct)
149
150         cls._register_attribute(attr_porifor36mbps)
151
152         attr_porifor24mbps = Attribute("poriFor24mbps",
153             "Pori parameter for 24 Mbs data mode",
154             type = Types.Double,
155             default = "0.1681",  
156             allowed = None,
157             range = None,    
158             flags = Flags.Reserved | Flags.Construct)
159
160         cls._register_attribute(attr_porifor24mbps)
161
162         attr_porifor18mbps = Attribute("poriFor18mbps",
163             "Pori parameter for 18 Mbs data mode",
164             type = Types.Double,
165             default = "0.1325",  
166             allowed = None,
167             range = None,    
168             flags = Flags.Reserved | Flags.Construct)
169
170         cls._register_attribute(attr_porifor18mbps)
171
172         attr_porifor12mbps = Attribute("poriFor12mbps",
173             "Pori parameter for 12 Mbs data mode",
174             type = Types.Double,
175             default = "0.1861",  
176             allowed = None,
177             range = None,    
178             flags = Flags.Reserved | Flags.Construct)
179
180         cls._register_attribute(attr_porifor12mbps)
181
182         attr_porifor9mbps = Attribute("poriFor9mbps",
183             "Pori parameter for 9 Mbs data mode",
184             type = Types.Double,
185             default = "0.1434",  
186             allowed = None,
187             range = None,    
188             flags = Flags.Reserved | Flags.Construct)
189
190         cls._register_attribute(attr_porifor9mbps)
191
192         attr_porifor6mbps = Attribute("poriFor6mbps",
193             "Pori parameter for 6 Mbs data mode",
194             type = Types.Double,
195             default = "0.5",  
196             allowed = None,
197             range = None,    
198             flags = Flags.Reserved | Flags.Construct)
199
200         cls._register_attribute(attr_porifor6mbps)
201
202         attr_pmtlfor54mbps = Attribute("pmtlFor54mbps",
203             "Pmtl parameter for 54 Mbs data mode",
204             type = Types.Double,
205             default = "0.094",  
206             allowed = None,
207             range = None,    
208             flags = Flags.Reserved | Flags.Construct)
209
210         cls._register_attribute(attr_pmtlfor54mbps)
211
212         attr_pmtlfor48mbps = Attribute("pmtlFor48mbps",
213             "Pmtl parameter for 48 Mbs data mode",
214             type = Types.Double,
215             default = "0.23",  
216             allowed = None,
217             range = None,    
218             flags = Flags.Reserved | Flags.Construct)
219
220         cls._register_attribute(attr_pmtlfor48mbps)
221
222         attr_pmtlfor36mbps = Attribute("pmtlFor36mbps",
223             "Pmtl parameter for 36 Mbs data mode",
224             type = Types.Double,
225             default = "0.3363",  
226             allowed = None,
227             range = None,    
228             flags = Flags.Reserved | Flags.Construct)
229
230         cls._register_attribute(attr_pmtlfor36mbps)
231
232         attr_pmtlfor24mbps = Attribute("pmtlFor24mbps",
233             "Pmtl parameter for 24 Mbs data mode",
234             type = Types.Double,
235             default = "0.265",  
236             allowed = None,
237             range = None,    
238             flags = Flags.Reserved | Flags.Construct)
239
240         cls._register_attribute(attr_pmtlfor24mbps)
241
242         attr_pmtlfor18mbps = Attribute("pmtlFor18mbps",
243             "Pmtl parameter for 18 Mbs data mode",
244             type = Types.Double,
245             default = "0.3722",  
246             allowed = None,
247             range = None,    
248             flags = Flags.Reserved | Flags.Construct)
249
250         cls._register_attribute(attr_pmtlfor18mbps)
251
252         attr_pmtlfor12mbps = Attribute("pmtlFor12mbps",
253             "Pmtl parameter for 12 Mbs data mode",
254             type = Types.Double,
255             default = "0.2868",  
256             allowed = None,
257             range = None,    
258             flags = Flags.Reserved | Flags.Construct)
259
260         cls._register_attribute(attr_pmtlfor12mbps)
261
262         attr_pmtlfor9mbps = Attribute("pmtlFor9mbps",
263             "Pmtl parameter for 9 Mbs data mode",
264             type = Types.Double,
265             default = "0.3932",  
266             allowed = None,
267             range = None,    
268             flags = Flags.Reserved | Flags.Construct)
269
270         cls._register_attribute(attr_pmtlfor9mbps)
271
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.",
274             type = Types.Bool,
275             default = "True",  
276             allowed = None,
277             range = None,    
278             flags = Flags.Reserved | Flags.Construct)
279
280         cls._register_attribute(attr_islowlatency)
281
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,
285             default = "7",  
286             allowed = None,
287             range = None,    
288             flags = Flags.Reserved | Flags.Construct)
289
290         cls._register_attribute(attr_maxssrc)
291
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,
295             default = "7",  
296             allowed = None,
297             range = None,    
298             flags = Flags.Reserved | Flags.Construct)
299
300         cls._register_attribute(attr_maxslrc)
301
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,
305             default = "2346",  
306             allowed = None,
307             range = None,    
308             flags = Flags.Reserved | Flags.Construct)
309
310         cls._register_attribute(attr_rtsctsthreshold)
311
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,
315             default = "2346",  
316             allowed = None,
317             range = None,    
318             flags = Flags.Reserved | Flags.Construct)
319
320         cls._register_attribute(attr_fragmentationthreshold)
321
322         attr_nonunicastmode = Attribute("NonUnicastMode",
323             "Wifi mode used for non-unicast transmissions.",
324             type = Types.String,
325             default = "Invalid-WifiMode",  
326             allowed = None,
327             range = None,    
328             flags = Flags.Reserved | Flags.Construct)
329
330         cls._register_attribute(attr_nonunicastmode)
331
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,
335             default = "0",  
336             allowed = None,
337             range = None,    
338             flags = Flags.Reserved | Flags.Construct)
339
340         cls._register_attribute(attr_defaulttxpowerlevel)
341
342
343
344     @classmethod
345     def _register_traces(cls):
346         
347         mactxrtsfailed = Trace("MacTxRtsFailed", "The transmission of a RTS by the MAC layer has failed")
348
349         cls._register_trace(mactxrtsfailed)
350
351         mactxdatafailed = Trace("MacTxDataFailed", "The transmission of a data packet by the MAC layer has failed")
352
353         cls._register_trace(mactxdatafailed)
354
355         mactxfinalrtsfailed = Trace("MacTxFinalRtsFailed", "The transmission of a RTS has exceeded the maximum number of attempts")
356
357         cls._register_trace(mactxfinalrtsfailed)
358
359         mactxfinaldatafailed = Trace("MacTxFinalDataFailed", "The transmission of a data packet has exceeded the maximum number of attempts")
360
361         cls._register_trace(mactxfinaldatafailed)
362
363
364
365     def __init__(self, ec, guid):
366         super(NS3RraaWifiManager, self).__init__(ec, guid)
367         self._home = "ns3-rraa-wifi-manager-%s" % self.guid