Clean up of repo
[nepi.git] / examples / netns_routing_experiment.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 #
5 # Experiment Topology:
6 #
7 #  n1 --- n2 --- n3
8 # 0.1  0.2  1.1  1.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 node2 = netns_desc.create("Node")
30 node3 = netns_desc.create("Node")
31
32 iface12 = netns_desc.create("P2PNodeInterface")
33 iface12.set_attribute_value("up", True)
34 node1.connector("devs").connect(iface12.connector("node"))
35
36 iface21 = netns_desc.create("P2PNodeInterface")
37 iface21.set_attribute_value("up", True)
38 node2.connector("devs").connect(iface21.connector("node"))
39
40 iface23 = netns_desc.create("P2PNodeInterface")
41 iface23.set_attribute_value("up", True)
42 node2.connector("devs").connect(iface23.connector("node"))
43
44 iface32 = netns_desc.create("P2PNodeInterface")
45 iface32.set_attribute_value("up", True)
46 node3.connector("devs").connect(iface32.connector("node"))
47
48 iface12.connector("p2p").connect(iface21.connector("p2p"))
49 iface23.connector("p2p").connect(iface32.connector("p2p"))
50
51 ip12 = iface12.add_address()
52 ip12.set_attribute_value("Address", "192.168.0.1")
53 ip12.set_attribute_value("NetPrefix", 30)
54
55 ip21 = iface21.add_address()
56 ip21.set_attribute_value("Address", "192.168.0.2")
57 ip21.set_attribute_value("NetPrefix", 30)
58
59 ip23 = iface23.add_address()
60 ip23.set_attribute_value("Address", "192.168.1.1")
61 ip23.set_attribute_value("NetPrefix", 30)
62
63 ip32 = iface32.add_address()
64 ip32.set_attribute_value("Address", "192.168.1.2")
65 ip32.set_attribute_value("NetPrefix", 30)
66
67 route1 = node1.add_route()
68 route1.set_attribute_value("Destination", "192.168.1.0")
69 route1.set_attribute_value("NetPrefix", 30)
70 route1.set_attribute_value("NextHop", "192.168.0.2")
71
72 route2 = node3.add_route()
73 route2.set_attribute_value("Destination", "192.168.0.0")
74 route2.set_attribute_value("NetPrefix", 30)
75 route2.set_attribute_value("NextHop", "192.168.1.1")
76
77 app1 = netns_desc.create("Application")
78 app1.set_attribute_value("command", "ping -qc 3 192.168.1.2")
79 app1.set_attribute_value("user", user)
80 app1.connector("node").connect(node1.connector("apps"))
81
82 app1.enable_trace("stdout")
83
84 app2 = netns_desc.create("Application")
85 app2.set_attribute_value("command", "ping -qc 3 192.168.0.1")
86 app2.set_attribute_value("user", user)
87 app2.connector("node").connect(node3.connector("apps"))
88
89 app2.enable_trace("stdout")
90
91 xml = exp_desc.to_xml()
92
93 controller = ExperimentController(xml, root_dir)
94 controller.start()
95 while not (controller.is_finished(app1.guid) and \
96         controller.is_finished(app2.guid)):
97     time.sleep(0.5)
98
99 result1 = controller.trace(app1.guid, "stdout")
100 result2 = controller.trace(app2.guid, "stdout")
101
102 controller.stop()
103 controller.shutdown()
104
105 print result1
106 print result2