Uncommented node in examples/ccnx/planetlab_ccnx_unicast.py
[nepi.git] / examples / ns3_runtime_attribute_change.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 tempfile
14 import time
15
16 root_dir = tempfile.mkdtemp()
17
18 exp_desc = ExperimentDescription()
19
20 testbed_id = "ns3"
21 ns3_provider = FactoriesProvider(testbed_id)
22 ns3_desc = exp_desc.add_testbed_description(ns3_provider)
23 ns3_desc.set_attribute_value("homeDirectory", root_dir)
24 ns3_desc.set_attribute_value("SimulatorImplementationType", "ns3::RealtimeSimulatorImpl")
25 ns3_desc.set_attribute_value("ChecksumEnabled", True)
26
27 node1 = ns3_desc.create("ns3::Node")
28 ipv41 = ns3_desc.create("ns3::Ipv4L3Protocol")
29 arp1  = ns3_desc.create("ns3::ArpL3Protocol")
30 icmp1 = ns3_desc.create("ns3::Icmpv4L4Protocol")
31 node1.connector("protos").connect(ipv41.connector("node"))
32 node1.connector("protos").connect(arp1.connector("node"))
33 node1.connector("protos").connect(icmp1.connector("node"))
34 iface1 = ns3_desc.create("ns3::PointToPointNetDevice")
35 queue1 = ns3_desc.create("ns3::DropTailQueue")
36 node1.connector("devs").connect(iface1.connector("node"))
37 iface1.connector("queue").connect(queue1.connector("dev"))
38 trace1 = iface1.enable_trace("P2PAsciiTrace")
39 ip1 = iface1.add_address()
40 ip1.set_attribute_value("Address", "10.0.0.1")
41
42 node2 = ns3_desc.create("ns3::Node")
43 ipv42 = ns3_desc.create("ns3::Ipv4L3Protocol")
44 arp2  = ns3_desc.create("ns3::ArpL3Protocol")
45 icmp2 = ns3_desc.create("ns3::Icmpv4L4Protocol")
46 node2.connector("protos").connect(ipv42.connector("node"))
47 node2.connector("protos").connect(arp2.connector("node"))
48 node2.connector("protos").connect(icmp2.connector("node"))
49 iface2 = ns3_desc.create("ns3::PointToPointNetDevice")
50 queue2 = ns3_desc.create("ns3::DropTailQueue")
51 node2.connector("devs").connect(iface2.connector("node"))
52 iface2.connector("queue").connect(queue2.connector("dev"))
53 trace2 = iface2.enable_trace("P2PAsciiTrace")
54 ip2 = iface2.add_address()
55 ip2.set_attribute_value("Address", "10.0.0.2")
56
57 chan = ns3_desc.create("ns3::PointToPointChannel")
58 chan.set_attribute_value("Delay", "0ns")
59 iface1.connector("chan").connect(chan.connector("dev2"))
60 iface2.connector("chan").connect(chan.connector("dev2"))
61
62 app = ns3_desc.create("ns3::V4Ping")
63 app.set_attribute_value("Remote", "10.0.0.2")
64 app.set_attribute_value("Verbose", True)
65 app.set_attribute_value("StartTime", "0s")
66 app.set_attribute_value("StopTime", "20s")
67
68 app.connector("node").connect(node1.connector("apps"))
69
70 xml = exp_desc.to_xml()
71
72 controller = ExperimentController(xml, root_dir)
73 controller.start()
74
75 time.sleep(5)
76
77 controller.set(chan.guid, "Delay", "10s")
78
79 time.sleep(5)
80
81 controller.set(chan.guid, "Delay", "0s")
82
83 while not controller.is_finished(app.guid):
84     time.sleep(0.5)
85
86 controller.stop()
87 controller.shutdown()