2 # -*- coding: utf-8 -*-
11 from nepi.core.design import ExperimentDescription, FactoriesProvider
12 from nepi.core.execute import ExperimentController
13 from nepi.util import proxy
14 from nepi.util.constants import DeploymentConfiguration as DC
20 user = getpass.getuser()
21 root_dir = tempfile.mkdtemp()
22 netns_dir = os.path.join(root_dir, "netns")
23 daemon_dir = os.path.join(netns_dir, "daemon")
24 os.makedirs(daemon_dir)
27 exp_desc = ExperimentDescription()
29 netns_provider = FactoriesProvider("netns")
30 netns_desc = exp_desc.add_testbed_description(netns_provider)
31 netns_desc.set_attribute_value("homeDirectory", netns_dir)
32 #netns_desc.set_attribute_value("enableDebug", True)
33 netns_desc.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
34 netns_desc.set_attribute_value(DC.ROOT_DIRECTORY, daemon_dir)
35 netns_desc.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL)
36 netns_desc.set_attribute_value(DC.USE_SUDO, True)
38 node1 = netns_desc.create("Node")
39 node2 = netns_desc.create("Node")
41 iface12 = netns_desc.create("P2PNodeInterface")
42 iface12.set_attribute_value("up", True)
43 node1.connector("devs").connect(iface12.connector("node"))
45 iface21 = netns_desc.create("P2PNodeInterface")
46 iface21.set_attribute_value("up", True)
47 node2.connector("devs").connect(iface21.connector("node"))
49 iface12.connector("p2p").connect(iface21.connector("p2p"))
51 ip12 = iface12.add_address()
52 ip12.set_attribute_value("Address", "192.168.0.1")
53 ip12.set_attribute_value("NetPrefix", 30)
55 ip21 = iface21.add_address()
56 ip21.set_attribute_value("Address", "192.168.0.2")
57 ip21.set_attribute_value("NetPrefix", 30)
59 app1 = netns_desc.create("Application")
60 app1.set_attribute_value("command", "ping -qc 10 192.168.0.1")
61 app1.set_attribute_value("user", user)
62 app1.connector("node").connect(node1.connector("apps"))
64 app1.enable_trace("stdout")
66 xml = exp_desc.to_xml()
68 controller_access_config = proxy.AccessConfiguration()
69 controller_access_config.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
70 controller_access_config.set_attribute_value(DC.ROOT_DIRECTORY, root_dir)
71 controller_access_config.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL)
73 controller = proxy.create_experiment_controller(xml, controller_access_config)
76 while not controller.is_finished(app1.guid):
79 result = controller.trace(app1.guid, "stdout")