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_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_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_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_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 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)
netns_node = netns_desc.create("Node") netns_node.set_attribute_value("forward_X11", True) netns_tap = netns_desc.create("TunNodeInterface") netns_tap.set_attribute_value("up", True) netns_tap.set_attribute_value("mtu", 1448) netns_node.connector("devs").connect(netns_tap.connector("node")) netns_tunchannel = netns_desc.create("TunChannel") netns_tunchannel.connector("->fd").connect(netns_tap.connector("fd->")) pl_tap.connector("tcp").connect(netns_tunchannel.connector("tcp")) ip2 = netns_tap.add_address() ip2.set_attribute_value("Address", "192.168.3.2") ip2.set_attribute_value("NetPrefix", 30) app = netns_desc.create("Application") app.set_attribute_value("command", "xterm") app.set_attribute_value("user", user) app.connector("node").connect(netns_node.connector("apps")) xml = exp_desc.to_xml() controller = ExperimentController(xml, root_dir) controller.start() while not controller.is_finished(app.guid): time.sleep(0.5) controller.stop() controller.shutdown()
ip1.set_attribute_value("NetPrefix", 8) dev2 = create_wifi_device(ns3_desc, node2, channel) ip2 = dev2.add_address() ip2.set_attribute_value("Address", "10.0.0.2") ip2.set_attribute_value("NetPrefix", 8) dev3 = create_wifi_device(ns3_desc, node3, channel) ip3 = dev3.add_address() ip3.set_attribute_value("Address", "10.0.0.3") ip3.set_attribute_value("NetPrefix", 8) app = ns3_desc.create("ns3::V4Ping") app.set_attribute_value("Remote", "10.0.0.2") app.set_attribute_value("Verbose", True) app.set_attribute_value("StartTime", "0s") app.set_attribute_value("StopTime", "20s") app.connector("node").connect(node1.connector("apps")) xml = exp_desc.to_xml() controller = ExperimentController(xml, root_dir) controller.start() while not controller.is_finished(app.guid): time.sleep(0.5) 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()
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()