2 # -*- coding: utf-8 -*-
4 from constants import TESTBED_ID
5 from nepi.core import metadata
6 from nepi.core.attributes import Attribute
7 from nepi.util.constants import AF_INET, STATUS_NOT_STARTED, STATUS_RUNNING, \
10 wifi_standards = dict({
11 "WIFI_PHY_STANDARD_holland": 5,
12 "WIFI_PHY_STANDARD_80211p_SCH": 7,
13 "WIFI_PHY_STANDARD_80211_5Mhz": 4,
14 "WIFI_PHY_UNKNOWN": 8,
15 "WIFI_PHY_STANDARD_80211_10Mhz": 3,
16 "WIFI_PHY_STANDARD_80211g": 2,
17 "WIFI_PHY_STANDARD_80211p_CCH": 6,
18 "WIFI_PHY_STANDARD_80211a": 0,
19 "WIFI_PHY_STANDARD_80211b": 1
22 ### Connection functions ####
24 def connect_node_device(testbed_instance, node, device):
25 node.AddDevice(device)
27 def connect_queue_device(testbed_instance, queue, device):
28 device.SetQueue(queue)
30 def connect_manager_device(testbed_instance, manager, device):
31 device.SetRemoteStationManager(manager)
33 def connect_phy_device(testbed_instance, phy, device):
36 # search for the node asociated with the device
37 node_guid = testbed_instance.get_connected(guid, "node", "devs")
38 if len(node_guid) == 0:
39 raise RuntimeError("Can't instantiate interface %d outside netns \
41 node = testbed_instance.elements[node_guid[0]]
44 def connect_mac_device(testbed_instance, mac, device):
47 def connect_errormodel_device(testbed_instance, model, device):
48 device.SetReceiveErrorModel(model)
50 def connect_errormodel_phy(testbed_instance, err, phy):
51 phy.SetErrorRateModel(err)
53 def connect_channel_device(testbed_instance, channel, device):
54 device.Attach(channel)
56 def connect_simple_channel_device(testbed_instance, channel, device):
57 device.SetChannel(channel)
59 def connect_loss_channel(testbed_instance, loss, channel):
60 channel.SetPropagationLossModel(loss)
62 def connect_next_loss(testbed_instance, prev, next):
65 def connect_delay_channel(testbed_instance, delay, channel):
66 channel.SetPropagationDelayModel(delay)
68 def connect_node_application(testbed_instance, node, application):
69 node.AddApplication(application)
70 # works for ArpL3Protocol, Ipv4L3Protocol, UdpL4Protocol, TcpL4Protocol,
71 # NscTcpL4Protocol, MobilityModel (every subclass),
72 # RoutingProtocol (every subclass)
74 def connect_node_other(tesbed_instance, node, other):
75 node.AggregateObject(other)
77 ### create traces functions ###
79 def get_node_guid(testbed_instance, guid):
80 node_guid = testbed_instance.get_connected(guid, "node", "devs")[0]
83 def get_dev_number(testbed_instance, guid):
84 dev_guids = testbed_instance.get_connected(node_guid, "devs", "node")
86 for guid_ in dev_guids:
90 return interface_number
92 def p2pcap_trace(testbed_instance, guid):
94 node_guid = get_node_guid(testbed_instance, guid)
95 interface_number = get_dev_number(testbed_instance, guid)
96 element = testbed_instance._elements[guid]
97 filename = "trace-p2p-node-%d-dev-%d.pcap" % (node_name, interface_number)
98 testbed_instance.follow_trace(guid, trace_id, filename)
99 filepath = testbed_instance.trace_filename(self, guid, trace_id):
100 helper = testbed_instance.ns3.PointToPointHelper()
101 helper.EnablePcap(filepath, element, explicitFilename = True)
103 def _csmapcap_trace(testbed_instance, guid, trace_id, promisc):
104 node_guid = get_node_guid(testbed_instance, guid)
105 interface_number = get_dev_number(testbed_instance, guid)
106 element = testbed_instance._elements[guid]
107 filename = "trace-csma-node-%d-dev-%d.pcap" % (node_name, interface_number)
108 testbed_instance.follow_trace(guid, trace_id, filename)
109 filepath = testbed_instance.trace_filename(self, guid, trace_id):
110 helper = testbed_instance.ns3.CsmaHelper()
111 helper.EnablePcap(filepath, element, promiscuous = promisc,
112 explicitFilename = True)
114 def csmapcap_trace(testbed_instance, guid):
115 trace_id = "csmapcap"
117 _csmapcap_trace(testbed_instance, guid, trace_id, promisc)
119 def csmapcap_promisc_trace(testbed_instance, guid):
120 trace_id = "csmapcap_promisc"
122 _csmapcap_trace(testbed_instance, guid, trace_id, promisc)
124 def fdpcap_trace(testbed_instance, guid):
126 node_guid = get_node_guid(testbed_instance, guid)
127 interface_number = get_dev_number(testbed_instance, guid)
128 element = testbed_instance._elements[guid]
129 filename = "trace-fd-node-%d-dev-%d.pcap" % (node_name, interface_number)
130 testbed_instance.follow_trace(guid, trace_id, filename)
131 filepath = testbed_instance.trace_filename(self, guid, trace_id):
132 helper = testbed_instance.ns3.FileDescriptorHelper()
133 helper.EnablePcap(filepath, element, explicitFilename = True)
135 def yanswifipcap_trace(testbed_instance, guid):
136 trace_id = "yanswifipcap"
137 dev_guid = testbed_instance.get_connected(guid, "dev", "phy")[0]
138 node_guid = get_node_guid(testbed_instance, dev_guid)
139 interface_number = get_dev_number(testbed_instance, dev_guid)
140 element = testbed_instance._elements[dev_guid]
141 filename = "trace-yanswifi-node-%d-dev-%d.pcap" % (node_name, interface_number)
142 testbed_instance.follow_trace(guid, trace_id, filename)
143 filepath = testbed_instance.trace_filename(self, guid, trace_id):
144 helper = testbed_instance.ns3.YansWifiPhyHelper()
145 helper.EnablePcap(filepath, element, explicitFilename = True)
147 trace_functions = dict({
148 "p2ppcap": p2ppcap_trace,
149 "csmapcap": csmapcap_trace,
150 "csmapcap_promisc": csmapcap_promisc_trace,
151 "fdpcap": fdpcap_trace,
152 "yanswifipcap": yanswifipcap_trace
155 ### Creation functions ###
157 def create_element(testbed_instance, guid):
158 element_factory = testbed_instance.ns3.ObjectFactory()
159 factory_id = testbed_instance._create[guid]
160 element_factory.SetTypeId(factory_id)
161 factory_parameters = testbed_instance._get_factory_parameters(guid)
162 for name, value in factory_parameters.iteritems():
163 testbed_instance._set(element_factory, factory_id, name, value)
164 element = element_factory.Create()
165 testbed_instance._elements[guid] = element
166 traces = testbed_instance._get_traces(guid)
167 for trace_id in traces:
168 trace_func = trace_functions[trace_id]
169 trace_func(testbed_instance, guid)
171 def create_node(testbed_instance, guid):
172 create_element(testbed_instance, guid)
173 element = testbed_instance._elements[guid]
174 element.AggregateObject(testbed_instance.PacketSocketFactory())
176 def create_device(testbed_instance, guid):
177 create_element(testbed_instance, guid)
178 element = testbed_instance._elements[guid]
179 parameters = testbed_instance._get_parameters(guid)
180 if "macAddress" in parameters:
181 address = parameters["macAddress"]
182 macaddr = testbed_instance.ns3.Mac48Address(address)
184 macaddr = testbed_instance.ns3.Mac48Address.Allocate()
185 element.SetAddress(macaddr)
187 def create_wifi_standard_model(testbed_instance, guid):
188 create_element(testbed_instance, guid)
189 element = testbed_instance._elements[guid]
190 parameters = testbed_instance._get_parameters(guid)
191 if "standard" in parameters:
192 standard = parameters["standard"]
194 elements.ConfigureStandard(wifi_standards[standard])
196 def create_ipv4stack(testbed_instance, guid):
197 create_element(testbed_instance, guid)
198 element = testbed_instance._elements[guid]
199 list_routing = testbed_instance.ns3.Ipv4ListRouting()
200 element.SetRoutingProtocol(list_routing)
201 static_routing = testbed_instance.ns3.Ipv4StaticRouting()
202 list_routing.AddRoutingProtocol(static_routing, 1)
204 ### Start/Stop functions ###
206 def start_application(testbed_instance, guid):
207 element = testbed_instance.elements[guid]
210 def stop_application(testbed_instance, guid):
211 element = testbed_instance.elements[guid]
214 ### Status functions ###
216 def status_application(testbed_instance, guid):
217 if guid not in testbed_instance.elements.keys():
218 return STATUS_NOT_STARTED
219 app = testbed_instance.elements[guid]
220 parameters = testbed_instance._get_parameters(guid)
221 if "stopTime" in parameters:
222 stop = parameters["stopTime"]
224 simTime = testbed_instance.ns3.Simulator.Now()
225 if simTime.Compare(stopTime) > 0:
226 return STATUS_RUNNING
227 return STATUS_FINISHED
229 ### Factory information ###
231 connector_types = dict({
233 "help": "Connector to a ns3::Node object (mandatory)",
239 "help": "Connector to network interfaces",
245 "help": "Connector to exactly two network interfaces (mandatory)",
251 "help": "Connector to exactly one network interface (mandatory)",
257 "help": "Connector to applications",
263 "help": "Connector to network stacks and protocols",
269 "help": "Connector to a channel for the device (mandatory)",
275 "help": "Connector to a queueing discipline (mandatory)",
281 "help": "Connector to an error model for the device",
287 "help": "Connector to interconnect devices with file descriptors",
293 "help": "Connector to interconnect elements with a PHY wifi model",
299 "help": "Connector to interconnect a wifi channel with PHY wifi models",
305 "help": "Connector to interconnect a device with a MAC wifi model",
311 "help": "Connector to interconnect a wifi device with a wifi manager",
317 "help": "Connector to a delay model",
323 "help": "Connector to a loss model",
329 "help": "Connector to the previous loss model",
335 "help": "Connector to the next loss model",
341 "help": "Connector to a mobility model for the node",
350 "from": ( "ns3", "ns3::Node", "devs" ),
351 "to": ( "ns3", "ns3::BridgeNetDevice", "node" ),
352 "code": connect_node_device,
356 "from": ( "ns3", "ns3::Node", "devs" ),
357 "to": ( "ns3", "ns3::CsmaNetDevice", "node" ),
358 "code": connect_node_device,
362 "from": ( "ns3", "ns3::Node", "devs" ),
363 "to": ( "ns3", "ns3::EmuNetDevice", "node" ),
364 "code": connect_node_device,
368 "from": ( "ns3", "ns3::Node", "devs" ),
369 "to": ( "ns3", "ns3::PointToPointNetDevice", "node" ),
370 "code": connect_node_device,
374 "from": ( "ns3", "ns3::Node", "devs" ),
375 "to": ( "ns3", "ns3::SimpleNetDevice", "node" ),
376 "code": connect_node_device,
380 "from": ( "ns3", "ns3::Node", "devs" ),
381 "to": ( "ns3", "ns3::FileDescriptorNetDevice", "node" ),
382 "code": connect_node_device,
386 "from": ( "ns3", "ns3::Node", "devs" ),
387 "to": ( "ns3", "ns3::WifiNetDevice", "node" ),
388 "code": connect_node_device,
392 "from": ( "ns3", "ns3::DropTailQueue", "dev" ),
393 "to": ( "ns3", "ns3::CsmaNetDevice", "queue" ),
394 "code": connect_queue_device,
398 "from": ( "ns3", "ns3::DropTailQueue", "dev" ),
399 "to": ( "ns3", "ns3::EmuNetDevice", "queue" ),
400 "code": connect_queue_device,
404 "from": ( "ns3", "ns3::DropTailQueue", "dev" ),
405 "to": ( "ns3", "ns3::PointToPointNetDevice", "queue" ),
406 "code": connect_queue_device,
410 "from": ( "ns3", "ns3::ArfWifiManager", "dev" ),
411 "to": ( "ns3", "ns3::WifiNetDevice", "manager" ),
412 "code": connect_manager_device,
416 "from": ( "ns3", "ns3::ConstantRateWifiManager", "dev" ),
417 "to": ( "ns3", "ns3::WifiNetDevice", "manager" ),
418 "code": connect_manager_device,
422 "from": ( "ns3", "ns3::YansWifiPhy", "dev" ),
423 "to": ( "ns3", "ns3::WifiNetDevice", "phy" ),
424 "code": connect_phy_device,
428 "from": ( "ns3", "ns3::QapWifiMac", "dev" ),
429 "to": ( "ns3", "ns3::WifiNetDevice", "mac" ),
430 "code": connect_mac_device,
434 "from": ( "ns3", "ns3::QstaWifiMac", "dev" ),
435 "to": ( "ns3", "ns3::WifiNetDevice", "mac" ),
436 "code": connect_mac_device,
440 "from": ( "ns3", "ns3::RateErrorModel", "dev" ),
441 "to": ( "ns3", "ns3::CsmaNetDevice", "err" ),
442 "code": connect_errormodel_device,
446 "from": ( "ns3", "ns3::RateErrorModel", "dev" ),
447 "to": ( "ns3", "ns3::PointToPointNetDevice", "err" ),
448 "code": connect_errormodel_device,
452 "from": ( "ns3", "ns3::ListErrorModel", "dev" ),
453 "to": ( "ns3", "ns3::CsmaNetDevice", "err" ),
454 "code": connect_errormodel_device,
458 "from": ( "ns3", "ns3::ListErrorModel", "dev" ),
459 "to": ( "ns3", "ns3::PointToPointNetDevice", "err" ),
460 "code": connect_errormodel_device,
464 "from": ( "ns3", "ns3::NistErrorRateModel", "phy" ),
465 "to": ( "ns3", "ns3::YansWifiPhy", "err" ),
466 "code": connect_errormodel_phy,
470 "from": ( "ns3", "ns3::CsmaChannel", "devs" ),
471 "to": ( "ns3", "ns3::CsmaNetDevice", "chan" ),
472 "code": connect_channel_device,
476 "from": ( "ns3", "ns3::PointToPointChannel", "dev2" ),
477 "to": ( "ns3", "ns3::PointToPointNetDevice", "chan" ),
478 "code": connect_channel_device,
482 "from": ( "ns3", "ns3::SimpleChannel", "devs" ),
483 "to": ( "ns3", "ns3::SimpleNetDevice", "chan" ),
484 "code": connect_simple_channel_device,
488 "from": ( "ns3", "ns3::YansWifiChannel", "phys" ),
489 "to": ( "ns3", "ns3::YansWifiPhy", "chan" ),
490 "code": connect_simple_channel_device,
494 "from": ( "ns3", "ns3::LogDistancePropagationLossModel", "prev" ),
495 "to": ( "ns3", "ns3::YansWifiChannel", "loss" ),
496 "code": connect_loss_channel,
500 "from": ( "ns3", "ns3::LogDistancePropagationLossModel", "prev" ),
501 "to": ( "ns3", "ns3::LogDistancePropagationLossModel", "next" ),
502 "code": connect_next_loss,
506 "from": ( "ns3", "ns3::ConstantSpeedPropagationDelayModel", "chan" ),
507 "to": ( "ns3", "ns3::YansWifiChannel", "delay" ),
508 "code": connect_delay_channel,
512 "from": ( "ns3", "ns3::Node", "apps" ),
513 "to": ( "ns3", "ns3::OnOffApplication", "node" ),
514 "code": connect_node_application,
518 "from": ( "ns3", "ns3::Node", "apps" ),
519 "to": ( "ns3", "ns3::PacketSink", "node" ),
520 "code": connect_node_application,
524 "from": ( "ns3", "ns3::Node", "apps" ),
525 "to": ( "ns3", "ns3::UdpEchoClient", "node" ),
526 "code": connect_node_application,
530 "from": ( "ns3", "ns3::Node", "apps" ),
531 "to": ( "ns3", "ns3::UdpEchoServer", "node" ),
532 "code": connect_node_application,
536 "from": ( "ns3", "ns3::Node", "apps" ),
537 "to": ( "ns3", "ns3::V4Ping", "node" ),
538 "code": connect_node_application,
542 "from": ( "ns3", "ns3::Node", "protos" ),
543 "to": ( "ns3", "ns3::ArpL3Protocol", "node" ),
544 "code": connect_node_other,
548 "from": ( "ns3", "ns3::Node", "protos" ),
549 "to": ( "ns3", "ns3::Icmpv4L4Protocol", "node" ),
550 "code": connect_node_other,
554 "from": ( "ns3", "ns3::Node", "protos" ),
555 "to": ( "ns3", "ns3::Ipv4L3Protocol", "node" ),
556 "code": connect_node_other,
560 "from": ( "ns3", "ns3::Node", "protos" ),
561 "to": ( "ns3", "ns3::UdpL4Protocol", "node" ),
562 "code": connect_node_other,
566 "from": ( "ns3", "ns3::Node", "protos" ),
567 "to": ( "ns3", "ns3::TcpL4Protocol", "node" ),
568 "code": connect_node_other,
572 "from": ( "ns3", "ns3::Node", "mobility" ),
573 "to": ( "ns3", "ns3::ConstantAccelerationMobilityModel", "node" ),
574 "code": connect_node_other,
578 "from": ( "ns3", "ns3::Node", "mobility" ),
579 "to": ( "ns3", "ns3::ConstantPositionMobilityModel", "node" ),
580 "code": connect_node_other,
584 "from": ( "ns3", "ns3::Node", "mobility" ),
585 "to": ( "ns3", "ns3::ConstantVelocityMobilityModel", "node" ),
586 "code": connect_node_other,
590 "from": ( "ns3", "ns3::Node", "mobility" ),
591 "to": ( "ns3", "ns3::HierarchicalMobilityModel", "node" ),
592 "code": connect_node_other,
596 "from": ( "ns3", "ns3::Node", "mobility" ),
597 "to": ( "ns3", "ns3::RandomDirection2dMobilityModel", "node" ),
598 "code": connect_node_other,
602 "from": ( "ns3", "ns3::Node", "mobility" ),
603 "to": ( "ns3", "ns3::RandomWalk2dMobilityModel", "node" ),
604 "code": connect_node_other,
608 "from": ( "ns3", "ns3::Node", "mobility" ),
609 "to": ( "ns3", "ns3::RandomWaypointMobilityModel", "node" ),
610 "code": connect_node_other,
617 "name": "P2PPcapTrace",
618 "help": "Trace to sniff packets from a P2P network device"
620 "csmapcap_promisc": dict({
621 "name": "CsmaPromiscPcapTrace",
622 "help": "Trace to sniff packets from a Csma network device in promiscuous mode"
625 "name": "CsmaPcapTrace",
626 "help": "Trace to sniff packets from a Csma network device"
629 "name": "FileDescriptorPcapTrace",
630 "help": "Trace to sniff packets from a FileDescriptor network device"
632 "yanswifipcap": dict({
633 "name": "YansWifiPhyPcapTrace",
634 "help": "Trace to sniff packets from a Wifi network device"
638 factories_order = ["ns3::BasicEnergySource",
639 "ns3::WifiRadioEnergyModel",
640 "ns3::BSSchedulerRtps",
641 "ns3::BSSchedulerSimple",
642 "ns3::SubscriberStationNetDevice",
643 "ns3::BaseStationNetDevice",
644 "ns3::UdpTraceClient",
650 "ns3::flame::FlameProtocol",
651 "ns3::flame::FlameRtable",
652 "ns3::dot11s::AirtimeLinkMetricCalculator",
653 "ns3::dot11s::HwmpProtocol",
654 "ns3::dot11s::HwmpRtable",
655 "ns3::dot11s::PeerManagementProtocol",
656 "ns3::dot11s::PeerLink",
657 "ns3::MeshWifiInterfaceMac",
658 "ns3::MeshPointDevice",
661 "ns3::UanPhyCalcSinrDual",
662 "ns3::UanPhyPerGenDefault",
664 "ns3::UanPropModelThorp",
666 "ns3::UanNoiseModelDefault",
668 "ns3::UanPropModelIdeal",
669 "ns3::UanTransducerHd",
670 "ns3::UanPhyCalcSinrDefault",
672 "ns3::UanPhyCalcSinrFhFsk",
673 "ns3::UanPhyPerUmodem",
676 "ns3::AthstatsWifiTraceSink",
679 "ns3::NonCommunicatingNetDevice",
680 "ns3::HalfDuplexIdealPhy",
681 "ns3::AlohaNoackNetDevice",
682 "ns3::SpectrumAnalyzer",
683 "ns3::WaveformGenerator",
684 "ns3::MultiModelSpectrumChannel",
685 "ns3::SingleModelSpectrumChannel",
686 "ns3::MsduStandardAggregator",
690 "ns3::QadhocWifiMac",
691 "ns3::MinstrelWifiManager",
692 "ns3::CaraWifiManager",
693 "ns3::AarfcdWifiManager",
694 "ns3::OnoeWifiManager",
695 "ns3::AmrrWifiManager",
696 "ns3::ConstantRateWifiManager",
697 "ns3::IdealWifiManager",
698 "ns3::AarfWifiManager",
699 "ns3::ArfWifiManager",
700 "ns3::WifiNetDevice",
706 "ns3::YansWifiChannel",
708 "ns3::NistErrorRateModel",
709 "ns3::YansErrorRateModel",
710 "ns3::WaypointMobilityModel",
711 "ns3::ConstantAccelerationMobilityModel",
712 "ns3::RandomDirection2dMobilityModel",
713 "ns3::RandomWalk2dMobilityModel",
714 "ns3::SteadyStateRandomWaypointMobilityModel",
715 "ns3::RandomWaypointMobilityModel",
716 "ns3::GaussMarkovMobilityModel",
717 "ns3::ConstantVelocityMobilityModel",
718 "ns3::ConstantPositionMobilityModel",
719 "ns3::ListPositionAllocator",
720 "ns3::GridPositionAllocator",
721 "ns3::RandomRectanglePositionAllocator",
722 "ns3::RandomBoxPositionAllocator",
723 "ns3::RandomDiscPositionAllocator",
724 "ns3::UniformDiscPositionAllocator",
725 "ns3::HierarchicalMobilityModel",
726 "ns3::aodv::RoutingProtocol",
727 "ns3::UdpEchoServer",
728 "ns3::UdpEchoClient",
730 "ns3::OnOffApplication",
731 "ns3::VirtualNetDevice",
732 "ns3::FileDescriptorNetDevice",
734 "ns3::BridgeChannel",
735 "ns3::BridgeNetDevice",
738 "ns3::CsmaNetDevice",
739 "ns3::PointToPointRemoteChannel",
740 "ns3::PointToPointChannel",
741 "ns3::PointToPointNetDevice",
742 "ns3::NscTcpL4Protocol",
743 "ns3::Icmpv6L4Protocol",
744 "ns3::Ipv6OptionPad1",
745 "ns3::Ipv6OptionPadn",
746 "ns3::Ipv6OptionJumbogram",
747 "ns3::Ipv6OptionRouterAlert",
748 "ns3::Ipv6ExtensionHopByHop",
749 "ns3::Ipv6ExtensionDestination",
750 "ns3::Ipv6ExtensionFragment",
751 "ns3::Ipv6ExtensionRouting",
752 "ns3::Ipv6ExtensionLooseRouting",
753 "ns3::Ipv6ExtensionESP",
754 "ns3::Ipv6ExtensionAH",
755 "ns3::Ipv6L3Protocol",
756 "ns3::LoopbackNetDevice",
757 "ns3::Icmpv4L4Protocol",
758 "ns3::RttMeanDeviation",
759 "ns3::ArpL3Protocol",
760 "ns3::TcpL4Protocol",
761 "ns3::UdpL4Protocol",
762 "ns3::Ipv4L3Protocol",
763 "ns3::SimpleNetDevice",
764 "ns3::SimpleChannel",
766 "ns3::DropTailQueue",
768 "ns3::FriisSpectrumPropagationLossModel",
769 "ns3::Cost231PropagationLossModel",
770 "ns3::JakesPropagationLossModel",
771 "ns3::RandomPropagationLossModel",
772 "ns3::FriisPropagationLossModel",
773 "ns3::TwoRayGroundPropagationLossModel",
774 "ns3::LogDistancePropagationLossModel",
775 "ns3::ThreeLogDistancePropagationLossModel",
776 "ns3::NakagamiPropagationLossModel",
777 "ns3::FixedRssLossModel",
778 "ns3::MatrixPropagationLossModel",
779 "ns3::RangePropagationLossModel",
780 "ns3::RandomPropagationDelayModel",
781 "ns3::ConstantSpeedPropagationDelayModel",
782 "ns3::RateErrorModel",
783 "ns3::ListErrorModel",
784 "ns3::ReceiveListErrorModel",
786 "ns3::EnergySourceContainer"
789 testbed_attributes = dict({
790 "ns3_bindings": dict({
791 "name": "ns3Bindings",
792 "help": "Location of the ns-3 python binding",
793 "type": Attribute.STRING,
797 "flags": Attribute.DesignOnly,
798 "validation_function": validation.is_string # TODO: validation.is_path
800 "ns3_library": dict({
801 "name": "ns3Library",
802 "help": "Location of the ns-3 library .so file",
803 "type": Attribute.STRING,
807 "flags": Attribute.DesignOnly,
808 "validation_function": validation.is_string # TODO: validation.is_path
810 "simu_impl_type": dict({
811 "name": "SimulatorImplementationType",
812 "help": "The object class to use as the simulator implementation",
813 "type": Attribute.STRING,
817 "flags": Attribute.DesignOnly,
818 "validation_function": validation.is_string
821 "name": "ChecksumEnabled",
822 "help": "A global switch to enable all checksums for all protocols",
823 "type": Attribute.BOOL,
827 "flags": Attribute.DesignOnly,
828 "validation_function": validation.is_bool
832 class VersionedMetadataInfo(metadata.VersionedMetadataInfo):
834 def connections_types(self):
835 return connection_types
838 def connections(self):
842 def attributes(self):
843 from attributes_metadata_v3_9_RC3 import attributes
851 def factories_order(self):
852 return factories_order
855 def factories_info(self):
856 from factories_metadata_v3_9_RC3 import factories_info
857 return factories_info
860 def testbed_attributes(self):
861 return testbed_attributes