def make_ns_in_pl(self, pl, exp, node1, iface1, root): ns3_testbed_id = "ns3" # Add NS3 support in node1 plnepi = pl.create("NepiDependency") plns3 = pl.create("NS3Dependency") plnepi.connector("node").connect(node1.connector("deps")) plns3.connector("node").connect(node1.connector("deps")) # Create NS3 testbed running in node1 ns3_provider = FactoriesProvider(ns3_testbed_id) ns3_desc = exp.add_testbed_description(ns3_provider) ns3_desc.set_attribute_value("rootDirectory", root) ns3_desc.set_attribute_value("SimulatorImplementationType", "ns3::RealtimeSimulatorImpl") ns3_desc.set_attribute_value("ChecksumEnabled", True) ns3_desc.set_attribute_value( DC.DEPLOYMENT_HOST, "{#[%s].addr[0].[Address]#}" % (iface1.get_attribute_value("label"), )) ns3_desc.set_attribute_value(DC.DEPLOYMENT_USER, pl.get_attribute_value("slice")) ns3_desc.set_attribute_value(DC.DEPLOYMENT_KEY, pl.get_attribute_value("sliceSSHKey")) ns3_desc.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON) ns3_desc.set_attribute_value(DC.DEPLOYMENT_COMMUNICATION, DC.ACCESS_SSH) ns3_desc.set_attribute_value( DC.DEPLOYMENT_ENVIRONMENT_SETUP, "{#[%s].[%s]#}" % ( node1.get_attribute_value("label"), ATTR_NEPI_TESTBED_ENVIRONMENT_SETUP, )) ns3_desc.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL) return ns3_desc
def make_experiment_desc(self, use_sfa=False): testbed_id = self.testbed_id slicename = self.slicename plchost = self.plchost pl_ssh_key = os.environ.get( "PL_SSH_KEY", "%s/.ssh/id_rsa_planetlab" % (os.environ['HOME'], )) pl_user, pl_pwd = test_util.pl_auth() exp_desc = ExperimentDescription() pl_provider = FactoriesProvider(testbed_id) pl_desc = exp_desc.add_testbed_description(pl_provider) pl_desc.set_attribute_value("homeDirectory", self.root_dir) pl_desc.set_attribute_value("slice", slicename) pl_desc.set_attribute_value("sliceSSHKey", pl_ssh_key) pl_desc.set_attribute_value("authUser", pl_user) pl_desc.set_attribute_value("authPass", pl_pwd) pl_desc.set_attribute_value("plcHost", plchost) pl_desc.set_attribute_value("tapPortBase", self.port_base) pl_desc.set_attribute_value( "p2pDeployment", False) # it's interactive, we don't want it in tests pl_desc.set_attribute_value("cleanProc", True) pl_desc.set_attribute_value("plLogLevel", "DEBUG") if use_sfa: pl_desc.set_attribute_value("sfa", True) pl_desc.set_attribute_value("sliceHrn", self.slicehrn) return pl_desc, exp_desc
def test_testbed_reference_expressions(self): exp_desc, desc, app, node1, node2, iface1, iface2 = self.make_test_experiment( ) iface1.set_attribute_value("label", "some") addr = iface1.add_address() addr.set_attribute_value("Address", "10.0.0.2") desc2 = exp_desc.add_testbed_description(FactoriesProvider("mock2")) desc2.set_attribute_value(DC.DEPLOYMENT_HOST, "{#[some].addr[0].[Address]#}") # DC.DEPLOYMENT_HOST should be ignored if DC.DEPLOYMENT_CONNECTION is not set # But it should be resolved anyway xml = exp_desc.to_xml() access_config = None controller = proxy.create_experiment_controller(xml, access_config) controller.start() while not controller.is_finished(app.guid): time.sleep(0.5) fake_result = controller.trace(app.guid, "fake") comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. --- 10.0.0.2 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms """ self.assertTrue(fake_result.startswith(comp_result)) self.assertEqual( controller._deployment_config[desc2.guid].get_attribute_value( DC.DEPLOYMENT_HOST), addr.get_attribute_value("Address")) controller.stop() controller.shutdown()
def test_design_if(self): testbed_id = "netns" exp_desc = ExperimentDescription() provider = FactoriesProvider(testbed_id) tstbd_desc = exp_desc.add_testbed_description(provider) tstbd_desc.set_attribute_value("enableDebug", True) node1 = tstbd_desc.create("Node") node2 = tstbd_desc.create("Node") iface1 = tstbd_desc.create("NodeInterface") iface1.set_attribute_value("up", True) node1.connector("devs").connect(iface1.connector("node")) ip1 = iface1.add_address() ip1.set_attribute_value("Address", "10.0.0.1") iface2 = tstbd_desc.create("NodeInterface") iface2.set_attribute_value("up", True) node2.connector("devs").connect(iface2.connector("node")) ip2 = iface2.add_address() ip2.set_attribute_value("Address", "10.0.0.2") switch = tstbd_desc.create("Switch") switch.set_attribute_value("up", True) iface1.connector("switch").connect(switch.connector("devs")) iface2.connector("switch").connect(switch.connector("devs")) app = tstbd_desc.create("Application") app.set_attribute_value("command", "ping -qc10 10.0.0.2") app.connector("node").connect(node1.connector("apps")) xml = exp_desc.to_xml() exp_desc2 = ExperimentDescription() exp_desc2.from_xml(xml) xml2 = exp_desc2.to_xml() self.assertTrue(xml == xml2)
def make_experiment_desc(self): testbed_id = self.testbed_id slicename = self.slicename plchost = self.plchost pl_ssh_key = self.plkey pl_user = self.pluser pl_pwd = self.plpass plroot_dir = os.path.join(self.root_dir,"pl") if not os.path.exists(plroot_dir): os.makedirs(plroot_dir) exp_desc = ExperimentDescription() pl_provider = FactoriesProvider(testbed_id) pl_desc = exp_desc.add_testbed_description(pl_provider) pl_desc.set_attribute_value(DC.ROOT_DIRECTORY, plroot_dir ) pl_desc.set_attribute_value("homeDirectory", self.root_dir) pl_desc.set_attribute_value("slice", slicename) pl_desc.set_attribute_value("sliceSSHKey", pl_ssh_key) pl_desc.set_attribute_value("authUser", pl_user) pl_desc.set_attribute_value("authPass", pl_pwd) pl_desc.set_attribute_value("plcHost", plchost) pl_desc.set_attribute_value("tapPortBase", self.port_base) pl_desc.set_attribute_value("p2pDeployment", not self.no_p2p_deploy) pl_desc.set_attribute_value("cleanProc", True) pl_desc.set_attribute_value("plLogLevel", "INFO") return pl_desc, exp_desc
def test_design(self): exp_desc = ExperimentDescription() testbed_id = "mock" provider = FactoriesProvider(testbed_id) desc = exp_desc.add_testbed_description(provider) desc.set_attribute_value("fake", True) node1 = desc.create("Node") node2 = desc.create("Node") iface1 = desc.create("Interface") iface1.set_attribute_value("fake", True) addr1 = iface1.add_address() addr2 = iface1.add_address() addr3 = iface1.add_address() self.assertRaises(RuntimeError, iface1.add_address) node1.connector("devs").connect(iface1.connector("node")) iface2 = desc.create("Interface") iface2.set_attribute_value("fake", True) node2.connector("devs").connect(iface2.connector("node")) iface1.connector("iface").connect(iface2.connector("iface")) app = desc.create("Application") app.connector("node").connect(node1.connector("apps")) app.enable_trace("fake") self.assertEquals(node1.tags, [tags.MOBILE, tags.NODE, tags.ALLOW_ROUTES]) xml = exp_desc.to_xml() exp_desc2 = ExperimentDescription() exp_desc2.from_xml(xml) xml2 = exp_desc2.to_xml() self.assertTrue(xml == xml2)
def test_design_if(self): testbed_id = "ns3" exp_desc = ExperimentDescription() provider = FactoriesProvider(testbed_id) tstbd_desc = exp_desc.add_testbed_description(provider) node1 = tstbd_desc.create("ns3::Node") ipv41 = tstbd_desc.create("ns3::Ipv4L3Protocol") arp1 = tstbd_desc.create("ns3::ArpL3Protocol") icmp1 = tstbd_desc.create("ns3::Icmpv4L4Protocol") udp1 = tstbd_desc.create("ns3::UdpL4Protocol") node1.connector("protos").connect(ipv41.connector("node")) node1.connector("protos").connect(arp1.connector("node")) node1.connector("protos").connect(icmp1.connector("node")) node1.connector("protos").connect(udp1.connector("node")) iface1 = tstbd_desc.create("ns3::PointToPointNetDevice") queue1 = tstbd_desc.create("ns3::DropTailQueue") node1.connector("devs").connect(iface1.connector("node")) iface1.connector("queue").connect(queue1.connector("dev")) trace1 = iface1.enable_trace("P2PPcapTrace") ip1 = iface1.add_address() ip1.set_attribute_value("Address", "10.0.0.1") node2 = tstbd_desc.create("ns3::Node") ipv42 = tstbd_desc.create("ns3::Ipv4L3Protocol") arp2 = tstbd_desc.create("ns3::ArpL3Protocol") icmp2 = tstbd_desc.create("ns3::Icmpv4L4Protocol") udp2 = tstbd_desc.create("ns3::UdpL4Protocol") node2.connector("protos").connect(ipv42.connector("node")) node2.connector("protos").connect(arp2.connector("node")) node2.connector("protos").connect(icmp2.connector("node")) node2.connector("protos").connect(udp2.connector("node")) iface2 = tstbd_desc.create("ns3::PointToPointNetDevice") queue2 = tstbd_desc.create("ns3::DropTailQueue") node2.connector("devs").connect(iface2.connector("node")) iface2.connector("queue").connect(queue2.connector("dev")) trace2 = iface2.enable_trace("P2PPcapTrace") ip2 = iface2.add_address() ip2.set_attribute_value("Address", "10.0.0.2") chan = tstbd_desc.create("ns3::PointToPointChannel") iface1.connector("chan").connect(chan.connector("dev2")) iface2.connector("chan").connect(chan.connector("dev2")) app = tstbd_desc.create("ns3::V4Ping") app.set_attribute_value("Remote", "10.0.0.2") app.set_attribute_value("StartTime", "0s") app.set_attribute_value("StopTime", "20s") app.set_attribute_value("Verbose", False) app.connector("node").connect(node1.connector("apps")) xml = exp_desc.to_xml() exp_desc2 = ExperimentDescription() exp_desc2.from_xml(xml) xml2 = exp_desc2.to_xml() self.assertTrue(xml == xml2)
def _test_switched(self, controller_access_config = None, testbed_access_config = None): testbed_id = "netns" exp_desc = ExperimentDescription() user = getpass.getuser() netns_provider = FactoriesProvider(testbed_id) netns_desc = exp_desc.add_testbed_description(netns_provider) netns_desc.set_attribute_value("homeDirectory", self.root_dir) #netns_desc.set_attribute_value("enableDebug", True) node1 = netns_desc.create("Node") node2 = netns_desc.create("Node") iface1 = netns_desc.create("NodeInterface") iface1.set_attribute_value("up", True) node1.connector("devs").connect(iface1.connector("node")) ip1 = iface1.add_address() ip1.set_attribute_value("Address", "10.0.0.1") iface2 = netns_desc.create("NodeInterface") iface2.set_attribute_value("up", True) node2.connector("devs").connect(iface2.connector("node")) ip2 = iface2.add_address() ip2.set_attribute_value("Address", "10.0.0.2") switch = netns_desc.create("Switch") switch.set_attribute_value("up", True) iface1.connector("switch").connect(switch.connector("devs")) iface2.connector("switch").connect(switch.connector("devs")) app = netns_desc.create("Application") app.set_attribute_value("command", "ping -qc1 10.0.0.2") app.set_attribute_value("user", user) app.connector("node").connect(node1.connector("apps")) app.enable_trace("stdout") if testbed_access_config: for attr in testbed_access_config.attributes: if attr.value: netns_desc.set_attribute_value(attr.name, attr.value) xml = exp_desc.to_xml() controller = proxy.create_experiment_controller(xml, controller_access_config) try: controller.start() while not controller.is_finished(app.guid): time.sleep(0.5) ping_result = controller.trace(app.guid, "stdout") comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. --- 10.0.0.2 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms """ self.assertTrue(ping_result.startswith(comp_result)) finally: controller.stop() controller.shutdown()
def make_netns_testbed(self, exp_desc): netns_provider = FactoriesProvider("netns") netns_desc = exp_desc.add_testbed_description(netns_provider) netns_desc.set_attribute_value("homeDirectory", self.root_dir) netns_desc.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON) netns_root_dir = os.path.join(self.root_dir, "netns") os.mkdir(netns_root_dir) netns_desc.set_attribute_value(DC.ROOT_DIRECTORY, netns_root_dir) netns_desc.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL) netns_desc.set_attribute_value(DC.USE_SUDO, True) return netns_desc
def testbed_from_data(self, experiment_description, guid, data): from nepi.core.design import FactoriesProvider (testbed_id, testbed_version) = data.get_testbed_data(guid) provider = FactoriesProvider(testbed_id) if provider.testbed_version != testbed_version: raise RuntimeError("Bad testbed version on testbed %s. Asked for %s, got %s" % \ (testbed_id, testbed_version, provider.testbed_version)) experiment_description.add_testbed_description(provider, guid) testbed_description = experiment_description.testbed_description(guid) self.graphical_info_from_data(testbed_description, data) self.attributes_from_data(testbed_description, data)
def create_slice(exp_desc, slicename, plc_host, pl_user, pl_pwd, pl_ssh_key, root_dir): pl_provider = FactoriesProvider("planetlab") slice_desc = exp_desc.add_testbed_description(pl_provider) slice_desc.set_attribute_value("homeDirectory", root_dir) slice_desc.set_attribute_value("slice", slicename) slice_desc.set_attribute_value("sliceSSHKey", pl_ssh_key) slice_desc.set_attribute_value("authUser", pl_user) slice_desc.set_attribute_value("authPass", pl_pwd) slice_desc.set_attribute_value("plcHost", plc_host) # Kills all running processes before starting the experiment slice_desc.set_attribute_value("cleanProc", True) # NOTICE: Setting 'cleanHome' to 'True' will erase all previous # folders in the sliver Home directory, including result files! slice_desc.set_attribute_value("cleanHome", True) slice_desc.set_attribute_value("plLogLevel", "DEBUG") return slice_desc
def make_testbed(self, exp_desc, testbed_id): provider = FactoriesProvider(testbed_id) desc = exp_desc.add_testbed_description(provider) desc.set_attribute_value("fake", True) node1 = desc.create("Node") node2 = desc.create("Node") iface1 = desc.create("Interface") iface1.set_attribute_value("fake", True) node1.connector("devs").connect(iface1.connector("node")) iface2 = desc.create("Interface") iface2.set_attribute_value("fake", True) node2.connector("devs").connect(iface2.connector("node")) iface1.connector("iface").connect(iface2.connector("iface")) app = desc.create("Application") app.connector("node").connect(node1.connector("apps")) app.enable_trace("fake") return exp_desc, desc, app, node1, node2, iface1, iface2
def make_experiment_desc(self): testbed_id = self.testbed_id slicename1 = self.slicename1 plchost1 = self.plchost1 slicename2 = self.slicename2 plchost2 = self.plchost2 pl_ssh_key = os.environ.get( "PL_SSH_KEY", "%s/.ssh/id_rsa_planetlab" % (os.environ['HOME'], )) pl_user, pl_pwd = test_util.pl_auth() exp_desc = ExperimentDescription() pl_provider = FactoriesProvider(testbed_id) pl_desc = exp_desc.add_testbed_description(pl_provider) pl_desc.set_attribute_value("homeDirectory", self.root_dir) pl_desc.set_attribute_value("slice", slicename1) pl_desc.set_attribute_value("sliceSSHKey", pl_ssh_key) pl_desc.set_attribute_value("authUser", pl_user) pl_desc.set_attribute_value("authPass", pl_pwd) pl_desc.set_attribute_value("plcHost", plchost1) pl_desc.set_attribute_value("tapPortBase", self.port_base) pl_desc.set_attribute_value( "p2pDeployment", False) # it's interactive, we don't want it in tests pl_desc.set_attribute_value("cleanProc", True) pl_desc2 = exp_desc.add_testbed_description(pl_provider) pl_desc2.set_attribute_value("homeDirectory", self.root_dir + "v2") pl_desc2.set_attribute_value("slice", slicename2) pl_desc2.set_attribute_value("sliceSSHKey", pl_ssh_key) pl_desc2.set_attribute_value("authUser", pl_user) pl_desc2.set_attribute_value("authPass", pl_pwd) pl_desc2.set_attribute_value("plcHost", plchost2) pl_desc2.set_attribute_value("tapPortBase", self.port_base + 500) pl_desc2.set_attribute_value( "p2pDeployment", False) # it's interactive, we don't want it in tests pl_desc2.set_attribute_value("cleanProc", True) return pl_desc, pl_desc2, exp_desc
def make_test_design(self): testbed_id = "planetlab" exp_desc = ExperimentDescription() provider = FactoriesProvider(testbed_id) tstbd_desc = exp_desc.add_testbed_description(provider) tstbd_desc.set_attribute_value("slice", "inria_nepi") node1 = tstbd_desc.create("Node") node2 = tstbd_desc.create("Node") iface1 = tstbd_desc.create("NodeInterface") node1.connector("devs").connect(iface1.connector("node")) iface2 = tstbd_desc.create("NodeInterface") node2.connector("devs").connect(iface2.connector("node")) switch = tstbd_desc.create("Internet") iface1.connector("inet").connect(switch.connector("devs")) iface2.connector("inet").connect(switch.connector("devs")) app = tstbd_desc.create("Application") app.set_attribute_value("command", "ping -qc10 10.0.0.2") app.connector("node").connect(node1.connector("apps")) return exp_desc, tstbd_desc, node1, node2, iface1, iface2, app
root_dir = tempfile.mkdtemp() netns_root_dir = os.path.join(root_dir, "netns") os.makedirs(netns_root_dir) user = getpass.getuser() slicename = os.environ["PL_SLICE"] plchost = "www.planet-lab.eu" port_base = 2000 + (os.getpid() % 1000) * 13 pl_ssh_key = os.environ.get( "PL_SSH_KEY", "%s/.ssh/id_rsa_planetlab" % (os.environ['HOME'], )) pl_user = os.environ.get('PL_USER') pl_pwd = os.environ.get('PL_PASS') exp_desc = ExperimentDescription() pl_provider = FactoriesProvider("planetlab") pl_desc = exp_desc.add_testbed_description(pl_provider) pl_desc.set_attribute_value("homeDirectory", root_dir) pl_desc.set_attribute_value("slice", slicename) pl_desc.set_attribute_value("sliceSSHKey", pl_ssh_key) pl_desc.set_attribute_value("authUser", pl_user) pl_desc.set_attribute_value("authPass", pl_pwd) pl_desc.set_attribute_value("plcHost", plchost) pl_desc.set_attribute_value("tapPortBase", port_base) pl_desc.set_attribute_value( "p2pDeployment", False) # it's interactive, we don't want it in tests pl_desc.set_attribute_value("cleanProc", True) pl_desc.set_attribute_value("plLogLevel", "DEBUG") pl_inet = pl_desc.create("Internet")
import tempfile import time root_dir = tempfile.mkdtemp() user = getpass.getuser() slicename = os.environ["PL_SLICE"] plchost = "www.planet-lab.eu" port_base = 2000 + (os.getpid() % 1000) * 13 pl_ssh_key = os.environ.get( "PL_SSH_KEY", "%s/.ssh/id_rsa_planetlab" % (os.environ['HOME'], )) pl_user = os.environ.get('PL_USER') pl_pwd = os.environ.get('PL_PASS') exp_desc = ExperimentDescription() pl_provider = FactoriesProvider("planetlab") pl_desc = exp_desc.add_testbed_description(pl_provider) pl_desc.set_attribute_value("homeDirectory", root_dir) pl_desc.set_attribute_value("slice", slicename) pl_desc.set_attribute_value("sliceSSHKey", pl_ssh_key) pl_desc.set_attribute_value("authUser", pl_user) pl_desc.set_attribute_value("authPass", pl_pwd) pl_desc.set_attribute_value("plcHost", plchost) pl_desc.set_attribute_value("tapPortBase", port_base) pl_desc.set_attribute_value( "p2pDeployment", False) # it's interactive, we don't want it in tests pl_desc.set_attribute_value("cleanProc", True) pl_desc.set_attribute_value("plLogLevel", "DEBUG") pl_inet = pl_desc.create("Internet")
phy = ns3_desc.create("ns3::YansWifiPhy") phy.set_attribute_value("Standard", "WIFI_PHY_STANDARD_80211b") dev.connector("phy").connect(phy.connector("dev")) channel.connector("phys").connect(phy.connector("chan")) error = ns3_desc.create("ns3::NistErrorRateModel") phy.connector("err").connect(error.connector("phy")) return dev root_dir = tempfile.mkdtemp() exp_desc = ExperimentDescription() testbed_id = "ns3" ns3_provider = FactoriesProvider(testbed_id) ns3_desc = exp_desc.add_testbed_description(ns3_provider) ns3_desc.set_attribute_value("homeDirectory", root_dir) #ns3_desc.set_attribute_value("SimulatorImplementationType", "ns3::RealtimeSimulatorImpl") #ns3_desc.set_attribute_value("ChecksumEnabled", True) # 0. Enable or disable CTS/RTS # ?? # 1 & 2 & 6. Create 3 nodes with their mobility models, and Install TCP/IP stack & assign IP addresses (node1, mob1) = create_node(ns3_desc) (node2, mob2) = create_node(ns3_desc) (node3, mob3) = create_node(ns3_desc) # 3. Create propagation loss matrix matrix = ns3_desc.create("ns3::MatrixPropagationLossModel")
from nepi.util import proxy from nepi.util.constants import DeploymentConfiguration as DC import getpass import tempfile import time import os user = getpass.getuser() root_dir = tempfile.mkdtemp() netns_dir = os.path.join(root_dir, "netns") daemon_dir = os.path.join(netns_dir, "daemon") os.makedirs(daemon_dir) exp_desc = ExperimentDescription() netns_provider = FactoriesProvider("netns") netns_desc = exp_desc.add_testbed_description(netns_provider) netns_desc.set_attribute_value("homeDirectory", netns_dir) #netns_desc.set_attribute_value("enableDebug", True) netns_desc.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON) netns_desc.set_attribute_value(DC.ROOT_DIRECTORY, daemon_dir) netns_desc.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL) netns_desc.set_attribute_value(DC.USE_SUDO, True) node1 = netns_desc.create("Node") node2 = netns_desc.create("Node") iface12 = netns_desc.create("P2PNodeInterface") iface12.set_attribute_value("up", True) node1.connector("devs").connect(iface12.connector("node"))
node.connector("protos").connect(arp.connector("node")) node.connector("protos").connect(icmp.connector("node")) node.connector("protos").connect(udp.connector("node")) return node user = getpass.getuser() root_dir = tempfile.mkdtemp() movie = "/home/alina/repos/nepi/big_buck_bunny_240p_mpeg4_lq.ts" bounds_width = bounds_height = 200 x = y = 100 speed = 1 exp_desc = ExperimentDescription() ns3_provider = FactoriesProvider("ns3") ns3_desc = exp_desc.add_testbed_description(ns3_provider) ns3_dir = tempfile.mkdtemp() ns3_desc.set_attribute_value("rootDirectory", ns3_dir) ns3_desc.set_attribute_value("SimulatorImplementationType", "ns3::RealtimeSimulatorImpl") ns3_desc.set_attribute_value("ChecksumEnabled", True) netns_provider = FactoriesProvider("netns") netns_desc1 = exp_desc.add_testbed_description(netns_provider) netns_dir1 = tempfile.mkdtemp() netns_desc1.set_attribute_value("rootDirectory", netns_dir1) netns_desc1.set_attribute_value("enableDebug", True) netns_desc1.set_attribute_value("useSudo", True) netns_desc1.set_attribute_value("deployment_communication", "LOCAL") netns_desc1.set_attribute_value("deployment_mode", "DAEMON")
def _test_if(self, daemonize_testbed, controller_access_configuration): exp_desc = ExperimentDescription() testbed_id = "ns3" ns3_provider = FactoriesProvider(testbed_id) ns3_desc = exp_desc.add_testbed_description(ns3_provider) ns3_desc.set_attribute_value("homeDirectory", self.root_dir) node1 = ns3_desc.create("ns3::Node") ipv41 = ns3_desc.create("ns3::Ipv4L3Protocol") arp1 = ns3_desc.create("ns3::ArpL3Protocol") icmp1 = ns3_desc.create("ns3::Icmpv4L4Protocol") node1.connector("protos").connect(ipv41.connector("node")) node1.connector("protos").connect(arp1.connector("node")) node1.connector("protos").connect(icmp1.connector("node")) iface1 = ns3_desc.create("ns3::PointToPointNetDevice") queue1 = ns3_desc.create("ns3::DropTailQueue") node1.connector("devs").connect(iface1.connector("node")) iface1.connector("queue").connect(queue1.connector("dev")) trace1 = iface1.enable_trace("P2PAsciiTrace") ip1 = iface1.add_address() ip1.set_attribute_value("Address", "10.0.0.1") node2 = ns3_desc.create("ns3::Node") ipv42 = ns3_desc.create("ns3::Ipv4L3Protocol") arp2 = ns3_desc.create("ns3::ArpL3Protocol") icmp2 = ns3_desc.create("ns3::Icmpv4L4Protocol") node2.connector("protos").connect(ipv42.connector("node")) node2.connector("protos").connect(arp2.connector("node")) node2.connector("protos").connect(icmp2.connector("node")) iface2 = ns3_desc.create("ns3::PointToPointNetDevice") queue2 = ns3_desc.create("ns3::DropTailQueue") node2.connector("devs").connect(iface2.connector("node")) iface2.connector("queue").connect(queue2.connector("dev")) trace2 = iface2.enable_trace("P2PAsciiTrace") ip2 = iface2.add_address() ip2.set_attribute_value("Address", "10.0.0.2") chan = ns3_desc.create("ns3::PointToPointChannel") iface1.connector("chan").connect(chan.connector("dev2")) iface2.connector("chan").connect(chan.connector("dev2")) app = ns3_desc.create("ns3::V4Ping") app.set_attribute_value("Remote", "10.0.0.2") app.set_attribute_value("StartTime", "0s") app.set_attribute_value("StopTime", "20s") app.connector("node").connect(node1.connector("apps")) if daemonize_testbed: ns3_desc.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON) inst_root_dir = os.path.join(self.root_dir, "instance") os.mkdir(inst_root_dir) ns3_desc.set_attribute_value(DC.ROOT_DIRECTORY, inst_root_dir) #ns3_desc.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL) xml = exp_desc.to_xml() if controller_access_configuration: controller = ExperimentController(xml, self.root_dir) else: controller = proxy.create_experiment_controller(xml, controller_access_configuration) try: controller.start() while not controller.is_finished(app.guid): time.sleep(0.5) ping_result = controller.trace(iface2.guid, "P2PAsciiTrace") comp_result = "- 19.021 /NodeList/1/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Dequeue ns3::PppHeader (Point-to-Point Protocol: IP (0x0021)) ns3::Ipv4Header (tos 0x0 DSCP Default ECN Not-ECT ttl 64 id 19 protocol 1 offset (bytes) 0 flags [none] length: 84 10.0.0.2 > 10.0.0.1) ns3::Icmpv4Header (type=0, code=0) ns3::Icmpv4Echo (identifier=0, sequence=19)" if ping_result.find(comp_result) == -1: self.fail("Unexpected trace: %s" % (ping_result,)) finally: controller.stop() controller.shutdown()
def _test_fd_net_device(self, daemonize_testbed, controller_access_configuration): testbed_id = "ns3" exp_desc = ExperimentDescription() ns3_provider = FactoriesProvider(testbed_id) ns3_desc1 = exp_desc.add_testbed_description(ns3_provider) root_dir1 = os.path.join(self.root_dir, "1") ns3_desc1.set_attribute_value("homeDirectory", root_dir1) ns3_desc1.set_attribute_value("SimulatorImplementationType", "ns3::RealtimeSimulatorImpl") ns3_desc1.set_attribute_value("ChecksumEnabled", True) ns3_desc2 = exp_desc.add_testbed_description(ns3_provider) root_dir2 = os.path.join(self.root_dir, "2") ns3_desc2.set_attribute_value("homeDirectory", root_dir2) ns3_desc2.set_attribute_value("SimulatorImplementationType", "ns3::RealtimeSimulatorImpl") ns3_desc2.set_attribute_value("ChecksumEnabled", True) node1 = ns3_desc1.create("ns3::Node") ipv41 = ns3_desc1.create("ns3::Ipv4L3Protocol") arp1 = ns3_desc1.create("ns3::ArpL3Protocol") icmp1 = ns3_desc1.create("ns3::Icmpv4L4Protocol") node1.connector("protos").connect(ipv41.connector("node")) node1.connector("protos").connect(arp1.connector("node")) node1.connector("protos").connect(icmp1.connector("node")) iface1 = ns3_desc1.create("ns3::FdNetDevice") node1.connector("devs").connect(iface1.connector("node")) ip1 = iface1.add_address() ip1.set_attribute_value("Address", "10.0.0.1") tc1 = ns3_desc1.create("ns3::Nepi::TunChannel") tc1.connector("fd->").connect(iface1.connector("->fd")) node2 = ns3_desc2.create("ns3::Node") ipv42 = ns3_desc2.create("ns3::Ipv4L3Protocol") arp2 = ns3_desc2.create("ns3::ArpL3Protocol") icmp2 = ns3_desc2.create("ns3::Icmpv4L4Protocol") node2.connector("protos").connect(ipv42.connector("node")) node2.connector("protos").connect(arp2.connector("node")) node2.connector("protos").connect(icmp2.connector("node")) iface2 = ns3_desc2.create("ns3::FdNetDevice") iface2.enable_trace("FdAsciiTrace") node2.connector("devs").connect(iface2.connector("node")) ip2 = iface2.add_address() ip2.set_attribute_value("Address", "10.0.0.2") tc2 = ns3_desc2.create("ns3::Nepi::TunChannel") tc2.connector("fd->").connect(iface2.connector("->fd")) tc2.connector("udp").connect(tc1.connector("udp")) app = ns3_desc1.create("ns3::V4Ping") app.set_attribute_value("Remote", "10.0.0.2") app.set_attribute_value("StartTime", "0s") app.set_attribute_value("StopTime", "2s") app.connector("node").connect(node1.connector("apps")) if daemonize_testbed: ns3_desc1.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON) inst_root_dir = os.path.join(root_dir1, "instance") os.makedirs(inst_root_dir) ns3_desc1.set_attribute_value(DC.ROOT_DIRECTORY, inst_root_dir) #ns3_desc1.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL) ns3_desc2.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON) inst_root_dir = os.path.join(root_dir2, "instance") os.makedirs(inst_root_dir) ns3_desc2.set_attribute_value(DC.ROOT_DIRECTORY, inst_root_dir) #ns3_desc2.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL) xml = exp_desc.to_xml() if controller_access_configuration: controller = ExperimentController(xml, self.root_dir) else: controller = proxy.create_experiment_controller(xml, controller_access_configuration) try: controller.start() while not controller.is_finished(app.guid): time.sleep(0.5) ping_result = controller.trace(iface2.guid, "FdAsciiTrace") ping_exp_result = r"""r [-+0-9.e]+ /NodeList/0/DeviceList/0/\$ns3::FdNetDevice/Rx Payload \(size=42\) r [-+0-9.e]+ /NodeList/0/DeviceList/0/\$ns3::FdNetDevice/Rx Payload \(size=98\) r [-+0-9.e]+ /NodeList/0/DeviceList/0/\$ns3::FdNetDevice/Rx Payload \(size=42\) r [-+0-9.e]+ /NodeList/0/DeviceList/0/\$ns3::FdNetDevice/Rx Payload \(size=98\) """ if not re.match(ping_exp_result, ping_result): self.fail("Unexpected trace: %s" % (ping_result,)) finally: controller.stop() controller.shutdown()