9db91963e9b5aae0d63fda5a6b62fec017dbeb13
[nepi.git] / src / nepi / testbeds / ns3 / attributes_metadata.py
1 # -*- coding: utf-8 -*-
2
3 from factories_metadata import wifi_standards, l4_protocols, \
4     service_flow_direction, service_flow_scheduling_type
5 import validation as ns3_validation
6 from nepi.core.attributes import Attribute
7 from nepi.util import validation
8
9 testbed_attributes = dict({
10     "simu_impl_type": dict({
11             "name": "SimulatorImplementationType",
12             "help": "The object class to use as the simulator implementation",
13             "value": "ns3::DefaultSimulatorImpl",
14             "type": Attribute.ENUM,
15             "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable,
16             "allowed": [
17                 "ns3::DefaultSimulatorImpl",
18                 "ns3::RealtimeSimulatorImpl",
19             ],
20             "validation_function": validation.is_enum
21         }),
22     "sched_impl_type": dict({
23             "name": "SchedulerType",
24             "help": "The object class to use as the scheduler implementation. Make sure to pick a thread-safe variant.",
25             "value": "ns3::MapScheduler",
26             "type": Attribute.ENUM,
27             "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable,
28             "allowed": [
29                 "ns3::MapScheduler",
30                 "ns3::HeapScheduler",
31                 "ns3::ListScheduler",
32                 "ns3::CalendarScheduler",
33             ],
34             "validation_function": validation.is_enum
35         }),
36     "checksum": dict({
37             "name": "ChecksumEnabled",
38             "help": "A global switch to enable all checksums for all protocols",
39             "type": Attribute.BOOL,
40             "value": False,
41             "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable,
42             "validation_function": validation.is_bool
43         }),
44     "simu_stop": dict({
45         "name": "StopTime",
46         "validation_function": validation.is_time,
47         "value": None,
48         "type": Attribute.STRING,
49         "help": "Stop time for the simulation"
50     }),
51 })
52
53 attributes = dict({
54     "SleepCurrentA": dict({
55         "name": "SleepCurrentA",
56         "validation_function": validation.is_double,
57         "value": 2.0000000000000002e-05,
58         "type": Attribute.DOUBLE,
59         "help": "The default radio Sleep current in Ampere."
60     }),
61     "Protocol": dict({
62         "name": "Protocol",
63         "validation_function": validation.is_string,
64         "value": "ns3::UdpSocketFactory",
65         "type": Attribute.STRING,
66         "help": "The type of protocol to use."
67     }),
68     "TxCurrentA": dict({
69         "name": "TxCurrentA",
70         "validation_function": validation.is_double,
71         "value": 0.017399999999999999,
72         "type": Attribute.DOUBLE,
73         "help": "The radio Tx current in Ampere."
74     }),
75     "BasicEnergySourceInitialEnergyJ": dict({
76         "name": "BasicEnergySourceInitialEnergyJ",
77         "validation_function": validation.is_double,
78         "value": 10.0,
79         "type": Attribute.DOUBLE,
80         "help": "Initial energy stored in basic energy source."
81     }),
82     "FrameSize": dict({
83         "name": "FrameSize",
84         "validation_function": validation.is_integer,
85         "value": 1000,
86         "type": Attribute.INTEGER,
87         "help": "Size of data frames in bytes"
88     }),
89     "RateStep": dict({
90         "name": "RateStep",
91         "validation_function": validation.is_integer,
92         "value": 4,
93         "type": Attribute.INTEGER,
94         "help": "Increments available for rate assignment in bps"
95     }),
96     "Stop": dict({
97         "name": "Stop",
98         "validation_function": validation.is_time,
99         "value": "0ns",
100         "type": Attribute.STRING,
101         "help": "The simulation time at which to tear down the device thread."
102     }),
103     "ChannelSwitchDelay": dict({
104         "name": "ChannelSwitchDelay",
105         "validation_function": validation.is_time,
106         "value": "250000ns",
107         "type": Attribute.STRING,
108         "help": "Delay between two short frames transmitted on different frequencies. NOTE: Unused now."
109     }),
110     "Time": dict({
111         "name": "Time",
112         "validation_function": validation.is_time,
113         "value": "1000000000ns",
114         "type": Attribute.STRING,
115         "help": "Change current direction and speed after moving for this delay."
116     }),
117     "ewndFor12mbps": dict({
118         "name": "ewndFor12mbps",
119         "validation_function": validation.is_integer,
120         "value": 20,
121         "type": Attribute.INTEGER,
122         "help": "ewnd parameter for 12 Mbs data mode"
123     }),
124     "BerThreshold": dict({
125         "name": "BerThreshold",
126         "validation_function": validation.is_double,
127         "value": 1.0000000000000001e-05,
128         "type": Attribute.DOUBLE,
129         "help": "The maximum Bit Error Rate acceptable at any transmission mode"
130     }),
131     "Dot11MeshHWMPactivePathTimeout": dict({
132         "name": "Dot11MeshHWMPactivePathTimeout",
133         "validation_function": validation.is_time,
134         "value": "5120000000ns",
135         "type": Attribute.STRING,
136         "help": "Lifetime of reactive routing information"
137     }),
138     "pmtlFor48mbps": dict({
139         "name": "pmtlFor48mbps",
140         "validation_function": validation.is_double,
141         "value": 0.23000000000000001,
142         "type": Attribute.DOUBLE,
143         "help": "Pmtl parameter for 48 Mbs data mode"
144     }),
145     "SystemLoss": dict({
146         "name": "SystemLoss",
147         "validation_function": validation.is_double,
148         "value": 1.0,
149         "type": Attribute.DOUBLE,
150         "help": "The system loss"
151     }),
152     "ReferenceLoss": dict({
153         "name": "ReferenceLoss",
154         "validation_function": validation.is_double,
155         "value": 46.677700000000002,
156         "type": Attribute.DOUBLE,
157         "help": "The reference loss at distance d0 (dB). (Default is Friis at 1m with 5.15 GHz)"
158     }),
159     "MaxQueueTime": dict({
160         "name": "MaxQueueTime",
161         "validation_function": validation.is_time,
162         "value": "30000000000ns",
163         "type": Attribute.STRING,
164         "help": "Maximum time packets can be queued (in seconds)"
165     }),
166     "Dot11MeshHWMPactiveRootTimeout": dict({
167         "name": "Dot11MeshHWMPactiveRootTimeout",
168         "validation_function": validation.is_time,
169         "value": "5120000000ns",
170         "type": Attribute.STRING,
171         "help": "Lifetime of poractive routing information"
172     }),
173     "DutyCycle": dict({
174         "name": "DutyCycle",
175         "validation_function": validation.is_double,
176         "value": 0.5,
177         "type": Attribute.DOUBLE,
178         "help": "the duty cycle of the generator, i.e., the fraction of the period that is occupied by a signal"
179     }),
180     "DeviceName": dict({
181         "name": "DeviceName",
182         "validation_function": validation.is_string,
183         "value": "eth1",
184         "type": Attribute.STRING,
185         "help": "The name of the underlying real device (e.g. eth1)."
186     }),
187     "Direction": dict({
188         "name": "Direction",
189         "validation_function": validation.is_string,
190         "value": "Uniform:0:6.28318",
191         "type": Attribute.STRING,
192         "help": "A random variable used to pick the direction (gradients)."
193     }),
194     "OffTime": dict({
195         "name": "OffTime",
196         "validation_function": validation.is_string,
197         "value": "Constant:1",
198         "type": Attribute.STRING,
199         "help": "A RandomVariable used to pick the duration of the 'Off' state."
200     }),
201     "UpdatePeriod": dict({
202         "name": "UpdatePeriod",
203         "validation_function": validation.is_time,
204         "value": "1000000000ns",
205         "type": Attribute.STRING,
206         "help": "The interval between decisions about rate control changes"
207     }),
208     "DelayBinWidth": dict({
209         "name": "DelayBinWidth",
210         "validation_function": validation.is_double,
211         "value": 0.001,
212         "type": Attribute.DOUBLE,
213         "help": "The width used in the delay histogram."
214     }),
215     "EnergyDetectionThreshold": dict({
216         "name": "EnergyDetectionThreshold",
217         "validation_function": validation.is_double,
218         "value": -96.0,
219         "type": Attribute.DOUBLE,
220         "help": "The energy of a received signal should be higher than this threshold (dbm) to allow the PHY layer to detect the signal."
221     }),
222     "PacketSizeBinWidth": dict({
223         "name": "PacketSizeBinWidth",
224         "validation_function": validation.is_double,
225         "value": 20.0,
226         "type": Attribute.DOUBLE,
227         "help": "The width used in the packetSize histogram."
228     }),
229     "Resolution": dict({
230         "name": "Resolution",
231         "validation_function": validation.is_time,
232         "value": "1000000ns",
233         "type": Attribute.STRING,
234         "help": "the lengh of the time interval over which the power spectral density of incoming signals is averaged"
235     }),
236     "MaxX": dict({
237         "name": "MaxX",
238         "validation_function": validation.is_double,
239         "value": 1.0,
240         "type": Attribute.DOUBLE,
241         "help": "Maximum X value of traveling region, [m]"
242     }),
243     "IdleCurrentA": dict({
244         "name": "IdleCurrentA",
245         "validation_function": validation.is_double,
246         "value": 0.000426,
247         "type": Attribute.DOUBLE,
248         "help": "The default radio Idle current in Ampere."
249     }),
250     "Netmask": dict({
251         "name": "Netmask",
252         "validation_function": validation.is_string,
253         "value": "255.255.255.255",
254         "type": Attribute.STRING,
255         "help": "The network mask to assign to the tap device, when in ConfigureLocal mode. This address will override the discovered MAC address of the simulated device."
256     }),
257     "PathDiscoveryTime": dict({
258         "name": "PathDiscoveryTime",
259         "validation_function": validation.is_time,
260         "value": "5599999999ns",
261         "type": Attribute.STRING,
262         "help": "Estimate of maximum time needed to find route in network = 2 * NetTraversalTime"
263     }),
264     "poriFor24mbps": dict({
265         "name": "poriFor24mbps",
266         "validation_function": validation.is_double,
267         "value": 0.1681,
268         "type": Attribute.DOUBLE,
269         "help": "Pori parameter for 24 Mbs data mode"
270     }),
271     "Exponent0": dict({
272         "name": "Exponent0",
273         "validation_function": validation.is_double,
274         "value": 1.8999999999999999,
275         "type": Attribute.DOUBLE,
276         "help": "The exponent for the first field."
277     }),
278     "TimeStep": dict({
279         "name": "TimeStep",
280         "validation_function": validation.is_time,
281         "value": "1000000000ns",
282         "type": Attribute.STRING,
283         "help": "Change current direction and speed after moving for this time."
284     }),
285     "MaxMissedBeacons": dict({
286         "name": "MaxMissedBeacons",
287         "validation_function": validation.is_integer,
288         "value": 10,
289         "type": Attribute.INTEGER,
290         "help": "Number of beacons which much be consecutively missed before we attempt to restart association."
291     }),
292     "RxGain": dict({
293         "name": "RxGain",
294         "validation_function": validation.is_double,
295         "value": 1.0,
296         "type": Attribute.DOUBLE,
297         "help": "Reception gain (dB)."
298     }),
299     "MaxRetries": dict({
300         "name": "MaxRetries",
301         "validation_function": validation.is_integer,
302         "value": 4,
303         "type": Attribute.INTEGER,
304         "help": "Maximum number of retries"
305     }),
306     "pmtlFor24mbps": dict({
307         "name": "pmtlFor24mbps",
308         "validation_function": validation.is_double,
309         "value": 0.26500000000000001,
310         "type": Attribute.DOUBLE,
311         "help": "Pmtl parameter for 24 Mbs data mode"
312     }),
313     "TurnOnRtsAfterRateIncrease": dict({
314         "name": "TurnOnRtsAfterRateIncrease",
315         "validation_function": validation.is_bool,
316         "value": True,
317         "type": Attribute.BOOL,
318         "help": "If true the RTS mechanism will be turned on when the rate will be increased"
319     }),
320     "Gain": dict({
321         "name": "Gain",
322         "validation_function": validation.is_double,
323         "value": 0.10000000000000001,
324         "type": Attribute.DOUBLE,
325         "help": "XXX"
326     }),
327     "SuccessK": dict({
328         "name": "SuccessK",
329         "validation_function": validation.is_double,
330         "value": 2.0,
331         "type": Attribute.DOUBLE,
332         "help": "Multiplication factor for the success threshold in the AARF algorithm."
333     }),
334     "MinTimerThreshold": dict({
335         "name": "MinTimerThreshold",
336         "validation_function": validation.is_integer,
337         "value": 15,
338         "type": Attribute.INTEGER,
339         "help": "The minimum value for the 'timer' threshold in the AARF algorithm."
340     }),
341     "TimerThreshold": dict({
342         "name": "TimerThreshold",
343         "validation_function": validation.is_integer,
344         "value": 15,
345         "type": Attribute.INTEGER,
346         "help": "The 'timer' threshold in the ARF algorithm."
347     }),
348     "poriFor36mbps": dict({
349         "name": "poriFor36mbps",
350         "validation_function": validation.is_double,
351         "value": 0.115,
352         "type": Attribute.DOUBLE,
353         "help": "Pori parameter for 36 Mbs data mode"
354     }),
355     "SlotTime": dict({
356         "name": "SlotTime",
357         "validation_function": validation.is_time,
358         "value": "20000000ns",
359         "type": Attribute.STRING,
360         "help": "Time slot duration for MAC backoff"
361     }),
362     "DeltaX": dict({
363         "name": "DeltaX",
364         "validation_function": validation.is_double,
365         "value": 1.0,
366         "type": Attribute.DOUBLE,
367         "help": "The x space between objects."
368     }),
369     "DeltaY": dict({
370         "name": "DeltaY",
371         "validation_function": validation.is_double,
372         "value": 1.0,
373         "type": Attribute.DOUBLE,
374         "help": "The y space between objects."
375     }),
376     "Shipping": dict({
377         "name": "Shipping",
378         "validation_function": validation.is_double,
379         "value": 0.0,
380         "type": Attribute.DOUBLE,
381         "help": "Shipping contribution to noise between 0 and 1"
382     }),
383     "HardLimit": dict({
384         "name": "HardLimit",
385         "validation_function": validation.is_time,
386         "value": "100000000ns",
387         "type": Attribute.STRING,
388         "help": "Maximum acceptable real-time jitter (used in conjunction with SynchronizationMode=HardLimit)"
389     }),
390     "SupportedModesPhy2": dict({
391         "name": "SupportedModesPhy2",
392         "validation_function": validation.is_string,
393         "value": "2|0|1|",
394         "type": Attribute.STRING,
395         "help": "List of modes supported by Phy2"
396     }),
397     "SupportedModesPhy1": dict({
398         "name": "SupportedModesPhy1",
399         "validation_function": validation.is_string,
400         "value": "2|0|1|",
401         "type": Attribute.STRING,
402         "help": "List of modes supported by Phy1"
403     }),
404     "TxGain": dict({
405         "name": "TxGain",
406         "validation_function": validation.is_double,
407         "value": 1.0,
408         "type": Attribute.DOUBLE,
409         "help": "Transmission gain (dB)."
410     }),
411     "MaxPropDelay": dict({
412         "name": "MaxPropDelay",
413         "validation_function": validation.is_time,
414         "value": "2000000000ns",
415         "type": Attribute.STRING,
416         "help": "Maximum possible propagation delay to gateway"
417     }),
418     "Alpha": dict({
419         "name": "Alpha",
420         "validation_function": validation.is_double,
421         "value": 1.0,
422         "type": Attribute.DOUBLE,
423         "help": "A constant representing the tunable parameter in the Gauss-Markov model."
424     }),
425     "X": dict({
426         "name": "X",
427         "validation_function": validation.is_double,
428         "value": 0.0,
429         "type": Attribute.DOUBLE,
430         "help": "The x coordinate of the center of the  disc."
431     }),
432     "ExpirationTime": dict({
433         "name": "ExpirationTime",
434         "validation_function": validation.is_time,
435         "value": "30000000000ns",
436         "type": Attribute.STRING,
437         "help": "Time it takes for learned MAC state entry to expire."
438     }),
439     "GratuitousReply": dict({
440         "name": "GratuitousReply",
441         "validation_function": validation.is_bool,
442         "value": True,
443         "type": Attribute.BOOL,
444         "help": "Indicates whether a gratuitous RREP should be unicast to the node originated route discovery."
445     }),
446     "CcaThreshold": dict({
447         "name": "CcaThreshold",
448         "validation_function": validation.is_double,
449         "value": 10.0,
450         "type": Attribute.DOUBLE,
451         "help": "Aggregate energy of incoming signals to move to CCA Busy state dB"
452     }),
453     "AllowedHelloLoss": dict({
454         "name": "AllowedHelloLoss",
455         "validation_function": validation.is_integer,
456         "value": 2,
457         "type": Attribute.INTEGER,
458         "help": "Number of hello messages which may be loss for valid link."
459     }),
460     "Wind": dict({
461         "name": "Wind",
462         "validation_function": validation.is_double,
463         "value": 1.0,
464         "type": Attribute.DOUBLE,
465         "help": "Wind speed in m/s"
466     }),
467     "Exponent1": dict({
468         "name": "Exponent1",
469         "validation_function": validation.is_double,
470         "value": 3.7999999999999998,
471         "type": Attribute.DOUBLE,
472         "help": "The exponent for the second field."
473     }),
474     "DefaultTtl": dict({
475         "name": "DefaultTtl",
476         "validation_function": validation.is_integer,
477         "value": 64,
478         "type": Attribute.INTEGER,
479         "help": "The TTL value set by default on all outgoing packets generated on this node."
480     }),
481     "TxPowerEnd": dict({
482         "name": "TxPowerEnd",
483         "validation_function": validation.is_double,
484         "value": 16.020600000000002,
485         "type": Attribute.DOUBLE,
486         "help": "Maximum available transmission level (dbm)."
487     }),
488     "DataRate": dict({
489         "name": "DataRate",
490         "validation_function": validation.is_string,
491         "value": "32768bps",
492         "type": Attribute.STRING,
493         "help": "The default data rate for point to point links"
494     }),
495     "MaxSuccessThreshold": dict({
496         "name": "MaxSuccessThreshold",
497         "validation_function": validation.is_integer,
498         "value": 60,
499         "type": Attribute.INTEGER,
500         "help": "Maximum value of the success threshold in the AARF algorithm."
501     }),
502     "MaxRangCorrectionRetries": dict({
503         "name": "MaxRangCorrectionRetries",
504         "validation_function": validation.is_integer,
505         "value": 16,
506         "type": Attribute.INTEGER,
507         "help": "Number of retries on contention Ranging Requests"
508     }),
509     "Dot11MeshHWMPpreqMinInterval": dict({
510         "name": "Dot11MeshHWMPpreqMinInterval",
511         "validation_function": validation.is_time,
512         "value": "102400000ns",
513         "type": Attribute.STRING,
514         "help": "Minimal interval between to successive PREQs"
515     }),
516     "BlackListTimeout": dict({
517         "name": "BlackListTimeout",
518         "validation_function": validation.is_time,
519         "value": "5599999999ns",
520         "type": Attribute.STRING,
521         "help": "Time for which the node is put into the blacklist = RreqRetries * NetTraversalTime"
522     }),
523     "MaxBytes": dict({
524         "name": "MaxBytes",
525         "validation_function": validation.is_integer,
526         "value": 6553500,
527         "type": Attribute.INTEGER,
528         "help": "The maximum number of bytes accepted by this DropTailQueue."
529     }),
530     "MaxAmsduSize": dict({
531         "name": "MaxAmsduSize",
532         "validation_function": validation.is_integer,
533         "value": 7935,
534         "type": Attribute.INTEGER,
535         "help": "Max length in byte of an A-MSDU"
536     }),
537     "Distance2": dict({
538         "name": "Distance2",
539         "validation_function": validation.is_double,
540         "value": 200.0,
541         "type": Attribute.DOUBLE,
542         "help": "Beginning of the third distance field. Default is 200m."
543     }),
544     "MaxFrames": dict({
545         "name": "MaxFrames",
546         "validation_function": validation.is_integer,
547         "value": 1,
548         "type": Attribute.INTEGER,
549         "help": "Maximum number of frames to include in a single RTS"
550     }),
551     "RxGainPhy2": dict({
552         "name": "RxGainPhy2",
553         "validation_function": validation.is_double,
554         "value": 0.0,
555         "type": Attribute.DOUBLE,
556         "help": "Gain added to incoming signal at receiver of Phy2"
557     }),
558     "LayoutType": dict({
559         "name": "LayoutType",
560         "validation_function": validation.is_enum,
561         "value": "RowFirst",
562         "allowed": ["RowFirst",
563             "ColumnFirst"],
564         "type": Attribute.ENUM,
565         "help": "The type of layout."
566     }),
567     "ewndFor54mbps": dict({
568         "name": "ewndFor54mbps",
569         "validation_function": validation.is_integer,
570         "value": 40,
571         "type": Attribute.INTEGER,
572         "help": "ewnd parameter for 54 Mbs data mode"
573     }),
574     "FailureThreshold": dict({
575         "name": "FailureThreshold",
576         "validation_function": validation.is_integer,
577         "value": 2,
578         "type": Attribute.INTEGER,
579         "help": "The number of consecutive transmissions failure to decrease the rate."
580     }),
581     "ewndFor24mbps": dict({
582         "name": "ewndFor24mbps",
583         "validation_function": validation.is_integer,
584         "value": 40,
585         "type": Attribute.INTEGER,
586         "help": "ewnd parameter for 24 Mbs data mode"
587     }),
588     "ewndFor48mbps": dict({
589         "name": "ewndFor48mbps",
590         "validation_function": validation.is_integer,
591         "value": 40,
592         "type": Attribute.INTEGER,
593         "help": "ewnd parameter for 48 Mbs data mode"
594     }),
595     "SendEnable": dict({
596         "name": "SendEnable",
597         "validation_function": validation.is_bool,
598         "value": True,
599         "type": Attribute.BOOL,
600         "help": "Enable or disable the transmitter section of the device."
601     }),
602     "DataMode": dict({
603         "name": "DataMode",
604         "validation_function": validation.is_string,
605         "value": "OfdmRate6Mbps",
606         "type": Attribute.STRING,
607         "help": "The transmission mode to use for every data packet transmission"
608     }),
609     "ErrorUnit": dict({
610         "name": "ErrorUnit",
611         "validation_function": validation.is_enum,
612         "value": "EU_BYTE",
613         "allowed": ["EU_BYTE",
614      "EU_PKT",
615      "EU_BIT"],
616         "type": Attribute.ENUM,
617         "help": "The error unit"
618     }),
619     "IpAddress": dict({
620         "name": "IpAddress",
621         "validation_function": validation.is_ip4_address,
622         "value": None,
623         "type": Attribute.STRING,
624         "help": "The IP address to assign to the tap device,  when in ConfigureLocal mode. This address will override the discovered IP address of the simulated device."
625     }),
626     "MinSuccessThreshold": dict({
627         "name": "MinSuccessThreshold",
628         "validation_function": validation.is_integer,
629         "value": 10,
630         "type": Attribute.INTEGER,
631         "help": "The minimum value for the success threshold in the AARF algorithm."
632     }),
633     "NodeTraversalTime": dict({
634         "name": "NodeTraversalTime",
635         "validation_function": validation.is_time,
636         "value": "40000000ns",
637         "type": Attribute.STRING,
638         "help": "Conservative estimate of the average one hop traversal time for packets and should include queuing delays, interrupt processing times and transfer times."
639     }),
640     "TxPowerPhy2": dict({
641         "name": "TxPowerPhy2",
642         "validation_function": validation.is_double,
643         "value": 190.0,
644         "type": Attribute.DOUBLE,
645         "help": "Transmission output power in dB of Phy2"
646     }),
647     "TxPowerPhy1": dict({
648         "name": "TxPowerPhy1",
649         "validation_function": validation.is_double,
650         "value": 190.0,
651         "type": Attribute.DOUBLE,
652         "help": "Transmission output power in dB of Phy1"
653     }),
654     "ReceiveEnable": dict({
655         "name": "ReceiveEnable",
656         "validation_function": validation.is_bool,
657         "value": True,
658         "type": Attribute.BOOL,
659         "help": "Enable or disable the receiver section of the device."
660     }),
661     "Lambda": dict({
662         "name": "Lambda",
663         "validation_function": validation.is_double,
664         "value": 0.058252400000000003,
665         "type": Attribute.DOUBLE,
666         "help": "The wavelength  (default is 5.15 GHz at 300 000 km/s)."
667     }),
668     "ewndFor6mbps": dict({
669         "name": "ewndFor6mbps",
670         "validation_function": validation.is_integer,
671         "value": 6,
672         "type": Attribute.INTEGER,
673         "help": "ewnd parameter for 6 Mbs data mode"
674     }),
675     "NumberOfRaysPerPath": dict({
676         "name": "NumberOfRaysPerPath",
677         "validation_function": validation.is_integer,
678         "value": 1,
679         "type": Attribute.INTEGER,
680         "help": "The number of rays to use by default for compute the fading coeficent for a given path (default is 1)"
681     }),
682     "HnaInterval": dict({
683         "name": "HnaInterval",
684         "validation_function": validation.is_time,
685         "value": "5000000000ns",
686         "type": Attribute.STRING,
687         "help": "HNA messages emission interval.  Normally it is equal to TcInterval."
688     }),
689     "RanVar": dict({
690         "name": "RanVar",
691         "validation_function": validation.is_string,
692         "value": "Uniform:0:1",
693         "type": Attribute.STRING,
694         "help": "The decision variable attached to this error model."
695     }),
696     "Theta": dict({
697         "name": "Theta",
698         "validation_function": validation.is_string,
699         "value": "Uniform:0:6.283",
700         "type": Attribute.STRING,
701         "help": "A random variable which represents the angle (gradients) of a position in a random disc."
702     }),
703     "UpdateStatistics": dict({
704         "name": "UpdateStatistics",
705         "validation_function": validation.is_time,
706         "value": "100000000ns",
707         "type": Attribute.STRING,
708         "help": "The interval between updating statistics table "
709     }),
710     "Distance1": dict({
711         "name": "Distance1",
712         "validation_function": validation.is_double,
713         "value": 80.0,
714         "type": Attribute.DOUBLE,
715         "help": "Beginning of the second distance field. Default is 80m."
716     }),
717     "MyRouteTimeout": dict({
718         "name": "MyRouteTimeout",
719         "validation_function": validation.is_time,
720         "value": "11199999999ns",
721         "type": Attribute.STRING,
722         "help": "Value of lifetime field in RREP generating by this node = 2 * max(ActiveRouteTimeout, PathDiscoveryTime)"
723     }),
724     "RcvBufSize": dict({
725         "name": "RcvBufSize",
726         "validation_function": validation.is_integer,
727         "value": 131072,
728         "type": Attribute.INTEGER,
729         "help": "PacketSocket maximum receive buffer size (bytes)"
730     }),
731     "RreqRetries": dict({
732         "name": "RreqRetries",
733         "validation_function": validation.is_integer,
734         "value": 2,
735         "type": Attribute.INTEGER,
736         "help": "Maximum number of retransmissions of RREQ to discover a route"
737     }),
738     "MaxNumberOfPeerLinks": dict({
739         "name": "MaxNumberOfPeerLinks",
740         "validation_function": validation.is_integer,
741         "value": 32,
742         "type": Attribute.INTEGER,
743         "help": "Maximum number of peer links"
744     }),
745     "QueueLimit": dict({
746         "name": "QueueLimit",
747         "validation_function": validation.is_integer,
748         "value": 10,
749         "type": Attribute.INTEGER,
750         "help": "Maximum packets to queue at MAC"
751     }),
752     "MinSpeed": dict({
753         "name": "MinSpeed",
754         "validation_function": validation.is_double,
755         "value": 0.29999999999999999,
756         "type": Attribute.DOUBLE,
757         "help": "Minimum speed value, [m/s]"
758     }),
759     "MaxSpeed": dict({
760         "name": "MaxSpeed",
761         "validation_function": validation.is_double,
762         "value": 0.69999999999999996,
763         "type": Attribute.DOUBLE,
764         "help": "Maximum speed value, [m/s]"
765     }),
766     "NumberOfRetryRates": dict({
767         "name": "NumberOfRetryRates",
768         "validation_function": validation.is_integer,
769         "value": 100,
770         "type": Attribute.INTEGER,
771         "help": "Number of retry rates"
772     }),
773     "MaxPacketSize": dict({
774         "name": "MaxPacketSize",
775         "validation_function": validation.is_integer,
776         "value": 1024,
777         "type": Attribute.INTEGER,
778         "help": "The maximum size of a packet."
779     }),
780     "TxPowerLevels": dict({
781         "name": "TxPowerLevels",
782         "validation_function": validation.is_integer,
783         "value": 1,
784         "type": Attribute.INTEGER,
785         "help": "Number of transmission power levels available between TxPowerBase and TxPowerEnd included."
786     }),
787     "RandomStart": dict({
788         "name": "RandomStart",
789         "validation_function": validation.is_time,
790         "value": "500000000ns",
791         "type": Attribute.STRING,
792         "help": "Window when beacon generating starts (uniform random) in seconds"
793     }),
794     "SampleColumn": dict({
795         "name": "SampleColumn",
796         "validation_function": validation.is_double,
797         "value": 10.0,
798         "type": Attribute.DOUBLE,
799         "help": "The number of columns used for sampling"
800     }),
801     "NormalDirection": dict({
802         "name": "NormalDirection",
803         "validation_function": validation.is_string,
804         "value": "Normal:0:1:10",
805         "type": Attribute.STRING,
806         "help": "A gaussian random variable used to calculate the next direction value."
807     }),
808     "MinPause": dict({
809         "name": "MinPause",
810         "validation_function": validation.is_double,
811         "value": 0.0,
812         "type": Attribute.DOUBLE,
813         "help": "Minimum pause value, [s]"
814     }),
815     "TcInterval": dict({
816         "name": "TcInterval",
817         "validation_function": validation.is_time,
818         "value": "5000000000ns",
819         "type": Attribute.STRING,
820         "help": "TC messages emission interval."
821     }),
822     "RfFlag": dict({
823         "name": "RfFlag",
824         "validation_function": validation.is_bool,
825         "value": True,
826         "type": Attribute.BOOL,
827         "help": "Reply and forward flag"
828     }),
829     "CcaThresholdPhy2": dict({
830         "name": "CcaThresholdPhy2",
831         "validation_function": validation.is_double,
832         "value": 10.0,
833         "type": Attribute.DOUBLE,
834         "help": "Aggregate energy of incoming signals to move to CCA Busy state dB of Phy2"
835     }),
836     "CcaThresholdPhy1": dict({
837         "name": "CcaThresholdPhy1",
838         "validation_function": validation.is_double,
839         "value": 10.0,
840         "type": Attribute.DOUBLE,
841         "help": "Aggregate energy of incoming signals to move to CCA Busy state dB of Phy1"
842     }),
843     "MaxQueueLen": dict({
844         "name": "MaxQueueLen",
845         "validation_function": validation.is_integer,
846         "value": 64,
847         "type": Attribute.INTEGER,
848         "help": "Maximum number of packets that we allow a routing protocol to buffer."
849     }),
850     "HeightAboveZ": dict({
851         "name": "HeightAboveZ",
852         "validation_function": validation.is_double,
853         "value": 0.0,
854         "type": Attribute.DOUBLE,
855         "help": "The height of the antenna (m) above the node's Z coordinate"
856     }),
857     "poriFor9mbps": dict({
858         "name": "poriFor9mbps",
859         "validation_function": validation.is_double,
860         "value": 0.1434,
861         "type": Attribute.DOUBLE,
862         "help": "Pori parameter for 9 Mbs data mode"
863     }),
864     "BasicEnergySupplyVoltageV": dict({
865         "name": "BasicEnergySupplyVoltageV",
866         "validation_function": validation.is_double,
867         "value": 3.0,
868         "type": Attribute.DOUBLE,
869         "help": "Initial supply voltage for basic energy source."
870     }),
871     "LostUlMapInterval": dict({
872         "name": "LostUlMapInterval",
873         "validation_function": validation.is_time,
874         "value": "500000000ns",
875         "type": Attribute.STRING,
876         "help": "Time since last received UL-MAP before uplink synchronization is considered lost, maximum is 600."
877     }),
878     "UnicastPreqThreshold": dict({
879         "name": "UnicastPreqThreshold",
880         "validation_function": validation.is_integer,
881         "value": 1,
882         "type": Attribute.INTEGER,
883         "help": "Maximum number of PREQ receivers, when we send a PREQ as a chain of unicasts"
884     }),
885     "poriFor48mbps": dict({
886         "name": "poriFor48mbps",
887         "validation_function": validation.is_double,
888         "value": 0.047,
889         "type": Attribute.DOUBLE,
890         "help": "Pori parameter for 48 Mbs data mode"
891     }),
892     "pmtlFor54mbps": dict({
893         "name": "pmtlFor54mbps",
894         "validation_function": validation.is_double,
895         "value": 0.094,
896         "type": Attribute.DOUBLE,
897         "help": "Pmtl parameter for 54 Mbs data mode"
898     }),
899     "BeaconInterval": dict({
900         "name": "BeaconInterval",
901         "validation_function": validation.is_time,
902         "value": "102400000ns",
903         "type": Attribute.STRING,
904         "help": "Delay between two beacons"
905     }),
906     "IntervalT20": dict({
907         "name": "IntervalT20",
908         "validation_function": validation.is_time,
909         "value": "500000000ns",
910         "type": Attribute.STRING,
911         "help": "Time the SS searches for preambles on a given channel. Minimum is 2 MAC frames"
912     }),
913     "IntervalT21": dict({
914         "name": "IntervalT21",
915         "validation_function": validation.is_time,
916         "value": "10000000000ns",
917         "type": Attribute.STRING,
918         "help": "time the SS searches for (decodable) DL-MAP on a given channel"
919     }),
920     "MeanPitch": dict({
921         "name": "MeanPitch",
922         "validation_function": validation.is_string,
923         "value": "Constant:0",
924         "type": Attribute.STRING,
925         "help": "A random variable used to assign the average pitch."
926     }),
927     "Dot11MeshHWMPrannInterval": dict({
928         "name": "Dot11MeshHWMPrannInterval",
929         "validation_function": validation.is_time,
930         "value": "5120000000ns",
931         "type": Attribute.STRING,
932         "help": "Lifetime of poractive routing information"
933     }),
934     "Distribution": dict({
935         "name": "Distribution",
936         "validation_function": validation.is_string,
937         "value": "Constant:1",
938         "type": Attribute.STRING,
939         "help": "The distribution to choose the initial phases."
940     }),
941     "RxThreshold": dict({
942         "name": "RxThreshold",
943         "validation_function": validation.is_double,
944         "value": 10.0,
945         "type": Attribute.DOUBLE,
946         "help": "Required SNR for signal acquisition in dB"
947     }),
948     "WaypointsLeft": dict({
949         "name": "WaypointsLeft",
950         "validation_function": validation.is_integer,
951         "value": 0,
952         "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable,
953         "type": Attribute.INTEGER,
954         "help": "The number of waypoints remaining."
955     }),
956     "ConfirmTimeout": dict({
957         "name": "ConfirmTimeout",
958         "validation_function": validation.is_time,
959         "value": "40960000ns",
960         "type": Attribute.STRING,
961         "help": "Confirm timeout"
962     }),
963     "ActiveRouteTimeout": dict({
964         "name": "ActiveRouteTimeout",
965         "validation_function": validation.is_time,
966         "value": "3000000000ns",
967         "type": Attribute.STRING,
968         "help": "Period of time during which the route is considered to be valid"
969     }),
970     "InitialRangInterval": dict({
971         "name": "InitialRangInterval",
972         "validation_function": validation.is_time,
973         "value": "50000000ns",
974         "type": Attribute.STRING,
975         "help": "Time between Initial Ranging regions assigned by the BS. Maximum is 2s"
976     }),
977     "ewndFor18mbps": dict({
978         "name": "ewndFor18mbps",
979         "validation_function": validation.is_integer,
980         "value": 20,
981         "type": Attribute.INTEGER,
982         "help": "ewnd parameter for 18 Mbs data mode"
983     }),
984     "FlowInterruptionsBinWidth": dict({
985         "name": "FlowInterruptionsBinWidth",
986         "validation_function": validation.is_double,
987         "value": 0.25,
988         "type": Attribute.DOUBLE,
989         "help": "The width used in the flowInterruptions histogram."
990     }),
991     "MinY": dict({
992         "name": "MinY",
993         "validation_function": validation.is_double,
994         "value": 0.0,
995         "type": Attribute.DOUBLE,
996         "help": "The y coordinate where the grid starts."
997     }),
998     "poriFor12mbps": dict({
999         "name": "poriFor12mbps",
1000         "validation_function": validation.is_double,
1001         "value": 0.18609999999999999,
1002         "type": Attribute.DOUBLE,
1003         "help": "Pori parameter for 12 Mbs data mode"
1004     }),
1005     "UnicastDataThreshold": dict({
1006         "name": "UnicastDataThreshold",
1007         "validation_function": validation.is_integer,
1008         "value": 1,
1009         "type": Attribute.INTEGER,
1010         "help": "Maximum number ofbroadcast receivers, when we send a broadcast as a chain of unicasts"
1011     }),
1012     "SuccessRatio": dict({
1013         "name": "SuccessRatio",
1014         "validation_function": validation.is_double,
1015         "value": 0.10000000000000001,
1016         "type": Attribute.DOUBLE,
1017         "help": "Ratio of maximum erroneous transmissions needed to switch to a higher rate"
1018     }),
1019     "SupportedModes": dict({
1020         "name": "SupportedModes",
1021         "validation_function": validation.is_string,
1022         "value": "2|0|1|",
1023         "type": Attribute.STRING,
1024         "help": "List of modes supported by this PHY"
1025     }),
1026     "CaptureSize": dict({
1027         "name": "CaptureSize",
1028         "validation_function": validation.is_integer,
1029         "value": 65535,
1030         "type": Attribute.INTEGER,
1031         "help": "Maximum length of captured packets (cf. pcap snaplen)"
1032     }),
1033     "NetTraversalTime": dict({
1034         "name": "NetTraversalTime",
1035         "validation_function": validation.is_time,
1036         "value": "2799999999ns",
1037         "type": Attribute.STRING,
1038         "help": "Estimate of the average net traversal time = 2 * NodeTraversalTime * NetDiameter"
1039     }),
1040     "Lifetime": dict({
1041         "name": "Lifetime",
1042         "validation_function": validation.is_time,
1043         "value": "120000000000ns",
1044         "type": Attribute.STRING,
1045         "help": "The lifetime of the routing enrty"
1046     }),
1047     "DeletePeriod": dict({
1048         "name": "DeletePeriod",
1049         "validation_function": validation.is_time,
1050         "value": "15000000000ns",
1051         "type": Attribute.STRING,
1052         "help": "DeletePeriod is intended to provide an upper bound on the time for which an upstream node A can have a neighbor B as an active next hop for destination D, while B has invalidated the route to D. = 5 * max (HelloInterval, ActiveRouteTimeout)"
1053     }),
1054     "MaxPerHopDelay": dict({
1055         "name": "MaxPerHopDelay",
1056         "validation_function": validation.is_time,
1057         "value": "10000000000ns",
1058         "type": Attribute.STRING,
1059         "help": "The maximum per-hop delay that should be considered.  Packets still not received after this delay are to be considered lost."
1060     }),
1061     "NumberOfOscillatorsPerRay": dict({
1062         "name": "NumberOfOscillatorsPerRay",
1063         "validation_function": validation.is_integer,
1064         "value": 4,
1065         "type": Attribute.INTEGER,
1066         "help": "The number of oscillators to use by default for compute the coeficent for a given ray of a given path (default is 4)"
1067     }),
1068     "MinRetryRate": dict({
1069         "name": "MinRetryRate",
1070         "validation_function": validation.is_double,
1071         "value": 0.01,
1072         "type": Attribute.DOUBLE,
1073         "help": "Smallest allowed RTS retry rate"
1074     }),
1075     "Pause": dict({
1076         "name": "Pause",
1077         "validation_function": validation.is_string,
1078         "value": "Constant:2",
1079         "type": Attribute.STRING,
1080         "help": "A random variable used to pick the pause of a random waypoint model."
1081     }),
1082     "Exponent": dict({
1083         "name": "Exponent",
1084         "validation_function": validation.is_double,
1085         "value": 3.0,
1086         "type": Attribute.DOUBLE,
1087         "help": "The exponent of the Path Loss propagation model"
1088     }),
1089     "MidInterval": dict({
1090         "name": "MidInterval",
1091         "validation_function": validation.is_time,
1092         "value": "5000000000ns",
1093         "type": Attribute.STRING,
1094         "help": "MID messages emission interval.  Normally it is equal to TcInterval."
1095     }),
1096     "pmtlFor9mbps": dict({
1097         "name": "pmtlFor9mbps",
1098         "validation_function": validation.is_double,
1099         "value": 0.39319999999999999,
1100         "type": Attribute.DOUBLE,
1101         "help": "Pmtl parameter for 9 Mbs data mode"
1102     }),
1103     "Dot11MeshHWMPnetDiameterTraversalTime": dict({
1104         "name": "Dot11MeshHWMPnetDiameterTraversalTime",
1105         "validation_function": validation.is_time,
1106         "value": "102400000ns",
1107         "type": Attribute.STRING,
1108         "help": "Time we suppose the packet to go from one edge of the network to another"
1109     }),
1110     "TxPowerStart": dict({
1111         "name": "TxPowerStart",
1112         "validation_function": validation.is_double,
1113         "value": 16.020600000000002,
1114         "type": Attribute.DOUBLE,
1115         "help": "Minimum available transmission level (dbm)."
1116     }),
1117     "ewndFor9mbps": dict({
1118         "name": "ewndFor9mbps",
1119         "validation_function": validation.is_integer,
1120         "value": 10,
1121         "type": Attribute.INTEGER,
1122         "help": "ewnd parameter for 9 Mbs data mode"
1123     }),
1124     "IntervalT12": dict({
1125         "name": "IntervalT12",
1126         "validation_function": validation.is_time,
1127         "value": "10000000000ns",
1128         "type": Attribute.STRING,
1129         "help": "Wait for UCD descriptor.Maximum is 5*MaxUcdInterval"
1130     }),
1131     "NormalPitch": dict({
1132         "name": "NormalPitch",
1133         "validation_function": validation.is_string,
1134         "value": "Normal:0:1:10",
1135         "type": Attribute.STRING,
1136         "help": "A gaussian random variable used to calculate the next pitch value."
1137     }),
1138     "PacketWindowSize": dict({
1139         "name": "PacketWindowSize",
1140         "validation_function": validation.is_integer,
1141         "value": 32,
1142         "type": Attribute.INTEGER,
1143         "help": "The size of the window used to compute the packet loss. This value should be a multiple of 8."
1144     }),
1145     "Start": dict({
1146         "name": "Start",
1147         "validation_function": validation.is_time,
1148         "value": "0ns",
1149         "type": Attribute.STRING,
1150         "help": "The simulation time at which to spin up the device thread."
1151     }),
1152     "MaxDcdInterval": dict({
1153         "name": "MaxDcdInterval",
1154         "validation_function": validation.is_time,
1155         "value": "10000000000ns",
1156         "type": Attribute.STRING,
1157         "help": "Maximum time between transmission of DCD messages. Maximum is 10s"
1158     }),
1159     "ChannelNumber": dict({
1160         "name": "ChannelNumber",
1161         "validation_function": validation.is_integer,
1162         "value": 1,
1163         "type": Attribute.INTEGER,
1164         "help": "Channel center frequency = Channel starting frequency + 5 MHz * (nch - 1)"
1165     }),
1166     "MaxPacketFailure": dict({
1167         "name": "MaxPacketFailure",
1168         "validation_function": validation.is_integer,
1169         "value": 2,
1170         "type": Attribute.INTEGER,
1171         "help": "Maximum number of failed packets before link will be closed"
1172     }),
1173     "AddCreditThreshold": dict({
1174         "name": "AddCreditThreshold",
1175         "validation_function": validation.is_integer,
1176         "value": 10,
1177         "type": Attribute.INTEGER,
1178         "help": "Add credit threshold"
1179     }),
1180     "Basic": dict({
1181         "name": "Basic",
1182         "validation_function": validation.is_bool,
1183         "value": False,
1184         "type": Attribute.BOOL,
1185         "help": "If true the RRAA-BASIC algorithm will be used, otherwise the RRAA wil be used"
1186     }),
1187     "UcdInterval": dict({
1188         "name": "UcdInterval",
1189         "validation_function": validation.is_time,
1190         "value": "3000000000ns",
1191         "type": Attribute.STRING,
1192         "help": "Time between transmission of UCD messages. Maximum value is 10s."
1193     }),
1194     "DestinationOnly": dict({
1195         "name": "DestinationOnly",
1196         "validation_function": validation.is_bool,
1197         "value": False,
1198         "type": Attribute.BOOL,
1199         "help": "Indicates only the destination may respond to this RREQ."
1200     }),
1201     "Local": dict({
1202         "name": "Local",
1203         "validation_function": ns3_validation.is_address,
1204         "value": None,
1205         "type": Attribute.STRING,
1206         "help": "The Address on which to Bind the rx socket."
1207     }),
1208     "NumberOfNodes": dict({
1209         "name": "NumberOfNodes",
1210         "validation_function": validation.is_integer,
1211         "value": 10,
1212         "type": Attribute.INTEGER,
1213         "help": "Number of non-gateway nodes in this gateway's neighborhood"
1214     }),
1215     "MaxPause": dict({
1216         "name": "MaxPause",
1217         "validation_function": validation.is_double,
1218         "value": 0.0,
1219         "type": Attribute.DOUBLE,
1220         "help": "Maximum pause value, [s]"
1221     }),
1222     "MaxBeaconLoss": dict({
1223         "name": "MaxBeaconLoss",
1224         "validation_function": validation.is_integer,
1225         "value": 2,
1226         "type": Attribute.INTEGER,
1227         "help": "Maximum number of lost beacons before link will be closed"
1228     }),
1229     "MaxY": dict({
1230         "name": "MaxY",
1231         "validation_function": validation.is_double,
1232         "value": 1.0,
1233         "type": Attribute.DOUBLE,
1234         "help": "Maximum Y value of traveling region, [m]"
1235     }),
1236     "MaxReservations": dict({
1237         "name": "MaxReservations",
1238         "validation_function": validation.is_integer,
1239         "value": 10,
1240         "type": Attribute.INTEGER,
1241         "help": "Maximum number of reservations to accept per cycle"
1242     }),
1243     "OnTime": dict({
1244         "name": "OnTime",
1245         "validation_function": validation.is_string,
1246         "value": "Constant:1",
1247         "type": Attribute.STRING,
1248         "help": "A RandomVariable used to pick the duration of the 'On' state."
1249     }),
1250     "RxGainPhy1": dict({
1251         "name": "RxGainPhy1",
1252         "validation_function": validation.is_double,
1253         "value": 0.0,
1254         "type": Attribute.DOUBLE,
1255         "help": "Gain added to incoming signal at receiver of Phy1"
1256     }),
1257     "Gateway": dict({
1258         "name": "Gateway",
1259         "validation_function": validation.is_ip4_address,
1260         "value": None,
1261         "type": Attribute.STRING,
1262         "help": "The IP address of the default gateway to assign to the host machine, when in ConfigureLocal mode."
1263     }),
1264     "GridWidth": dict({
1265         "name": "GridWidth",
1266         "validation_function": validation.is_integer,
1267         "value": 10,
1268         "type": Attribute.INTEGER,
1269         "help": "The number of objects layed out on a line."
1270     }),
1271     "NormalVelocity": dict({
1272         "name": "NormalVelocity",
1273         "validation_function": validation.is_string,
1274         "value": "Normal:0:1:10",
1275         "type": Attribute.STRING,
1276         "help": "A gaussian random variable used to calculate the next velocity value."
1277     }),
1278     "ReferenceDistance": dict({
1279         "name": "ReferenceDistance",
1280         "validation_function": validation.is_double,
1281         "value": 1.0,
1282         "type": Attribute.DOUBLE,
1283         "help": "The distance at which the reference loss is calculated (m)"
1284     }),
1285     "m1": dict({
1286         "name": "m1",
1287         "validation_function": validation.is_double,
1288         "value": 0.75,
1289         "type": Attribute.DOUBLE,
1290         "help": "m1 for distances smaller than Distance2. Default is 0.75."
1291     }),
1292     "m0": dict({
1293         "name": "m0",
1294         "validation_function": validation.is_double,
1295         "value": 1.5,
1296         "type": Attribute.DOUBLE,
1297         "help": "m0 for distances smaller than Distance1. Default is 1.5."
1298     }),
1299     "BroadcastInterval": dict({
1300         "name": "BroadcastInterval",
1301         "validation_function": validation.is_time,
1302         "value": "5000000000ns",
1303         "type": Attribute.STRING,
1304         "help": "How often we must send broadcast packets"
1305     }),
1306     "Variable": dict({
1307         "name": "Variable",
1308         "validation_function": validation.is_string,
1309         "value": "Uniform:0:1",
1310         "type": Attribute.STRING,
1311         "help": "The random variable which generates random delays (s)."
1312     }),
1313     "MacAddress": dict({
1314         "name": "MacAddress",
1315         "validation_function": validation.is_string,
1316         "value": "ff:ff:ff:ff:ff:ff",
1317         "type": Attribute.STRING,
1318         "help": "The MAC address to assign to the tap device, when in ConfigureLocal mode. This address will override the discovered MAC address of the simulated device."
1319     }),
1320     "MaxBeaconShiftValue": dict({
1321         "name": "MaxBeaconShiftValue",
1322         "validation_function": validation.is_integer,
1323         "value": 15,
1324         "type": Attribute.INTEGER,
1325         "help": "Maximum number of TUs for beacon shifting"
1326     }),
1327     "MeanDirection": dict({
1328         "name": "MeanDirection",
1329         "validation_function": validation.is_string,
1330         "value": "Uniform:0:6.28319",
1331         "type": Attribute.STRING,
1332         "help": "A random variable used to assign the average direction."
1333     }),
1334     "NextHopWait": dict({
1335         "name": "NextHopWait",
1336         "validation_function": validation.is_time,
1337         "value": "50000000ns",
1338         "type": Attribute.STRING,
1339         "help": "Period of our waiting for the neighbour's RREP_ACK = 10 ms + NodeTraversalTime"
1340     }),
1341     "EnableBeaconCollisionAvoidance": dict({
1342         "name": "EnableBeaconCollisionAvoidance",
1343         "validation_function": validation.is_bool,
1344         "value": True,
1345         "type": Attribute.BOOL,
1346         "help": "Enable/Disable Beacon collision avoidance."
1347     }),
1348     "TimeoutBuffer": dict({
1349         "name": "TimeoutBuffer",
1350         "validation_function": validation.is_integer,
1351         "value": 2,
1352         "type": Attribute.INTEGER,
1353         "help": "Its purpose is to provide a buffer for the timeout so that if the RREP is delayed due to congestion, a timeout is less likely to occur while the RREP is still en route back to the source."
1354     }),
1355     "PeriodicEnergyUpdateInterval": dict({
1356         "name": "PeriodicEnergyUpdateInterval",
1357         "validation_function": validation.is_time,
1358         "value": "1000000000ns",
1359         "type": Attribute.STRING,
1360         "help": "Time between two consecutive periodic energy updates."
1361     }),
1362     "RxCurrentA": dict({
1363         "name": "RxCurrentA",
1364         "validation_function": validation.is_double,
1365         "value": 0.019699999999999999,
1366         "type": Attribute.DOUBLE,
1367         "help": "The radio Rx current in Ampere."
1368     }),
1369     "LocalIpv6": dict({
1370         "name": "LocalIpv6",
1371         "validation_function": validation.is_string,
1372         "value": "0000:0000:0000:0000:0000:0000:0000:0000",
1373         "type": Attribute.STRING,
1374         "help": "Local Ipv6Address of the sender"
1375     }),
1376     "Remote": dict({
1377         "name": "Remote",
1378         "validation_function": ns3_validation.is_address,
1379         "value": None,
1380         "type": Attribute.STRING,
1381         "help": "The address of the destination"
1382     }),
1383     "SSAntennaHeight": dict({
1384         "name": "SSAntennaHeight",
1385         "validation_function": validation.is_double,
1386         "value": 3.0,
1387         "type": Attribute.DOUBLE,
1388         "help": " SS Antenna Height (default is 3m)."
1389     }),
1390     "MeanVelocity": dict({
1391         "name": "MeanVelocity",
1392         "validation_function": validation.is_string,
1393         "value": "Uniform:0:1",
1394         "type": Attribute.STRING,
1395         "help": "A random variable used to assign the average velocity."
1396     }),
1397     "NumberOfRates": dict({
1398         "name": "NumberOfRates",
1399         "validation_function": validation.is_integer,
1400         "value": 0,
1401         "type": Attribute.INTEGER,
1402         "help": "Number of rate divisions supported by each PHY"
1403     }),
1404     "BSAntennaHeight": dict({
1405         "name": "BSAntennaHeight",
1406         "validation_function": validation.is_double,
1407         "value": 50.0,
1408         "type": Attribute.DOUBLE,
1409         "help": " BS Antenna Height (default is 50m)."
1410     }),
1411     "Interval": dict({
1412         "name": "Interval",
1413         "validation_function": validation.is_time,
1414         "value": "1000000000ns",
1415         "type": Attribute.STRING,
1416         "help": "The time to wait between packets"
1417     }),
1418     "CcaMode1Threshold": dict({
1419         "name": "CcaMode1Threshold",
1420         "validation_function": validation.is_double,
1421         "value": -99.0,
1422         "type": Attribute.DOUBLE,
1423         "help": "The energy of a received signal should be higher than this threshold (dbm) to allow the PHY layer to declare CCA BUSY state"
1424     }),
1425     "Mtu": dict({
1426         "name": "Mtu",
1427         "validation_function": validation.is_integer,
1428         "value": 1500,
1429         "type": Attribute.INTEGER,
1430         "help": "The MAC-level Maximum Transmission Unit"
1431     }),
1432     "pmtlFor12mbps": dict({
1433         "name": "pmtlFor12mbps",
1434         "validation_function": validation.is_double,
1435         "value": 0.2868,
1436         "type": Attribute.DOUBLE,
1437         "help": "Pmtl parameter for 12 Mbs data mode"
1438     }),
1439     "MaxRtsWnd": dict({
1440         "name": "MaxRtsWnd",
1441         "validation_function": validation.is_integer,
1442         "value": 40,
1443         "type": Attribute.INTEGER,
1444         "help": "Maximum value for Rts window of Aarf-CD"
1445     }),
1446     "HoldingTimeout": dict({
1447         "name": "HoldingTimeout",
1448         "validation_function": validation.is_time,
1449         "value": "40960000ns",
1450         "type": Attribute.STRING,
1451         "help": "Holding timeout"
1452     }),
1453     "AssocRequestTimeout": dict({
1454         "name": "AssocRequestTimeout",
1455         "validation_function": validation.is_time,
1456         "value": "500000000ns",
1457         "type": Attribute.STRING,
1458         "help": "The interval between two consecutive assoc request attempts."
1459     }),
1460     "Timeout": dict({
1461         "name": "Timeout",
1462         "validation_function": validation.is_time,
1463         "value": "50000000ns",
1464         "type": Attribute.STRING,
1465         "help": "Timeout for the RRAA BASIC loss estimaton block (s)"
1466     }),
1467     "Dot11MeshHWMPmaxPREQretries": dict({
1468         "name": "Dot11MeshHWMPmaxPREQretries",
1469         "validation_function": validation.is_integer,
1470         "value": 3,
1471         "type": Attribute.INTEGER,
1472         "help": "Maximum number of retries before we suppose the destination to be unreachable"
1473     }),
1474     "Z": dict({
1475         "name": "Z",
1476         "validation_function": validation.is_string,
1477         "value": "Uniform:0:1",
1478         "type": Attribute.STRING,
1479         "help": "A random variable which represents the z coordinate of a position in a random box."
1480     }),
1481     "CW": dict({
1482         "name": "CW",
1483         "validation_function": validation.is_integer,
1484         "value": 10,
1485         "type": Attribute.INTEGER,
1486         "help": "The MAC parameter CW"
1487     }),
1488     "MaxPacketNumber": dict({
1489         "name": "MaxPacketNumber",
1490         "validation_function": validation.is_integer,
1491         "value": 400,
1492         "type": Attribute.INTEGER,
1493         "help": "If a packet arrives when there are already this number of packets, it is dropped."
1494     }),
1495     "RemoteIpv6": dict({
1496         "name": "RemoteIpv6",
1497         "validation_function": validation.is_string,
1498         "value": "0000:0000:0000:0000:0000:0000:0000:0000",
1499         "type": Attribute.STRING,
1500         "help": "The Ipv6Address of the outbound packets"
1501     }),
1502     "RttEstimatorFactory": dict({
1503         "name": "RttEstimatorFactory",
1504         "validation_function": validation.is_string,
1505         "value": "ns3::RttMeanDeviation[]",
1506         "type": Attribute.STRING,
1507         "help": "How RttEstimator objects are created."
1508     }),
1509     "TxPower": dict({
1510         "name": "TxPower",
1511         "validation_function": validation.is_double,
1512         "value": 190.0,
1513         "type": Attribute.DOUBLE,
1514         "help": "Transmission output power in dB"
1515     }),
1516     "pmtlFor36mbps": dict({
1517         "name": "pmtlFor36mbps",
1518         "validation_function": validation.is_double,
1519         "value": 0.33629999999999999,
1520         "type": Attribute.DOUBLE,
1521         "help": "Pmtl parameter for 36 Mbs data mode"
1522     }),
1523     "MinRtsWnd": dict({
1524         "name": "MinRtsWnd",
1525         "validation_function": validation.is_integer,
1526         "value": 1,
1527         "type": Attribute.INTEGER,
1528         "help": "Minimum value for Rts window of Aarf-CD"
1529     }),
1530     "Frequency": dict({
1531         "name": "Frequency",
1532         "validation_function": validation.is_double,
1533         "value": 2300000000.0,
1534         "type": Attribute.DOUBLE,
1535         "help": "The Frequency  (default is 2.3 GHz)."
1536     }),
1537     "Willingness": dict({
1538         "name": "Willingness",
1539         "validation_function": validation.is_enum,
1540         "value": "default",
1541         "allowed": ["never",
1542      "low",
1543      "default",
1544      "high",
1545      "always"],
1546         "type": Attribute.ENUM,
1547         "help": "Willingness of a node to carry and forward traffic for other nodes."
1548     }),
1549     "DoFlag": dict({
1550         "name": "DoFlag",
1551         "validation_function": validation.is_bool,
1552         "value": False,
1553         "type": Attribute.BOOL,
1554         "help": "Destination only HWMP flag"
1555     }),
1556     "BlockAckThreshold": dict({
1557         "name": "BlockAckThreshold",
1558         "validation_function": validation.is_integer,
1559         "value": 0,
1560         "type": Attribute.INTEGER,
1561         "help": "If number of packets in this queue reaches this value, block ack mechanism is used. If this value is 0, block ack is never used."
1562     }),
1563     "TimerK": dict({
1564         "name": "TimerK",
1565         "validation_function": validation.is_double,
1566         "value": 2.0,
1567         "type": Attribute.DOUBLE,
1568         "help": "Multiplication factor for the timer threshold in the AARF algorithm."
1569     }),
1570     "Period": dict({
1571         "name": "Period",
1572         "validation_function": validation.is_time,
1573         "value": "1000000000ns",
1574         "type": Attribute.STRING,
1575         "help": "the period (=1/frequency)"
1576     }),
1577     "Library": dict({
1578         "name": "Library",
1579         "validation_function": validation.is_string,
1580         "value": "liblinux2.6.26.so",
1581         "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable,
1582         "type": Attribute.STRING,
1583         "help": "Set the linux library to be used to create the stack"
1584     }),
1585     "DcdInterval": dict({
1586         "name": "DcdInterval",
1587         "validation_function": validation.is_time,
1588         "value": "3000000000ns",
1589         "type": Attribute.STRING,
1590         "help": "Time between transmission of DCD messages. Maximum value is 10s."
1591     }),
1592     "SpreadCoef": dict({
1593         "name": "SpreadCoef",
1594         "validation_function": validation.is_double,
1595         "value": 1.5,
1596         "type": Attribute.DOUBLE,
1597         "help": "Spreading coefficient used in calculation of Thorp's approximation"
1598     }),
1599     "ewndFor36mbps": dict({
1600         "name": "ewndFor36mbps",
1601         "validation_function": validation.is_integer,
1602         "value": 40,
1603         "type": Attribute.INTEGER,
1604         "help": "ewnd parameter for 36 Mbs data mode"
1605     }),
1606     "MaxTtl": dict({
1607         "name": "MaxTtl",
1608         "validation_function": validation.is_integer,
1609         "value": 32,
1610         "type": Attribute.INTEGER,
1611         "help": "Initial value of Time To Live field"
1612     }),
1613     "MinDistance": dict({
1614         "name": "MinDistance",
1615         "validation_function": validation.is_double,
1616         "value": 0.5,
1617         "type": Attribute.DOUBLE,
1618         "help": "The distance under which the propagation model refuses to give results (m)"
1619     }),
1620     "RxNoiseFigure": dict({
1621         "name": "RxNoiseFigure",
1622         "validation_function": validation.is_double,
1623         "value": 7.0,
1624         "type": Attribute.DOUBLE,
1625         "help": "Loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the receiver. According to Wikipedia (http://en.wikipedia.org/wiki/Noise_figure), this is 'the difference in decibels (dB) between the noise output of the actual receiver to the noise output of an  ideal receiver with the same overall gain and bandwidth when the receivers  are connected to sources at the standard noise temperature T0 (usually 290 K)'."
1626     }),
1627     "DopplerFreq": dict({
1628         "name": "DopplerFreq",
1629         "validation_function": validation.is_double,
1630         "value": 0.0,
1631         "type": Attribute.DOUBLE,
1632         "help": "The doppler frequency in Hz (f_d = v / lambda = v * f / c), the default is 0)"
1633     }),
1634     "RetryTimeout": dict({
1635         "name": "RetryTimeout",
1636         "validation_function": validation.is_time,
1637         "value": "40960000ns",
1638         "type": Attribute.STRING,
1639         "help": "Retry timeout"
1640     }),
1641     "ControlMode": dict({
1642         "name": "ControlMode",
1643         "validation_function": validation.is_string,
1644         "value": "OfdmRate6Mbps",
1645         "type": Attribute.STRING,
1646         "help": "The transmission mode to use for every control packet transmission."
1647     }),
1648     "Size": dict({
1649         "name": "Size",
1650         "validation_function": validation.is_integer,
1651         "value": 56,
1652         "type": Attribute.INTEGER,
1653         "help": "The number of data bytes to be sent, real packet will be 8 (ICMP) + 20 (IP) bytes longer."
1654     }),
1655     "ErrorRate": dict({
1656         "name": "ErrorRate",
1657         "validation_function": validation.is_double,
1658         "value": 0.0,
1659         "type": Attribute.DOUBLE,
1660         "help": "The error rate."
1661     }),
1662     "PacketLength": dict({
1663         "name": "PacketLength",
1664         "validation_function": validation.is_double,
1665         "value": 1200.0,
1666         "type": Attribute.DOUBLE,
1667         "help": "The packet length used for calculating mode TxTime"
1668     }),
1669     "MaxCost": dict({
1670         "name": "MaxCost",
1671         "validation_function": validation.is_integer,
1672         "value": 32,
1673         "type": Attribute.INTEGER,
1674         "help": "Cost threshold after which packet will be dropped"
1675     }),
1676     "SegmentSize": dict({
1677         "name": "SegmentSize",
1678         "validation_function": validation.is_double,
1679         "value": 6000.0,
1680         "type": Attribute.DOUBLE,
1681         "help": "The largest allowable segment size packet"
1682     }),
1683     "poriFor18mbps": dict({
1684         "name": "poriFor18mbps",
1685         "validation_function": validation.is_double,
1686         "value": 0.13250000000000001,
1687         "type": Attribute.DOUBLE,
1688         "help": "Pori parameter for 18 Mbs data mode"
1689     }),
1690     "UnicastPerrThreshold": dict({
1691         "name": "UnicastPerrThreshold",
1692         "validation_function": validation.is_integer,
1693         "value": 32,
1694         "type": Attribute.INTEGER,
1695         "help": "Maximum number of PERR receivers, when we send a PERR as a chain of unicasts"
1696     }),
1697     "EnableHello": dict({
1698         "name": "EnableHello",
1699         "validation_function": validation.is_bool,
1700         "value": True,
1701         "type": Attribute.BOOL,
1702         "help": "Indicates whether a hello messages enable."
1703     }),
1704     "BeaconGeneration": dict({
1705         "name": "BeaconGeneration",
1706         "validation_function": validation.is_bool,
1707         "value": True,
1708         "type": Attribute.BOOL,
1709         "help": "Whether or not beacons are generated."
1710     }),
1711     "MaxUcdInterval": dict({
1712         "name": "MaxUcdInterval",
1713         "validation_function": validation.is_time,
1714         "value": "10000000000ns",
1715         "type": Attribute.STRING,
1716         "help": "Maximum time between transmission of UCD messages. Maximum is 10s"
1717     }),
1718     "Dot11MeshHWMPperrMinInterval": dict({
1719         "name": "Dot11MeshHWMPperrMinInterval",
1720         "validation_function": validation.is_time,
1721         "value": "102400000ns",
1722         "type": Attribute.STRING,
1723         "help": "Minimal interval between to successive PREQs"
1724     }),
1725     "Delay": dict({
1726         "name": "Delay",
1727         "validation_function": validation.is_time,
1728         "value": "0ns",
1729         "type": Attribute.STRING,
1730         "help": "Transmission delay through the channel"
1731     }),
1732     "SIFS": dict({
1733         "name": "SIFS",
1734         "validation_function": validation.is_time,
1735         "value": "200000000ns",
1736         "type": Attribute.STRING,
1737         "help": "Spacing to give between frames (this should match gateway)"
1738     }),
1739     "MaxRange": dict({
1740         "name": "MaxRange",
1741         "validation_function": validation.is_double,
1742         "value": 250.0,
1743         "type": Attribute.DOUBLE,
1744         "help": "Maximum Transmission Range (meters)"
1745     }),
1746     "LostDlMapInterval": dict({
1747         "name": "LostDlMapInterval",
1748         "validation_function": validation.is_time,
1749         "value": "500000000ns",
1750         "type": Attribute.STRING,
1751         "help": "Time since last received DL-MAP message before downlink synchronization is considered lost. Maximum is 600ms"
1752     }),
1753     "IntervalT2": dict({
1754         "name": "IntervalT2",
1755         "validation_function": validation.is_time,
1756         "value": "10000000000ns",
1757         "type": Attribute.STRING,
1758         "help": "Wait for broadcast ranging timeout, i.e., wait for initial ranging opportunity. Maximum is 5*Ranging interval"
1759     }),
1760     "TurnOffRtsAfterRateDecrease": dict({
1761         "name": "TurnOffRtsAfterRateDecrease",
1762         "validation_function": validation.is_bool,
1763         "value": True,
1764         "type": Attribute.BOOL,
1765         "help": "If true the RTS mechanism will be turned off when the rate will be decreased"
1766     }),
1767     "MaxContentionRangingRetries": dict({
1768         "name": "MaxContentionRangingRetries",
1769         "validation_function": validation.is_integer,
1770         "value": 16,
1771         "type": Attribute.INTEGER,
1772         "help": "Number of retries on contention Ranging Requests"
1773     }),
1774     "DAD": dict({
1775         "name": "DAD",
1776         "validation_function": validation.is_bool,
1777         "value": True,
1778         "type": Attribute.BOOL,
1779         "help": "Always do DAD check."
1780     }),
1781     "RemotePort": dict({
1782         "name": "RemotePort",
1783         "validation_function": validation.is_integer,
1784         "value": 0,
1785         "type": Attribute.INTEGER,
1786         "help": "The destination port of the outbound packets"
1787     }),
1788     "Distance0": dict({
1789         "name": "Distance0",
1790         "validation_function": validation.is_double,
1791         "value": 1.0,
1792         "type": Attribute.DOUBLE,
1793         "help": "Beginning of the first (near) distance field"
1794     }),
1795     "FlowInterruptionsMinTime": dict({
1796         "name": "FlowInterruptionsMinTime",
1797         "validation_function": validation.is_time,
1798         "value": "500000000ns",
1799         "type": Attribute.STRING,
1800         "help": "The minimum inter-arrival time that is considered a flow interruption."
1801     }),
1802     "PacketSize": dict({
1803         "name": "PacketSize",
1804         "validation_function": validation.is_integer,
1805         "value": 512,
1806         "type": Attribute.INTEGER,
1807         "help": "The size of packets sent in on state"
1808     }),
1809     "LookAroundRate": dict({
1810         "name": "LookAroundRate",
1811         "validation_function": validation.is_double,
1812         "value": 10.0,
1813         "type": Attribute.DOUBLE,
1814         "help": "the percentage to try other rates"
1815     }),
1816     "NumberOfHops": dict({
1817         "name": "NumberOfHops",
1818         "validation_function": validation.is_integer,
1819         "value": 13,
1820         "type": Attribute.INTEGER,
1821         "help": "Number of frequencies in hopping pattern"
1822     }),
1823     "Dot11MeshHWMPpathToRootInterval": dict({
1824         "name": "Dot11MeshHWMPpathToRootInterval",
1825         "validation_function": validation.is_time,
1826         "value": "2048000000ns",
1827         "type": Attribute.STRING,
1828         "help": "Interval between two successive proactive PREQs"
1829     }),
1830     "ProbeRequestTimeout": dict({
1831         "name": "ProbeRequestTimeout",
1832         "validation_function": validation.is_time,
1833         "value": "50000000ns",
1834         "type": Attribute.STRING,
1835         "help": "The interval between two consecutive probe request attempts."
1836     }),
1837     "RreqRateLimit": dict({
1838         "name": "RreqRateLimit",
1839         "validation_function": validation.is_integer,
1840         "value": 10,
1841         "type": Attribute.INTEGER,
1842         "help": "Maximum number of RREQ per second."
1843     }),
1844     "RangReqOppSize": dict({
1845         "name": "RangReqOppSize",
1846         "validation_function": validation.is_integer,
1847         "value": 8,
1848         "type": Attribute.INTEGER,
1849         "help": "The ranging opportunity size in symbols"
1850     }),
1851     "BwReqOppSize": dict({
1852         "name": "BwReqOppSize",
1853         "validation_function": validation.is_integer,
1854         "value": 2,
1855         "type": Attribute.INTEGER,
1856         "help": "The bandwidth request opportunity size in symbols"
1857     }),
1858     "Rho": dict({
1859         "name": "Rho",
1860         "validation_function": validation.is_string,
1861         "value": "Uniform:0:200",
1862         "type": Attribute.STRING,
1863         "help": "A random variable which represents the radius of a position in a random disc."
1864     }),
1865     "Address": dict({
1866         "name": "Address",
1867         "validation_function": validation.is_string,
1868         "value": "ff:ff:ff:ff:ff:ff",
1869         "type": Attribute.STRING,
1870         "help": "The MAC address of this device."
1871     }),
1872     "RetryStep": dict({
1873         "name": "RetryStep",
1874         "validation_function": validation.is_double,
1875         "value": 0.01,
1876         "type": Attribute.DOUBLE,
1877         "help": "Retry rate increment"
1878     }),
1879     "m2": dict({
1880         "name": "m2",
1881         "validation_function": validation.is_double,
1882         "value": 0.75,
1883         "type": Attribute.DOUBLE,
1884         "help": "m2 for distances greater than Distance2. Default is 0.75."
1885     }),
1886     "Distance": dict({
1887         "name": "Distance",
1888         "validation_function": validation.is_double,
1889         "value": 1.0,
1890         "type": Attribute.DOUBLE,
1891         "help": "Change current direction and speed after moving for this distance."
1892     }),
1893     "InterframeGap": dict({
1894         "name": "InterframeGap",
1895         "validation_function": validation.is_time,
1896         "value": "0ns",
1897         "type": Attribute.STRING,
1898         "help": "The time to wait between packet (frame) transmissions"
1899     }),
1900     "EnableBroadcast": dict({
1901         "name": "EnableBroadcast",
1902         "validation_function": validation.is_bool,
1903         "value": True,
1904         "type": Attribute.BOOL,
1905         "help": "Indicates whether a broadcast data packets forwarding enable."
1906     }),
1907     "HelloInterval": dict({
1908         "name": "HelloInterval",
1909         "validation_function": validation.is_time,
1910         "value": "2000000000ns",
1911         "type": Attribute.STRING,
1912         "help": "HELLO messages emission interval."
1913     }),
1914     "RemoteAddress": dict({
1915         "name": "RemoteAddress",
1916         "validation_function": validation.is_ip4_address,
1917         "value": None,
1918         "type": Attribute.STRING,
1919         "help": "The destination Ipv4Address of the outbound packets"
1920     }),
1921     "Rss": dict({
1922         "name": "Rss",
1923         "validation_function": validation.is_double,
1924         "value": -150.0,
1925         "type": Attribute.DOUBLE,
1926         "help": "The fixed receiver Rss."
1927     }),
1928     "EWMA": dict({
1929         "name": "EWMA",
1930         "validation_function": validation.is_double,
1931         "value": 75.0,
1932         "type": Attribute.DOUBLE,
1933         "help": "EWMA level"
1934     }),
1935     "FailureRatio": dict({
1936         "name": "FailureRatio",
1937         "validation_function": validation.is_double,
1938         "value": 0.33333299999999999,
1939         "type": Attribute.DOUBLE,
1940         "help": "Ratio of minimum erroneous transmissions needed to switch to a lower rate"
1941     }),
1942     "Bounds": dict({
1943         "name": "Bounds",
1944         "validation_function": validation.is_string,
1945         "value": "-100|100|-100|100|0|100",
1946         "type": Attribute.STRING,
1947         "help": "Bounds of the area to cruise."
1948     }),
1949     "pmtlFor18mbps": dict({
1950         "name": "pmtlFor18mbps",
1951         "validation_function": validation.is_double,
1952         "value": 0.37219999999999998,
1953         "type": Attribute.DOUBLE,
1954         "help": "Pmtl parameter for 18 Mbs data mode"
1955     }),
1956     "MinX": dict({
1957         "name": "MinX",
1958         "validation_function": validation.is_double,
1959         "value": 1.0,
1960         "type": Attribute.DOUBLE,
1961         "help": "The x coordinate where the grid starts."
1962     }),
1963     "TotalRate": dict({
1964         "name": "TotalRate",
1965         "validation_function": validation.is_integer,
1966         "value": 4096,
1967         "type": Attribute.INTEGER,
1968         "help": "Total available channel rate in bps (for a single channel, without splitting reservation channel)"
1969     }),
1970     "Exponent2": dict({
1971         "name": "Exponent2",
1972         "validation_function": validation.is_double,
1973         "value": 3.7999999999999998,
1974         "type": Attribute.DOUBLE,
1975         "help": "The exponent for the third field."
1976     }),
1977     "MaxDelay": dict({
1978         "name": "MaxDelay",
1979         "validation_function": validation.is_time,
1980         "value": "10000000000ns",
1981         "type": Attribute.STRING,
1982         "help": "If a packet stays longer than this delay in the queue, it is dropped."
1983     }),
1984     "MaxQueueSize": dict({
1985         "name": "MaxQueueSize",
1986         "validation_function": validation.is_integer,
1987         "value": 255,
1988         "type": Attribute.INTEGER,
1989         "help": "Maximum number of packets we can store when resolving route"
1990     }),
1991     "Mode": dict({
1992         "name": "Mode",
1993         "validation_function": validation.is_enum,
1994         "value": "Distance",
1995         "allowed": ["Distance",
1996      "Time"],
1997         "type": Attribute.ENUM,
1998         "help": "The mode indicates the condition used to change the current speed and direction"
1999     }),
2000     "rho": dict({
2001         "name": "rho",
2002         "validation_function": validation.is_double,
2003         "value": 0.0,
2004         "type": Attribute.DOUBLE,
2005         "help": "The radius of the disc"
2006     }),
2007     "ProbeThreshold": dict({
2008         "name": "ProbeThreshold",
2009         "validation_function": validation.is_integer,
2010         "value": 1,
2011         "type": Attribute.INTEGER,
2012         "help": "The number of consecutive transmissions failure to activate the RTS probe."
2013     }),
2014     "Y": dict({
2015         "name": "Y",
2016         "validation_function": validation.is_double,
2017         "value": 0.0,
2018         "type": Attribute.DOUBLE,
2019         "help": "The y coordinate of the center of the  disc."
2020     }),
2021     "poriFor6mbps": dict({
2022         "name": "poriFor6mbps",
2023         "validation_function": validation.is_double,
2024         "value": 0.5,
2025         "type": Attribute.DOUBLE,
2026         "help": "Pori parameter for 6 Mbs data mode"
2027     }),
2028     "Root": dict({
2029         "name": "Root",
2030         "validation_function": validation.is_string,
2031         "value": "ff:ff:ff:ff:ff:ff",
2032         "type": Attribute.STRING,
2033         "help": "The MAC address of root mesh point."
2034     }),
2035     "RxQueueSize": dict({
2036         "name": "RxQueueSize",
2037         "validation_function": validation.is_integer,
2038         "value": 1000,
2039         "type": Attribute.INTEGER,
2040         "help": "Maximum size of the read queue.  This value limits number of packets that have been read from the network into a memory buffer but have not yet been processed by the simulator."
2041     }),
2042     "IntervalT8": dict({
2043         "name": "IntervalT8",
2044         "validation_function": validation.is_time,
2045         "value": "50000000ns",
2046         "type": Attribute.STRING,
2047         "help": "Wait for DSA/DSC Acknowledge timeout. Maximum 300ms."
2048     }),
2049     "NetDiameter": dict({
2050         "name": "NetDiameter",
2051         "validation_function": validation.is_integer,
2052         "value": 35,
2053         "type": Attribute.INTEGER,
2054         "help": "Net diameter measures the maximum possible number of hops between two nodes in the network"
2055     }),
2056     "Dot11sMeshHeaderLength": dict({
2057         "name": "Dot11sMeshHeaderLength",
2058         "validation_function": validation.is_integer,
2059         "value": 6,
2060         "type": Attribute.INTEGER,
2061         "help": "Length of the mesh header"
2062     }),
2063     "JitterBinWidth": dict({
2064         "name": "JitterBinWidth",
2065         "validation_function": validation.is_double,
2066         "value": 0.001,
2067         "type": Attribute.DOUBLE,
2068         "help": "The width used in the jitter histogram."
2069     }),
2070     "IntervalT7": dict({
2071         "name": "IntervalT7",
2072         "validation_function": validation.is_time,
2073         "value": "100000000ns",
2074         "type": Attribute.STRING,
2075         "help": "wait for DSA/DSC/DSD Response timeout. Maximum is 1s"
2076     }),
2077     "Verbose": dict({
2078         "name": "Verbose",
2079         "validation_function": validation.is_bool,
2080         "value": False,
2081         "type": Attribute.BOOL,
2082         "help": "Produce usual output."
2083     }),
2084     "IntervalT1": dict({
2085         "name": "IntervalT1",
2086         "validation_function": validation.is_time,
2087         "value": "50000000000ns",
2088         "type": Attribute.STRING,
2089         "help": "Wait for DCD timeout. Maximum is 5*maxDcdInterval"
2090     }),
2091     "DefaultLoss": dict({
2092         "name": "DefaultLoss",
2093         "validation_function": validation.is_double,
2094         "value": 1.7976900000000001e+308,
2095         "type": Attribute.DOUBLE,
2096         "help": "The default value for propagation loss, dB."
2097     }),
2098     "Loss": dict({
2099         "name": "Loss",
2100         "validation_function": validation.is_double,
2101         "value": 1.7976900000000001e+308,
2102         "type": Attribute.DOUBLE,
2103         "help": "The default value for propagation loss, dB."
2104     }),
2105    "Symmetric": dict({
2106         "name": "Symmetric",
2107         "validation_function": validation.is_bool,
2108         "value": True,
2109         "type": Attribute.BOOL,
2110         "help": "Symmetry between in the propagation loss model between nodes."
2111     }),
2112     "IntervalT3": dict({
2113         "name": "IntervalT3",
2114         "validation_function": validation.is_time,
2115         "value": "200000000ns",
2116         "type": Attribute.STRING,
2117         "help": "ranging Response reception timeout following the transmission of a ranging request. Maximum is 200ms"
2118     }),
2119     "MaxPackets": dict({
2120         "name": "MaxPackets",
2121         "validation_function": validation.is_integer,
2122         "value": 100,
2123         "type": Attribute.INTEGER,
2124         "help": "The maximum number of packets accepted by this DropTailQueue."
2125     }),
2126     "EnableLearning": dict({
2127         "name": "EnableLearning",
2128         "validation_function": validation.is_bool,
2129         "value": True,
2130         "type": Attribute.BOOL,
2131         "help": "Enable the learning mode of the Learning Bridge"
2132     }),
2133     "Rate": dict({
2134         "name": "Rate",
2135         "validation_function": validation.is_string,
2136         "value": "1000000bps",
2137         "type": Attribute.STRING,
2138         "help": "The PHY rate used by this device"
2139     }),
2140     "RetryRate": dict({
2141         "name": "RetryRate",
2142         "validation_function": validation.is_double,
2143         "value": 0.20000000000000001,
2144         "type": Attribute.DOUBLE,
2145         "help": "Number of retry attempts per second (of RTS/GWPING)"
2146     }),
2147     "Threshold": dict({
2148         "name": "Threshold",
2149         "validation_function": validation.is_double,
2150         "value": 8.0,
2151         "type": Attribute.DOUBLE,
2152         "help": "SINR cutoff for good packet reception"
2153     }),
2154     "SuccessThreshold": dict({
2155         "name": "SuccessThreshold",
2156         "validation_function": validation.is_integer,
2157         "value": 10,
2158         "type": Attribute.INTEGER,
2159         "help": "The minimum number of sucessfull transmissions to try a new rate."
2160     }),
2161     "Speed": dict({
2162         "name": "Speed",
2163         "validation_function": validation.is_double,
2164         "value": 300000000.0,
2165         "type": Attribute.DOUBLE,
2166         "help": "The speed (m/s)"
2167     }),
2168     "RndSpeed": dict({
2169         "name": "Speed",
2170         "validation_function": validation.is_string,
2171         "value": "Uniform:1:2",
2172         "type": Attribute.STRING,
2173         "help": "Random variable to control the speed (m/s)."
2174     }),
2175     "Port": dict({
2176         "name": "Port",
2177         "validation_function": validation.is_integer,
2178         "value": 9,
2179         "type": Attribute.INTEGER,
2180         "help": "Port on which we listen for incoming packets."
2181     }),
2182     "NoisePowerSpectralDensity": dict({
2183         "name": "NoisePowerSpectralDensity",
2184         "validation_function": validation.is_double,
2185         "value": 4.1400000000000002e-21,
2186         "type": Attribute.DOUBLE,
2187         "help": "the power spectral density of the measuring instrument noise, in Watt/Hz. Mostly useful to make spectrograms look more similar to those obtained by real devices. Defaults to the value for thermal noise at 300K."
2188     }),
2189     "RaiseThreshold": dict({
2190         "name": "RaiseThreshold",
2191         "validation_function": validation.is_integer,
2192         "value": 10,
2193         "type": Attribute.INTEGER,
2194         "help": "Attempt to raise the rate if we hit that threshold"
2195      }),
2196     "ProtocolNumber": dict({
2197         "name": "ProtocolNumber",
2198         "validation_function": validation.is_integer,
2199         "value": 0,
2200         "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable,
2201         "type": Attribute.INTEGER,
2202         "help": "The Ipv4 protocol number."
2203      }),
2204     "Position": dict({
2205         "name": "Position",
2206         "validation_function": validation.is_string,
2207         "value": "0:0:0",
2208         "type": Attribute.STRING,
2209         "help": "The current position of the mobility model."
2210      }),
2211     "Velocity": dict({
2212         "name": "Velocity",
2213         "validation_function": validation.is_string,
2214         "value": "0:0:0", 
2215         "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable,
2216         "type": Attribute.STRING,
2217         "help": "The current velocity of the mobility model."
2218      }),
2219     "StartTime": dict({
2220         "name": "StartTime",
2221         "validation_function": validation.is_string,
2222         "value": "0ns", 
2223         "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable,
2224         "type": Attribute.STRING,
2225         "help": "Time at which the application will start"
2226      }),
2227      "StopTime": dict({
2228         "name": "StopTime",
2229         "validation_function": validation.is_string,
2230         "value": "0ns", 
2231  
2232  
2233         "type": Attribute.STRING,
2234         "help": "Time at which the application will stop"
2235      }),
2236     "IsLowLatency": dict({
2237         "name": "IsLowLatency",
2238         "validation_function": validation.is_bool,
2239         "value": True, 
2240  
2241  
2242         "type": Attribute.BOOL,
2243         "help": "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."
2244      }),
2245      "MaxSsrc": dict({
2246         "name": "MaxSsrc",
2247         "validation_function": validation.is_integer,
2248         "value": 7,
2249         "type": Attribute.INTEGER,
2250         "help": "The maximum number of retransmission attempts for an RTS. This value will not have any effect on some rate control algorithms."
2251     }),
2252     "MaxSlrc": dict({
2253         "name": "MaxSlrc",
2254         "validation_function": validation.is_integer,
2255         "value": 7,
2256         "type": Attribute.INTEGER,
2257         "help": "The maximum number of retransmission attempts for a DATA packet. This value will not have any effect on some rate control algorithms."
2258     }),
2259     "NonUnicastMode": dict({
2260         "name": "NonUnicastMode",
2261         "validation_function": validation.is_string,
2262         "value": "Invalid-WifiMode",
2263         "type": Attribute.STRING,
2264         "help": "Wifi mode used for non-unicast transmissions."
2265     }),
2266     "RtsCtsThreshold": dict({
2267         "name": "RtsCtsThreshold",
2268         "validation_function": validation.is_integer,
2269         "value": 2346,
2270         "type": Attribute.INTEGER,
2271         "help": "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-2007, Section 9.2.6. This value will not have any effect on some rate control algorithms."
2272     }),
2273     "FragmentationThreshold": dict({
2274         "name": "FragmentationThreshold",
2275         "validation_function": validation.is_integer,
2276         "value": 2346,
2277         "type": Attribute.INTEGER,
2278         "help": "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-2007, Section 9.4. This value will not have any effect on some rate control algorithms."
2279     }),
2280     "Ssid": dict({
2281         "name": "Ssid",
2282         "validation_function": validation.is_string,
2283         "value": "default",
2284         "type": Attribute.STRING,
2285         "help": "The ssid we want to belong to."
2286     }),
2287     "AckTimeout": dict({
2288         "name": "AckTimeout",
2289         "validation_function": validation.is_time,
2290         "value": "75000ns",
2291         "type": Attribute.STRING,
2292         "help": "When this timeout expires, the DATA/ACK handshake has failed."
2293     }),
2294     "Sifs": dict({
2295         "name": "Sifs",
2296         "validation_function": validation.is_time,
2297         "value": "16000ns",
2298         "type": Attribute.STRING,
2299         "help": "The value of the SIFS constant."
2300     }),
2301     "MinCw": dict({
2302         "name": "MinCw",
2303         "validation_function": validation.is_integer,
2304         "value": 15,
2305         "type": Attribute.INTEGER,
2306         "help": "The minimum value of the contention window."
2307     }),
2308     "IsEnabled": dict({
2309         "name": "IsEnabled",
2310         "validation_function": validation.is_bool,
2311         "value": True, 
2312         "type": Attribute.BOOL,
2313         "help": "Whether this ErrorModel is enabled or not."
2314     }),
2315     "CompressedBlockAckTimeout": dict({
2316         "name": "CompressedBlockAckTimeout",
2317         "validation_function": validation.is_time,
2318         "value": "99000ns",
2319         "type": Attribute.STRING,
2320         "help": "When this timeout expires, the COMPRESSED_BLOCK_ACK_REQ/COMPRESSED_BLOCK_ACK handshake has failed."
2321     }),
2322     "MaxCw": dict({
2323         "name": "MaxCw",
2324         "validation_function": validation.is_integer,
2325         "value": 1023, 
2326         "type": Attribute.INTEGER,
2327         "help": "The maximum value of the contention window."
2328     }),
2329     "RTG": dict({
2330         "name": "RTG",
2331         "validation_function": validation.is_integer,
2332         "value": 0, 
2333         "type": Attribute.INTEGER,
2334         "help": "receive/transmit transition gap."
2335     }),
2336     "TTG": dict({
2337         "name": "TTG",
2338         "validation_function": validation.is_integer,
2339         "value": 0, 
2340         "type": Attribute.INTEGER,
2341         "help": "transmit/receive transition gap."
2342     }),
2343     "MinRTO": dict({
2344         "name": "MinRTO",
2345         "validation_function": validation.is_time,
2346         "value": "200000000ns",
2347         "type": Attribute.STRING,
2348         "help": "Minimum retransmit timeout value"
2349     }),
2350     "Pifs": dict({
2351         "name": "Pifs",
2352         "validation_function": validation.is_time,
2353         "value": "25000ns",
2354         "type": Attribute.STRING,
2355         "help": "The value of the PIFS constant."
2356     }),
2357     "InitialEstimation": dict({
2358         "name": "InitialEstimation",
2359         "validation_function": validation.is_time,
2360         "value": "1000000000ns",
2361         "type": Attribute.STRING,
2362         "help": "XXX"
2363     }),
2364     "BasicBlockAckTimeout": dict({
2365         "name": "BasicBlockAckTimeout",
2366         "validation_function": validation.is_time,
2367         "value": "281000ns",
2368         "type": Attribute.STRING,
2369         "help": "When this timeout expires, the BASIC_BLOCK_ACK_REQ/BASIC_BLOCK_ACK handshake has failed."
2370     }),
2371     "MaxMultiplier": dict({
2372         "name": "MaxMultiplier",
2373         "validation_function": validation.is_double,
2374         "value": 64.0,
2375         "type": Attribute.DOUBLE,
2376         "help": "XXX"
2377     }),
2378     "Aifsn": dict({
2379         "name": "Aifsn",
2380         "validation_function": validation.is_integer,
2381         "value": 2, 
2382         "type": Attribute.INTEGER,
2383         "help": "The AIFSN: the default value conforms to simple DCA."
2384     }),
2385     "OptionNumber": dict({
2386         "name": "OptionNumber",
2387         "validation_function": validation.is_integer,
2388         "value": 0,
2389         "type": Attribute.INTEGER,
2390         "help": "The IPv6 option number."
2391     }),
2392     "Slot": dict({
2393         "name": "Slot",
2394         "validation_function": validation.is_time,
2395         "value": "9000ns",
2396         "type": Attribute.STRING,
2397         "help": "The duration of a Slot."
2398     }),
2399     "IpForward": dict({
2400         "name": "IpForward",
2401         "validation_function": validation.is_bool,
2402         "value": True, 
2403         "type": Attribute.BOOL,
2404         "help": "Globally enable or disable IP forwarding for all current and future Ipv4 devices."
2405     }),
2406     "WeakEsModel": dict({
2407         "name": "WeakEsModel",
2408         "validation_function": validation.is_bool,
2409         "value": True, 
2410         "type": Attribute.BOOL,
2411         "help": "RFC1122 term for whether host accepts datagram with a dest. address on another interface"
2412     }),
2413     "MaxPropagationDelay": dict({
2414         "name": "MaxPropagationDelay",
2415         "validation_function": validation.is_time,
2416         "value": "3333ns",
2417         "type": Attribute.STRING,
2418         "help": "The maximum propagation delay. Unused for now."
2419     }),
2420     "ExtensionNumber": dict({
2421         "name": "ExtensionNumber",
2422         "validation_function": validation.is_integer,
2423         "value": 0, 
2424         "type": Attribute.INTEGER,
2425         "help": "The IPv6 extension number."
2426     }),
2427     "EifsNoDifs": dict({
2428         "name": "EifsNoDifs",
2429         "validation_function": validation.is_time,
2430         "value": "60000ns",
2431         "type": Attribute.STRING,
2432         "help": "The value of EIFS-DIFS"
2433     }),
2434     "CtsTimeout": dict({
2435         "name": "CtsTimeout",
2436         "validation_function": validation.is_time,
2437         "value": "75000ns",
2438         "type": Attribute.STRING,
2439         "help": "When this timeout expires, the RTS/CTS handshake has failed."
2440     }),
2441     "Standard": dict({
2442         "name": "Standard",
2443         "validation_function": validation.is_string,
2444         "value": "WIFI_PHY_STANDARD_80211a",
2445         "flags": Attribute.ExecReadOnly | \
2446                 Attribute.ExecImmutable | \
2447                 Attribute.NoDefaultValue |
2448                 Attribute.Metadata,
2449         "type": Attribute.ENUM,
2450         "allowed": wifi_standards.keys(),
2451         "help": "Wifi PHY standard"
2452     }),
2453     "ClassifierSrcAddress": dict({
2454         "name": "SrcAddress",
2455         "validation_function": validation.is_string, # TODO:! Address + Netref
2456         "value": "",
2457         "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable | Attribute.Metadata,
2458         "type": Attribute.STRING,
2459         "help": "The source ip address for the IpcsClassifierRecord"
2460     }),
2461     "ClassifierSrcMask": dict({
2462         "name": "SrcMask",
2463         "validation_function": validation.is_string, # TODO:! NetworkMask
2464         "value": "",
2465         "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable | Attribute.Metadata,
2466         "type": Attribute.STRING,
2467         "help": "The mask to apply on the source ip address for the IpcsClassifierRecord"
2468     }),
2469     "ClassifierDstAddress": dict({
2470         "name": "DstAddress",
2471         "validation_function": validation.is_string, # TODO:! Address + Netref
2472         "value": "",
2473         "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable | Attribute.Metadata,
2474         "type": Attribute.STRING,
2475         "help": "The destination ip address for the IpcsClassifierRecord"
2476     }),
2477     "ClassifierDstMask": dict({
2478         "name": "DstMask",
2479         "validation_function": validation.is_string, # TODO:! NetworkMask
2480         "value": "",
2481         "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable | Attribute.Metadata,
2482         "type": Attribute.STRING,
2483         "help": "The mask to apply on the destination ip address for the IpcsClassifierRecord"
2484     }),
2485     "ClassifierSrcPortLow": dict({
2486         "name": "SrcPortLow",
2487         "validation_function": validation.is_integer,
2488         "value": 0,
2489         "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable | Attribute.Metadata,
2490         "type": Attribute.INTEGER,
2491         "help": "The lower boundary of the source port range for the IpcsClassifierRecord"
2492     }),
2493     "ClassifierSrcPortHigh": dict({
2494         "name": "SrcPortHigh",
2495         "validation_function": validation.is_integer,
2496         "value": 65000,
2497         "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable | Attribute.Metadata,
2498         "type": Attribute.INTEGER,
2499         "help": "The higher boundary of the source port range for the IpcsClassifierRecord"
2500     }),
2501     "ClassifierDstPortLow": dict({
2502         "name": "DstPortLow",
2503         "validation_function": validation.is_integer,
2504         "value": 0,
2505         "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable | Attribute.Metadata,
2506         "type": Attribute.INTEGER,
2507         "help": "The lower boundary of the destination port range for the IpcsClassifierRecord"
2508     }),
2509     "ClassifierDstPortHigh": dict({
2510         "name": "DstPortHigh",
2511         "validation_function": validation.is_integer,
2512         "value": 65000,
2513         "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable | Attribute.Metadata,
2514         "type": Attribute.INTEGER,
2515         "help": "The higher boundary of the destination port range for the IpcsClassifierRecord"
2516     }),
2517     "ClassifierProtocol": dict({
2518         "name": "Protocol",
2519         "validation_function": validation.is_string,
2520         "value": "UdpL4Protocol",
2521         "allowed": l4_protocols.keys(),
2522         "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable | Attribute.Metadata,
2523         "type": Attribute.ENUM,
2524         "help": "The L4 protocol for the IpcsClassifierRecord"
2525     }),
2526     "ClassifierPriority": dict({
2527         "name": "Priority",
2528         "validation_function": validation.is_integer,
2529         "value": 1,
2530         "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable | Attribute.Metadata,
2531         "type": Attribute.INTEGER,
2532         "help": "The priority of the IpcsClassifierRecord"
2533     }),
2534     "ServiceFlowDirection": dict({
2535         "name": "Direction",
2536         "validation_function": validation.is_string,
2537         "value": "SF_DIRECTION_UP",
2538         "allowed": service_flow_direction.keys(),
2539         "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable | Attribute.Metadata,
2540         "type": Attribute.ENUM,
2541         "help": "Service flow direction as described by the IEEE-802.16 standard"
2542     }),
2543     "ServiceFlowSchedulingType": dict({
2544         "name": "SchedulingType",
2545         "validation_function": validation.is_string,
2546         "value": "SF_TYPE_RTPS",
2547         "allowed": service_flow_scheduling_type.keys(),
2548         "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable | Attribute.Metadata,
2549         "type": Attribute.ENUM,
2550         "help": "Service flow scheduling type",
2551     }),
2552    "WaypointList": dict({
2553         "name": "WaypointList",
2554         "validation_function": validation.is_string, # TODO: SPECIAL VALIDATION FUNC
2555         "value": "",
2556         "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable | Attribute.Metadata,
2557         "type": Attribute.STRING,
2558         "help": "Comma separated list of waypoints in format t:x:y:z. Ex: 0s:0:0:0, 1s:1:0:0"
2559     }),
2560     "tun_cipher_fdnd" : dict({
2561         "name" : "tun_cipher", 
2562         "help" : "Tunnel cryptography not supported",
2563         "type" : Attribute.ENUM,
2564         "value" : "PLAIN",
2565         "allowed" : [
2566             "PLAIN",
2567         ],
2568         "flags" : Attribute.ExecImmutable | Attribute.Metadata,
2569         "validation_function" : validation.is_enum,
2570         }),
2571     "Up" : dict({
2572         "name" : "Up", 
2573         "help" : "Flag to enable or disable interface",
2574         "type" : Attribute.BOOL,
2575         "value" : True,
2576         "validation_function" : validation.is_bool,
2577         }),
2578     "QosSupported" : dict({
2579         "name" : "QosSupported", 
2580         "help" : "Flag to enable or disable QoS support at wifi MAC layer",
2581         "type" : Attribute.BOOL,
2582         "value" : False,
2583         "validation_function" : validation.is_bool,
2584         }),
2585 })