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",
632 "tun_proto", "tun_addr", "tun_port", "tun_key"],
635 "ns3::CsmaNetDevice": dict({
636 "category": "Device",
637 "create_function": create_element,
638 "configure_function": configure_device,
639 "help": "CSMA (carrier sense, multiple access) interface",
640 "connector_types": ["node", "chan", "err", "queue"],
641 "allow_addresses": True,
642 "box_attributes": ["Address",
646 "traces": ["csmapcap", "csmapcap_promisc"]
648 "ns3::UanPropModelThorp": dict({
650 "create_function": create_element,
651 "configure_function": configure_element,
653 "connector_types": [],
654 "box_attributes": ["SpreadCoef"],
656 "ns3::NqstaWifiMac": dict({
658 "create_function": create_element,
659 "configure_function": configure_element,
661 "connector_types": [],
662 "box_attributes": ["ProbeRequestTimeout",
663 "AssocRequestTimeout",
667 "BasicBlockAckTimeout",
668 "CompressedBlockAckTimeout",
673 "MaxPropagationDelay",
676 "ns3::Icmpv6L4Protocol": dict({
677 "category": "Protocol",
678 "create_function": create_element,
679 "configure_function": configure_element,
681 "connector_types": [],
682 "box_attributes": ["DAD",
685 "ns3::SimpleNetDevice": dict({
686 "category": "Device",
687 "create_function": create_element,
688 "configure_function": configure_element,
690 "connector_types": ["node", "chan"],
691 "allow_addresses": True,
692 "box_attributes": [],
694 "ns3::FriisPropagationLossModel": dict({
696 "create_function": create_element,
697 "configure_function": configure_element,
699 "connector_types": [],
700 "box_attributes": ["Lambda",
704 "ns3::Ipv6OptionRouterAlert": dict({
706 "create_function": create_element,
707 "configure_function": configure_element,
709 "connector_types": [],
710 "box_attributes": ["OptionNumber"],
712 "ns3::UniformDiscPositionAllocator": dict({
713 "category": "Mobility",
714 "create_function": create_element,
715 "configure_function": configure_element,
717 "connector_types": [],
718 "box_attributes": ["rho",
722 "ns3::RandomBoxPositionAllocator": dict({
723 "category": "Mobility",
724 "create_function": create_element,
725 "configure_function": configure_element,
727 "connector_types": [],
728 "box_attributes": ["X",
732 "ns3::Ipv6ExtensionDestination": dict({
734 "create_function": create_element,
735 "configure_function": configure_element,
737 "connector_types": [],
738 "box_attributes": ["ExtensionNumber"],
740 "ns3::LoopbackNetDevice": dict({
741 "category": "Device",
742 "create_function": create_element,
743 "configure_function": configure_element,
745 "connector_types": [],
746 "box_attributes": [],
748 "ns3::ConstantSpeedPropagationDelayModel": dict({
750 "create_function": create_element,
751 "configure_function": configure_element,
753 "connector_types": ["chan"],
754 "box_attributes": ["Speed"],
756 "ns3::Ipv6ExtensionHopByHop": dict({
758 "create_function": create_element,
759 "configure_function": configure_element,
761 "connector_types": [],
762 "box_attributes": ["ExtensionNumber"],
764 "ns3::BridgeChannel": dict({
765 "category": "Channel",
766 "create_function": create_element,
767 "configure_function": configure_element,
769 "connector_types": [],
770 "box_attributes": [],
774 "create_function": create_element,
775 "configure_function": configure_element,
777 "connector_types": [],
778 "box_attributes": ["StartTime",
781 "ns3::PacketSocket": dict({
783 "create_function": create_element,
784 "configure_function": configure_element,
786 "connector_types": [],
787 "box_attributes": ["RcvBufSize"],
789 "ns3::flame::FlameProtocol": dict({
790 "category": "Protocol",
791 "create_function": create_element,
792 "configure_function": configure_element,
794 "connector_types": [],
795 "box_attributes": ["BroadcastInterval",
798 "ns3::Cost231PropagationLossModel": dict({
800 "create_function": create_element,
801 "configure_function": configure_element,
803 "connector_types": [],
804 "box_attributes": ["Lambda",
810 "ns3::Ipv6ExtensionESP": dict({
812 "create_function": create_element,
813 "configure_function": configure_element,
815 "connector_types": [],
816 "box_attributes": ["ExtensionNumber"],
818 "ns3::CaraWifiManager": dict({
819 "category": "Manager",
820 "create_function": create_element,
821 "configure_function": configure_element,
823 "connector_types": [],
824 "box_attributes": ["ProbeThreshold",
832 "FragmentationThreshold",
836 "ns3::RttMeanDeviation": dict({
838 "create_function": create_element,
839 "configure_function": configure_element,
841 "connector_types": [],
842 "box_attributes": ["Gain",
847 "ns3::Icmpv4L4Protocol": dict({
848 "category": "Protocol",
849 "create_function": create_element,
850 "configure_function": configure_element,
852 "connector_types": ["node"],
853 "box_attributes": ["ProtocolNumber"],
855 "ns3::WaveformGenerator": dict({
857 "create_function": create_element,
858 "configure_function": configure_element,
860 "connector_types": [],
861 "box_attributes": ["Period",
864 "ns3::YansWifiChannel": dict({
865 "category": "Channel",
866 "create_function": create_element,
867 "configure_function": configure_element,
869 "connector_types": ["phys", "delay", "loss"],
870 "box_attributes": [],
872 "ns3::SimpleChannel": dict({
873 "category": "Channel",
874 "create_function": create_element,
875 "configure_function": configure_element,
877 "connector_types": ["devs"],
878 "box_attributes": [],
880 "ns3::Ipv6ExtensionFragment": dict({
882 "create_function": create_element,
883 "configure_function": configure_element,
885 "connector_types": [],
886 "box_attributes": ["ExtensionNumber"],
888 "ns3::Dot11sStack": dict({
890 "create_function": create_element,
891 "configure_function": configure_element,
893 "connector_types": [],
894 "box_attributes": ["Root"],
896 "ns3::FriisSpectrumPropagationLossModel": dict({
898 "create_function": create_element,
899 "configure_function": configure_element,
901 "connector_types": [],
902 "box_attributes": [],
904 "ns3::RandomRectanglePositionAllocator": dict({
905 "category": "Mobility",
906 "create_function": create_element,
907 "configure_function": configure_element,
909 "connector_types": [],
910 "box_attributes": ["X",
913 "ns3::NqapWifiMac": dict({
915 "create_function": create_element,
916 "configure_function": configure_element,
918 "connector_types": [],
919 "box_attributes": ["BeaconInterval",
923 "BasicBlockAckTimeout",
924 "CompressedBlockAckTimeout",
929 "MaxPropagationDelay",
932 "ns3::HierarchicalMobilityModel": dict({
933 "category": "Mobility",
934 "create_function": create_element,
935 "configure_function": configure_element,
937 "connector_types": ["node"],
938 "box_attributes": ["Position",
941 "ns3::ThreeLogDistancePropagationLossModel": dict({
943 "create_function": create_element,
944 "configure_function": configure_element,
946 "connector_types": [],
947 "box_attributes": ["Distance0",
955 "ns3::UanNoiseModelDefault": dict({
957 "create_function": create_element,
958 "configure_function": configure_element,
960 "connector_types": [],
961 "box_attributes": ["Wind",
964 "ns3::dot11s::HwmpRtable": dict({
966 "create_function": create_element,
967 "configure_function": configure_element,
969 "connector_types": [],
970 "box_attributes": [],
972 "ns3::PacketBurst": dict({
974 "create_function": create_element,
975 "configure_function": configure_element,
977 "connector_types": [],
978 "box_attributes": [],
980 "ns3::RandomPropagationDelayModel": dict({
982 "create_function": create_element,
983 "configure_function": configure_element,
985 "connector_types": [],
986 "box_attributes": ["Variable"],
988 "ns3::ArpL3Protocol": dict({
989 "category": "Protocol",
990 "create_function": create_element,
991 "configure_function": configure_element,
993 "connector_types": ["node"],
994 "box_attributes": [],
996 "ns3::SteadyStateRandomWaypointMobilityModel": dict({
997 "category": "Mobility",
998 "create_function": create_element,
999 "configure_function": configure_element,
1001 "connector_types": [],
1002 "box_attributes": ["MinSpeed",
1013 "ns3::BaseStationNetDevice": dict({
1014 "category": "Device",
1015 "create_function": create_element,
1016 "configure_function": configure_device,
1018 "connector_types": [],
1019 "allow_addresses": True,
1020 "box_attributes": ["InitialRangInterval",
1026 "MaxRangCorrectionRetries",
1031 "ns3::UdpServer": dict({
1032 "category": "Application",
1033 "create_function": create_element,
1034 "configure_function": configure_element,
1036 "connector_types": [],
1037 "stop_function": stop_application,
1038 "start_function": start_application,
1039 "status_function": status_application,
1040 "box_attributes": ["Port",
1045 "ns3::AarfcdWifiManager": dict({
1046 "category": "Manager",
1047 "create_function": create_element,
1048 "configure_function": configure_element,
1050 "connector_types": [],
1051 "box_attributes": ["SuccessK",
1053 "MaxSuccessThreshold",
1054 "MinTimerThreshold",
1055 "MinSuccessThreshold",
1058 "TurnOffRtsAfterRateDecrease",
1059 "TurnOnRtsAfterRateIncrease",
1064 "FragmentationThreshold",
1067 "ns3::UanTransducerHd": dict({
1069 "create_function": create_element,
1070 "configure_function": configure_element,
1072 "connector_types": [],
1073 "box_attributes": [],
1075 "ns3::LogDistancePropagationLossModel": dict({
1077 "create_function": create_element,
1078 "configure_function": configure_element,
1080 "connector_types": ["prev", "next"],
1081 "box_attributes": ["Exponent",
1082 "ReferenceDistance",
1085 "ns3::EmuNetDevice": dict({
1086 "category": "Device",
1087 "create_function": create_element,
1088 "configure_function": configure_element,
1090 "connector_types": ["node", "queue"],
1091 "box_attributes": ["Mtu",
1098 "ns3::Ipv6ExtensionLooseRouting": dict({
1100 "create_function": create_element,
1101 "configure_function": configure_element,
1103 "connector_types": [],
1104 "box_attributes": ["ExtensionNumber"],
1106 "ns3::RandomWaypointMobilityModel": dict({
1107 "category": "Mobility",
1108 "create_function": create_element,
1109 "configure_function": configure_element,
1111 "connector_types": ["node"],
1112 "box_attributes": ["Speed",
1117 "ns3::RangePropagationLossModel": dict({
1119 "create_function": create_element,
1120 "configure_function": configure_element,
1122 "connector_types": [],
1123 "box_attributes": ["MaxRange"],
1125 "ns3::AlohaNoackNetDevice": dict({
1126 "category": "Device",
1127 "create_function": create_element,
1128 "configure_function": configure_element,
1130 "connector_types": [],
1131 "box_attributes": ["Address",
1134 "ns3::MatrixPropagationLossModel": dict({
1136 "create_function": create_element,
1137 "configure_function": configure_element,
1139 "connector_types": [],
1140 "box_attributes": ["DefaultLoss"],
1142 "ns3::WifiNetDevice": dict({
1143 "category": "Device",
1144 "create_function": create_element,
1145 "configure_function": configure_device,
1147 "connector_types": ["node", "mac", "phy", "manager"],
1148 "allow_addresses": True,
1149 "box_attributes": ["Mtu"],
1151 "ns3::CsmaChannel": dict({
1152 "category": "Channel",
1153 "create_function": create_element,
1154 "configure_function": configure_element,
1156 "connector_types": ["devs"],
1157 "box_attributes": ["DataRate",
1160 "ns3::BridgeNetDevice": dict({
1161 "category": "Device",
1162 "create_function": create_element,
1163 "configure_function": configure_element,
1165 "connector_types": ["node"],
1166 "allow_addresses": True,
1167 "box_attributes": ["Mtu",
1171 "ns3::Ipv6ExtensionRouting": dict({
1173 "create_function": create_element,
1174 "configure_function": configure_element,
1176 "connector_types": [],
1177 "box_attributes": ["ExtensionNumber"],
1179 "ns3::QstaWifiMac": dict({
1181 "create_function": create_wifi_standard_model,
1182 "configure_function": configure_element,
1183 "help": "Station Wifi MAC Model",
1184 "connector_types": ["dev"],
1185 "box_attributes": ["ProbeRequestTimeout",
1186 "AssocRequestTimeout",
1190 "BasicBlockAckTimeout",
1191 "CompressedBlockAckTimeout",
1196 "MaxPropagationDelay",
1200 "ns3::UdpEchoClient": dict({
1201 "category": "Application",
1202 "create_function": create_element,
1203 "configure_function": configure_element,
1205 "connector_types": ["node"],
1206 "stop_function": stop_application,
1207 "start_function": start_application,
1208 "status_function": status_application,
1209 "box_attributes": ["MaxPackets",
1217 "ns3::UdpClient": dict({
1218 "category": "Application",
1219 "create_function": create_element,
1220 "configure_function": configure_element,
1222 "connector_types": [],
1223 "stop_function": stop_application,
1224 "start_function": start_application,
1225 "status_function": status_application,
1226 "box_attributes": ["MaxPackets",
1234 "ns3::PointToPointChannel": dict({
1235 "category": "Channel",
1236 "create_function": create_element,
1237 "configure_function": configure_element,
1239 "connector_types": ["dev2"],
1240 "box_attributes": ["Delay"],
1242 "ns3::Ipv6StaticRouting": dict({
1244 "create_function": create_element,
1245 "configure_function": configure_element,
1247 "connector_types": [],
1248 "box_attributes": [],
1250 "ns3::DropTailQueue": dict({
1251 "category": "Device",
1252 "create_function": create_element,
1253 "configure_function": configure_element,
1255 "connector_types": ["dev"],
1256 "box_attributes": ["MaxPackets",
1259 "ns3::ConstantPositionMobilityModel": dict({
1260 "category": "Mobility",
1261 "create_function": create_element,
1262 "configure_function": configure_element,
1264 "connector_types": ["node"],
1265 "box_attributes": ["Position",
1268 "ns3::FixedRssLossModel": dict({
1270 "create_function": create_element,
1271 "configure_function": configure_element,
1273 "connector_types": [],
1274 "box_attributes": ["Rss"],
1276 "ns3::EnergySourceContainer": dict({
1278 "create_function": create_element,
1279 "configure_function": configure_element,
1281 "connector_types": [],
1282 "box_attributes": [],
1284 "ns3::RandomWalk2dMobilityModel": dict({
1285 "category": "Mobility",
1286 "create_function": create_element,
1287 "configure_function": configure_element,
1289 "connector_types": ["node"],
1290 "box_attributes": ["Bounds",
1299 "ns3::ListPositionAllocator": dict({
1301 "create_function": create_element,
1302 "configure_function": configure_element,
1304 "connector_types": [],
1305 "box_attributes": [],
1307 "ns3::dot11s::PeerManagementProtocol": dict({
1308 "category": "Protocol",
1309 "create_function": create_element,
1310 "configure_function": configure_element,
1312 "connector_types": [],
1313 "box_attributes": ["MaxNumberOfPeerLinks",
1314 "MaxBeaconShiftValue",
1315 "EnableBeaconCollisionAvoidance"],
1317 "ns3::MeshPointDevice": dict({
1318 "category": "Device",
1319 "create_function": create_element,
1320 "configure_function": configure_element,
1322 "connector_types": [],
1323 "allow_addresses": True,
1324 "box_attributes": ["Mtu"],
1326 "ns3::BasicEnergySource": dict({
1328 "create_function": create_element,
1329 "configure_function": configure_element,
1331 "connector_types": [],
1332 "box_attributes": ["BasicEnergySourceInitialEnergyJ",
1333 "BasicEnergySupplyVoltageV",
1334 "PeriodicEnergyUpdateInterval"],
1336 "ns3::Ipv6OptionPadn": dict({
1338 "create_function": create_element,
1339 "configure_function": configure_element,
1341 "connector_types": [],
1342 "box_attributes": ["OptionNumber"],
1344 "ns3::QapWifiMac": dict({
1346 "create_function": create_wifi_standard_model,
1347 "configure_function": configure_element,
1348 "help": "Access point Wifi MAC Model",
1349 "connector_types": ["dev"],
1350 "box_attributes": ["BeaconInterval",
1354 "BasicBlockAckTimeout",
1355 "CompressedBlockAckTimeout",
1360 "MaxPropagationDelay",
1364 "ns3::YansErrorRateModel": dict({
1365 "category": "Error",
1366 "create_function": create_element,
1367 "configure_function": configure_element,
1369 "connector_types": [],
1370 "box_attributes": [],
1372 "ns3::WifiMacQueue": dict({
1374 "create_function": create_element,
1375 "configure_function": configure_element,
1377 "connector_types": [],
1378 "box_attributes": ["MaxPacketNumber",
1381 "ns3::NonCommunicatingNetDevice": dict({
1382 "category": "Device",
1383 "create_function": create_element,
1384 "configure_function": configure_element,
1386 "connector_types": [],
1387 "allow_addresses": True,
1388 "box_attributes": [],
1390 "ns3::RateErrorModel": dict({
1391 "category": "Error",
1392 "create_function": create_element,
1393 "configure_function": configure_element,
1395 "connector_types": [],
1396 "box_attributes": ["ErrorUnit",
1401 "ns3::MeshWifiInterfaceMac": dict({
1403 "create_function": create_element,
1404 "configure_function": configure_element,
1406 "connector_types": [],
1407 "box_attributes": ["BeaconInterval",
1412 "BasicBlockAckTimeout",
1413 "CompressedBlockAckTimeout",
1418 "MaxPropagationDelay",
1421 "ns3::UanPhyCalcSinrDual": dict({
1423 "create_function": create_element,
1424 "configure_function": configure_element,
1426 "connector_types": [],
1427 "box_attributes": [],
1429 "ns3::Ipv6ExtensionAH": dict({
1431 "create_function": create_element,
1432 "configure_function": configure_element,
1434 "connector_types": [],
1435 "box_attributes": ["ExtensionNumber"],
1437 "ns3::SingleModelSpectrumChannel": dict({
1438 "category": "Channel",
1439 "create_function": create_element,
1440 "configure_function": configure_element,
1442 "connector_types": [],
1443 "box_attributes": [],
1445 "ns3::YansWifiPhy": dict({
1447 "create_function": create_wifi_standard_model,
1448 "configure_function": configure_element,
1450 "connector_types": ["dev", "err", "chan"],
1451 "box_attributes": ["EnergyDetectionThreshold",
1452 "CcaMode1Threshold",
1459 "ChannelSwitchDelay",
1462 "traces": ["yanswifipcap"]
1464 "ns3::WifiRadioEnergyModel": dict({
1466 "create_function": create_element,
1467 "configure_function": configure_element,
1469 "connector_types": [],
1470 "box_attributes": ["TxCurrentA",
1475 "ns3::EdcaTxopN": dict({
1477 "create_function": create_element,
1478 "configure_function": configure_element,
1480 "connector_types": [],
1481 "box_attributes": ["BlockAckThreshold",
1486 "ns3::UanPhyPerGenDefault": dict({
1488 "create_function": create_element,
1489 "configure_function": configure_element,
1491 "connector_types": [],
1492 "box_attributes": ["Threshold"],
1494 "ns3::IdealWifiManager": dict({
1495 "category": "Manager",
1496 "create_function": create_element,
1497 "configure_function": configure_element,
1499 "connector_types": [],
1500 "box_attributes": ["BerThreshold",
1505 "FragmentationThreshold",
1508 "ns3::MultiModelSpectrumChannel": dict({
1509 "category": "Channel",
1510 "create_function": create_element,
1511 "configure_function": configure_element,
1513 "connector_types": [],
1514 "box_attributes": [],
1516 "ns3::HalfDuplexIdealPhy": dict({
1518 "create_function": create_element,
1519 "configure_function": configure_element,
1521 "connector_types": [],
1522 "box_attributes": ["Rate"],
1524 "ns3::UanPhyCalcSinrDefault": dict({
1526 "create_function": create_element,
1527 "configure_function": configure_element,
1529 "connector_types": [],
1530 "box_attributes": [],
1532 "ns3::ReceiveListErrorModel": dict({
1533 "category": "Error",
1534 "create_function": create_element,
1535 "configure_function": configure_element,
1537 "connector_types": [],
1538 "box_attributes": ["IsEnabled"],
1540 "ns3::SpectrumAnalyzer": dict({
1542 "create_function": create_element,
1543 "configure_function": configure_element,
1545 "connector_types": [],
1546 "box_attributes": ["Resolution",
1547 "NoisePowerSpectralDensity"],
1549 "ns3::ConstantRateWifiManager": dict({
1550 "category": "Manager",
1551 "create_function": create_element,
1552 "configure_function": configure_element,
1554 "connector_types": ["dev"],
1555 "box_attributes": ["DataMode",
1561 "FragmentationThreshold",
1564 "ns3::Ipv6OptionPad1": dict({
1566 "create_function": create_element,
1567 "configure_function": configure_element,
1569 "connector_types": [],
1570 "box_attributes": ["OptionNumber"],
1572 "ns3::UdpTraceClient": dict({
1574 "create_function": create_element,
1575 "configure_function": configure_element,
1577 "connector_types": [],
1578 "box_attributes": ["RemoteAddress",
1584 "ns3::RraaWifiManager": dict({
1585 "category": "Manager",
1586 "create_function": create_element,
1587 "configure_function": configure_element,
1589 "connector_types": [],
1590 "box_attributes": ["Basic",
1618 "FragmentationThreshold",
1621 "ns3::RandomPropagationLossModel": dict({
1623 "create_function": create_element,
1624 "configure_function": configure_element,
1626 "connector_types": [],
1627 "box_attributes": ["Variable"],
1629 "ns3::UanChannel": dict({
1630 "category": "Channel",
1631 "create_function": create_element,
1632 "configure_function": configure_element,
1634 "connector_types": [],
1635 "box_attributes": [],
1637 "ns3::MinstrelWifiManager": dict({
1638 "category": "Manager",
1639 "create_function": create_element,
1640 "configure_function": configure_element,
1642 "connector_types": [],
1643 "box_attributes": ["UpdateStatistics",
1653 "FragmentationThreshold",
1656 "ns3::UanPhyDual": dict({
1658 "create_function": create_element,
1659 "configure_function": configure_element,
1661 "connector_types": [],
1662 "box_attributes": ["CcaThresholdPhy1",
1668 "SupportedModesPhy1",
1669 "SupportedModesPhy2"],
1671 "ns3::ListErrorModel": dict({
1672 "category": "Error",
1673 "create_function": create_element,
1674 "configure_function": configure_element,
1676 "connector_types": ["dev"],
1677 "box_attributes": ["IsEnabled"],
1679 "ns3::VirtualNetDevice": dict({
1680 "category": "Device",
1681 "create_function": create_element,
1682 "configure_function": configure_element,
1684 "connector_types": [],
1685 "allow_addresses": True,
1686 "box_attributes": ["Mtu"],
1688 "ns3::UanPhyGen": dict({
1690 "create_function": create_element,
1691 "configure_function": configure_element,
1693 "connector_types": [],
1694 "box_attributes": ["CcaThreshold",
1700 "ns3::Ipv6L3Protocol": dict({
1701 "category": "Protocol",
1702 "create_function": create_element,
1703 "configure_function": configure_element,
1705 "connector_types": [],
1706 "box_attributes": ["DefaultTtl",
1709 "ns3::PointToPointRemoteChannel": dict({
1710 "category": "Channel",
1711 "create_function": create_element,
1712 "configure_function": configure_element,
1714 "connector_types": [],
1715 "box_attributes": ["Delay"],
1717 "ns3::UanPhyPerUmodem": dict({
1719 "create_function": create_element,
1720 "configure_function": configure_element,
1722 "connector_types": [],
1723 "box_attributes": [],
1725 "ns3::OnoeWifiManager": dict({
1726 "category": "Manager",
1727 "create_function": create_element,
1728 "configure_function": configure_element,
1730 "connector_types": [],
1731 "box_attributes": ["UpdatePeriod",
1733 "AddCreditThreshold",
1738 "FragmentationThreshold",
1741 "ns3::QadhocWifiMac": dict({
1743 "create_function": create_element,
1744 "configure_function": configure_element,
1746 "connector_types": [],
1747 "box_attributes": ["CtsTimeout",
1749 "BasicBlockAckTimeout",
1750 "CompressedBlockAckTimeout",
1755 "MaxPropagationDelay",
1758 "ns3::JakesPropagationLossModel": dict({
1760 "create_function": create_element,
1761 "configure_function": configure_element,
1763 "connector_types": [],
1764 "box_attributes": ["NumberOfRaysPerPath",
1765 "NumberOfOscillatorsPerRay",
1769 "ns3::PacketSink": dict({
1770 "category": "Application",
1771 "create_function": create_element,
1772 "configure_function": configure_element,
1774 "connector_types": ["node"],
1775 "stop_function": stop_application,
1776 "start_function": start_application,
1777 "status_function": status_application,
1778 "box_attributes": ["Local",
1783 "ns3::RandomDirection2dMobilityModel": dict({
1784 "category": "Mobility",
1785 "create_function": create_element,
1786 "configure_function": configure_element,
1788 "connector_types": ["node"],
1789 "box_attributes": ["Bounds",
1795 "ns3::UanMacAloha": dict({
1797 "create_function": create_element,
1798 "configure_function": configure_element,
1800 "connector_types": [],
1801 "box_attributes": [],
1803 "ns3::MsduStandardAggregator": dict({
1805 "create_function": create_element,
1806 "configure_function": configure_element,
1808 "connector_types": [],
1809 "box_attributes": ["MaxAmsduSize"],
1811 "ns3::DcaTxop": dict({
1813 "create_function": create_element,
1814 "configure_function": configure_element,
1816 "connector_types": [],
1817 "box_attributes": ["MinCw",
1821 "ns3::UanPhyCalcSinrFhFsk": dict({
1823 "create_function": create_element,
1824 "configure_function": configure_element,
1826 "connector_types": [],
1827 "box_attributes": ["NumberOfHops"],
1829 "ns3::UanPropModelIdeal": dict({
1831 "create_function": create_element,
1832 "configure_function": configure_element,
1834 "connector_types": [],
1835 "box_attributes": [],
1837 "ns3::UanMacRcGw": dict({
1839 "create_function": create_element,
1840 "configure_function": configure_element,
1842 "connector_types": [],
1843 "box_attributes": ["MaxReservations",
1851 "NumberOfRetryRates",
1856 "ns3::NistErrorRateModel": dict({
1857 "category": "Error",
1858 "create_function": create_element,
1859 "configure_function": configure_element,
1861 "connector_types": ["phy"],
1862 "box_attributes": [],
1864 "ns3::Ipv4L3Protocol": dict({
1865 "category": "Protocol",
1866 "create_function": create_ipv4protocol,
1867 "configure_function": configure_element,
1869 "connector_types": ["node"],
1870 "box_attributes": ["DefaultTtl",
1874 "ns3::aodv::RoutingProtocol": dict({
1875 "category": "Protocol",
1876 "create_function": create_element,
1877 "configure_function": configure_element,
1879 "connector_types": [],
1880 "box_attributes": ["HelloInterval",
1883 "NodeTraversalTime",
1885 "ActiveRouteTimeout",
1892 "PathDiscoveryTime",
1901 "ns3::TcpL4Protocol": dict({
1902 "category": "Protocol",
1903 "create_function": create_element,
1904 "configure_function": configure_element,
1906 "connector_types": ["node"],
1907 "box_attributes": ["RttEstimatorFactory",
1910 "ns3::olsr::RoutingProtocol": dict({
1911 "category": "Protocol",
1912 "create_function": create_element,
1913 "configure_function": configure_element,
1915 "connector_types": [],
1916 "box_attributes": ["HelloInterval",
1922 "ns3::UdpEchoServer": dict({
1923 "category": "Application",
1924 "create_function": create_element,
1925 "configure_function": configure_element,
1927 "connector_types": ["node"],
1928 "stop_function": stop_application,
1929 "start_function": start_application,
1930 "status_function": status_application,
1931 "box_attributes": ["Port",
1935 "ns3::AmrrWifiManager": dict({
1936 "category": "Manager",
1937 "create_function": create_element,
1938 "configure_function": configure_element,
1940 "connector_types": [],
1941 "box_attributes": ["UpdatePeriod",
1944 "MaxSuccessThreshold",
1945 "MinSuccessThreshold",
1950 "FragmentationThreshold",
1953 "ns3::ArfWifiManager": dict({
1954 "category": "Manager",
1955 "create_function": create_element,
1956 "configure_function": configure_element,
1958 "connector_types": ["dev"],
1959 "box_attributes": ["TimerThreshold",
1965 "FragmentationThreshold",
1968 "ns3::SubscriberStationNetDevice": dict({
1969 "category": "Device",
1970 "create_function": create_element,
1971 "configure_function": configure_element,
1973 "connector_types": [],
1974 "allow_addresses": True,
1975 "box_attributes": ["LostDlMapInterval",
1976 "LostUlMapInterval",
1986 "MaxContentionRangingRetries",
1991 "ns3::flame::FlameRtable": dict({
1993 "create_function": create_element,
1994 "configure_function": configure_element,
1996 "connector_types": [],
1997 "box_attributes": ["Lifetime"],