-#!/usr/bin/env python
# -*- coding: utf-8 -*-
from constants import TESTBED_ID
device = testbed_instance._elements[device_guid]
device.SetMac(mac)
-def connect_errormodel_device(testbed_instance, model_guid, device_guid):
+def connect_error_model_device(testbed_instance, model_guid, device_guid):
model = testbed_instance._elements[model_guid]
device = testbed_instance._elements[device_guid]
device.SetReceiveErrorModel(model)
-def connect_errormodel_phy(testbed_instance, err_guid, phy_guid):
+def connect_error_model_phy(testbed_instance, err_guid, phy_guid):
err = testbed_instance._elements[err_guid]
phy = testbed_instance._elements[phy_guid]
phy.SetErrorRateModel(err)
other = testbed_instance._elements[other_guid]
node.AggregateObject(other)
-def connect_station_sflow(testbed_instance, station_guid, sflow_guid):
- station = testbed_instance._elements[station_guid]
+def connect_ss_sflow(testbed_instance, station_guid, sflow_guid):
+ ss = testbed_instance._elements[station_guid]
sflow = testbed_instance._elements[sflow_guid]
- station.AddServiceFlow(sflow)
+ ss.AddServiceFlow(sflow)
+
+#def connect_bs_sflow(testbed_instance, station_guid, sflow_guid):
+# bs = testbed_instance._elements[station_guid]
+# sflow = testbed_instance._elements[sflow_guid]
+# bs.GetServiceFlowManager().AddServiceFlow (sflow)
def connect_bstation_linksched(testbed_instance, bstation_guid, linksched_guid):
bstation = testbed_instance._elements[bstation_guid]
sflow.SetConvergenceSublayerParam (csparam);
def connect_fd(testbed_instance, fdnd_guid, cross_data):
- fdnd = testbed_instance._elements[fdnd_guid]
- endpoint = fdnd.GetEndpoint()
- # XXX: check the method StringToBuffer of ns3::FileDescriptorNetDevice
- # to see how the address should be decoded
- address = endpoint.replace(":", "").decode('hex')[2:]
- testbed_instance.set(fdnd_guid, "LinuxSocketAddress", address)
-
- # If it's a non-abstract socket, add the path
- if not address.startswith('\x00'):
- address = os.path.join( testbed_instance.root_directory, address )
+ def recvfd(sock, fdnd):
+ (fd, msg) = passfd.recvfd(sock)
+ # Store a reference to the endpoint to keep the socket alive
+ fdnd.SetFileDescriptor(fd)
+ import threading
+ import passfd
+ import socket
+ sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
+ sock.bind("")
+ address = sock.getsockname()
# Set tun standard contract attributes
- testbed_instance.set(fdnd_guid, "tun_addr", address )
+ testbed_instance.set(fdnd_guid, "tun_addr", address)
testbed_instance.set(fdnd_guid, "tun_proto", "fd")
testbed_instance.set(fdnd_guid, "tun_port", 0)
- testbed_instance.set(fdnd_guid, "tun_key", ("\xfa"*32).encode("base64")) # unimportant, fds aren't encrypted
+ testbed_instance.set(fdnd_guid, "tun_key", ("\xfa"*32).encode("base64").strip()) # unimportant, fds aren't encrypted
+ fdnd = testbed_instance._elements[fdnd_guid]
+ t = threading.Thread(target=recvfd, args=(sock,fdnd))
+ t.start()
def connect_tunchannel_fd(testbed_instance, tun_guid, fdnd_guid):
fdnd = testbed_instance._elements[fdnd_guid]
tun = testbed_instance._elements[tun_guid]
- # XXX: check the method StringToBuffer of ns3::FileDescriptorNetDevice
- # to see how the address should be decoded
- endpoint = fdnd.GetEndpoint()
- address = endpoint.replace(":", "").decode('hex')[2:]
- testbed_instance.set(fdnd_guid, "LinuxSocketAddress", address)
-
# Create socket pair to connect the FDND and the TunChannel with it
import socket
sock1, sock2 = socket.socketpair(
socket.AF_UNIX, socket.SOCK_SEQPACKET)
- # Send one endpoint to the FDND
- import passfd
- import socket
- sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
- sock.connect(address)
- passfd.sendfd(sock, sock1.fileno(), '0')
-
# Store a reference to the endpoint to keep the socket alive
fdnd._endpoint_socket = sock1
-
+ fdnd.SetFileDescriptor(sock1.fileno())
+
# Send the other endpoint to the TUN channel
tun.tun_socket = sock2
"max": 1,
"min": 0
}),
+ "mobpair": dict({
+ "help": "Connector from MatrixPropagationLossModel to MobilityPair",
+ "name": "mobpair",
+ "max": -1,
+ "min": 0
+ }),
+ "matrix": dict({
+ "help": "Connector from MobilityPair to MatrixPropagationLossModel",
+ "name": "matrix",
+ "max": 1,
+ "min": 0
+ }),
+ "mp": dict({
+ "help": "Connector from MobilityModel to MobilityPair",
+ "name": "mp",
+ "max": -1,
+ "min": 0
+ }),
+ "ma": dict({
+ "help": "Connector to the 'ma' source mobility model, in the context of a mobility loss pair ",
+ "name": "ma",
+ "max": 1,
+ "min": 0
+ }),
+ "mb": dict({
+ "help": "Connector to the 'mb' destination mobility model, in the context of a mobility loss pair ",
+ "name": "mb",
+ "max": 1,
+ "min": 1
+ }),
"tcp": dict({
"help": "Connector for ip-ip tunneling over TCP link",
"name": "tcp",
}),
dict({
"from": ( "ns3", "ns3::Node", "devs" ),
- "to": ( "ns3", "ns3::FileDescriptorNetDevice", "node" ),
+ "to": ( "ns3", "ns3::FdNetDevice", "node" ),
"init_code": connect_node_device,
"can_cross": False
}),
dict({
"from": ( "ns3", "ns3::Node", "devs" ),
"to": ( "ns3", "ns3::SubscriberStationNetDevice", "node" ),
- "init_code": connect_dummy,
+ "init_code": connect_node_device,
"can_cross": False
}),
dict({
"from": ( "ns3", "ns3::Node", "devs" ),
"to": ( "ns3", "ns3::BaseStationNetDevice", "node" ),
- "init_code": connect_dummy,
+ "init_code": connect_node_device,
"can_cross": False
}),
dict({
"can_cross": False
}),
dict({
- "from": ( "ns3", "ns3::QapWifiMac", "dev" ),
- "to": ( "ns3", "ns3::WifiNetDevice", "mac" ),
- "init_code": connect_mac_device,
- "can_cross": False
- }),
- dict({
- "from": ( "ns3", "ns3::QstaWifiMac", "dev" ),
+ "from": ( "ns3", "ns3::ApWifiMac", "dev" ),
"to": ( "ns3", "ns3::WifiNetDevice", "mac" ),
"init_code": connect_mac_device,
"can_cross": False
}),
dict({
- "from": ( "ns3", "ns3::NqapWifiMac", "dev" ),
+ "from": ( "ns3", "ns3::StaWifiMac", "dev" ),
"to": ( "ns3", "ns3::WifiNetDevice", "mac" ),
"init_code": connect_mac_device,
"can_cross": False
}),
dict({
- "from": ( "ns3", "ns3::NqstaWifiMac", "dev" ),
+ "from": ( "ns3", "ns3::AdhocWifiMac", "dev" ),
"to": ( "ns3", "ns3::WifiNetDevice", "mac" ),
"init_code": connect_mac_device,
"can_cross": False
dict({
"from": ( "ns3", "ns3::RateErrorModel", "dev" ),
"to": ( "ns3", "ns3::CsmaNetDevice", "err" ),
- "init_code": connect_errormodel_device,
+ "init_code": connect_error_model_device,
"can_cross": False
}),
dict({
"from": ( "ns3", "ns3::RateErrorModel", "dev" ),
"to": ( "ns3", "ns3::PointToPointNetDevice", "err" ),
- "init_code": connect_errormodel_device,
+ "init_code": connect_error_model_device,
"can_cross": False
}),
dict({
"from": ( "ns3", "ns3::ListErrorModel", "dev" ),
"to": ( "ns3", "ns3::CsmaNetDevice", "err" ),
- "init_code": connect_errormodel_device,
+ "init_code": connect_error_model_device,
"can_cross": False
}),
dict({
"from": ( "ns3", "ns3::ListErrorModel", "dev" ),
"to": ( "ns3", "ns3::PointToPointNetDevice", "err" ),
- "init_code": connect_errormodel_device,
+ "init_code": connect_error_model_device,
"can_cross": False
}),
dict({
"from": ( "ns3", "ns3::NistErrorRateModel", "phy" ),
"to": ( "ns3", "ns3::YansWifiPhy", "err" ),
- "init_code": connect_errormodel_phy,
+ "init_code": connect_error_model_phy,
"can_cross": False
}),
dict({
"init_code": connect_node_other,
"can_cross": False
}),
+
+
+ dict({
+ "from": ( "ns3", "ns3::Nepi::MobilityPair", "matrix" ),
+ "to": ( "ns3", "ns3::MatrixPropagationLossModel", "mobpair" ),
+ "init_code": connect_dummy,
+ "can_cross": False
+ }),
+ dict({
+ "from": ( "ns3", "ns3::Nepi::MobilityPair", "ma" ),
+ "to": ( "ns3", "ns3::ConstantVelocityMobilityModel", "mp" ),
+ "init_code": connect_dummy,
+ "can_cross": False
+ }),
+ dict({
+ "from": ( "ns3", "ns3::Nepi::MobilityPair", "mb" ),
+ "to": ( "ns3", "ns3::ConstantVelocityMobilityModel", "mp" ),
+ "init_code": connect_dummy,
+ "can_cross": False
+ }),
+ dict({
+ "from": ( "ns3", "ns3::Nepi::MobilityPair", "ma" ),
+ "to": ( "ns3", "ns3::ConstantAccelerationMobilityModel", "mp" ),
+ "init_code": connect_dummy,
+ "can_cross": False
+ }),
+ dict({
+ "from": ( "ns3", "ns3::Nepi::MobilityPair", "mb" ),
+ "to": ( "ns3", "ns3::ConstantAccelerationMobilityModel", "mp" ),
+ "init_code": connect_dummy,
+ "can_cross": False
+ }),
+ dict({
+ "from": ( "ns3", "ns3::Nepi::MobilityPair", "ma" ),
+ "to": ( "ns3", "ns3::ConstantPositionMobilityModel", "mp" ),
+ "init_code": connect_dummy,
+ "can_cross": False
+ }),
+ dict({
+ "from": ( "ns3", "ns3::Nepi::MobilityPair", "mb" ),
+ "to": ( "ns3", "ns3::ConstantPositionMobilityModel", "mp" ),
+ "init_code": connect_dummy,
+ "can_cross": False
+ }),
+ dict({
+ "from": ( "ns3", "ns3::MatrixPropagationLossModel", "chan" ),
+ "to": ( "ns3", "ns3::YansWifiChannel", "loss" ),
+ "init_code": connect_loss_channel,
+ "can_cross": False
+ }),
+
+
+
dict({
"from": ( "ns3", "ns3::Node", "mobility" ),
"to": ( "ns3", "ns3::ConstantAccelerationMobilityModel", "node" ),
dict({
"from": ( "ns3", "ns3::SubscriberStationNetDevice", "sflows" ),
"to": ( "ns3", "ns3::ServiceFlow", "dev" ),
- "init_code": connect_station_sflow,
- "can_cross": False
- }),
- dict({
- "from": ( "ns3", "ns3::BaseStationNetDevice", "sflows" ),
- "to": ( "ns3", "ns3::ServiceFlow", "dev" ),
- "init_code": connect_station_sflow,
+ "init_code": connect_ss_sflow,
"can_cross": False
}),
+# dict({
+# "from": ( "ns3", "ns3::BaseStationNetDevice", "sflows" ),
+# "to": ( "ns3", "ns3::ServiceFlow", "dev" ),
+# "init_code": connect_bs_sflow,
+# "can_cross": False
+# }),
dict({
"from": ( "ns3", "ns3::BaseStationNetDevice", "uplnk" ),
"to": ( "ns3", "ns3::UplinkSchedulerSimple", "dev" ),
"can_cross": False
}),
dict({
- "from": ( "ns3", "ns3::FileDescriptorNetDevice", "->fd" ),
+ "from": ( "ns3", "ns3::FdNetDevice", "->fd" ),
"to": ( None, None, "fd->" ),
"init_code": connect_fd,
"can_cross": True
}),
dict({
"from": ( "ns3", "ns3::Nepi::TunChannel", "fd->" ),
- "to": ( "ns3", "ns3::FileDescriptorNetDevice", "->fd" ),
+ "to": ( "ns3", "ns3::FdNetDevice", "->fd" ),
"init_code": connect_tunchannel_fd,
"can_cross": False
}),