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 import validation
9 ### Connection functions ####
11 def connect_node_device(testbed_instance, node, device):
12 node.AddDevice(device)
14 def connect_queue_device(testbed_instance, queue, device):
15 device.SetQueue(queue)
17 def connect_manager_device(testbed_instance, manager, device):
18 device.SetRemoteStationManager(manager)
20 def connect_phy_device(testbed_instance, phy, device):
23 # search for the node asociated with the device
24 node_guid = testbed_instance.get_connected(guid, "node", "devs")
25 if len(node_guid) == 0:
26 raise RuntimeError("Can't instantiate interface %d outside netns \
28 node = testbed_instance.elements[node_guid[0]]
31 def connect_mac_device(testbed_instance, mac, device):
34 def connect_errormodel_device(testbed_instance, model, device):
35 device.SetReceiveErrorModel(model)
37 def connect_errormodel_phy(testbed_instance, err, phy):
38 phy.SetErrorRateModel(err)
40 def connect_channel_device(testbed_instance, channel, device):
41 device.Attach(channel)
43 def connect_simple_channel_device(testbed_instance, channel, device):
44 device.SetChannel(channel)
46 def connect_loss_channel(testbed_instance, loss, channel):
47 channel.SetPropagationLossModel(loss)
49 def connect_next_loss(testbed_instance, prev, next):
52 def connect_delay_channel(testbed_instance, delay, channel):
53 channel.SetPropagationDelayModel(delay)
55 def connect_node_application(testbed_instance, node, application):
56 node.AddApplication(application)
57 # works for ArpL3Protocol, Ipv4L3Protocol, UdpL4Protocol, TcpL4Protocol,
58 # NscTcpL4Protocol, MobilityModel (every subclass),
59 # RoutingProtocol (every subclass)
61 def connect_node_other(tesbed_instance, node, other):
62 node.AggregateObject(other)
64 def connect_fd_tap(tesbed_instance, fd, tap):
68 ### Connector information ###
70 connector_types = dict({
72 "help": "Connector to a ns3::Node object (mandatory)",
78 "help": "Connector to network interfaces",
84 "help": "Connector to exactly two network interfaces (mandatory)",
90 "help": "Connector to exactly one network interface (mandatory)",
96 "help": "Connector to applications",
102 "help": "Connector to network stacks and protocols",
108 "help": "Connector to a channel for the device (mandatory)",
114 "help": "Connector to a queueing discipline (mandatory)",
120 "help": "Connector to an error model for the device",
126 "help": "Connector to interconnect devices with file descriptors",
132 "help": "Connector to interconnect elements with a PHY wifi model",
138 "help": "Connector to interconnect a wifi channel with PHY wifi models",
144 "help": "Connector to interconnect a device with a MAC wifi model",
150 "help": "Connector to interconnect a wifi device with a wifi manager",
156 "help": "Connector to a delay model",
162 "help": "Connector to a loss model",
168 "help": "Connector to the previous loss model",
174 "help": "Connector to the next loss model",
180 "help": "Connector to a mobility model for the node",
189 "from": ( "ns3", "ns3::Node", "devs" ),
190 "to": ( "ns3", "ns3::BridgeNetDevice", "node" ),
191 "code": connect_node_device,
195 "from": ( "ns3", "ns3::Node", "devs" ),
196 "to": ( "ns3", "ns3::CsmaNetDevice", "node" ),
197 "code": connect_node_device,
201 "from": ( "ns3", "ns3::Node", "devs" ),
202 "to": ( "ns3", "ns3::EmuNetDevice", "node" ),
203 "code": connect_node_device,
207 "from": ( "ns3", "ns3::Node", "devs" ),
208 "to": ( "ns3", "ns3::PointToPointNetDevice", "node" ),
209 "code": connect_node_device,
213 "from": ( "ns3", "ns3::Node", "devs" ),
214 "to": ( "ns3", "ns3::SimpleNetDevice", "node" ),
215 "code": connect_node_device,
219 "from": ( "ns3", "ns3::Node", "devs" ),
220 "to": ( "ns3", "ns3::FileDescriptorNetDevice", "node" ),
221 "code": connect_node_device,
225 "from": ( "ns3", "ns3::Node", "devs" ),
226 "to": ( "ns3", "ns3::WifiNetDevice", "node" ),
227 "code": connect_node_device,
231 "from": ( "ns3", "ns3::DropTailQueue", "dev" ),
232 "to": ( "ns3", "ns3::CsmaNetDevice", "queue" ),
233 "code": connect_queue_device,
237 "from": ( "ns3", "ns3::DropTailQueue", "dev" ),
238 "to": ( "ns3", "ns3::EmuNetDevice", "queue" ),
239 "code": connect_queue_device,
243 "from": ( "ns3", "ns3::DropTailQueue", "dev" ),
244 "to": ( "ns3", "ns3::PointToPointNetDevice", "queue" ),
245 "code": connect_queue_device,
249 "from": ( "ns3", "ns3::ArfWifiManager", "dev" ),
250 "to": ( "ns3", "ns3::WifiNetDevice", "manager" ),
251 "code": connect_manager_device,
255 "from": ( "ns3", "ns3::ConstantRateWifiManager", "dev" ),
256 "to": ( "ns3", "ns3::WifiNetDevice", "manager" ),
257 "code": connect_manager_device,
261 "from": ( "ns3", "ns3::YansWifiPhy", "dev" ),
262 "to": ( "ns3", "ns3::WifiNetDevice", "phy" ),
263 "code": connect_phy_device,
267 "from": ( "ns3", "ns3::QapWifiMac", "dev" ),
268 "to": ( "ns3", "ns3::WifiNetDevice", "mac" ),
269 "code": connect_mac_device,
273 "from": ( "ns3", "ns3::QstaWifiMac", "dev" ),
274 "to": ( "ns3", "ns3::WifiNetDevice", "mac" ),
275 "code": connect_mac_device,
279 "from": ( "ns3", "ns3::RateErrorModel", "dev" ),
280 "to": ( "ns3", "ns3::CsmaNetDevice", "err" ),
281 "code": connect_errormodel_device,
285 "from": ( "ns3", "ns3::RateErrorModel", "dev" ),
286 "to": ( "ns3", "ns3::PointToPointNetDevice", "err" ),
287 "code": connect_errormodel_device,
291 "from": ( "ns3", "ns3::ListErrorModel", "dev" ),
292 "to": ( "ns3", "ns3::CsmaNetDevice", "err" ),
293 "code": connect_errormodel_device,
297 "from": ( "ns3", "ns3::ListErrorModel", "dev" ),
298 "to": ( "ns3", "ns3::PointToPointNetDevice", "err" ),
299 "code": connect_errormodel_device,
303 "from": ( "ns3", "ns3::NistErrorRateModel", "phy" ),
304 "to": ( "ns3", "ns3::YansWifiPhy", "err" ),
305 "code": connect_errormodel_phy,
309 "from": ( "ns3", "ns3::CsmaChannel", "devs" ),
310 "to": ( "ns3", "ns3::CsmaNetDevice", "chan" ),
311 "code": connect_channel_device,
315 "from": ( "ns3", "ns3::PointToPointChannel", "dev2" ),
316 "to": ( "ns3", "ns3::PointToPointNetDevice", "chan" ),
317 "code": connect_channel_device,
321 "from": ( "ns3", "ns3::SimpleChannel", "devs" ),
322 "to": ( "ns3", "ns3::SimpleNetDevice", "chan" ),
323 "code": connect_simple_channel_device,
327 "from": ( "ns3", "ns3::YansWifiChannel", "phys" ),
328 "to": ( "ns3", "ns3::YansWifiPhy", "chan" ),
329 "code": connect_simple_channel_device,
333 "from": ( "ns3", "ns3::LogDistancePropagationLossModel", "prev" ),
334 "to": ( "ns3", "ns3::YansWifiChannel", "loss" ),
335 "code": connect_loss_channel,
339 "from": ( "ns3", "ns3::LogDistancePropagationLossModel", "prev" ),
340 "to": ( "ns3", "ns3::LogDistancePropagationLossModel", "next" ),
341 "code": connect_next_loss,
345 "from": ( "ns3", "ns3::ConstantSpeedPropagationDelayModel", "chan" ),
346 "to": ( "ns3", "ns3::YansWifiChannel", "delay" ),
347 "code": connect_delay_channel,
351 "from": ( "ns3", "ns3::Node", "apps" ),
352 "to": ( "ns3", "ns3::OnOffApplication", "node" ),
353 "code": connect_node_application,
357 "from": ( "ns3", "ns3::Node", "apps" ),
358 "to": ( "ns3", "ns3::PacketSink", "node" ),
359 "code": connect_node_application,
363 "from": ( "ns3", "ns3::Node", "apps" ),
364 "to": ( "ns3", "ns3::UdpEchoClient", "node" ),
365 "code": connect_node_application,
369 "from": ( "ns3", "ns3::Node", "apps" ),
370 "to": ( "ns3", "ns3::UdpEchoServer", "node" ),
371 "code": connect_node_application,
375 "from": ( "ns3", "ns3::Node", "apps" ),
376 "to": ( "ns3", "ns3::V4Ping", "node" ),
377 "code": connect_node_application,
381 "from": ( "ns3", "ns3::Node", "protos" ),
382 "to": ( "ns3", "ns3::ArpL3Protocol", "node" ),
383 "code": connect_node_other,
387 "from": ( "ns3", "ns3::Node", "protos" ),
388 "to": ( "ns3", "ns3::Icmpv4L4Protocol", "node" ),
389 "code": connect_node_other,
393 "from": ( "ns3", "ns3::Node", "protos" ),
394 "to": ( "ns3", "ns3::Ipv4L3Protocol", "node" ),
395 "code": connect_node_other,
399 "from": ( "ns3", "ns3::Node", "protos" ),
400 "to": ( "ns3", "ns3::UdpL4Protocol", "node" ),
401 "code": connect_node_other,
405 "from": ( "ns3", "ns3::Node", "protos" ),
406 "to": ( "ns3", "ns3::TcpL4Protocol", "node" ),
407 "code": connect_node_other,
411 "from": ( "ns3", "ns3::Node", "mobility" ),
412 "to": ( "ns3", "ns3::ConstantAccelerationMobilityModel", "node" ),
413 "code": connect_node_other,
417 "from": ( "ns3", "ns3::Node", "mobility" ),
418 "to": ( "ns3", "ns3::ConstantPositionMobilityModel", "node" ),
419 "code": connect_node_other,
423 "from": ( "ns3", "ns3::Node", "mobility" ),
424 "to": ( "ns3", "ns3::ConstantVelocityMobilityModel", "node" ),
425 "code": connect_node_other,
429 "from": ( "ns3", "ns3::Node", "mobility" ),
430 "to": ( "ns3", "ns3::HierarchicalMobilityModel", "node" ),
431 "code": connect_node_other,
435 "from": ( "ns3", "ns3::Node", "mobility" ),
436 "to": ( "ns3", "ns3::RandomDirection2dMobilityModel", "node" ),
437 "code": connect_node_other,
441 "from": ( "ns3", "ns3::Node", "mobility" ),
442 "to": ( "ns3", "ns3::RandomWalk2dMobilityModel", "node" ),
443 "code": connect_node_other,
447 "from": ( "ns3", "ns3::Node", "mobility" ),
448 "to": ( "ns3", "ns3::RandomWaypointMobilityModel", "node" ),
449 "code": connect_node_other,
453 "from": ( "ns3", "ns3::FileDescriptorNetDevice", "fd" ),
454 "to": ( "netns", "TapNodeInterface", "fd" ),
455 "code": connect_fd_tap,
462 "name": "P2PPcapTrace",
463 "help": "Trace to sniff packets from a P2P network device"
466 "name": "P2PAsciiTrace",
467 "help": "Ascii trace from a P2P network device"
469 "csmapcap_promisc": dict({
470 "name": "CsmaPromiscPcapTrace",
471 "help": "Trace to sniff packets from a Csma network device in promiscuous mode"
474 "name": "CsmaPcapTrace",
475 "help": "Trace to sniff packets from a Csma network device"
478 "name": "FileDescriptorPcapTrace",
479 "help": "Trace to sniff packets from a FileDescriptor network device"
481 "yanswifipcap": dict({
482 "name": "YansWifiPhyPcapTrace",
483 "help": "Trace to sniff packets from a Wifi network device"
487 factories_order = ["ns3::BasicEnergySource",
488 "ns3::WifiRadioEnergyModel",
489 "ns3::BSSchedulerRtps",
490 "ns3::BSSchedulerSimple",
491 "ns3::SubscriberStationNetDevice",
492 "ns3::BaseStationNetDevice",
493 "ns3::UdpTraceClient",
499 "ns3::flame::FlameProtocol",
500 "ns3::flame::FlameRtable",
501 "ns3::dot11s::AirtimeLinkMetricCalculator",
502 "ns3::dot11s::HwmpProtocol",
503 "ns3::dot11s::HwmpRtable",
504 "ns3::dot11s::PeerManagementProtocol",
505 "ns3::dot11s::PeerLink",
506 "ns3::MeshWifiInterfaceMac",
507 "ns3::MeshPointDevice",
510 "ns3::UanPhyCalcSinrDual",
511 "ns3::UanPhyPerGenDefault",
513 "ns3::UanPropModelThorp",
515 "ns3::UanNoiseModelDefault",
517 "ns3::UanPropModelIdeal",
518 "ns3::UanTransducerHd",
519 "ns3::UanPhyCalcSinrDefault",
521 "ns3::UanPhyCalcSinrFhFsk",
522 "ns3::UanPhyPerUmodem",
525 "ns3::AthstatsWifiTraceSink",
528 "ns3::NonCommunicatingNetDevice",
529 "ns3::HalfDuplexIdealPhy",
530 "ns3::AlohaNoackNetDevice",
531 "ns3::SpectrumAnalyzer",
532 "ns3::WaveformGenerator",
533 "ns3::MultiModelSpectrumChannel",
534 "ns3::SingleModelSpectrumChannel",
535 "ns3::MsduStandardAggregator",
539 "ns3::QadhocWifiMac",
540 "ns3::MinstrelWifiManager",
541 "ns3::CaraWifiManager",
542 "ns3::AarfcdWifiManager",
543 "ns3::OnoeWifiManager",
544 "ns3::AmrrWifiManager",
545 "ns3::ConstantRateWifiManager",
546 "ns3::IdealWifiManager",
547 "ns3::AarfWifiManager",
548 "ns3::ArfWifiManager",
549 "ns3::WifiNetDevice",
555 "ns3::YansWifiChannel",
557 "ns3::NistErrorRateModel",
558 "ns3::YansErrorRateModel",
559 "ns3::WaypointMobilityModel",
560 "ns3::ConstantAccelerationMobilityModel",
561 "ns3::RandomDirection2dMobilityModel",
562 "ns3::RandomWalk2dMobilityModel",
563 "ns3::SteadyStateRandomWaypointMobilityModel",
564 "ns3::RandomWaypointMobilityModel",
565 "ns3::GaussMarkovMobilityModel",
566 "ns3::ConstantVelocityMobilityModel",
567 "ns3::ConstantPositionMobilityModel",
568 "ns3::ListPositionAllocator",
569 "ns3::GridPositionAllocator",
570 "ns3::RandomRectanglePositionAllocator",
571 "ns3::RandomBoxPositionAllocator",
572 "ns3::RandomDiscPositionAllocator",
573 "ns3::UniformDiscPositionAllocator",
574 "ns3::HierarchicalMobilityModel",
575 "ns3::aodv::RoutingProtocol",
576 "ns3::UdpEchoServer",
577 "ns3::UdpEchoClient",
579 "ns3::OnOffApplication",
580 "ns3::VirtualNetDevice",
581 "ns3::FileDescriptorNetDevice",
583 "ns3::BridgeChannel",
584 "ns3::BridgeNetDevice",
587 "ns3::CsmaNetDevice",
588 "ns3::PointToPointRemoteChannel",
589 "ns3::PointToPointChannel",
590 "ns3::PointToPointNetDevice",
591 "ns3::NscTcpL4Protocol",
592 "ns3::Icmpv6L4Protocol",
593 "ns3::Ipv6OptionPad1",
594 "ns3::Ipv6OptionPadn",
595 "ns3::Ipv6OptionJumbogram",
596 "ns3::Ipv6OptionRouterAlert",
597 "ns3::Ipv6ExtensionHopByHop",
598 "ns3::Ipv6ExtensionDestination",
599 "ns3::Ipv6ExtensionFragment",
600 "ns3::Ipv6ExtensionRouting",
601 "ns3::Ipv6ExtensionLooseRouting",
602 "ns3::Ipv6ExtensionESP",
603 "ns3::Ipv6ExtensionAH",
604 "ns3::Ipv6L3Protocol",
605 "ns3::LoopbackNetDevice",
606 "ns3::Icmpv4L4Protocol",
607 "ns3::RttMeanDeviation",
608 "ns3::ArpL3Protocol",
609 "ns3::TcpL4Protocol",
610 "ns3::UdpL4Protocol",
611 "ns3::Ipv4L3Protocol",
612 "ns3::SimpleNetDevice",
613 "ns3::SimpleChannel",
615 "ns3::DropTailQueue",
617 "ns3::FriisSpectrumPropagationLossModel",
618 "ns3::Cost231PropagationLossModel",
619 "ns3::JakesPropagationLossModel",
620 "ns3::RandomPropagationLossModel",
621 "ns3::FriisPropagationLossModel",
622 "ns3::TwoRayGroundPropagationLossModel",
623 "ns3::LogDistancePropagationLossModel",
624 "ns3::ThreeLogDistancePropagationLossModel",
625 "ns3::NakagamiPropagationLossModel",
626 "ns3::FixedRssLossModel",
627 "ns3::MatrixPropagationLossModel",
628 "ns3::RangePropagationLossModel",
629 "ns3::RandomPropagationDelayModel",
630 "ns3::ConstantSpeedPropagationDelayModel",
631 "ns3::RateErrorModel",
632 "ns3::ListErrorModel",
633 "ns3::ReceiveListErrorModel",
635 "ns3::EnergySourceContainer"
638 testbed_attributes = dict({
639 "simu_impl_type": dict({
640 "name": "SimulatorImplementationType",
641 "help": "The object class to use as the simulator implementation",
642 "type": Attribute.STRING,
643 "flags": Attribute.DesignOnly,
644 "validation_function": validation.is_string
647 "name": "ChecksumEnabled",
648 "help": "A global switch to enable all checksums for all protocols",
649 "type": Attribute.BOOL,
651 "flags": Attribute.DesignOnly,
652 "validation_function": validation.is_bool
656 class VersionedMetadataInfo(metadata.VersionedMetadataInfo):
658 def connector_types(self):
659 return connector_types
662 def connections(self):
666 def attributes(self):
667 from attributes_metadata_v3_9_RC3 import attributes
675 def create_order(self):
676 return factories_order
679 def configure_order(self):
680 return factories_order
683 def factories_info(self):
684 from factories_metadata_v3_9_RC3 import factories_info
685 return factories_info
688 def testbed_attributes(self):
689 return testbed_attributes