Adding baskend for OMF
[nepi.git] / examples / netns_xterm_experiment.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 #
5 # Experiment Topology:
6 #
7 #  n1 --- n2
8 #  0.1   0.2 
9 #    
10
11 from nepi.core.design import ExperimentDescription, FactoriesProvider
12 from nepi.core.execute import ExperimentController
13 import getpass
14 import tempfile
15 import time
16
17 user = getpass.getuser()
18 root_dir = tempfile.mkdtemp()
19
20 exp_desc = ExperimentDescription()
21
22 testbed_id = "netns"
23 netns_provider = FactoriesProvider(testbed_id)
24 netns_desc = exp_desc.add_testbed_description(netns_provider)
25 netns_desc.set_attribute_value("homeDirectory", root_dir)
26 #netns_desc.set_attribute_value("enableDebug", True)
27
28 node1 = netns_desc.create("Node")
29 node1.set_attribute_value("forward_X11", True)
30 node2 = netns_desc.create("Node")
31 node2.set_attribute_value("forward_X11", True)
32
33 iface12 = netns_desc.create("P2PNodeInterface")
34 iface12.set_attribute_value("up", True)
35 node1.connector("devs").connect(iface12.connector("node"))
36
37 iface21 = netns_desc.create("P2PNodeInterface")
38 iface21.set_attribute_value("up", True)
39 node2.connector("devs").connect(iface21.connector("node"))
40
41 iface12.connector("p2p").connect(iface21.connector("p2p"))
42
43 ip12 = iface12.add_address()
44 ip12.set_attribute_value("Address", "192.168.0.1")
45 ip12.set_attribute_value("NetPrefix", 30)
46
47 ip21 = iface21.add_address()
48 ip21.set_attribute_value("Address", "192.168.0.2")
49 ip21.set_attribute_value("NetPrefix", 30)
50
51 app1 = netns_desc.create("Application")
52 app1.set_attribute_value("command", "xterm")
53 app1.set_attribute_value("user", user)
54 app1.connector("node").connect(node1.connector("apps"))
55
56 app2 = netns_desc.create("Application")
57 app2.set_attribute_value("command", "xterm")
58 app2.set_attribute_value("user", user)
59 app2.connector("node").connect(node2.connector("apps"))
60
61 xml = exp_desc.to_xml()
62
63 controller = ExperimentController(xml, root_dir)
64 controller.start()
65 while not (controller.is_finished(app1.guid) and \
66         controller.is_finished(app2.guid)):
67     time.sleep(0.5)
68
69 controller.stop()
70 controller.shutdown()