1 # -*- coding: utf-8 -*-
3 from constants import TESTBED_ID
5 from nepi.util.constants import CONNECTION_DELAY
6 from nepi.util.tunchannel_impl import \
7 crossconnect_tunchannel_peer_init, \
8 crossconnect_tunchannel_peer_compl
10 ### Connection functions ####
12 def connect_dummy(testbed_instance, guid1, guid2):
15 def connect_node_device(testbed_instance, node_guid, device_guid):
16 node = testbed_instance._elements[node_guid]
17 device = testbed_instance._elements[device_guid]
18 node.AddDevice(device)
20 def connect_queue_device(testbed_instance, queue_guid, device_guid):
21 queue = testbed_instance._elements[queue_guid]
22 device = testbed_instance._elements[device_guid]
23 device.SetQueue(queue)
25 def connect_manager_device(testbed_instance, manager_guid, device_guid):
26 manager = testbed_instance._elements[manager_guid]
27 device = testbed_instance._elements[device_guid]
28 device.SetRemoteStationManager(manager)
30 def connect_phy_device(testbed_instance, phy_guid, device_guid):
31 phy = testbed_instance._elements[phy_guid]
32 if hasattr(phy, "GetErrorRateModel") and phy.GetErrorRateModel() == None:
33 return CONNECTION_DELAY
34 device = testbed_instance._elements[device_guid]
37 # search for the node asociated with the device
38 node_guid = testbed_instance.get_connected(device_guid, "node", "devs")
39 if len(node_guid) == 0:
40 raise RuntimeError("Can't instantiate interface %d outside netns \
42 node = testbed_instance.elements[node_guid[0]]
45 def connect_mac_device(testbed_instance, mac_guid, device_guid):
46 mac = testbed_instance._elements[mac_guid]
47 device = testbed_instance._elements[device_guid]
50 def connect_error_model_device(testbed_instance, model_guid, device_guid):
51 model = testbed_instance._elements[model_guid]
52 device = testbed_instance._elements[device_guid]
53 device.SetReceiveErrorModel(model)
55 def connect_error_model_phy(testbed_instance, err_guid, phy_guid):
56 err = testbed_instance._elements[err_guid]
57 phy = testbed_instance._elements[phy_guid]
58 phy.SetErrorRateModel(err)
60 def connect_channel_device(testbed_instance, channel_guid, device_guid):
61 channel = testbed_instance._elements[channel_guid]
62 device = testbed_instance._elements[device_guid]
63 device.Attach(channel)
65 def connect_simple_channel_device(testbed_instance, channel_guid, device_guid):
66 channel = testbed_instance._elements[channel_guid]
67 device = testbed_instance._elements[device_guid]
68 device.SetChannel(channel)
70 def connect_loss_channel(testbed_instance, loss_guid, channel_guid):
71 loss = testbed_instance._elements[loss_guid]
72 channel = testbed_instance._elements[channel_guid]
73 channel.SetPropagationLossModel(loss)
75 def connect_next_loss(testbed_instance, prev_guid, next_guid):
76 prev = testbed_instance._elements[prev_guid]
77 next = testbed_instance._elements[next_guid]
80 def connect_delay_channel(testbed_instance, delay_guid, channel_guid):
81 delay = testbed_instance._elements[delay_guid]
82 channel = testbed_instance._elements[channel_guid]
83 channel.SetPropagationDelayModel(delay)
85 def connect_node_application(testbed_instance, node_guid, application_guid):
86 node = testbed_instance._elements[node_guid]
87 application = testbed_instance._elements[application_guid]
88 node.AddApplication(application)
89 # works for ArpL3Protocol, Ipv4L3Protocol, UdpL4Protocol, TcpL4Protocol,
90 # NscTcpL4Protocol, MobilityModel (every subclass),
91 # RoutingProtocol (every subclass)
93 def connect_node_other(testbed_instance, node_guid, other_guid):
94 node = testbed_instance._elements[node_guid]
95 other = testbed_instance._elements[other_guid]
96 node.AggregateObject(other)
98 def connect_ss_sflow(testbed_instance, station_guid, sflow_guid):
99 ss = testbed_instance._elements[station_guid]
100 sflow = testbed_instance._elements[sflow_guid]
101 ss.AddServiceFlow(sflow)
103 #def connect_bs_sflow(testbed_instance, station_guid, sflow_guid):
104 # bs = testbed_instance._elements[station_guid]
105 # sflow = testbed_instance._elements[sflow_guid]
106 # bs.GetServiceFlowManager().AddServiceFlow (sflow)
108 def connect_bstation_linksched(testbed_instance, bstation_guid, linksched_guid):
109 bstation = testbed_instance._elements[bstation_guid]
110 linksched = testbed_instance._elements[linksched_guid]
111 linksched.SetBs(bstation)
113 def connect_classifier_sflow(testbed_instance, classifier_guid, sflow_guid):
114 classifier = testbed_instance._elements[classifier_guid]
115 sflow = testbed_instance._elements[sflow_guid]
116 csparam = testbed_instance.ns3.CsParameters(testbed_instance.ns3.CsParameters.ADD, classifier)
117 sflow.SetConvergenceSublayerParam (csparam);
119 def connect_fd(testbed_instance, fdnd_guid, cross_data):
120 def recvfd(sock, fdnd):
121 (fd, msg) = passfd.recvfd(sock)
122 # Store a reference to the endpoint to keep the socket alive
123 fdnd.SetFileDescriptor(fd)
128 sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
130 address = sock.getsockname()
131 # Set tun standard contract attributes
132 testbed_instance.set(fdnd_guid, "tun_addr", address)
133 testbed_instance.set(fdnd_guid, "tun_proto", "fd")
134 testbed_instance.set(fdnd_guid, "tun_port", 0)
135 testbed_instance.set(fdnd_guid, "tun_key", ("\xfa"*32).encode("base64").strip()) # unimportant, fds aren't encrypted
136 fdnd = testbed_instance._elements[fdnd_guid]
137 t = threading.Thread(target=recvfd, args=(sock,fdnd))
140 def connect_tunchannel_fd(testbed_instance, tun_guid, fdnd_guid):
141 fdnd = testbed_instance._elements[fdnd_guid]
142 tun = testbed_instance._elements[tun_guid]
144 # Create socket pair to connect the FDND and the TunChannel with it
146 sock1, sock2 = socket.socketpair(
147 socket.AF_UNIX, socket.SOCK_SEQPACKET)
149 # Store a reference to the endpoint to keep the socket alive
150 fdnd._endpoint_socket = sock1
151 fdnd.SetFileDescriptor(sock1.fileno())
153 # Send the other endpoint to the TUN channel
154 tun.tun_socket = sock2
156 # With this kind of tun_socket, NS3 will expect a PI header
157 # (sockets don't support the TUNGETIFF ioctl, so it will assume
158 # the default presence of PI headers)
162 ### Connector information ###
164 connector_types = dict({
166 "help": "Connector to a ns3::Node object (mandatory)",
172 "help": "Connector to network interfaces",
178 "help": "Connector to exactly two network interfaces (mandatory)",
184 "help": "Connector to exactly one network interface (mandatory)",
190 "help": "Connector to applications",
196 "help": "Connector to network stacks and protocols",
202 "help": "Connector to a channel for the device (mandatory)",
208 "help": "Connector to a queueing discipline (mandatory)",
214 "help": "Connector to an error model for the device",
220 "help": "Connector for file descriptor reception for devices with file descriptors",
226 "help": "Connector for file descriptor providing for devices with file descriptors",
232 "help": "Connector to a PHY wifi model",
238 "help": "Connector to a wifi channel with PHY wifi models",
244 "help": "Connector to a MAC wifi model",
250 "help": "Connector to a wifi manager",
256 "help": "Connector to a delay model",
262 "help": "Connector to a loss model",
268 "help": "Connector to the previous loss model",
274 "help": "Connector to the next loss model",
280 "help": "Connector to a mobility model",
286 "help": "Connector from MatrixPropagationLossModel to MobilityPair",
292 "help": "Connector from MobilityPair to MatrixPropagationLossModel",
298 "help": "Connector from MobilityModel to MobilityPair",
304 "help": "Connector to the 'ma' source mobility model, in the context of a mobility loss pair ",
310 "help": "Connector to the 'mb' destination mobility model, in the context of a mobility loss pair ",
316 "help": "Connector for ip-ip tunneling over TCP link",
322 "help": "Connector for ip-ip tunneling over UDP datagrams",
328 "help": "Connector to service flows",
334 "help": "Connector to a uplink scheduler",
340 "help": "Connector to a dowlink scheduler",
346 "help": "Connector to a classifier recod",
352 "help": "Connector to a service flow",
361 "from": ( "ns3", "ns3::Node", "devs" ),
362 "to": ( "ns3", "ns3::BridgeNetDevice", "node" ),
363 "init_code": connect_node_device,
367 "from": ( "ns3", "ns3::Node", "devs" ),
368 "to": ( "ns3", "ns3::CsmaNetDevice", "node" ),
369 "init_code": connect_node_device,
373 "from": ( "ns3", "ns3::Node", "devs" ),
374 "to": ( "ns3", "ns3::EmuNetDevice", "node" ),
375 "init_code": connect_node_device,
379 "from": ( "ns3", "ns3::Node", "devs" ),
380 "to": ( "ns3", "ns3::PointToPointNetDevice", "node" ),
381 "init_code": connect_node_device,
385 "from": ( "ns3", "ns3::Node", "devs" ),
386 "to": ( "ns3", "ns3::SimpleNetDevice", "node" ),
387 "init_code": connect_node_device,
391 "from": ( "ns3", "ns3::Node", "devs" ),
392 "to": ( "ns3", "ns3::FdNetDevice", "node" ),
393 "init_code": connect_node_device,
397 "from": ( "ns3", "ns3::Node", "devs" ),
398 "to": ( "ns3", "ns3::WifiNetDevice", "node" ),
399 "init_code": connect_node_device,
403 "from": ( "ns3", "ns3::Node", "devs" ),
404 "to": ( "ns3", "ns3::SubscriberStationNetDevice", "node" ),
405 "init_code": connect_node_device,
409 "from": ( "ns3", "ns3::Node", "devs" ),
410 "to": ( "ns3", "ns3::BaseStationNetDevice", "node" ),
411 "init_code": connect_node_device,
415 "from": ( "ns3", "ns3::DropTailQueue", "dev" ),
416 "to": ( "ns3", "ns3::CsmaNetDevice", "queue" ),
417 "init_code": connect_queue_device,
421 "from": ( "ns3", "ns3::DropTailQueue", "dev" ),
422 "to": ( "ns3", "ns3::EmuNetDevice", "queue" ),
423 "init_code": connect_queue_device,
427 "from": ( "ns3", "ns3::DropTailQueue", "dev" ),
428 "to": ( "ns3", "ns3::PointToPointNetDevice", "queue" ),
429 "init_code": connect_queue_device,
433 "from": ( "ns3", "ns3::ArfWifiManager", "dev" ),
434 "to": ( "ns3", "ns3::WifiNetDevice", "manager" ),
435 "init_code": connect_manager_device,
439 "from": ( "ns3", "ns3::ConstantRateWifiManager", "dev" ),
440 "to": ( "ns3", "ns3::WifiNetDevice", "manager" ),
441 "init_code": connect_manager_device,
445 "from": ( "ns3", "ns3::AarfcdWifiManager", "dev" ),
446 "to": ( "ns3", "ns3::WifiNetDevice", "manager" ),
447 "init_code": connect_manager_device,
451 "from": ( "ns3", "ns3::AarfWifiManager", "dev" ),
452 "to": ( "ns3", "ns3::WifiNetDevice", "manager" ),
453 "init_code": connect_manager_device,
457 "from": ( "ns3", "ns3::AmrrWifiManager", "dev" ),
458 "to": ( "ns3", "ns3::WifiNetDevice", "manager" ),
459 "init_code": connect_manager_device,
463 "from": ( "ns3", "ns3::CaraWifiManager", "dev" ),
464 "to": ( "ns3", "ns3::WifiNetDevice", "manager" ),
465 "init_code": connect_manager_device,
469 "from": ( "ns3", "ns3::IdealWifiManager", "dev" ),
470 "to": ( "ns3", "ns3::WifiNetDevice", "manager" ),
471 "init_code": connect_manager_device,
475 "from": ( "ns3", "ns3::MinstrelWifiManager", "dev" ),
476 "to": ( "ns3", "ns3::WifiNetDevice", "manager" ),
477 "init_code": connect_manager_device,
481 "from": ( "ns3", "ns3::OnoeWifiManager", "dev" ),
482 "to": ( "ns3", "ns3::WifiNetDevice", "manager" ),
483 "init_code": connect_manager_device,
487 "from": ( "ns3", "ns3::RraaWifiManager", "dev" ),
488 "to": ( "ns3", "ns3::WifiNetDevice", "manager" ),
489 "init_code": connect_manager_device,
493 "from": ( "ns3", "ns3::YansWifiPhy", "dev" ),
494 "to": ( "ns3", "ns3::WifiNetDevice", "phy" ),
495 "init_code": connect_phy_device,
499 "from": ( "ns3", "ns3::SimpleOfdmWimaxPhy", "dev" ),
500 "to": ( "ns3", "ns3::SubscriberStationNetDevice", "phy" ),
501 "init_code": connect_phy_device,
505 "from": ( "ns3", "ns3::SimpleOfdmWimaxPhy", "dev" ),
506 "to": ( "ns3", "ns3::BaseStationNetDevice", "phy" ),
507 "init_code": connect_phy_device,
511 "from": ( "ns3", "ns3::ApWifiMac", "dev" ),
512 "to": ( "ns3", "ns3::WifiNetDevice", "mac" ),
513 "init_code": connect_mac_device,
517 "from": ( "ns3", "ns3::StaWifiMac", "dev" ),
518 "to": ( "ns3", "ns3::WifiNetDevice", "mac" ),
519 "init_code": connect_mac_device,
523 "from": ( "ns3", "ns3::AdhocWifiMac", "dev" ),
524 "to": ( "ns3", "ns3::WifiNetDevice", "mac" ),
525 "init_code": connect_mac_device,
529 "from": ( "ns3", "ns3::RateErrorModel", "dev" ),
530 "to": ( "ns3", "ns3::CsmaNetDevice", "err" ),
531 "init_code": connect_error_model_device,
535 "from": ( "ns3", "ns3::RateErrorModel", "dev" ),
536 "to": ( "ns3", "ns3::PointToPointNetDevice", "err" ),
537 "init_code": connect_error_model_device,
541 "from": ( "ns3", "ns3::ListErrorModel", "dev" ),
542 "to": ( "ns3", "ns3::CsmaNetDevice", "err" ),
543 "init_code": connect_error_model_device,
547 "from": ( "ns3", "ns3::ListErrorModel", "dev" ),
548 "to": ( "ns3", "ns3::PointToPointNetDevice", "err" ),
549 "init_code": connect_error_model_device,
553 "from": ( "ns3", "ns3::NistErrorRateModel", "phy" ),
554 "to": ( "ns3", "ns3::YansWifiPhy", "err" ),
555 "init_code": connect_error_model_phy,
559 "from": ( "ns3", "ns3::CsmaChannel", "devs" ),
560 "to": ( "ns3", "ns3::CsmaNetDevice", "chan" ),
561 "init_code": connect_channel_device,
565 "from": ( "ns3", "ns3::PointToPointChannel", "dev2" ),
566 "to": ( "ns3", "ns3::PointToPointNetDevice", "chan" ),
567 "init_code": connect_channel_device,
571 "from": ( "ns3", "ns3::SimpleChannel", "devs" ),
572 "to": ( "ns3", "ns3::SimpleNetDevice", "chan" ),
573 "init_code": connect_simple_channel_device,
577 "from": ( "ns3", "ns3::SimpleOfdmWimaxChannel", "devs" ),
578 "to": ( "ns3", "ns3::SubscriberStationNetDevice", "chan" ),
579 "init_code": connect_channel_device,
583 "from": ( "ns3", "ns3::SimpleOfdmWimaxChannel", "devs" ),
584 "to": ( "ns3", "ns3::BaseStationNetDevice", "chan" ),
585 "init_code": connect_channel_device,
589 "from": ( "ns3", "ns3::YansWifiChannel", "phys" ),
590 "to": ( "ns3", "ns3::YansWifiPhy", "chan" ),
591 "init_code": connect_simple_channel_device,
595 "from": ( "ns3", "ns3::YansWifiChannel", "phys" ),
596 "to": ( "ns3", "ns3::YansWifiPhy", "chan" ),
597 "init_code": connect_simple_channel_device,
601 "from": ( "ns3", "ns3::LogDistancePropagationLossModel", "prev" ),
602 "to": ( "ns3", "ns3::YansWifiChannel", "loss" ),
603 "init_code": connect_loss_channel,
607 "from": ( "ns3", "ns3::LogDistancePropagationLossModel", "prev" ),
608 "to": ( "ns3", "ns3::LogDistancePropagationLossModel", "next" ),
609 "init_code": connect_next_loss,
613 "from": ( "ns3", "ns3::ConstantSpeedPropagationDelayModel", "chan" ),
614 "to": ( "ns3", "ns3::YansWifiChannel", "delay" ),
615 "init_code": connect_delay_channel,
619 "from": ( "ns3", "ns3::Node", "apps" ),
620 "to": ( "ns3", "ns3::OnOffApplication", "node" ),
621 "init_code": connect_node_application,
625 "from": ( "ns3", "ns3::Node", "apps" ),
626 "to": ( "ns3", "ns3::PacketSink", "node" ),
627 "init_code": connect_node_application,
631 "from": ( "ns3", "ns3::Node", "apps" ),
632 "to": ( "ns3", "ns3::UdpEchoClient", "node" ),
633 "init_code": connect_node_application,
637 "from": ( "ns3", "ns3::Node", "apps" ),
638 "to": ( "ns3", "ns3::UdpEchoServer", "node" ),
639 "init_code": connect_node_application,
643 "from": ( "ns3", "ns3::Node", "apps" ),
644 "to": ( "ns3", "ns3::UdpClient", "node" ),
645 "init_code": connect_node_application,
649 "from": ( "ns3", "ns3::Node", "apps" ),
650 "to": ( "ns3", "ns3::UdpServer", "node" ),
651 "init_code": connect_node_application,
654 "from": ( "ns3", "ns3::Node", "apps" ),
655 "to": ( "ns3", "ns3::V4Ping", "node" ),
656 "init_code": connect_node_application,
660 "from": ( "ns3", "ns3::Node", "protos" ),
661 "to": ( "ns3", "ns3::ArpL3Protocol", "node" ),
662 "init_code": connect_node_other,
666 "from": ( "ns3", "ns3::Node", "protos" ),
667 "to": ( "ns3", "ns3::Icmpv4L4Protocol", "node" ),
668 "init_code": connect_node_other,
672 "from": ( "ns3", "ns3::Node", "protos" ),
673 "to": ( "ns3", "ns3::Icmpv6L4Protocol", "node" ),
674 "init_code": connect_node_other,
678 "from": ( "ns3", "ns3::Node", "protos" ),
679 "to": ( "ns3", "ns3::Ipv4L3Protocol", "node" ),
680 "init_code": connect_node_other,
684 "from": ( "ns3", "ns3::Node", "protos" ),
685 "to": ( "ns3", "ns3::Ipv6L3Protocol", "node" ),
686 "init_code": connect_node_other,
690 "from": ( "ns3", "ns3::Node", "protos" ),
691 "to": ( "ns3", "ns3::UdpL4Protocol", "node" ),
692 "init_code": connect_node_other,
696 "from": ( "ns3", "ns3::Node", "protos" ),
697 "to": ( "ns3", "ns3::TcpL4Protocol", "node" ),
698 "init_code": connect_node_other,
704 "from": ( "ns3", "ns3::Nepi::MobilityPair", "matrix" ),
705 "to": ( "ns3", "ns3::MatrixPropagationLossModel", "mobpair" ),
706 "init_code": connect_dummy,
710 "from": ( "ns3", "ns3::Nepi::MobilityPair", "ma" ),
711 "to": ( "ns3", "ns3::ConstantVelocityMobilityModel", "mp" ),
712 "init_code": connect_dummy,
716 "from": ( "ns3", "ns3::Nepi::MobilityPair", "mb" ),
717 "to": ( "ns3", "ns3::ConstantVelocityMobilityModel", "mp" ),
718 "init_code": connect_dummy,
722 "from": ( "ns3", "ns3::Nepi::MobilityPair", "ma" ),
723 "to": ( "ns3", "ns3::ConstantAccelerationMobilityModel", "mp" ),
724 "init_code": connect_dummy,
728 "from": ( "ns3", "ns3::Nepi::MobilityPair", "mb" ),
729 "to": ( "ns3", "ns3::ConstantAccelerationMobilityModel", "mp" ),
730 "init_code": connect_dummy,
734 "from": ( "ns3", "ns3::Nepi::MobilityPair", "ma" ),
735 "to": ( "ns3", "ns3::ConstantPositionMobilityModel", "mp" ),
736 "init_code": connect_dummy,
740 "from": ( "ns3", "ns3::Nepi::MobilityPair", "mb" ),
741 "to": ( "ns3", "ns3::ConstantPositionMobilityModel", "mp" ),
742 "init_code": connect_dummy,
746 "from": ( "ns3", "ns3::MatrixPropagationLossModel", "chan" ),
747 "to": ( "ns3", "ns3::YansWifiChannel", "loss" ),
748 "init_code": connect_loss_channel,
755 "from": ( "ns3", "ns3::Node", "mobility" ),
756 "to": ( "ns3", "ns3::ConstantAccelerationMobilityModel", "node" ),
757 "init_code": connect_node_other,
761 "from": ( "ns3", "ns3::Node", "mobility" ),
762 "to": ( "ns3", "ns3::ConstantPositionMobilityModel", "node" ),
763 "init_code": connect_node_other,
767 "from": ( "ns3", "ns3::Node", "mobility" ),
768 "to": ( "ns3", "ns3::ConstantVelocityMobilityModel", "node" ),
769 "init_code": connect_node_other,
773 "from": ( "ns3", "ns3::Node", "mobility" ),
774 "to": ( "ns3", "ns3::HierarchicalMobilityModel", "node" ),
775 "init_code": connect_node_other,
779 "from": ( "ns3", "ns3::Node", "mobility" ),
780 "to": ( "ns3", "ns3::RandomDirection2dMobilityModel", "node" ),
781 "init_code": connect_node_other,
785 "from": ( "ns3", "ns3::Node", "mobility" ),
786 "to": ( "ns3", "ns3::RandomWalk2dMobilityModel", "node" ),
787 "init_code": connect_node_other,
791 "from": ( "ns3", "ns3::Node", "mobility" ),
792 "to": ( "ns3", "ns3::RandomWaypointMobilityModel", "node" ),
793 "init_code": connect_node_other,
797 "from": ( "ns3", "ns3::Node", "mobility" ),
798 "to": ( "ns3", "ns3::WaypointMobilityModel", "node" ),
799 "init_code": connect_node_other,
803 "from": ( "ns3", "ns3::SubscriberStationNetDevice", "sflows" ),
804 "to": ( "ns3", "ns3::ServiceFlow", "dev" ),
805 "init_code": connect_ss_sflow,
809 # "from": ( "ns3", "ns3::BaseStationNetDevice", "sflows" ),
810 # "to": ( "ns3", "ns3::ServiceFlow", "dev" ),
811 # "init_code": connect_bs_sflow,
815 "from": ( "ns3", "ns3::BaseStationNetDevice", "uplnk" ),
816 "to": ( "ns3", "ns3::UplinkSchedulerSimple", "dev" ),
817 "init_code": connect_bstation_linksched,
821 "from": ( "ns3", "ns3::BaseStationNetDevice", "uplnk" ),
822 "to": ( "ns3", "ns3::UplinkSchedulerRtps", "dev" ),
823 "init_code": connect_bstation_linksched,
827 "from": ( "ns3", "ns3::BaseStationNetDevice", "dwnlnk" ),
828 "to": ( "ns3", "ns3::BSSchedulerSimple", "dev" ),
829 "init_code": connect_bstation_linksched,
833 "from": ( "ns3", "ns3::BaseStationNetDevice", "dwnlnk" ),
834 "to": ( "ns3", "ns3::BSSchedulerRtps", "dev" ),
835 "init_code": connect_bstation_linksched,
839 "from": ( "ns3", "ns3::IpcsClassifierRecord", "sflow" ),
840 "to": ( "ns3", "ns3::ServiceFlow", "classif" ),
841 "init_code": connect_classifier_sflow,
845 "from": ( "ns3", "ns3::FdNetDevice", "->fd" ),
846 "to": ( None, None, "fd->" ),
847 "init_code": connect_fd,
851 "from": ( "ns3", "ns3::Nepi::TunChannel", "fd->" ),
852 "to": ( "ns3", "ns3::FdNetDevice", "->fd" ),
853 "init_code": connect_tunchannel_fd,
857 "from": ( "ns3", "ns3::Nepi::TunChannel", "tcp"),
858 "to": (None, None, "tcp"),
859 "init_code": functools.partial(crossconnect_tunchannel_peer_init,"tcp"),
860 "compl_code": functools.partial(crossconnect_tunchannel_peer_compl,"tcp"),
864 "from": ( "ns3", "ns3::Nepi::TunChannel", "udp"),
865 "to": (None, None, "udp"),
866 "init_code": functools.partial(crossconnect_tunchannel_peer_init,"udp"),
867 "compl_code": functools.partial(crossconnect_tunchannel_peer_compl,"udp"),