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 dev_guids = testbed_instance.get_connected(guid, "devs", "node")
35 for guid_ in dev_guids:
39 return interface_number
41 ### create traces functions ###
43 def p2ppcap_trace(testbed_instance, guid, trace_id):
44 node_guid = _get_node_guid(testbed_instance, guid)
45 interface_number = _get_dev_number(testbed_instance, guid)
46 element = testbed_instance._elements[guid]
47 filename = "trace-p2p-node-%d-dev-%d.pcap" % (node_guid, interface_number)
48 testbed_instance.follow_trace(guid, trace_id, filename)
49 filepath = testbed_instance.trace_filename(guid, trace_id)
50 helper = testbed_instance.ns3.PointToPointHelper()
51 helper.EnablePcap(filepath, element, explicitFilename = True)
53 def _csmapcap_trace(testbed_instance, guid, trace_id, promisc):
54 node_guid = _get_node_guid(testbed_instance, guid)
55 interface_number = _get_dev_number(testbed_instance, guid)
56 element = testbed_instance._elements[guid]
57 filename = "trace-csma-node-%d-dev-%d.pcap" % (node_name, interface_number)
58 testbed_instance.follow_trace(guid, trace_id, filename)
59 filepath = testbed_instance.trace_filename(guid, trace_id)
60 helper = testbed_instance.ns3.CsmaHelper()
61 helper.EnablePcap(filepath, element, promiscuous = promisc,
62 explicitFilename = True)
64 def csmapcap_trace(testbed_instance, guid, trace_id):
66 _csmapcap_trace(testbed_instance, guid, trace_id, promisc)
68 def csmapcap_promisc_trace(testbed_instance, guid, trace_id):
70 _csmapcap_trace(testbed_instance, guid, trace_id, promisc)
72 def fdpcap_trace(testbed_instance, guid, trace_id):
73 node_guid = _get_node_guid(testbed_instance, guid)
74 interface_number = _get_dev_number(testbed_instance, guid)
75 element = testbed_instance._elements[guid]
76 filename = "trace-fd-node-%d-dev-%d.pcap" % (node_name, interface_number)
77 testbed_instance.follow_trace(guid, trace_id, filename)
78 filepath = testbed_instance.trace_filename(guid, trace_id)
79 helper = testbed_instance.ns3.FileDescriptorHelper()
80 helper.EnablePcap(filepath, element, explicitFilename = True)
82 def yanswifipcap_trace(testbed_instance, guid, trace_id):
83 dev_guid = testbed_instance.get_connected(guid, "dev", "phy")[0]
84 node_guid = _get_node_guid(testbed_instance, dev_guid)
85 interface_number = _get_dev_number(testbed_instance, dev_guid)
86 element = testbed_instance._elements[dev_guid]
87 filename = "trace-yanswifi-node-%d-dev-%d.pcap" % (node_name, interface_number)
88 testbed_instance.follow_trace(guid, trace_id, filename)
89 filepath = testbed_instance.trace_filename(guid, trace_id)
90 helper = testbed_instance.ns3.YansWifiPhyHelper()
91 helper.EnablePcap(filepath, element, explicitFilename = True)
93 trace_functions = dict({
94 "P2PPcapTrace": p2ppcap_trace,
95 "CsmaPcapTrace": csmapcap_trace,
96 "CsmaPcapPromiscTrace": csmapcap_promisc_trace,
97 "FileDescriptorPcapTrace": fdpcap_trace,
98 "YansWifiPhyPcapTrace": yanswifipcap_trace
101 ### Creation functions ###
103 wifi_standards = dict({
104 "WIFI_PHY_STANDARD_holland": 5,
105 "WIFI_PHY_STANDARD_80211p_SCH": 7,
106 "WIFI_PHY_STANDARD_80211_5Mhz": 4,
107 "WIFI_PHY_UNKNOWN": 8,
108 "WIFI_PHY_STANDARD_80211_10Mhz": 3,
109 "WIFI_PHY_STANDARD_80211g": 2,
110 "WIFI_PHY_STANDARD_80211p_CCH": 6,
111 "WIFI_PHY_STANDARD_80211a": 0,
112 "WIFI_PHY_STANDARD_80211b": 1
115 def create_element(testbed_instance, guid):
116 element_factory = testbed_instance.ns3.ObjectFactory()
117 factory_id = testbed_instance._create[guid]
118 element_factory.SetTypeId(factory_id)
119 construct_parameters = testbed_instance._get_construct_parameters(guid)
120 for name, value in construct_parameters.iteritems():
121 ns3_value = testbed_instance._to_ns3_value(guid, name, value)
122 element_factory.Set(name, ns3_value)
123 element = element_factory.Create()
124 testbed_instance._elements[guid] = element
125 traces = testbed_instance._get_traces(guid)
126 for trace_id in traces:
127 trace_func = trace_functions[trace_id]
128 trace_func(testbed_instance, guid, trace_id)
130 def create_node(testbed_instance, guid):
131 create_element(testbed_instance, guid)
132 element = testbed_instance._elements[guid]
133 element.AggregateObject(testbed_instance.ns3.PacketSocketFactory())
135 def create_device(testbed_instance, guid):
136 create_element(testbed_instance, guid)
137 element = testbed_instance._elements[guid]
138 parameters = testbed_instance._get_parameters(guid)
139 if "macAddress" in parameters:
140 address = parameters["macAddress"]
141 macaddr = testbed_instance.ns3.Mac48Address(address)
143 macaddr = testbed_instance.ns3.Mac48Address.Allocate()
144 element.SetAddress(macaddr)
146 def create_wifi_standard_model(testbed_instance, guid):
147 create_element(testbed_instance, guid)
148 element = testbed_instance._elements[guid]
149 parameters = testbed_instance._get_parameters(guid)
150 if "standard" in parameters:
151 standard = parameters["standard"]
153 elements.ConfigureStandard(wifi_standards[standard])
155 def create_ipv4protocol(testbed_instance, guid):
156 create_element(testbed_instance, guid)
157 element = testbed_instance._elements[guid]
158 list_routing = testbed_instance.ns3.Ipv4ListRouting()
159 element.SetRoutingProtocol(list_routing)
160 static_routing = testbed_instance.ns3.Ipv4StaticRouting()
161 list_routing.AddRoutingProtocol(static_routing, 1)
163 ### Start/Stop functions ###
165 def start_application(testbed_instance, guid):
166 element = testbed_instance.elements[guid]
167 # BUG: without doing this explicit call it doesn't start!!!
168 # Shouldn't be enough to set the StartTime?
171 def stop_application(testbed_instance, guid):
172 element = testbed_instance.elements[guid]
173 now = testbed_instance.ns3.Simulator.Now()
174 element.SetStopTime(now)
176 ### Status functions ###
178 def status_application(testbed_instance, guid):
179 if guid not in testbed_instance.elements.keys():
180 raise RuntimeError("Can't get status on guid %d" % guid )
181 now = testbed_instance.ns3.Simulator.Now()
183 return STATUS_NOT_STARTED
184 app = testbed_instance.elements[guid]
185 parameters = testbed_instance._get_parameters(guid)
186 if "StartTime" in parameters and parameters["StartTime"]:
187 start_value = parameters["StartTime"]
188 start_time = testbed_instance.ns3.Time(start_value)
189 if now.Compare(start_time) < 0:
190 return STATUS_NOT_RUNNING
191 if "StopTime" in parameters and parameters["StopTime"]:
192 stop_value = parameters["StopTime"]
193 stop_time = testbed_instance.ns3.Time(stop_value)
194 if now.Compare(stop_time) < 0:
195 return STATUS_RUNNING
197 return STATUS_FINISHED
198 return STATUS_UNDETERMINED
200 ### Configure functions ###
202 def configure_device(testbed_instance, guid):
203 element = testbed_instance._elements[guid]
204 if not guid in testbed_instance._add_address:
206 # search for the node asociated with the device
207 node_guid = _get_node_guid(testbed_instance, guid)
208 node = testbed_instance.elements[node_guid]
209 # search for the Ipv4L3Protocol asociated with the device
210 ipv4_guid = _get_ipv4_protocol_guid(testbed_instance, node_guid)
211 ipv4 = testbed_instance._elements[ipv4_guid]
212 ns3 = testbed_instance.ns3
214 addresses = testbed_instance._add_address[guid]
215 for address in addresses:
216 (address, netprefix, broadcast) = address
217 # TODO: missing IPV6 addresses!!
218 ifindex = ipv4.AddInterface(element)
219 inaddr = ns3.Ipv4InterfaceAddress(ns3.Ipv4Address(address),
220 ns3.Ipv4Mask("/%d" % netprefix))
221 ipv4.AddAddress(ifindex, inaddr)
222 ipv4.SetMetric(ifindex, 1)
225 def configure_node(testbed_instance, guid):
226 element = testbed_instance._elements[guid]
227 if not guid in testbed_instance._add_route:
229 # search for the Ipv4L3Protocol asociated with the device
230 ipv4_guid = _get_ipv4_protocol_guid(testbed_instance, guid)
231 ipv4 = testbed_instance._elements[ipv4_guid]
232 list_routing = ipv4.GetRoutingProtocol()
233 (static_routing, priority) = list_routing.GetRoutingProtocol(0)
234 ns3 = testbed_instance.ns3
235 routes = testbed_instance._add_route[guid]
237 (destination, netprefix, nexthop) = route
238 address = ns3.Ipv4Address(destination)
239 mask = ns3.Ipv4Mask("/%d" % netprefix)
241 nexthop_address = ns3.Ipv4Address(nexthop)
243 # TODO: HACKISH way of getting the ifindex... improve this
244 nifaces = ipv4.GetNInterfaces()
245 for ifidx in range(nifaces):
246 iface = ipv4.GetInterface(ifidx)
247 naddress = iface.GetNAddresses()
248 for addridx in range(naddress):
249 ifaddr = iface.GetAddress(addridx)
250 ifmask = ifaddr.GetMask()
251 ifindex = ipv4.GetInterfaceForPrefix(nexthop_address, ifmask)
254 static_routing.AddNetworkRouteTo(address, mask, nexthop_address,
257 ifindex = ipv4.GetInterfaceForPrefix(address, mask)
258 static_routing.AddNetworkRouteTo(address, mask, ifindex)
260 factories_info = dict({
262 "category": "Application",
263 "create_function": create_element,
265 "connector_types": [],
266 "stop_function": stop_application,
267 "start_function": start_application,
268 "status_function": status_application,
269 "box_attributes": ["MaxPackets",
277 "ns3::UdpL4Protocol": dict({
278 "category": "Protocol",
279 "create_function": create_element,
281 "connector_types": ["node"],
282 "box_attributes": ["ProtocolNumber"],
284 "ns3::RandomDiscPositionAllocator": dict({
285 "category": "Mobility",
286 "create_function": create_element,
288 "connector_types": [],
289 "box_attributes": ["Theta",
295 "category": "Topology",
296 "create_function": create_node,
297 "configure_function": configure_node,
299 "connector_types": ["devs", "apps", "protos", "mobility"],
300 "allow_routes": True,
301 "box_attributes": [],
303 "ns3::GridPositionAllocator": dict({
304 "category": "Mobility",
305 "create_function": create_element,
307 "connector_types": [],
308 "box_attributes": ["GridWidth",
315 "ns3::TapBridge": dict({
316 "category": "Device",
317 "create_function": create_device,
319 "connector_types": [],
320 "allow_addresses": True,
321 "box_attributes": ["Mtu",
330 "ns3::FlowMonitor": dict({
332 "create_function": create_element,
334 "connector_types": [],
335 "box_attributes": ["MaxPerHopDelay",
338 "PacketSizeBinWidth",
339 "FlowInterruptionsBinWidth",
340 "FlowInterruptionsMinTime"],
342 "ns3::ConstantVelocityMobilityModel": dict({
343 "category": "Mobility",
344 "create_function": create_element,
346 "connector_types": ["node"],
347 "box_attributes": ["Position",
350 "ns3::V4Ping": dict({
351 "category": "Application",
352 "create_function": create_element,
354 "connector_types": ["node"],
355 "stop_function": stop_application,
356 "start_function": start_application,
357 "status_function": status_application,
358 "box_attributes": ["Remote",
365 "ns3::dot11s::PeerLink": dict({
367 "create_function": create_element,
369 "connector_types": [],
370 "box_attributes": ["RetryTimeout",
377 "ns3::PointToPointNetDevice": dict({
378 "category": "Device",
379 "create_function": create_device,
380 "configure_function": configure_device,
382 "connector_types": ["node", "err", "queue", "chan"],
383 "allow_addresses": True,
384 "box_attributes": ["Mtu",
388 "traces": ["p2ppcap"]
390 "ns3::NakagamiPropagationLossModel": dict({
392 "create_function": create_element,
394 "connector_types": [],
395 "box_attributes": ["Distance1",
401 "ns3::AarfWifiManager": dict({
402 "category": "Manager",
403 "create_function": create_element,
405 "connector_types": [],
406 "box_attributes": ["SuccessK",
408 "MaxSuccessThreshold",
410 "MinSuccessThreshold",
415 "FragmentationThreshold",
418 "ns3::Ipv6OptionJumbogram": dict({
420 "create_function": create_element,
422 "connector_types": [],
423 "box_attributes": ["OptionNumber"],
425 "ns3::TwoRayGroundPropagationLossModel": dict({
427 "create_function": create_element,
429 "connector_types": [],
430 "box_attributes": ["Lambda",
435 "ns3::OnOffApplication": dict({
436 "category": "Application",
437 "create_function": create_element,
439 "connector_types": ["node"],
440 "stop_function": stop_application,
441 "start_function": start_application,
442 "status_function": status_application,
443 "box_attributes": ["DataRate",
453 "ns3::AdhocWifiMac": dict({
455 "create_function": create_element,
457 "connector_types": [],
458 "box_attributes": ["CtsTimeout",
460 "BasicBlockAckTimeout",
461 "CompressedBlockAckTimeout",
466 "MaxPropagationDelay",
469 "ns3::ConstantAccelerationMobilityModel": dict({
470 "category": "Mobility",
471 "create_function": create_element,
473 "connector_types": ["node"],
474 "box_attributes": ["Position",
477 "ns3::GaussMarkovMobilityModel": dict({
478 "category": "Mobility",
479 "create_function": create_element,
481 "connector_types": [],
482 "box_attributes": ["Bounds",
494 "ns3::dot11s::HwmpProtocol": dict({
495 "category": "Protocol",
496 "create_function": create_element,
498 "connector_types": [],
499 "box_attributes": ["RandomStart",
501 "Dot11MeshHWMPmaxPREQretries",
502 "Dot11MeshHWMPnetDiameterTraversalTime",
503 "Dot11MeshHWMPpreqMinInterval",
504 "Dot11MeshHWMPperrMinInterval",
505 "Dot11MeshHWMPactiveRootTimeout",
506 "Dot11MeshHWMPactivePathTimeout",
507 "Dot11MeshHWMPpathToRootInterval",
508 "Dot11MeshHWMPrannInterval",
510 "UnicastPerrThreshold",
511 "UnicastPreqThreshold",
512 "UnicastDataThreshold",
516 "ns3::NscTcpL4Protocol": dict({
517 "category": "Protocol",
518 "create_function": create_element,
520 "connector_types": [],
521 "box_attributes": ["Library",
524 "ns3::dot11s::AirtimeLinkMetricCalculator": dict({
526 "create_function": create_element,
528 "connector_types": [],
529 "box_attributes": ["Dot11sMeshHeaderLength"],
531 "ns3::UanMacCw": dict({
533 "create_function": create_element,
535 "connector_types": [],
536 "box_attributes": ["CW",
539 "ns3::AthstatsWifiTraceSink": dict({
541 "create_function": create_element,
543 "connector_types": [],
544 "box_attributes": ["Interval"],
546 "ns3::FlameStack": dict({
548 "create_function": create_element,
550 "connector_types": [],
551 "box_attributes": [],
553 "ns3::UanMacRc": dict({
555 "create_function": create_element,
557 "connector_types": [],
558 "box_attributes": ["RetryRate",
565 "NumberOfRetryRates",
568 "ns3::WaypointMobilityModel": dict({
569 "category": "Mobility",
570 "create_function": create_element,
572 "connector_types": [],
573 "box_attributes": ["WaypointsLeft",
577 "ns3::FileDescriptorNetDevice": dict({
578 "category": "Device",
579 "create_function": create_device,
580 "configure_function": configure_device,
581 "help": "Network interface associated to a file descriptor",
582 "connector_types": ["node", "fd"],
583 "allow_addresses": True,
584 "box_attributes": ["Address"],
587 "ns3::CsmaNetDevice": dict({
588 "category": "Device",
589 "create_function": create_device,
590 "configure_function": configure_device,
591 "help": "CSMA (carrier sense, multiple access) interface",
592 "connector_types": ["node", "chan", "err", "queue"],
593 "allow_addresses": True,
594 "box_attributes": ["Address",
598 "traces": ["csmapcap", "csmapcap_promisc"]
600 "ns3::UanPropModelThorp": dict({
602 "create_function": create_element,
604 "connector_types": [],
605 "box_attributes": ["SpreadCoef"],
607 "ns3::NqstaWifiMac": dict({
609 "create_function": create_element,
611 "connector_types": [],
612 "box_attributes": ["ProbeRequestTimeout",
613 "AssocRequestTimeout",
617 "BasicBlockAckTimeout",
618 "CompressedBlockAckTimeout",
623 "MaxPropagationDelay",
626 "ns3::Icmpv6L4Protocol": dict({
627 "category": "Protocol",
628 "create_function": create_element,
630 "connector_types": [],
631 "box_attributes": ["DAD",
634 "ns3::SimpleNetDevice": dict({
635 "category": "Device",
636 "create_function": create_device,
638 "connector_types": ["node", "chan"],
639 "allow_addresses": True,
640 "box_attributes": [],
642 "ns3::FriisPropagationLossModel": dict({
644 "create_function": create_element,
646 "connector_types": [],
647 "box_attributes": ["Lambda",
651 "ns3::Ipv6OptionRouterAlert": dict({
653 "create_function": create_element,
655 "connector_types": [],
656 "box_attributes": ["OptionNumber"],
658 "ns3::UniformDiscPositionAllocator": dict({
659 "category": "Mobility",
660 "create_function": create_element,
662 "connector_types": [],
663 "box_attributes": ["rho",
667 "ns3::RandomBoxPositionAllocator": dict({
668 "category": "Mobility",
669 "create_function": create_element,
671 "connector_types": [],
672 "box_attributes": ["X",
676 "ns3::Ipv6ExtensionDestination": dict({
678 "create_function": create_element,
680 "connector_types": [],
681 "box_attributes": ["ExtensionNumber"],
683 "ns3::LoopbackNetDevice": dict({
684 "category": "Device",
685 "create_function": create_device,
687 "connector_types": [],
688 "box_attributes": [],
690 "ns3::ConstantSpeedPropagationDelayModel": dict({
692 "create_function": create_element,
694 "connector_types": ["chan"],
695 "box_attributes": ["Speed"],
697 "ns3::Ipv6ExtensionHopByHop": dict({
699 "create_function": create_element,
701 "connector_types": [],
702 "box_attributes": ["ExtensionNumber"],
704 "ns3::BridgeChannel": dict({
705 "category": "Channel",
706 "create_function": create_element,
708 "connector_types": [],
709 "box_attributes": [],
713 "create_function": create_element,
715 "connector_types": [],
716 "box_attributes": ["StartTime",
719 "ns3::PacketSocket": dict({
721 "create_function": create_element,
723 "connector_types": [],
724 "box_attributes": ["RcvBufSize"],
726 "ns3::flame::FlameProtocol": dict({
727 "category": "Protocol",
728 "create_function": create_element,
730 "connector_types": [],
731 "box_attributes": ["BroadcastInterval",
734 "ns3::Cost231PropagationLossModel": dict({
736 "create_function": create_element,
738 "connector_types": [],
739 "box_attributes": ["Lambda",
745 "ns3::Ipv6ExtensionESP": dict({
747 "create_function": create_element,
749 "connector_types": [],
750 "box_attributes": ["ExtensionNumber"],
752 "ns3::CaraWifiManager": dict({
753 "category": "Manager",
754 "create_function": create_element,
756 "connector_types": [],
757 "box_attributes": ["ProbeThreshold",
765 "FragmentationThreshold",
769 "ns3::RttMeanDeviation": dict({
771 "create_function": create_element,
773 "connector_types": [],
774 "box_attributes": ["Gain",
779 "ns3::Icmpv4L4Protocol": dict({
780 "category": "Protocol",
781 "create_function": create_element,
783 "connector_types": ["node"],
784 "box_attributes": ["ProtocolNumber"],
786 "ns3::WaveformGenerator": dict({
788 "create_function": create_element,
790 "connector_types": [],
791 "box_attributes": ["Period",
794 "ns3::YansWifiChannel": dict({
795 "category": "Channel",
796 "create_function": create_element,
798 "connector_types": ["phys", "delay", "loss"],
799 "box_attributes": [],
801 "ns3::SimpleChannel": dict({
802 "category": "Channel",
803 "create_function": create_element,
805 "connector_types": ["devs"],
806 "box_attributes": [],
808 "ns3::Ipv6ExtensionFragment": dict({
810 "create_function": create_element,
812 "connector_types": [],
813 "box_attributes": ["ExtensionNumber"],
815 "ns3::Dot11sStack": dict({
817 "create_function": create_element,
819 "connector_types": [],
820 "box_attributes": ["Root"],
822 "ns3::FriisSpectrumPropagationLossModel": dict({
824 "create_function": create_element,
826 "connector_types": [],
827 "box_attributes": [],
829 "ns3::RandomRectanglePositionAllocator": dict({
830 "category": "Mobility",
831 "create_function": create_element,
833 "connector_types": [],
834 "box_attributes": ["X",
837 "ns3::NqapWifiMac": dict({
839 "create_function": create_element,
841 "connector_types": [],
842 "box_attributes": ["BeaconInterval",
846 "BasicBlockAckTimeout",
847 "CompressedBlockAckTimeout",
852 "MaxPropagationDelay",
855 "ns3::HierarchicalMobilityModel": dict({
856 "category": "Mobility",
857 "create_function": create_element,
859 "connector_types": ["node"],
860 "box_attributes": ["Position",
863 "ns3::ThreeLogDistancePropagationLossModel": dict({
865 "create_function": create_element,
867 "connector_types": [],
868 "box_attributes": ["Distance0",
876 "ns3::UanNoiseModelDefault": dict({
878 "create_function": create_element,
880 "connector_types": [],
881 "box_attributes": ["Wind",
884 "ns3::dot11s::HwmpRtable": dict({
886 "create_function": create_element,
888 "connector_types": [],
889 "box_attributes": [],
891 "ns3::PacketBurst": dict({
893 "create_function": create_element,
895 "connector_types": [],
896 "box_attributes": [],
898 "ns3::RandomPropagationDelayModel": dict({
900 "create_function": create_element,
902 "connector_types": [],
903 "box_attributes": ["Variable"],
905 "ns3::ArpL3Protocol": dict({
906 "category": "Protocol",
907 "create_function": create_element,
909 "connector_types": ["node"],
910 "box_attributes": [],
912 "ns3::SteadyStateRandomWaypointMobilityModel": dict({
913 "category": "Mobility",
914 "create_function": create_element,
916 "connector_types": [],
917 "box_attributes": ["MinSpeed",
928 "ns3::BaseStationNetDevice": dict({
929 "category": "Device",
930 "create_function": create_device,
931 "configure_function": configure_device,
933 "connector_types": [],
934 "allow_addresses": True,
935 "box_attributes": ["InitialRangInterval",
941 "MaxRangCorrectionRetries",
946 "ns3::UdpServer": dict({
947 "category": "Application",
948 "create_function": create_element,
950 "connector_types": [],
951 "stop_function": stop_application,
952 "start_function": start_application,
953 "status_function": status_application,
954 "box_attributes": ["Port",
959 "ns3::AarfcdWifiManager": dict({
960 "category": "Manager",
961 "create_function": create_element,
963 "connector_types": [],
964 "box_attributes": ["SuccessK",
966 "MaxSuccessThreshold",
968 "MinSuccessThreshold",
971 "TurnOffRtsAfterRateDecrease",
972 "TurnOnRtsAfterRateIncrease",
977 "FragmentationThreshold",
980 "ns3::UanTransducerHd": dict({
982 "create_function": create_element,
984 "connector_types": [],
985 "box_attributes": [],
987 "ns3::LogDistancePropagationLossModel": dict({
989 "create_function": create_element,
991 "connector_types": ["prev", "next"],
992 "box_attributes": ["Exponent",
996 "ns3::EmuNetDevice": dict({
997 "category": "Device",
998 "create_function": create_device,
1000 "connector_types": ["node", "queue"],
1001 "box_attributes": ["Mtu",
1008 "ns3::Ipv6ExtensionLooseRouting": dict({
1010 "create_function": create_element,
1012 "connector_types": [],
1013 "box_attributes": ["ExtensionNumber"],
1015 "ns3::RandomWaypointMobilityModel": dict({
1016 "category": "Mobility",
1017 "create_function": create_element,
1019 "connector_types": ["node"],
1020 "box_attributes": ["Speed",
1025 "ns3::RangePropagationLossModel": dict({
1027 "create_function": create_element,
1029 "connector_types": [],
1030 "box_attributes": ["MaxRange"],
1032 "ns3::AlohaNoackNetDevice": dict({
1033 "category": "Device",
1034 "create_function": create_element,
1036 "connector_types": [],
1037 "box_attributes": ["Address",
1040 "ns3::MatrixPropagationLossModel": dict({
1042 "create_function": create_element,
1044 "connector_types": [],
1045 "box_attributes": ["DefaultLoss"],
1047 "ns3::WifiNetDevice": dict({
1048 "category": "Device",
1049 "create_function": create_device,
1050 "configure_function": configure_device,
1052 "connector_types": ["node", "mac", "phy", "manager"],
1053 "allow_addresses": True,
1054 "box_attributes": ["Mtu"],
1056 "ns3::CsmaChannel": dict({
1057 "category": "Channel",
1058 "create_function": create_element,
1060 "connector_types": ["devs"],
1061 "box_attributes": ["DataRate",
1064 "ns3::BridgeNetDevice": dict({
1065 "category": "Device",
1066 "create_function": create_device,
1068 "connector_types": ["node"],
1069 "allow_addresses": True,
1070 "box_attributes": ["Mtu",
1074 "ns3::Ipv6ExtensionRouting": dict({
1076 "create_function": create_element,
1078 "connector_types": [],
1079 "box_attributes": ["ExtensionNumber"],
1081 "ns3::QstaWifiMac": dict({
1083 "create_function": create_wifi_standard_model,
1084 "help": "Station Wifi MAC Model",
1085 "connector_types": ["dev"],
1086 "box_attributes": ["ProbeRequestTimeout",
1087 "AssocRequestTimeout",
1091 "BasicBlockAckTimeout",
1092 "CompressedBlockAckTimeout",
1097 "MaxPropagationDelay",
1100 "ns3::UdpEchoClient": dict({
1101 "category": "Application",
1102 "create_function": create_element,
1104 "connector_types": ["node"],
1105 "stop_function": stop_application,
1106 "start_function": start_application,
1107 "status_function": status_application,
1108 "box_attributes": ["MaxPackets",
1116 "ns3::UdpClient": dict({
1117 "category": "Application",
1118 "create_function": create_element,
1120 "connector_types": [],
1121 "stop_function": stop_application,
1122 "start_function": start_application,
1123 "status_function": status_application,
1124 "box_attributes": ["MaxPackets",
1132 "ns3::PointToPointChannel": dict({
1133 "category": "Channel",
1134 "create_function": create_element,
1136 "connector_types": ["dev2"],
1137 "box_attributes": ["Delay"],
1139 "ns3::Ipv6StaticRouting": dict({
1141 "create_function": create_element,
1143 "connector_types": [],
1144 "box_attributes": [],
1146 "ns3::DropTailQueue": dict({
1147 "category": "Device",
1148 "create_function": create_element,
1150 "connector_types": ["dev"],
1151 "box_attributes": ["MaxPackets",
1154 "ns3::ConstantPositionMobilityModel": dict({
1155 "category": "Mobility",
1156 "create_function": create_element,
1158 "connector_types": ["node"],
1159 "box_attributes": ["Position",
1162 "ns3::FixedRssLossModel": dict({
1164 "create_function": create_element,
1166 "connector_types": [],
1167 "box_attributes": ["Rss"],
1169 "ns3::EnergySourceContainer": dict({
1171 "create_function": create_element,
1173 "connector_types": [],
1174 "box_attributes": [],
1176 "ns3::RandomWalk2dMobilityModel": dict({
1177 "category": "Mobility",
1178 "create_function": create_element,
1180 "connector_types": ["node"],
1181 "box_attributes": ["Bounds",
1190 "ns3::ListPositionAllocator": dict({
1192 "create_function": create_element,
1194 "connector_types": [],
1195 "box_attributes": [],
1197 "ns3::dot11s::PeerManagementProtocol": dict({
1198 "category": "Protocol",
1199 "create_function": create_element,
1201 "connector_types": [],
1202 "box_attributes": ["MaxNumberOfPeerLinks",
1203 "MaxBeaconShiftValue",
1204 "EnableBeaconCollisionAvoidance"],
1206 "ns3::MeshPointDevice": dict({
1207 "category": "Device",
1208 "create_function": create_device,
1210 "connector_types": [],
1211 "allow_addresses": True,
1212 "box_attributes": ["Mtu"],
1214 "ns3::BasicEnergySource": dict({
1216 "create_function": create_element,
1218 "connector_types": [],
1219 "box_attributes": ["BasicEnergySourceInitialEnergyJ",
1220 "BasicEnergySupplyVoltageV",
1221 "PeriodicEnergyUpdateInterval"],
1223 "ns3::Ipv6OptionPadn": dict({
1225 "create_function": create_element,
1227 "connector_types": [],
1228 "box_attributes": ["OptionNumber"],
1230 "ns3::QapWifiMac": dict({
1232 "create_function": create_wifi_standard_model,
1233 "help": "Access point Wifi MAC Model",
1234 "connector_types": ["dev"],
1235 "box_attributes": ["BeaconInterval",
1239 "BasicBlockAckTimeout",
1240 "CompressedBlockAckTimeout",
1245 "MaxPropagationDelay",
1248 "ns3::YansErrorRateModel": dict({
1249 "category": "Error",
1250 "create_function": create_element,
1252 "connector_types": [],
1253 "box_attributes": [],
1255 "ns3::WifiMacQueue": dict({
1257 "create_function": create_element,
1259 "connector_types": [],
1260 "box_attributes": ["MaxPacketNumber",
1263 "ns3::NonCommunicatingNetDevice": dict({
1264 "category": "Device",
1265 "create_function": create_device,
1267 "connector_types": [],
1268 "allow_addresses": True,
1269 "box_attributes": [],
1271 "ns3::RateErrorModel": dict({
1272 "category": "Error",
1273 "create_function": create_element,
1275 "connector_types": [],
1276 "box_attributes": ["ErrorUnit",
1281 "ns3::MeshWifiInterfaceMac": dict({
1283 "create_function": create_element,
1285 "connector_types": [],
1286 "box_attributes": ["BeaconInterval",
1291 "BasicBlockAckTimeout",
1292 "CompressedBlockAckTimeout",
1297 "MaxPropagationDelay",
1300 "ns3::UanPhyCalcSinrDual": dict({
1302 "create_function": create_element,
1304 "connector_types": [],
1305 "box_attributes": [],
1307 "ns3::Ipv6ExtensionAH": dict({
1309 "create_function": create_element,
1311 "connector_types": [],
1312 "box_attributes": ["ExtensionNumber"],
1314 "ns3::SingleModelSpectrumChannel": dict({
1315 "category": "Channel",
1316 "create_function": create_element,
1318 "connector_types": [],
1319 "box_attributes": [],
1321 "ns3::YansWifiPhy": dict({
1323 "create_function": create_element,
1325 "connector_types": ["dev", "err", "chan"],
1326 "box_attributes": ["EnergyDetectionThreshold",
1327 "CcaMode1Threshold",
1334 "ChannelSwitchDelay",
1336 "traces": ["yanswifipcap"]
1338 "ns3::WifiRadioEnergyModel": dict({
1340 "create_function": create_element,
1342 "connector_types": [],
1343 "box_attributes": ["TxCurrentA",
1348 "ns3::EdcaTxopN": dict({
1350 "create_function": create_element,
1352 "connector_types": [],
1353 "box_attributes": ["BlockAckThreshold",
1358 "ns3::UanPhyPerGenDefault": dict({
1360 "create_function": create_element,
1362 "connector_types": [],
1363 "box_attributes": ["Threshold"],
1365 "ns3::IdealWifiManager": dict({
1366 "category": "Manager",
1367 "create_function": create_element,
1369 "connector_types": [],
1370 "box_attributes": ["BerThreshold",
1375 "FragmentationThreshold",
1378 "ns3::MultiModelSpectrumChannel": dict({
1379 "category": "Channel",
1380 "create_function": create_element,
1382 "connector_types": [],
1383 "box_attributes": [],
1385 "ns3::HalfDuplexIdealPhy": dict({
1387 "create_function": create_element,
1389 "connector_types": [],
1390 "box_attributes": ["Rate"],
1392 "ns3::UanPhyCalcSinrDefault": dict({
1394 "create_function": create_element,
1396 "connector_types": [],
1397 "box_attributes": [],
1399 "ns3::ReceiveListErrorModel": dict({
1400 "category": "Error",
1401 "create_function": create_element,
1403 "connector_types": [],
1404 "box_attributes": ["IsEnabled"],
1406 "ns3::SpectrumAnalyzer": dict({
1408 "create_function": create_element,
1410 "connector_types": [],
1411 "box_attributes": ["Resolution",
1412 "NoisePowerSpectralDensity"],
1414 "ns3::ConstantRateWifiManager": dict({
1415 "category": "Manager",
1416 "create_function": create_element,
1418 "connector_types": ["dev"],
1419 "box_attributes": ["DataMode",
1425 "FragmentationThreshold",
1428 "ns3::Ipv6OptionPad1": dict({
1430 "create_function": create_element,
1432 "connector_types": [],
1433 "box_attributes": ["OptionNumber"],
1435 "ns3::UdpTraceClient": dict({
1437 "create_function": create_element,
1439 "connector_types": [],
1440 "box_attributes": ["RemoteAddress",
1446 "ns3::RraaWifiManager": dict({
1447 "category": "Manager",
1448 "create_function": create_element,
1450 "connector_types": [],
1451 "box_attributes": ["Basic",
1479 "FragmentationThreshold",
1482 "ns3::RandomPropagationLossModel": dict({
1484 "create_function": create_element,
1486 "connector_types": [],
1487 "box_attributes": ["Variable"],
1489 "ns3::UanChannel": dict({
1490 "category": "Channel",
1491 "create_function": create_element,
1493 "connector_types": [],
1494 "box_attributes": [],
1496 "ns3::MinstrelWifiManager": dict({
1497 "category": "Manager",
1498 "create_function": create_element,
1500 "connector_types": [],
1501 "box_attributes": ["UpdateStatistics",
1511 "FragmentationThreshold",
1514 "ns3::UanPhyDual": dict({
1516 "create_function": create_element,
1518 "connector_types": [],
1519 "box_attributes": ["CcaThresholdPhy1",
1525 "SupportedModesPhy1",
1526 "SupportedModesPhy2"],
1528 "ns3::ListErrorModel": dict({
1529 "category": "Error",
1530 "create_function": create_element,
1532 "connector_types": ["dev"],
1533 "box_attributes": ["IsEnabled"],
1535 "ns3::VirtualNetDevice": dict({
1536 "category": "Device",
1537 "create_function": create_device,
1539 "connector_types": [],
1540 "allow_addresses": True,
1541 "box_attributes": ["Mtu"],
1543 "ns3::UanPhyGen": dict({
1545 "create_function": create_element,
1547 "connector_types": [],
1548 "box_attributes": ["CcaThreshold",
1554 "ns3::Ipv6L3Protocol": dict({
1555 "category": "Protocol",
1556 "create_function": create_element,
1558 "connector_types": [],
1559 "box_attributes": ["DefaultTtl",
1562 "ns3::PointToPointRemoteChannel": dict({
1563 "category": "Channel",
1564 "create_function": create_element,
1566 "connector_types": [],
1567 "box_attributes": ["Delay"],
1569 "ns3::UanPhyPerUmodem": dict({
1571 "create_function": create_element,
1573 "connector_types": [],
1574 "box_attributes": [],
1576 "ns3::OnoeWifiManager": dict({
1577 "category": "Manager",
1578 "create_function": create_element,
1580 "connector_types": [],
1581 "box_attributes": ["UpdatePeriod",
1583 "AddCreditThreshold",
1588 "FragmentationThreshold",
1591 "ns3::QadhocWifiMac": dict({
1593 "create_function": create_element,
1595 "connector_types": [],
1596 "box_attributes": ["CtsTimeout",
1598 "BasicBlockAckTimeout",
1599 "CompressedBlockAckTimeout",
1604 "MaxPropagationDelay",
1607 "ns3::JakesPropagationLossModel": dict({
1609 "create_function": create_element,
1611 "connector_types": [],
1612 "box_attributes": ["NumberOfRaysPerPath",
1613 "NumberOfOscillatorsPerRay",
1617 "ns3::PacketSink": dict({
1618 "category": "Application",
1619 "create_function": create_element,
1621 "connector_types": ["node"],
1622 "stop_function": stop_application,
1623 "start_function": start_application,
1624 "status_function": status_application,
1625 "box_attributes": ["Local",
1630 "ns3::RandomDirection2dMobilityModel": dict({
1631 "category": "Mobility",
1632 "create_function": create_element,
1634 "connector_types": ["node"],
1635 "box_attributes": ["Bounds",
1641 "ns3::UanMacAloha": dict({
1643 "create_function": create_element,
1645 "connector_types": [],
1646 "box_attributes": [],
1648 "ns3::MsduStandardAggregator": dict({
1650 "create_function": create_element,
1652 "connector_types": [],
1653 "box_attributes": ["MaxAmsduSize"],
1655 "ns3::DcaTxop": dict({
1657 "create_function": create_element,
1659 "connector_types": [],
1660 "box_attributes": ["MinCw",
1664 "ns3::UanPhyCalcSinrFhFsk": dict({
1666 "create_function": create_element,
1668 "connector_types": [],
1669 "box_attributes": ["NumberOfHops"],
1671 "ns3::UanPropModelIdeal": dict({
1673 "create_function": create_element,
1675 "connector_types": [],
1676 "box_attributes": [],
1678 "ns3::UanMacRcGw": dict({
1680 "create_function": create_element,
1682 "connector_types": [],
1683 "box_attributes": ["MaxReservations",
1691 "NumberOfRetryRates",
1696 "ns3::NistErrorRateModel": dict({
1697 "category": "Error",
1698 "create_function": create_element,
1700 "connector_types": ["phy"],
1701 "box_attributes": [],
1703 "ns3::Ipv4L3Protocol": dict({
1704 "category": "Protocol",
1705 "create_function": create_ipv4protocol,
1707 "connector_types": ["node"],
1708 "box_attributes": ["DefaultTtl",
1712 "ns3::aodv::RoutingProtocol": dict({
1713 "category": "Protocol",
1714 "create_function": create_element,
1716 "connector_types": [],
1717 "box_attributes": ["HelloInterval",
1720 "NodeTraversalTime",
1722 "ActiveRouteTimeout",
1729 "PathDiscoveryTime",
1738 "ns3::TcpL4Protocol": dict({
1739 "category": "Protocol",
1740 "create_function": create_element,
1742 "connector_types": ["node"],
1743 "box_attributes": ["RttEstimatorFactory",
1746 "ns3::olsr::RoutingProtocol": dict({
1747 "category": "Protocol",
1748 "create_function": create_element,
1750 "connector_types": [],
1751 "box_attributes": ["HelloInterval",
1757 "ns3::UdpEchoServer": dict({
1758 "category": "Application",
1759 "create_function": create_element,
1761 "connector_types": ["node"],
1762 "stop_function": stop_application,
1763 "start_function": start_application,
1764 "status_function": status_application,
1765 "box_attributes": ["Port",
1769 "ns3::AmrrWifiManager": dict({
1770 "category": "Manager",
1771 "create_function": create_element,
1773 "connector_types": [],
1774 "box_attributes": ["UpdatePeriod",
1777 "MaxSuccessThreshold",
1778 "MinSuccessThreshold",
1783 "FragmentationThreshold",
1786 "ns3::ArfWifiManager": dict({
1787 "category": "Manager",
1788 "create_function": create_element,
1790 "connector_types": ["dev"],
1791 "box_attributes": ["TimerThreshold",
1797 "FragmentationThreshold",
1800 "ns3::SubscriberStationNetDevice": dict({
1801 "category": "Device",
1802 "create_function": create_device,
1804 "connector_types": [],
1805 "allow_addresses": True,
1806 "box_attributes": ["LostDlMapInterval",
1807 "LostUlMapInterval",
1817 "MaxContentionRangingRetries",
1822 "ns3::flame::FlameRtable": dict({
1824 "create_function": create_element,
1826 "connector_types": [],
1827 "box_attributes": ["Lifetime"],