2 # -*- coding: utf-8 -*-
4 from nepi.util.constants import AF_INET, STATUS_NOT_STARTED, STATUS_RUNNING, \
5 STATUS_FINISHED, STATUS_UNDETERMINED
7 def _get_ipv4_protocol_guid(testbed_instance, node_guid):
8 # search for the Ipv4L3Protocol asociated with the device
9 protos_guids = testbed_instance.get_connected(node_guid, "protos", "node")
10 if len(protos_guids) == 0:
11 raise RuntimeError("No protocols where found for the node %d" % node_guid)
13 for proto_guid in protos_guids:
14 proto_factory_id = testbed_instance._create[proto_guid]
15 if proto_factory_id == "ns3::Ipv4L3Protocol":
16 ipv4_guid = proto_guid
19 raise RuntimeError("No Ipv4L3Protocol associated to node %d. \
20 can't add Ipv4 addresses" % node_guid)
23 def _get_node_guid(testbed_instance, guid):
24 # search for the node asociated with the device
25 node_guids = testbed_instance.get_connected(guid, "node", "devs")
26 if len(node_guids) == 0:
27 raise RuntimeError("Can't instantiate interface %d outside netns \
29 node_guid = node_guids[0]
32 def _get_dev_number(testbed_instance, guid):
33 node_guid = _get_node_guid(testbed_instance, guid)
34 dev_guids = testbed_instance.get_connected(node_guid, "devs", "node")
36 for guid_ in dev_guids:
40 return interface_number
42 ### create traces functions ###
44 def p2pascii_trace(testbed_instance, guid, trace_id):
45 node_guid = _get_node_guid(testbed_instance, guid)
46 interface_number = _get_dev_number(testbed_instance, guid)
47 element = testbed_instance._elements[guid]
48 filename = "trace-p2p-node-%d-dev-%d.tr" % (node_guid, interface_number)
49 testbed_instance.follow_trace(guid, trace_id, filename)
50 filepath = testbed_instance.trace_filename(guid, trace_id)
51 helper = testbed_instance.ns3.PointToPointHelper()
52 asciiHelper = testbed_instance.ns3.AsciiTraceHelper()
53 stream = asciiHelper.CreateFileStream (filepath)
54 helper.EnableAscii(stream, element)
56 def p2ppcap_trace(testbed_instance, guid, trace_id):
57 node_guid = _get_node_guid(testbed_instance, guid)
58 interface_number = _get_dev_number(testbed_instance, guid)
59 element = testbed_instance._elements[guid]
60 filename = "trace-p2p-node-%d-dev-%d.pcap" % (node_guid, interface_number)
61 testbed_instance.follow_trace(guid, trace_id, filename)
62 filepath = testbed_instance.trace_filename(guid, trace_id)
63 helper = testbed_instance.ns3.PointToPointHelper()
64 helper.EnablePcap(filepath, element, explicitFilename = True)
66 def _csmapcap_trace(testbed_instance, guid, trace_id, promisc):
67 node_guid = _get_node_guid(testbed_instance, guid)
68 interface_number = _get_dev_number(testbed_instance, guid)
69 element = testbed_instance._elements[guid]
70 filename = "trace-csma-node-%d-dev-%d.pcap" % (node_guid, interface_number)
71 testbed_instance.follow_trace(guid, trace_id, filename)
72 filepath = testbed_instance.trace_filename(guid, trace_id)
73 helper = testbed_instance.ns3.CsmaHelper()
74 helper.EnablePcap(filepath, element, promiscuous = promisc,
75 explicitFilename = True)
77 def csmapcap_trace(testbed_instance, guid, trace_id):
79 _csmapcap_trace(testbed_instance, guid, trace_id, promisc)
81 def csmapcap_promisc_trace(testbed_instance, guid, trace_id):
83 _csmapcap_trace(testbed_instance, guid, trace_id, promisc)
85 def fdpcap_trace(testbed_instance, guid, trace_id):
86 node_guid = _get_node_guid(testbed_instance, guid)
87 interface_number = _get_dev_number(testbed_instance, guid)
88 element = testbed_instance._elements[guid]
89 filename = "trace-fd-node-%d-dev-%d.pcap" % (node_guid, interface_number)
90 testbed_instance.follow_trace(guid, trace_id, filename)
91 filepath = testbed_instance.trace_filename(guid, trace_id)
92 helper = testbed_instance.ns3.FileDescriptorHelper()
93 helper.EnablePcap(filepath, element, explicitFilename = True)
95 def yanswifipcap_trace(testbed_instance, guid, trace_id):
96 dev_guid = testbed_instance.get_connected(guid, "dev", "phy")[0]
97 node_guid = _get_node_guid(testbed_instance, dev_guid)
98 interface_number = _get_dev_number(testbed_instance, dev_guid)
99 element = testbed_instance._elements[dev_guid]
100 filename = "trace-yanswifi-node-%d-dev-%d.pcap" % (node_guid, interface_number)
101 testbed_instance.follow_trace(guid, trace_id, filename)
102 filepath = testbed_instance.trace_filename(guid, trace_id)
103 helper = testbed_instance.ns3.YansWifiPhyHelper()
104 helper.EnablePcap(filepath, element, explicitFilename = True)
106 trace_functions = dict({
107 "P2PPcapTrace": p2ppcap_trace,
108 "P2PAsciiTrace": p2pascii_trace,
109 "CsmaPcapTrace": csmapcap_trace,
110 "CsmaPcapPromiscTrace": csmapcap_promisc_trace,
111 "FileDescriptorPcapTrace": fdpcap_trace,
112 "YansWifiPhyPcapTrace": yanswifipcap_trace
115 ### Creation functions ###
117 wifi_standards = dict({
118 "WIFI_PHY_STANDARD_holland": 5,
119 "WIFI_PHY_STANDARD_80211p_SCH": 7,
120 "WIFI_PHY_STANDARD_80211_5Mhz": 4,
121 "WIFI_PHY_UNKNOWN": 8,
122 "WIFI_PHY_STANDARD_80211_10Mhz": 3,
123 "WIFI_PHY_STANDARD_80211g": 2,
124 "WIFI_PHY_STANDARD_80211p_CCH": 6,
125 "WIFI_PHY_STANDARD_80211a": 0,
126 "WIFI_PHY_STANDARD_80211b": 1
129 def create_element(testbed_instance, guid):
130 element_factory = testbed_instance.ns3.ObjectFactory()
131 factory_id = testbed_instance._create[guid]
132 element_factory.SetTypeId(factory_id)
133 construct_parameters = testbed_instance._get_construct_parameters(guid)
134 for name, value in construct_parameters.iteritems():
135 ns3_value = testbed_instance._to_ns3_value(guid, name, value)
136 element_factory.Set(name, ns3_value)
137 element = element_factory.Create()
138 testbed_instance._elements[guid] = element
140 def create_node(testbed_instance, guid):
141 create_element(testbed_instance, guid)
142 element = testbed_instance._elements[guid]
143 element.AggregateObject(testbed_instance.ns3.PacketSocketFactory())
145 def create_wifi_standard_model(testbed_instance, guid):
146 create_element(testbed_instance, guid)
147 element = testbed_instance._elements[guid]
148 parameters = testbed_instance._get_parameters(guid)
149 if "Standard" in parameters:
150 standard = parameters["Standard"]
152 element.ConfigureStandard(wifi_standards[standard])
154 def create_ipv4protocol(testbed_instance, guid):
155 create_element(testbed_instance, guid)
156 element = testbed_instance._elements[guid]
157 list_routing = testbed_instance.ns3.Ipv4ListRouting()
158 element.SetRoutingProtocol(list_routing)
159 static_routing = testbed_instance.ns3.Ipv4StaticRouting()
160 list_routing.AddRoutingProtocol(static_routing, 1)
162 ### Start/Stop functions ###
164 def start_application(testbed_instance, guid):
165 element = testbed_instance.elements[guid]
166 # BUG: without doing this explicit call it doesn't start!!!
167 # Shouldn't be enough to set the StartTime?
170 def stop_application(testbed_instance, guid):
171 element = testbed_instance.elements[guid]
172 now = testbed_instance.ns3.Simulator.Now()
173 element.SetStopTime(now)
175 ### Status functions ###
177 def status_application(testbed_instance, guid):
178 if guid not in testbed_instance.elements.keys():
179 raise RuntimeError("Can't get status on guid %d" % guid )
180 now = testbed_instance.ns3.Simulator.Now()
182 return STATUS_NOT_STARTED
183 app = testbed_instance.elements[guid]
184 parameters = testbed_instance._get_parameters(guid)
185 if "StartTime" in parameters and parameters["StartTime"]:
186 start_value = parameters["StartTime"]
187 start_time = testbed_instance.ns3.Time(start_value)
188 if now.Compare(start_time) < 0:
189 return STATUS_NOT_RUNNING
190 if "StopTime" in parameters and parameters["StopTime"]:
191 stop_value = parameters["StopTime"]
192 stop_time = testbed_instance.ns3.Time(stop_value)
193 if now.Compare(stop_time) < 0:
194 return STATUS_RUNNING
196 return STATUS_FINISHED
197 return STATUS_UNDETERMINED
199 ### Configure functions ###
201 def configure_traces(testbed_instance, guid):
202 traces = testbed_instance._get_traces(guid)
203 for trace_id in traces:
204 trace_func = trace_functions[trace_id]
205 trace_func(testbed_instance, guid, trace_id)
207 def configure_element(testbed_instance, guid):
208 configure_traces(testbed_instance, guid)
210 def configure_device(testbed_instance, guid):
211 configure_traces(testbed_instance, guid)
213 element = testbed_instance._elements[guid]
215 parameters = testbed_instance._get_parameters(guid)
216 if "macAddress" in parameters:
217 address = parameters["macAddress"]
218 macaddr = testbed_instance.ns3.Mac48Address(address)
220 macaddr = testbed_instance.ns3.Mac48Address.Allocate()
221 element.SetAddress(macaddr)
223 if not guid in testbed_instance._add_address:
225 # search for the node asociated with the device
226 node_guid = _get_node_guid(testbed_instance, guid)
227 node = testbed_instance.elements[node_guid]
228 # search for the Ipv4L3Protocol asociated with the device
229 ipv4_guid = _get_ipv4_protocol_guid(testbed_instance, node_guid)
230 ipv4 = testbed_instance._elements[ipv4_guid]
231 ns3 = testbed_instance.ns3
233 addresses = testbed_instance._add_address[guid]
234 for address in addresses:
235 (address, netprefix, broadcast) = address
236 # TODO: missing IPV6 addresses!!
237 ifindex = ipv4.AddInterface(element)
238 inaddr = ns3.Ipv4InterfaceAddress(ns3.Ipv4Address(address),
239 ns3.Ipv4Mask("/%d" % netprefix))
240 ipv4.AddAddress(ifindex, inaddr)
241 ipv4.SetMetric(ifindex, 1)
244 def configure_node(testbed_instance, guid):
245 configure_traces(testbed_instance, guid)
247 element = testbed_instance._elements[guid]
248 if not guid in testbed_instance._add_route:
250 # search for the Ipv4L3Protocol asociated with the device
251 ipv4_guid = _get_ipv4_protocol_guid(testbed_instance, guid)
252 ipv4 = testbed_instance._elements[ipv4_guid]
253 list_routing = ipv4.GetRoutingProtocol()
254 (static_routing, priority) = list_routing.GetRoutingProtocol(0)
255 ns3 = testbed_instance.ns3
256 routes = testbed_instance._add_route[guid]
258 (destination, netprefix, nexthop) = route
259 address = ns3.Ipv4Address(destination)
260 mask = ns3.Ipv4Mask("/%d" % netprefix)
262 nexthop_address = ns3.Ipv4Address(nexthop)
264 # TODO: HACKISH way of getting the ifindex... improve this
265 nifaces = ipv4.GetNInterfaces()
266 for ifidx in range(nifaces):
267 iface = ipv4.GetInterface(ifidx)
268 naddress = iface.GetNAddresses()
269 for addridx in range(naddress):
270 ifaddr = iface.GetAddress(addridx)
271 ifmask = ifaddr.GetMask()
272 ifindex = ipv4.GetInterfaceForPrefix(nexthop_address, ifmask)
275 static_routing.AddNetworkRouteTo(address, mask, nexthop_address,
278 ifindex = ipv4.GetInterfaceForPrefix(address, mask)
279 static_routing.AddNetworkRouteTo(address, mask, ifindex)
281 factories_info = dict({
283 "category": "Application",
284 "create_function": create_element,
285 "configure_function": configure_element,
287 "connector_types": [],
288 "stop_function": stop_application,
289 "start_function": start_application,
290 "status_function": status_application,
291 "box_attributes": ["MaxPackets",
299 "ns3::UdpL4Protocol": dict({
300 "category": "Protocol",
301 "create_function": create_element,
302 "configure_function": configure_element,
304 "connector_types": ["node"],
305 "box_attributes": ["ProtocolNumber"],
307 "ns3::RandomDiscPositionAllocator": dict({
308 "category": "Mobility",
309 "create_function": create_element,
310 "configure_function": configure_element,
312 "connector_types": [],
313 "box_attributes": ["Theta",
319 "category": "Topology",
320 "create_function": create_node,
321 "configure_function": configure_node,
323 "connector_types": ["devs", "apps", "protos", "mobility"],
324 "allow_routes": True,
325 "box_attributes": [],
327 "ns3::GridPositionAllocator": dict({
328 "category": "Mobility",
329 "create_function": create_element,
330 "configure_function": configure_element,
332 "connector_types": [],
333 "box_attributes": ["GridWidth",
340 "ns3::TapBridge": dict({
341 "category": "Device",
342 "create_function": create_element,
343 "configure_function": configure_element,
345 "connector_types": [],
346 "allow_addresses": True,
347 "box_attributes": ["Mtu",
356 "ns3::FlowMonitor": dict({
358 "create_function": create_element,
359 "configure_function": configure_element,
361 "connector_types": [],
362 "box_attributes": ["MaxPerHopDelay",
365 "PacketSizeBinWidth",
366 "FlowInterruptionsBinWidth",
367 "FlowInterruptionsMinTime"],
369 "ns3::ConstantVelocityMobilityModel": dict({
370 "category": "Mobility",
371 "create_function": create_element,
372 "configure_function": configure_element,
374 "connector_types": ["node"],
375 "box_attributes": ["Position",
378 "ns3::V4Ping": dict({
379 "category": "Application",
380 "create_function": create_element,
381 "configure_function": configure_element,
383 "connector_types": ["node"],
384 "stop_function": stop_application,
385 "start_function": start_application,
386 "status_function": status_application,
387 "box_attributes": ["Remote",
394 "ns3::dot11s::PeerLink": dict({
396 "create_function": create_element,
397 "configure_function": configure_element,
399 "connector_types": [],
400 "box_attributes": ["RetryTimeout",
407 "ns3::PointToPointNetDevice": dict({
408 "category": "Device",
409 "create_function": create_element,
410 "configure_function": configure_device,
412 "connector_types": ["node", "err", "queue", "chan"],
413 "allow_addresses": True,
414 "box_attributes": ["Mtu",
418 "traces": ["p2ppcap", "p2pascii"]
420 "ns3::NakagamiPropagationLossModel": dict({
422 "create_function": create_element,
423 "configure_function": configure_element,
425 "connector_types": [],
426 "box_attributes": ["Distance1",
432 "ns3::AarfWifiManager": dict({
433 "category": "Manager",
434 "create_function": create_element,
435 "configure_function": configure_element,
437 "connector_types": [],
438 "box_attributes": ["SuccessK",
440 "MaxSuccessThreshold",
442 "MinSuccessThreshold",
447 "FragmentationThreshold",
450 "ns3::Ipv6OptionJumbogram": dict({
452 "create_function": create_element,
453 "configure_function": configure_element,
455 "connector_types": [],
456 "box_attributes": ["OptionNumber"],
458 "ns3::TwoRayGroundPropagationLossModel": dict({
460 "create_function": create_element,
461 "configure_function": configure_element,
463 "connector_types": [],
464 "box_attributes": ["Lambda",
469 "ns3::OnOffApplication": dict({
470 "category": "Application",
471 "create_function": create_element,
472 "configure_function": configure_element,
474 "connector_types": ["node"],
475 "stop_function": stop_application,
476 "start_function": start_application,
477 "status_function": status_application,
478 "box_attributes": ["DataRate",
488 "ns3::AdhocWifiMac": dict({
490 "create_function": create_element,
491 "configure_function": configure_element,
493 "connector_types": [],
494 "box_attributes": ["CtsTimeout",
496 "BasicBlockAckTimeout",
497 "CompressedBlockAckTimeout",
502 "MaxPropagationDelay",
505 "ns3::ConstantAccelerationMobilityModel": dict({
506 "category": "Mobility",
507 "create_function": create_element,
508 "configure_function": configure_element,
510 "connector_types": ["node"],
511 "box_attributes": ["Position",
514 "ns3::GaussMarkovMobilityModel": dict({
515 "category": "Mobility",
516 "create_function": create_element,
517 "configure_function": configure_element,
519 "connector_types": [],
520 "box_attributes": ["Bounds",
532 "ns3::dot11s::HwmpProtocol": dict({
533 "category": "Protocol",
534 "create_function": create_element,
535 "configure_function": configure_element,
537 "connector_types": [],
538 "box_attributes": ["RandomStart",
540 "Dot11MeshHWMPmaxPREQretries",
541 "Dot11MeshHWMPnetDiameterTraversalTime",
542 "Dot11MeshHWMPpreqMinInterval",
543 "Dot11MeshHWMPperrMinInterval",
544 "Dot11MeshHWMPactiveRootTimeout",
545 "Dot11MeshHWMPactivePathTimeout",
546 "Dot11MeshHWMPpathToRootInterval",
547 "Dot11MeshHWMPrannInterval",
549 "UnicastPerrThreshold",
550 "UnicastPreqThreshold",
551 "UnicastDataThreshold",
555 "ns3::NscTcpL4Protocol": dict({
556 "category": "Protocol",
557 "create_function": create_element,
558 "configure_function": configure_element,
560 "connector_types": [],
561 "box_attributes": ["Library",
564 "ns3::dot11s::AirtimeLinkMetricCalculator": dict({
566 "create_function": create_element,
567 "configure_function": configure_element,
569 "connector_types": [],
570 "box_attributes": ["Dot11sMeshHeaderLength"],
572 "ns3::UanMacCw": dict({
574 "create_function": create_element,
575 "configure_function": configure_element,
577 "connector_types": [],
578 "box_attributes": ["CW",
581 "ns3::AthstatsWifiTraceSink": dict({
583 "create_function": create_element,
584 "configure_function": configure_element,
586 "connector_types": [],
587 "box_attributes": ["Interval"],
589 "ns3::FlameStack": dict({
591 "create_function": create_element,
592 "configure_function": configure_element,
594 "connector_types": [],
595 "box_attributes": [],
597 "ns3::UanMacRc": dict({
599 "create_function": create_element,
600 "configure_function": configure_element,
602 "connector_types": [],
603 "box_attributes": ["RetryRate",
610 "NumberOfRetryRates",
613 "ns3::WaypointMobilityModel": dict({
614 "category": "Mobility",
615 "create_function": create_element,
616 "configure_function": configure_element,
618 "connector_types": [],
619 "box_attributes": ["WaypointsLeft",
623 "ns3::FileDescriptorNetDevice": dict({
624 "category": "Device",
625 "create_function": create_element,
626 "configure_function": configure_device,
627 "help": "Network interface associated to a file descriptor",
628 "connector_types": ["node", "fd"],
629 "allow_addresses": True,
630 "box_attributes": ["Address",
631 "LinuxSocketAddress"],
634 "ns3::CsmaNetDevice": dict({
635 "category": "Device",
636 "create_function": create_element,
637 "configure_function": configure_device,
638 "help": "CSMA (carrier sense, multiple access) interface",
639 "connector_types": ["node", "chan", "err", "queue"],
640 "allow_addresses": True,
641 "box_attributes": ["Address",
645 "traces": ["csmapcap", "csmapcap_promisc"]
647 "ns3::UanPropModelThorp": dict({
649 "create_function": create_element,
650 "configure_function": configure_element,
652 "connector_types": [],
653 "box_attributes": ["SpreadCoef"],
655 "ns3::NqstaWifiMac": dict({
657 "create_function": create_element,
658 "configure_function": configure_element,
660 "connector_types": [],
661 "box_attributes": ["ProbeRequestTimeout",
662 "AssocRequestTimeout",
666 "BasicBlockAckTimeout",
667 "CompressedBlockAckTimeout",
672 "MaxPropagationDelay",
675 "ns3::Icmpv6L4Protocol": dict({
676 "category": "Protocol",
677 "create_function": create_element,
678 "configure_function": configure_element,
680 "connector_types": [],
681 "box_attributes": ["DAD",
684 "ns3::SimpleNetDevice": dict({
685 "category": "Device",
686 "create_function": create_element,
687 "configure_function": configure_element,
689 "connector_types": ["node", "chan"],
690 "allow_addresses": True,
691 "box_attributes": [],
693 "ns3::FriisPropagationLossModel": dict({
695 "create_function": create_element,
696 "configure_function": configure_element,
698 "connector_types": [],
699 "box_attributes": ["Lambda",
703 "ns3::Ipv6OptionRouterAlert": dict({
705 "create_function": create_element,
706 "configure_function": configure_element,
708 "connector_types": [],
709 "box_attributes": ["OptionNumber"],
711 "ns3::UniformDiscPositionAllocator": dict({
712 "category": "Mobility",
713 "create_function": create_element,
714 "configure_function": configure_element,
716 "connector_types": [],
717 "box_attributes": ["rho",
721 "ns3::RandomBoxPositionAllocator": dict({
722 "category": "Mobility",
723 "create_function": create_element,
724 "configure_function": configure_element,
726 "connector_types": [],
727 "box_attributes": ["X",
731 "ns3::Ipv6ExtensionDestination": dict({
733 "create_function": create_element,
734 "configure_function": configure_element,
736 "connector_types": [],
737 "box_attributes": ["ExtensionNumber"],
739 "ns3::LoopbackNetDevice": dict({
740 "category": "Device",
741 "create_function": create_element,
742 "configure_function": configure_element,
744 "connector_types": [],
745 "box_attributes": [],
747 "ns3::ConstantSpeedPropagationDelayModel": dict({
749 "create_function": create_element,
750 "configure_function": configure_element,
752 "connector_types": ["chan"],
753 "box_attributes": ["Speed"],
755 "ns3::Ipv6ExtensionHopByHop": dict({
757 "create_function": create_element,
758 "configure_function": configure_element,
760 "connector_types": [],
761 "box_attributes": ["ExtensionNumber"],
763 "ns3::BridgeChannel": dict({
764 "category": "Channel",
765 "create_function": create_element,
766 "configure_function": configure_element,
768 "connector_types": [],
769 "box_attributes": [],
773 "create_function": create_element,
774 "configure_function": configure_element,
776 "connector_types": [],
777 "box_attributes": ["StartTime",
780 "ns3::PacketSocket": dict({
782 "create_function": create_element,
783 "configure_function": configure_element,
785 "connector_types": [],
786 "box_attributes": ["RcvBufSize"],
788 "ns3::flame::FlameProtocol": dict({
789 "category": "Protocol",
790 "create_function": create_element,
791 "configure_function": configure_element,
793 "connector_types": [],
794 "box_attributes": ["BroadcastInterval",
797 "ns3::Cost231PropagationLossModel": dict({
799 "create_function": create_element,
800 "configure_function": configure_element,
802 "connector_types": [],
803 "box_attributes": ["Lambda",
809 "ns3::Ipv6ExtensionESP": dict({
811 "create_function": create_element,
812 "configure_function": configure_element,
814 "connector_types": [],
815 "box_attributes": ["ExtensionNumber"],
817 "ns3::CaraWifiManager": dict({
818 "category": "Manager",
819 "create_function": create_element,
820 "configure_function": configure_element,
822 "connector_types": [],
823 "box_attributes": ["ProbeThreshold",
831 "FragmentationThreshold",
835 "ns3::RttMeanDeviation": dict({
837 "create_function": create_element,
838 "configure_function": configure_element,
840 "connector_types": [],
841 "box_attributes": ["Gain",
846 "ns3::Icmpv4L4Protocol": dict({
847 "category": "Protocol",
848 "create_function": create_element,
849 "configure_function": configure_element,
851 "connector_types": ["node"],
852 "box_attributes": ["ProtocolNumber"],
854 "ns3::WaveformGenerator": dict({
856 "create_function": create_element,
857 "configure_function": configure_element,
859 "connector_types": [],
860 "box_attributes": ["Period",
863 "ns3::YansWifiChannel": dict({
864 "category": "Channel",
865 "create_function": create_element,
866 "configure_function": configure_element,
868 "connector_types": ["phys", "delay", "loss"],
869 "box_attributes": [],
871 "ns3::SimpleChannel": dict({
872 "category": "Channel",
873 "create_function": create_element,
874 "configure_function": configure_element,
876 "connector_types": ["devs"],
877 "box_attributes": [],
879 "ns3::Ipv6ExtensionFragment": dict({
881 "create_function": create_element,
882 "configure_function": configure_element,
884 "connector_types": [],
885 "box_attributes": ["ExtensionNumber"],
887 "ns3::Dot11sStack": dict({
889 "create_function": create_element,
890 "configure_function": configure_element,
892 "connector_types": [],
893 "box_attributes": ["Root"],
895 "ns3::FriisSpectrumPropagationLossModel": dict({
897 "create_function": create_element,
898 "configure_function": configure_element,
900 "connector_types": [],
901 "box_attributes": [],
903 "ns3::RandomRectanglePositionAllocator": dict({
904 "category": "Mobility",
905 "create_function": create_element,
906 "configure_function": configure_element,
908 "connector_types": [],
909 "box_attributes": ["X",
912 "ns3::NqapWifiMac": dict({
914 "create_function": create_element,
915 "configure_function": configure_element,
917 "connector_types": [],
918 "box_attributes": ["BeaconInterval",
922 "BasicBlockAckTimeout",
923 "CompressedBlockAckTimeout",
928 "MaxPropagationDelay",
931 "ns3::HierarchicalMobilityModel": dict({
932 "category": "Mobility",
933 "create_function": create_element,
934 "configure_function": configure_element,
936 "connector_types": ["node"],
937 "box_attributes": ["Position",
940 "ns3::ThreeLogDistancePropagationLossModel": dict({
942 "create_function": create_element,
943 "configure_function": configure_element,
945 "connector_types": [],
946 "box_attributes": ["Distance0",
954 "ns3::UanNoiseModelDefault": dict({
956 "create_function": create_element,
957 "configure_function": configure_element,
959 "connector_types": [],
960 "box_attributes": ["Wind",
963 "ns3::dot11s::HwmpRtable": dict({
965 "create_function": create_element,
966 "configure_function": configure_element,
968 "connector_types": [],
969 "box_attributes": [],
971 "ns3::PacketBurst": dict({
973 "create_function": create_element,
974 "configure_function": configure_element,
976 "connector_types": [],
977 "box_attributes": [],
979 "ns3::RandomPropagationDelayModel": dict({
981 "create_function": create_element,
982 "configure_function": configure_element,
984 "connector_types": [],
985 "box_attributes": ["Variable"],
987 "ns3::ArpL3Protocol": dict({
988 "category": "Protocol",
989 "create_function": create_element,
990 "configure_function": configure_element,
992 "connector_types": ["node"],
993 "box_attributes": [],
995 "ns3::SteadyStateRandomWaypointMobilityModel": dict({
996 "category": "Mobility",
997 "create_function": create_element,
998 "configure_function": configure_element,
1000 "connector_types": [],
1001 "box_attributes": ["MinSpeed",
1012 "ns3::BaseStationNetDevice": dict({
1013 "category": "Device",
1014 "create_function": create_element,
1015 "configure_function": configure_device,
1017 "connector_types": [],
1018 "allow_addresses": True,
1019 "box_attributes": ["InitialRangInterval",
1025 "MaxRangCorrectionRetries",
1030 "ns3::UdpServer": dict({
1031 "category": "Application",
1032 "create_function": create_element,
1033 "configure_function": configure_element,
1035 "connector_types": [],
1036 "stop_function": stop_application,
1037 "start_function": start_application,
1038 "status_function": status_application,
1039 "box_attributes": ["Port",
1044 "ns3::AarfcdWifiManager": dict({
1045 "category": "Manager",
1046 "create_function": create_element,
1047 "configure_function": configure_element,
1049 "connector_types": [],
1050 "box_attributes": ["SuccessK",
1052 "MaxSuccessThreshold",
1053 "MinTimerThreshold",
1054 "MinSuccessThreshold",
1057 "TurnOffRtsAfterRateDecrease",
1058 "TurnOnRtsAfterRateIncrease",
1063 "FragmentationThreshold",
1066 "ns3::UanTransducerHd": dict({
1068 "create_function": create_element,
1069 "configure_function": configure_element,
1071 "connector_types": [],
1072 "box_attributes": [],
1074 "ns3::LogDistancePropagationLossModel": dict({
1076 "create_function": create_element,
1077 "configure_function": configure_element,
1079 "connector_types": ["prev", "next"],
1080 "box_attributes": ["Exponent",
1081 "ReferenceDistance",
1084 "ns3::EmuNetDevice": dict({
1085 "category": "Device",
1086 "create_function": create_element,
1087 "configure_function": configure_element,
1089 "connector_types": ["node", "queue"],
1090 "box_attributes": ["Mtu",
1097 "ns3::Ipv6ExtensionLooseRouting": dict({
1099 "create_function": create_element,
1100 "configure_function": configure_element,
1102 "connector_types": [],
1103 "box_attributes": ["ExtensionNumber"],
1105 "ns3::RandomWaypointMobilityModel": dict({
1106 "category": "Mobility",
1107 "create_function": create_element,
1108 "configure_function": configure_element,
1110 "connector_types": ["node"],
1111 "box_attributes": ["Speed",
1116 "ns3::RangePropagationLossModel": dict({
1118 "create_function": create_element,
1119 "configure_function": configure_element,
1121 "connector_types": [],
1122 "box_attributes": ["MaxRange"],
1124 "ns3::AlohaNoackNetDevice": dict({
1125 "category": "Device",
1126 "create_function": create_element,
1127 "configure_function": configure_element,
1129 "connector_types": [],
1130 "box_attributes": ["Address",
1133 "ns3::MatrixPropagationLossModel": dict({
1135 "create_function": create_element,
1136 "configure_function": configure_element,
1138 "connector_types": [],
1139 "box_attributes": ["DefaultLoss"],
1141 "ns3::WifiNetDevice": dict({
1142 "category": "Device",
1143 "create_function": create_element,
1144 "configure_function": configure_device,
1146 "connector_types": ["node", "mac", "phy", "manager"],
1147 "allow_addresses": True,
1148 "box_attributes": ["Mtu"],
1150 "ns3::CsmaChannel": dict({
1151 "category": "Channel",
1152 "create_function": create_element,
1153 "configure_function": configure_element,
1155 "connector_types": ["devs"],
1156 "box_attributes": ["DataRate",
1159 "ns3::BridgeNetDevice": dict({
1160 "category": "Device",
1161 "create_function": create_element,
1162 "configure_function": configure_element,
1164 "connector_types": ["node"],
1165 "allow_addresses": True,
1166 "box_attributes": ["Mtu",
1170 "ns3::Ipv6ExtensionRouting": dict({
1172 "create_function": create_element,
1173 "configure_function": configure_element,
1175 "connector_types": [],
1176 "box_attributes": ["ExtensionNumber"],
1178 "ns3::QstaWifiMac": dict({
1180 "create_function": create_wifi_standard_model,
1181 "configure_function": configure_element,
1182 "help": "Station Wifi MAC Model",
1183 "connector_types": ["dev"],
1184 "box_attributes": ["ProbeRequestTimeout",
1185 "AssocRequestTimeout",
1189 "BasicBlockAckTimeout",
1190 "CompressedBlockAckTimeout",
1195 "MaxPropagationDelay",
1199 "ns3::UdpEchoClient": dict({
1200 "category": "Application",
1201 "create_function": create_element,
1202 "configure_function": configure_element,
1204 "connector_types": ["node"],
1205 "stop_function": stop_application,
1206 "start_function": start_application,
1207 "status_function": status_application,
1208 "box_attributes": ["MaxPackets",
1216 "ns3::UdpClient": dict({
1217 "category": "Application",
1218 "create_function": create_element,
1219 "configure_function": configure_element,
1221 "connector_types": [],
1222 "stop_function": stop_application,
1223 "start_function": start_application,
1224 "status_function": status_application,
1225 "box_attributes": ["MaxPackets",
1233 "ns3::PointToPointChannel": dict({
1234 "category": "Channel",
1235 "create_function": create_element,
1236 "configure_function": configure_element,
1238 "connector_types": ["dev2"],
1239 "box_attributes": ["Delay"],
1241 "ns3::Ipv6StaticRouting": dict({
1243 "create_function": create_element,
1244 "configure_function": configure_element,
1246 "connector_types": [],
1247 "box_attributes": [],
1249 "ns3::DropTailQueue": dict({
1250 "category": "Device",
1251 "create_function": create_element,
1252 "configure_function": configure_element,
1254 "connector_types": ["dev"],
1255 "box_attributes": ["MaxPackets",
1258 "ns3::ConstantPositionMobilityModel": dict({
1259 "category": "Mobility",
1260 "create_function": create_element,
1261 "configure_function": configure_element,
1263 "connector_types": ["node"],
1264 "box_attributes": ["Position",
1267 "ns3::FixedRssLossModel": dict({
1269 "create_function": create_element,
1270 "configure_function": configure_element,
1272 "connector_types": [],
1273 "box_attributes": ["Rss"],
1275 "ns3::EnergySourceContainer": dict({
1277 "create_function": create_element,
1278 "configure_function": configure_element,
1280 "connector_types": [],
1281 "box_attributes": [],
1283 "ns3::RandomWalk2dMobilityModel": dict({
1284 "category": "Mobility",
1285 "create_function": create_element,
1286 "configure_function": configure_element,
1288 "connector_types": ["node"],
1289 "box_attributes": ["Bounds",
1298 "ns3::ListPositionAllocator": dict({
1300 "create_function": create_element,
1301 "configure_function": configure_element,
1303 "connector_types": [],
1304 "box_attributes": [],
1306 "ns3::dot11s::PeerManagementProtocol": dict({
1307 "category": "Protocol",
1308 "create_function": create_element,
1309 "configure_function": configure_element,
1311 "connector_types": [],
1312 "box_attributes": ["MaxNumberOfPeerLinks",
1313 "MaxBeaconShiftValue",
1314 "EnableBeaconCollisionAvoidance"],
1316 "ns3::MeshPointDevice": dict({
1317 "category": "Device",
1318 "create_function": create_element,
1319 "configure_function": configure_element,
1321 "connector_types": [],
1322 "allow_addresses": True,
1323 "box_attributes": ["Mtu"],
1325 "ns3::BasicEnergySource": dict({
1327 "create_function": create_element,
1328 "configure_function": configure_element,
1330 "connector_types": [],
1331 "box_attributes": ["BasicEnergySourceInitialEnergyJ",
1332 "BasicEnergySupplyVoltageV",
1333 "PeriodicEnergyUpdateInterval"],
1335 "ns3::Ipv6OptionPadn": dict({
1337 "create_function": create_element,
1338 "configure_function": configure_element,
1340 "connector_types": [],
1341 "box_attributes": ["OptionNumber"],
1343 "ns3::QapWifiMac": dict({
1345 "create_function": create_wifi_standard_model,
1346 "configure_function": configure_element,
1347 "help": "Access point Wifi MAC Model",
1348 "connector_types": ["dev"],
1349 "box_attributes": ["BeaconInterval",
1353 "BasicBlockAckTimeout",
1354 "CompressedBlockAckTimeout",
1359 "MaxPropagationDelay",
1363 "ns3::YansErrorRateModel": dict({
1364 "category": "Error",
1365 "create_function": create_element,
1366 "configure_function": configure_element,
1368 "connector_types": [],
1369 "box_attributes": [],
1371 "ns3::WifiMacQueue": dict({
1373 "create_function": create_element,
1374 "configure_function": configure_element,
1376 "connector_types": [],
1377 "box_attributes": ["MaxPacketNumber",
1380 "ns3::NonCommunicatingNetDevice": dict({
1381 "category": "Device",
1382 "create_function": create_element,
1383 "configure_function": configure_element,
1385 "connector_types": [],
1386 "allow_addresses": True,
1387 "box_attributes": [],
1389 "ns3::RateErrorModel": dict({
1390 "category": "Error",
1391 "create_function": create_element,
1392 "configure_function": configure_element,
1394 "connector_types": [],
1395 "box_attributes": ["ErrorUnit",
1400 "ns3::MeshWifiInterfaceMac": dict({
1402 "create_function": create_element,
1403 "configure_function": configure_element,
1405 "connector_types": [],
1406 "box_attributes": ["BeaconInterval",
1411 "BasicBlockAckTimeout",
1412 "CompressedBlockAckTimeout",
1417 "MaxPropagationDelay",
1420 "ns3::UanPhyCalcSinrDual": dict({
1422 "create_function": create_element,
1423 "configure_function": configure_element,
1425 "connector_types": [],
1426 "box_attributes": [],
1428 "ns3::Ipv6ExtensionAH": dict({
1430 "create_function": create_element,
1431 "configure_function": configure_element,
1433 "connector_types": [],
1434 "box_attributes": ["ExtensionNumber"],
1436 "ns3::SingleModelSpectrumChannel": dict({
1437 "category": "Channel",
1438 "create_function": create_element,
1439 "configure_function": configure_element,
1441 "connector_types": [],
1442 "box_attributes": [],
1444 "ns3::YansWifiPhy": dict({
1446 "create_function": create_wifi_standard_model,
1447 "configure_function": configure_element,
1449 "connector_types": ["dev", "err", "chan"],
1450 "box_attributes": ["EnergyDetectionThreshold",
1451 "CcaMode1Threshold",
1458 "ChannelSwitchDelay",
1461 "traces": ["yanswifipcap"]
1463 "ns3::WifiRadioEnergyModel": dict({
1465 "create_function": create_element,
1466 "configure_function": configure_element,
1468 "connector_types": [],
1469 "box_attributes": ["TxCurrentA",
1474 "ns3::EdcaTxopN": dict({
1476 "create_function": create_element,
1477 "configure_function": configure_element,
1479 "connector_types": [],
1480 "box_attributes": ["BlockAckThreshold",
1485 "ns3::UanPhyPerGenDefault": dict({
1487 "create_function": create_element,
1488 "configure_function": configure_element,
1490 "connector_types": [],
1491 "box_attributes": ["Threshold"],
1493 "ns3::IdealWifiManager": dict({
1494 "category": "Manager",
1495 "create_function": create_element,
1496 "configure_function": configure_element,
1498 "connector_types": [],
1499 "box_attributes": ["BerThreshold",
1504 "FragmentationThreshold",
1507 "ns3::MultiModelSpectrumChannel": dict({
1508 "category": "Channel",
1509 "create_function": create_element,
1510 "configure_function": configure_element,
1512 "connector_types": [],
1513 "box_attributes": [],
1515 "ns3::HalfDuplexIdealPhy": dict({
1517 "create_function": create_element,
1518 "configure_function": configure_element,
1520 "connector_types": [],
1521 "box_attributes": ["Rate"],
1523 "ns3::UanPhyCalcSinrDefault": dict({
1525 "create_function": create_element,
1526 "configure_function": configure_element,
1528 "connector_types": [],
1529 "box_attributes": [],
1531 "ns3::ReceiveListErrorModel": dict({
1532 "category": "Error",
1533 "create_function": create_element,
1534 "configure_function": configure_element,
1536 "connector_types": [],
1537 "box_attributes": ["IsEnabled"],
1539 "ns3::SpectrumAnalyzer": dict({
1541 "create_function": create_element,
1542 "configure_function": configure_element,
1544 "connector_types": [],
1545 "box_attributes": ["Resolution",
1546 "NoisePowerSpectralDensity"],
1548 "ns3::ConstantRateWifiManager": dict({
1549 "category": "Manager",
1550 "create_function": create_element,
1551 "configure_function": configure_element,
1553 "connector_types": ["dev"],
1554 "box_attributes": ["DataMode",
1560 "FragmentationThreshold",
1563 "ns3::Ipv6OptionPad1": dict({
1565 "create_function": create_element,
1566 "configure_function": configure_element,
1568 "connector_types": [],
1569 "box_attributes": ["OptionNumber"],
1571 "ns3::UdpTraceClient": dict({
1573 "create_function": create_element,
1574 "configure_function": configure_element,
1576 "connector_types": [],
1577 "box_attributes": ["RemoteAddress",
1583 "ns3::RraaWifiManager": dict({
1584 "category": "Manager",
1585 "create_function": create_element,
1586 "configure_function": configure_element,
1588 "connector_types": [],
1589 "box_attributes": ["Basic",
1617 "FragmentationThreshold",
1620 "ns3::RandomPropagationLossModel": dict({
1622 "create_function": create_element,
1623 "configure_function": configure_element,
1625 "connector_types": [],
1626 "box_attributes": ["Variable"],
1628 "ns3::UanChannel": dict({
1629 "category": "Channel",
1630 "create_function": create_element,
1631 "configure_function": configure_element,
1633 "connector_types": [],
1634 "box_attributes": [],
1636 "ns3::MinstrelWifiManager": dict({
1637 "category": "Manager",
1638 "create_function": create_element,
1639 "configure_function": configure_element,
1641 "connector_types": [],
1642 "box_attributes": ["UpdateStatistics",
1652 "FragmentationThreshold",
1655 "ns3::UanPhyDual": dict({
1657 "create_function": create_element,
1658 "configure_function": configure_element,
1660 "connector_types": [],
1661 "box_attributes": ["CcaThresholdPhy1",
1667 "SupportedModesPhy1",
1668 "SupportedModesPhy2"],
1670 "ns3::ListErrorModel": dict({
1671 "category": "Error",
1672 "create_function": create_element,
1673 "configure_function": configure_element,
1675 "connector_types": ["dev"],
1676 "box_attributes": ["IsEnabled"],
1678 "ns3::VirtualNetDevice": dict({
1679 "category": "Device",
1680 "create_function": create_element,
1681 "configure_function": configure_element,
1683 "connector_types": [],
1684 "allow_addresses": True,
1685 "box_attributes": ["Mtu"],
1687 "ns3::UanPhyGen": dict({
1689 "create_function": create_element,
1690 "configure_function": configure_element,
1692 "connector_types": [],
1693 "box_attributes": ["CcaThreshold",
1699 "ns3::Ipv6L3Protocol": dict({
1700 "category": "Protocol",
1701 "create_function": create_element,
1702 "configure_function": configure_element,
1704 "connector_types": [],
1705 "box_attributes": ["DefaultTtl",
1708 "ns3::PointToPointRemoteChannel": dict({
1709 "category": "Channel",
1710 "create_function": create_element,
1711 "configure_function": configure_element,
1713 "connector_types": [],
1714 "box_attributes": ["Delay"],
1716 "ns3::UanPhyPerUmodem": dict({
1718 "create_function": create_element,
1719 "configure_function": configure_element,
1721 "connector_types": [],
1722 "box_attributes": [],
1724 "ns3::OnoeWifiManager": dict({
1725 "category": "Manager",
1726 "create_function": create_element,
1727 "configure_function": configure_element,
1729 "connector_types": [],
1730 "box_attributes": ["UpdatePeriod",
1732 "AddCreditThreshold",
1737 "FragmentationThreshold",
1740 "ns3::QadhocWifiMac": dict({
1742 "create_function": create_element,
1743 "configure_function": configure_element,
1745 "connector_types": [],
1746 "box_attributes": ["CtsTimeout",
1748 "BasicBlockAckTimeout",
1749 "CompressedBlockAckTimeout",
1754 "MaxPropagationDelay",
1757 "ns3::JakesPropagationLossModel": dict({
1759 "create_function": create_element,
1760 "configure_function": configure_element,
1762 "connector_types": [],
1763 "box_attributes": ["NumberOfRaysPerPath",
1764 "NumberOfOscillatorsPerRay",
1768 "ns3::PacketSink": dict({
1769 "category": "Application",
1770 "create_function": create_element,
1771 "configure_function": configure_element,
1773 "connector_types": ["node"],
1774 "stop_function": stop_application,
1775 "start_function": start_application,
1776 "status_function": status_application,
1777 "box_attributes": ["Local",
1782 "ns3::RandomDirection2dMobilityModel": dict({
1783 "category": "Mobility",
1784 "create_function": create_element,
1785 "configure_function": configure_element,
1787 "connector_types": ["node"],
1788 "box_attributes": ["Bounds",
1794 "ns3::UanMacAloha": dict({
1796 "create_function": create_element,
1797 "configure_function": configure_element,
1799 "connector_types": [],
1800 "box_attributes": [],
1802 "ns3::MsduStandardAggregator": dict({
1804 "create_function": create_element,
1805 "configure_function": configure_element,
1807 "connector_types": [],
1808 "box_attributes": ["MaxAmsduSize"],
1810 "ns3::DcaTxop": dict({
1812 "create_function": create_element,
1813 "configure_function": configure_element,
1815 "connector_types": [],
1816 "box_attributes": ["MinCw",
1820 "ns3::UanPhyCalcSinrFhFsk": dict({
1822 "create_function": create_element,
1823 "configure_function": configure_element,
1825 "connector_types": [],
1826 "box_attributes": ["NumberOfHops"],
1828 "ns3::UanPropModelIdeal": dict({
1830 "create_function": create_element,
1831 "configure_function": configure_element,
1833 "connector_types": [],
1834 "box_attributes": [],
1836 "ns3::UanMacRcGw": dict({
1838 "create_function": create_element,
1839 "configure_function": configure_element,
1841 "connector_types": [],
1842 "box_attributes": ["MaxReservations",
1850 "NumberOfRetryRates",
1855 "ns3::NistErrorRateModel": dict({
1856 "category": "Error",
1857 "create_function": create_element,
1858 "configure_function": configure_element,
1860 "connector_types": ["phy"],
1861 "box_attributes": [],
1863 "ns3::Ipv4L3Protocol": dict({
1864 "category": "Protocol",
1865 "create_function": create_ipv4protocol,
1866 "configure_function": configure_element,
1868 "connector_types": ["node"],
1869 "box_attributes": ["DefaultTtl",
1873 "ns3::aodv::RoutingProtocol": dict({
1874 "category": "Protocol",
1875 "create_function": create_element,
1876 "configure_function": configure_element,
1878 "connector_types": [],
1879 "box_attributes": ["HelloInterval",
1882 "NodeTraversalTime",
1884 "ActiveRouteTimeout",
1891 "PathDiscoveryTime",
1900 "ns3::TcpL4Protocol": dict({
1901 "category": "Protocol",
1902 "create_function": create_element,
1903 "configure_function": configure_element,
1905 "connector_types": ["node"],
1906 "box_attributes": ["RttEstimatorFactory",
1909 "ns3::olsr::RoutingProtocol": dict({
1910 "category": "Protocol",
1911 "create_function": create_element,
1912 "configure_function": configure_element,
1914 "connector_types": [],
1915 "box_attributes": ["HelloInterval",
1921 "ns3::UdpEchoServer": dict({
1922 "category": "Application",
1923 "create_function": create_element,
1924 "configure_function": configure_element,
1926 "connector_types": ["node"],
1927 "stop_function": stop_application,
1928 "start_function": start_application,
1929 "status_function": status_application,
1930 "box_attributes": ["Port",
1934 "ns3::AmrrWifiManager": dict({
1935 "category": "Manager",
1936 "create_function": create_element,
1937 "configure_function": configure_element,
1939 "connector_types": [],
1940 "box_attributes": ["UpdatePeriod",
1943 "MaxSuccessThreshold",
1944 "MinSuccessThreshold",
1949 "FragmentationThreshold",
1952 "ns3::ArfWifiManager": dict({
1953 "category": "Manager",
1954 "create_function": create_element,
1955 "configure_function": configure_element,
1957 "connector_types": ["dev"],
1958 "box_attributes": ["TimerThreshold",
1964 "FragmentationThreshold",
1967 "ns3::SubscriberStationNetDevice": dict({
1968 "category": "Device",
1969 "create_function": create_element,
1970 "configure_function": configure_element,
1972 "connector_types": [],
1973 "allow_addresses": True,
1974 "box_attributes": ["LostDlMapInterval",
1975 "LostUlMapInterval",
1985 "MaxContentionRangingRetries",
1990 "ns3::flame::FlameRtable": dict({
1992 "create_function": create_element,
1993 "configure_function": configure_element,
1995 "connector_types": [],
1996 "box_attributes": ["Lifetime"],