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 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 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_simple(self): exp_desc, tstbd_desc, node1, node2, iface1, iface2, app = self.make_test_design() 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_simple(self): exp_desc, tstbd_desc, node1, node2, iface1, iface2, app = self.make_test_design( ) 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 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 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_constrained(self): exp_desc, tstbd_desc, node1, node2, iface1, iface2, app = self.make_test_design() node1.set_attribute_value("hostname", "onelab*.inria.fr") node2.set_attribute_value("hostname", "onelab*.inria.fr") 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_constrained(self): exp_desc, tstbd_desc, node1, node2, iface1, iface2, app = self.make_test_design( ) node1.set_attribute_value("hostname", "onelab*.inria.fr") node2.set_attribute_value("hostname", "onelab*.inria.fr") 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_constrained2(self): exp_desc, tstbd_desc, node1, node2, iface1, iface2, app = self.make_test_design() node1.set_attribute_value("minReliability", 90.0) node1.set_attribute_value("operatingSystem", "f12") node2.set_attribute_value("minReliability", 50.0) node2.set_attribute_value("architecture", "x86_64") 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_design_constrained2(self): exp_desc, tstbd_desc, node1, node2, iface1, iface2, app = self.make_test_design( ) node1.set_attribute_value("minReliability", 90.0) node1.set_attribute_value("operatingSystem", "f12") node2.set_attribute_value("minReliability", 50.0) node2.set_attribute_value("architecture", "x86_64") 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_emulation(self): exp_desc, tstbd_desc, node1, node2, iface1, iface2, app = self.make_test_design() netpipe1 = tstbd_desc.create("NetPipe") netpipe1.set_attribute_value("mode","CLIENT") netpipe1.set_attribute_value("portList","80,443") netpipe1.set_attribute_value("bwIn",1.0) netpipe1.set_attribute_value("bwOut",128.0/1024.0) netpipe1.set_attribute_value("delayIn",12) netpipe1.set_attribute_value("delayOut",92) netpipe1.set_attribute_value("plrIn",0.05) netpipe1.set_attribute_value("plrOut",0.15) node1.connector("pipes").connect(netpipe1.connector("node")) 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 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 test_design_emulation(self): exp_desc, tstbd_desc, node1, node2, iface1, iface2, app = self.make_test_design( ) netpipe1 = tstbd_desc.create("NetPipe") netpipe1.set_attribute_value("mode", "CLIENT") netpipe1.set_attribute_value("portList", "80,443") netpipe1.set_attribute_value("bwIn", 1.0) netpipe1.set_attribute_value("bwOut", 128.0 / 1024.0) netpipe1.set_attribute_value("delayIn", 12) netpipe1.set_attribute_value("delayOut", 92) netpipe1.set_attribute_value("plrIn", 0.05) netpipe1.set_attribute_value("plrOut", 0.15) node1.connector("pipes").connect(netpipe1.connector("node")) xml = exp_desc.to_xml() exp_desc2 = ExperimentDescription() exp_desc2.from_xml(xml) xml2 = exp_desc2.to_xml() self.assertTrue(xml == xml2)
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
def make_cross_test_experiment(self): exp_desc = ExperimentDescription() testbed_id1 = "mock" testbed_id2 = "mock2" exp_desc, desc1, app1, node11, node12, iface11, iface12 = \ self.make_testbed(exp_desc, testbed_id1) exp_desc, desc2, app2, node21, node22, iface21, iface22 = \ self.make_testbed(exp_desc, testbed_id2) iface12.connector("cross").connect(iface21.connector("cross")) return exp_desc, desc1, desc2, iface12, iface21
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 create_ed(hostnames, vsys_vnet, slicename, plc_host, pl_user, pl_pwd, pl_ssh_key, port_base, root_dir, delay, port, proxy): # Create the experiment description object exp_desc = ExperimentDescription() # Create the slice description object slice_desc = create_slice_desc(slicename, plc_host, pl_user, pl_pwd, pl_ssh_key, port_base, root_dir, proxy, exp_desc) # Create the Internet box object pl_inet = slice_desc.create("Internet") # Create the Node boxes pl_nodes = dict() ccn_routes = dict() prev_hostname = None for hostname in hostnames: pl_node = create_node(hostname, pl_inet, slice_desc) pl_nodes[hostname] = pl_node ccn_routes[hostname] = list() if prev_hostname: ccn_routes[hostname].append(prev_hostname) ccn_routes[prev_hostname].append(hostname) prev_hostname = hostname for hostname in hostnames: pl_node = pl_nodes[hostname] routes = ccn_routes[hostname] create_ccnd(pl_node, port, routes, slice_desc) # Create a ccnsendchunks application box in the first node hostname = hostnames[0] pl_node = pl_nodes[hostname] pl_app = create_ccnsendchunks(pl_node, port, slice_desc) return exp_desc, pl_nodes, hostname, pl_app
import tempfile import time 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")
mac.set_attribute_value("Standard", "WIFI_PHY_STANDARD_80211b") mac.set_attribute_value("QosSupported", False) dev.connector("mac").connect(mac.connector("dev")) 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)
root_dir = tempfile.mkdtemp() (pl_slice, pl_host, pl_user, pl_pwd, pl_ssh_key, movie, results_dir, exp_label, time_to_run) = get_options() # list to store information on monitoring apps per node monitors = [] # Create the experiment description object exp_desc = ExperimentDescription() # Create slice slice_desc = create_slice(exp_desc, pl_slice, pl_host, pl_user, pl_pwd, pl_ssh_key, root_dir) # Create the Internet box object pl_inet = slice_desc.create("Internet") # Create root node hostname = "ple6.ipv6.lip6.fr" (root_node, root_iface) = create_node(hostname, pl_inet, slice_desc) # Create monitor info object for root node root_mon = MonitorInfo(hostname, MonitorInfo.TYPE_ROOT) monitors.append(root_mon)
import time 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")
def make_test_experiment(self): exp_desc = ExperimentDescription() testbed_id = "mock" return self.make_testbed(exp_desc, testbed_id)
def create_ed(hostnames, vsys_vnet, slicename, plc_host, pl_user, pl_pwd, pl_ssh_key, port_base, root_dir, port): # Create the experiment description object exp_desc = ExperimentDescription() # Create the slice description object slice_desc = create_slice_desc(slicename, plc_host, pl_user, pl_pwd, pl_ssh_key, port_base, root_dir, exp_desc) # Create the Internet box object pl_inet = slice_desc.create("Internet") # Create the Node boxes pl_nodes = dict() ccn_routes = dict() prev_hostname = None mport = port for hostname in hostnames: pl_node = create_node(hostname, pl_inet, slice_desc) pl_nodes[hostname] = pl_node ccn_routes[hostname] = list() if prev_hostname: ccn_routes[hostname].append((prev_hostname, mport)) ccn_routes[prev_hostname].append((hostname, mport)) mport = port if mport != port else port + 1 prev_hostname = hostname # Get the base network segment (slice vsys_vnet) to assign all the IP addresses # to the virtual interfaces base = ipaddr.IPNetwork(vsys_vnet) # Calculate the number of virtual networks required to connect all the nodes # with all other nodes as the binomial coeficient C(n, 2), with n = #nodes n = len(hostnames) c = n * (n - 1) / 2 # Validate that we can get 'c' /30 subnetworks if c > math.pow(2, (30 - base.prefixlen)): raise RuntimeError("Insufficient address segment %s for experiment", vsys_vnet) # Create the subnetwors iterator iter_sub = base.iter_subnets(new_prefix=30) # Create tunnels between nodes for i, node in enumerate(hostnames): peers = hostnames[i + 1:] for peer in peers: subnet = iter_sub.next() create_tunnel(node, peer, pl_nodes, slice_desc, subnet) # Create ccnd daemons in all nodes for hostname, pl_node in pl_nodes.iteritems(): routes = ccn_routes[hostname] create_ccnd(pl_node, port, hostname, routes, slice_desc) # Create a ccnsendchunks application box in the first node hostname = hostnames[0] pl_node = pl_nodes[hostname] pl_app = create_ccnsendchunks(pl_node, port, slice_desc) return exp_desc, pl_nodes, hostname, pl_app
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()
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()
icmp = ns3_desc.create("ns3::Icmpv4L4Protocol") udp = ns3_desc.create("ns3::UdpL4Protocol") node.connector("protos").connect(ipv4.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")