コード例 #1
0
ファイル: design.py プロジェクト: nfvproject/nepi
 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)
コード例 #2
0
    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)
コード例 #3
0
ファイル: design.py プロジェクト: nfvproject/nepi
    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)
コード例 #4
0
ファイル: design.py プロジェクト: nfvproject/nepi
    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)
コード例 #5
0
ファイル: design.py プロジェクト: nfvproject/nepi
    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)
コード例 #6
0
    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)
コード例 #7
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    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()
コード例 #8
0
ファイル: design.py プロジェクト: nfvproject/nepi
    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)
コード例 #9
0
    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)
コード例 #10
0
ファイル: design.py プロジェクト: nfvproject/nepi
    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)
コード例 #11
0
    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)
コード例 #12
0
ファイル: design.py プロジェクト: nfvproject/nepi
    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)
コード例 #13
0
    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)
コード例 #14
0
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()
コード例 #15
0
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()
コード例 #16
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    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()
コード例 #17
0
ファイル: integration.py プロジェクト: nfvproject/nepi
    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()