3 # NEPI, a framework to manage network experiments
4 # Copyright (C) 2013 INRIA
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation, either version 3 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 # Author: Alina Quereilhac <alina.quereilhac@inria.fr>
29 # node n0 sends IGMP traffic to node n3
32 from nepi.execution.ec import ExperimentController
33 from nepi.execution.trace import TraceAttr
39 def add_ns3_node(ec, simu):
40 node = ec.register_resource("ns3::Node")
41 ec.register_connection(node, simu)
43 ipv4 = ec.register_resource("ns3::Ipv4L3Protocol")
44 ec.register_connection(node, ipv4)
46 arp = ec.register_resource("ns3::ArpL3Protocol")
47 ec.register_connection(node, arp)
49 icmp = ec.register_resource("ns3::Icmpv4L4Protocol")
50 ec.register_connection(node, icmp)
52 udp = ec.register_resource("ns3::UdpL4Protocol")
53 ec.register_connection(node, udp)
57 def add_point2point_device(ec, node, address = None, prefix = None):
58 dev = ec.register_resource("ns3::PointToPointNetDevice")
60 ec.set(dev, "ip", address)
62 ec.set(dev, "prefix", prefix)
63 ec.register_connection(node, dev)
65 queue = ec.register_resource("ns3::DropTailQueue")
66 ec.register_connection(dev, queue)
70 def add_csma_device(ec, node, address = None, prefix = None):
71 dev = ec.register_resource("ns3::CsmaNetDevice")
73 ec.set(dev, "ip", address)
75 ec.set(dev, "prefix", prefix)
76 ec.register_connection(node, dev)
78 queue = ec.register_resource("ns3::DropTailQueue")
79 ec.register_connection(dev, queue)
83 def add_wifi_device(ec, node, address = None, prefix = None,
84 access_point = False):
85 dev = ec.register_resource("ns3::WifiNetDevice")
87 ec.set(dev, "ip", address)
89 ec.set(dev, "prefix", prefix)
90 ec.register_connection(node, dev)
92 phy = ec.register_resource("ns3::YansWifiPhy")
93 ec.set(phy, "Standard", "WIFI_PHY_STANDARD_80211a")
94 ec.register_connection(dev, phy)
96 error = ec.register_resource("ns3::NistErrorRateModel")
97 ec.register_connection(phy, error)
99 manager = ec.register_resource("ns3::ArfWifiManager")
100 ec.register_connection(dev, manager)
103 mac = ec.register_resource("ns3::ApWifiMac")
105 mac = ec.register_resource("ns3::StaWifiMac")
107 ec.set(mac, "Standard", "WIFI_PHY_STANDARD_80211a")
108 ec.register_connection(dev, mac)
112 def add_random_mobility(ec, node, x, y, z, speed, bounds_width,
114 position = "%d:%d:%d" % (x, y, z)
115 bounds = "0|%d|0|%d" % (bounds_width, bounds_height)
116 speed = "ns3::UniformRandomVariable[Min=%d|Max=%s]" % (speed, speed)
117 pause = "ns3::ConstantRandomVariable[Constant=1.0]"
119 mobility = ec.register_resource("ns3::RandomDirection2dMobilityModel")
120 ec.set(mobility, "Position", position)
121 ec.set(mobility, "Bounds", bounds)
122 ec.set(mobility, "Speed", speed)
123 ec.set(mobility, "Pause", pause)
124 ec.register_connection(node, mobility)
127 def add_constant_mobility(ec, node, x, y, z):
128 mobility = ec.register_resource("ns3::ConstantPositionMobilityModel")
129 position = "%d:%d:%d" % (x, y, z)
130 ec.set(mobility, "Position", position)
131 ec.register_connection(node, mobility)
134 def add_wifi_channel(ec):
135 channel = ec.register_resource("ns3::YansWifiChannel")
136 delay = ec.register_resource("ns3::ConstantSpeedPropagationDelayModel")
137 ec.register_connection(channel, delay)
139 loss = ec.register_resource("ns3::LogDistancePropagationLossModel")
140 ec.register_connection(channel, loss)
144 class LinuxNS3ClientTest(unittest.TestCase):
146 #self.fedora_host = "nepi2.pl.sophia.inria.fr"
147 self.fedora_host = "planetlabpc1.upf.edu"
148 #self.fedora_host = "peeramide.irisa.fr"
149 self.fedora_user = "inria_nepi"
150 self.fedora_identity = "%s/.ssh/id_rsa_planetlab" % (os.environ['HOME'])
152 def test_local_p2p_ping(self):
153 ec = ExperimentController(exp_id = "test-ns3-local-p2p")
155 node = ec.register_resource("LinuxNode")
156 ec.set(node, "hostname", "localhost")
158 simu = ec.register_resource("LinuxNS3Simulation")
159 ec.set(simu, "verbose", True)
160 ec.register_connection(simu, node)
162 nsnode1 = add_ns3_node(ec, simu)
163 dev1 = add_point2point_device(ec, nsnode1, "10.0.0.1", "30")
165 nsnode2 = add_ns3_node(ec, simu)
166 dev2 = add_point2point_device(ec, nsnode2, "10.0.0.2", "30")
169 chan = ec.register_resource("ns3::PointToPointChannel")
170 ec.set(chan, "Delay", "0s")
171 ec.register_connection(chan, dev1)
172 ec.register_connection(chan, dev2)
175 ping = ec.register_resource("ns3::V4Ping")
176 ec.set (ping, "Remote", "10.0.0.2")
177 ec.set (ping, "Interval", "1s")
178 ec.set (ping, "Verbose", True)
179 ec.set (ping, "StartTime", "0s")
180 ec.set (ping, "StopTime", "20s")
181 ec.register_connection(ping, nsnode1)
185 ec.wait_finished([ping])
187 stdout = ec.trace(simu, "stdout")
189 expected = "20 packets transmitted, 20 received, 0% packet loss"
190 self.assertTrue(stdout.find(expected) > -1)
194 def test_simple_p2p_ping(self):
195 ec = ExperimentController(exp_id = "test-ns3-p2p-ping")
197 node = ec.register_resource("LinuxNode")
198 ec.set(node, "hostname", self.fedora_host)
199 ec.set(node, "username", self.fedora_user)
200 ec.set(node, "identity", self.fedora_identity)
201 ec.set(node, "cleanProcesses", True)
202 #ec.set(node, "cleanHome", True)
204 simu = ec.register_resource("LinuxNS3Simulation")
205 ec.set(simu, "verbose", True)
206 ec.register_connection(simu, node)
208 nsnode1 = add_ns3_node(ec, simu)
209 dev1 = add_point2point_device(ec, nsnode1, "10.0.0.1", "30")
211 nsnode2 = add_ns3_node(ec, simu)
212 dev2 = add_point2point_device(ec, nsnode2, "10.0.0.2", "30")
215 chan = ec.register_resource("ns3::PointToPointChannel")
216 ec.set(chan, "Delay", "0s")
217 ec.register_connection(chan, dev1)
218 ec.register_connection(chan, dev2)
221 ping = ec.register_resource("ns3::V4Ping")
222 ec.set (ping, "Remote", "10.0.0.2")
223 ec.set (ping, "Interval", "1s")
224 ec.set (ping, "Verbose", True)
225 ec.set (ping, "StartTime", "0s")
226 ec.set (ping, "StopTime", "20s")
227 ec.register_connection(ping, nsnode1)
231 ec.wait_finished([ping])
233 stdout = ec.trace(simu, "stdout")
235 expected = "20 packets transmitted, 20 received, 0% packet loss"
236 self.assertTrue(stdout.find(expected) > -1)
240 def test_simple_cmsa_ping(self):
241 ec = ExperimentController(exp_id = "test-ns3-csma-ping")
243 node = ec.register_resource("LinuxNode")
244 ec.set(node, "hostname", self.fedora_host)
245 ec.set(node, "username", self.fedora_user)
246 ec.set(node, "identity", self.fedora_identity)
247 ec.set(node, "cleanProcesses", True)
248 #ec.set(node, "cleanHome", True)
250 simu = ec.register_resource("LinuxNS3Simulation")
251 ec.set(simu, "verbose", True)
252 ec.register_connection(simu, node)
254 nsnode1 = add_ns3_node(ec, simu)
255 dev1 = add_csma_device(ec, nsnode1, "10.0.0.1", "30")
257 nsnode2 = add_ns3_node(ec, simu)
258 dev2 = add_csma_device(ec, nsnode2, "10.0.0.2", "30")
261 chan = ec.register_resource("ns3::CsmaChannel")
262 ec.set(chan, "Delay", "0s")
263 ec.register_connection(chan, dev1)
264 ec.register_connection(chan, dev2)
267 ping = ec.register_resource("ns3::V4Ping")
268 ec.set (ping, "Remote", "10.0.0.2")
269 ec.set (ping, "Interval", "1s")
270 ec.set (ping, "Verbose", True)
271 ec.set (ping, "StartTime", "0s")
272 ec.set (ping, "StopTime", "20s")
273 ec.register_connection(ping, nsnode1)
277 ec.wait_finished([ping])
279 stdout = ec.trace(simu, "stdout")
281 expected = "20 packets transmitted, 20 received, 0% packet loss"
282 self.assertTrue(stdout.find(expected) > -1)
286 def test_compile_local_source(self):
287 ec = ExperimentController(exp_id = "test-ns3-local-source")
289 node = ec.register_resource("LinuxNode")
290 ec.set(node, "hostname", self.fedora_host)
291 ec.set(node, "username", self.fedora_user)
292 ec.set(node, "identity", self.fedora_identity)
293 ec.set(node, "cleanProcesses", True)
294 #ec.set(node, "cleanHome", True)
296 simu = ec.register_resource("LinuxNS3Simulation")
297 ec.set(simu, "verbose", True)
298 sources = os.path.join(os.path.dirname(os.path.realpath(__file__)),
299 "ns-3.18-user.tar.gz")
300 ec.set(simu, "sources", sources)
301 ec.register_connection(simu, node)
303 nsnode1 = add_ns3_node(ec, simu)
304 dev1 = add_csma_device(ec, nsnode1, "10.0.0.1", "30")
306 nsnode2 = add_ns3_node(ec, simu)
307 dev2 = add_csma_device(ec, nsnode2, "10.0.0.2", "30")
310 chan = ec.register_resource("ns3::CsmaChannel")
311 ec.set(chan, "Delay", "0s")
312 ec.register_connection(chan, dev1)
313 ec.register_connection(chan, dev2)
316 ping = ec.register_resource("ns3::V4Ping")
317 ec.set (ping, "Remote", "10.0.0.2")
318 ec.set (ping, "Interval", "1s")
319 ec.set (ping, "Verbose", True)
320 ec.set (ping, "StartTime", "0s")
321 ec.set (ping, "StopTime", "20s")
322 ec.register_connection(ping, nsnode1)
326 ec.wait_finished([ping])
328 stdout = ec.trace(simu, "stdout")
330 expected = "20 packets transmitted, 20 received, 0% packet loss"
331 self.assertTrue(stdout.find(expected) > -1)
335 def test_compile_debug_mode(self):
336 ec = ExperimentController(exp_id = "test-ns3-debug-mode")
338 node = ec.register_resource("LinuxNode")
339 ec.set(node, "hostname", self.fedora_host)
340 ec.set(node, "username", self.fedora_user)
341 ec.set(node, "identity", self.fedora_identity)
342 ec.set(node, "cleanProcesses", True)
343 #ec.set(node, "cleanHome", True)
345 simu = ec.register_resource("LinuxNS3Simulation")
346 ec.set(simu, "verbose", True)
347 ec.set(simu, "nsLog", "V4Ping:Node")
348 ec.set(simu, "buildMode", "debug")
349 ec.register_connection(simu, node)
351 nsnode1 = add_ns3_node(ec, simu)
352 dev1 = add_csma_device(ec, nsnode1, "10.0.0.1", "30")
354 nsnode2 = add_ns3_node(ec, simu)
355 dev2 = add_csma_device(ec, nsnode2, "10.0.0.2", "30")
358 chan = ec.register_resource("ns3::CsmaChannel")
359 ec.set(chan, "Delay", "0s")
360 ec.register_connection(chan, dev1)
361 ec.register_connection(chan, dev2)
364 ping = ec.register_resource("ns3::V4Ping")
365 ec.set (ping, "Remote", "10.0.0.2")
366 ec.set (ping, "Interval", "1s")
367 ec.set (ping, "Verbose", True)
368 ec.set (ping, "StartTime", "0s")
369 ec.set (ping, "StopTime", "20s")
370 ec.register_connection(ping, nsnode1)
374 ec.wait_finished([ping])
376 stdout = ec.trace(simu, "stdout")
378 expected = "20 packets transmitted, 20 received, 0% packet loss"
379 self.assertTrue(stdout.find(expected) > -1)
381 stderr = ec.trace(simu, "stderr")
382 expected = "V4Ping:Read32"
383 self.assertTrue(stderr.find(expected) > -1)
387 def test_real_time(self):
388 ec = ExperimentController(exp_id = "test-ns3-real-time")
390 node = ec.register_resource("LinuxNode")
391 ec.set(node, "hostname", self.fedora_host)
392 ec.set(node, "username", self.fedora_user)
393 ec.set(node, "identity", self.fedora_identity)
394 ec.set(node, "cleanProcesses", True)
395 #ec.set(node, "cleanHome", True)
397 simu = ec.register_resource("LinuxNS3Simulation")
398 ec.set(simu, "simulatorImplementationType", "ns3::RealtimeSimulatorImpl")
399 ec.set(simu, "checksumEnabled", True)
400 ec.set(simu, "verbose", True)
401 ec.register_connection(simu, node)
403 nsnode1 = add_ns3_node(ec, simu)
404 dev1 = add_point2point_device(ec, nsnode1, "10.0.0.1", "30")
406 nsnode2 = add_ns3_node(ec, simu)
407 dev2 = add_point2point_device(ec, nsnode2, "10.0.0.2", "30")
410 chan = ec.register_resource("ns3::PointToPointChannel")
411 ec.set(chan, "Delay", "0s")
412 ec.register_connection(chan, dev1)
413 ec.register_connection(chan, dev2)
416 ping = ec.register_resource("ns3::V4Ping")
417 ec.set (ping, "Remote", "10.0.0.2")
418 ec.set (ping, "Interval", "1s")
419 ec.set (ping, "Verbose", True)
420 ec.set (ping, "StartTime", "0s")
421 ec.set (ping, "StopTime", "20s")
422 ec.register_connection(ping, nsnode1)
426 ec.wait_finished([ping])
428 stdout = ec.trace(simu, "stdout")
430 expected = "20 packets transmitted, 20 received, 0% packet loss"
431 self.assertTrue(stdout.find(expected) > -1)
433 rm = ec.get_resource(ping)
434 start_time = rm.start_time
435 stop_time = rm.stop_time
436 delta = stop_time - start_time
438 self.assertTrue(delta.seconds >= 20, "Time elapsed %d" % delta.seconds)
439 self.assertTrue(delta.seconds < 25, "Time elapsed %d" % delta.seconds)
443 def test_traces(self):
444 ec = ExperimentController(exp_id = "test-ns3-traces")
446 node = ec.register_resource("LinuxNode")
447 ec.set(node, "hostname", self.fedora_host)
448 ec.set(node, "username", self.fedora_user)
449 ec.set(node, "identity", self.fedora_identity)
450 ec.set(node, "cleanProcesses", True)
451 #ec.set(node, "cleanHome", True)
453 simu = ec.register_resource("LinuxNS3Simulation")
454 ec.set(simu, "verbose", True)
455 ec.register_connection(simu, node)
457 nsnode1 = add_ns3_node(ec, simu)
458 dev1 = add_point2point_device(ec, nsnode1, "10.0.0.1", "30")
460 nsnode2 = add_ns3_node(ec, simu)
461 dev2 = add_point2point_device(ec, nsnode2, "10.0.0.2", "30")
464 chan = ec.register_resource("ns3::PointToPointChannel")
465 ec.set(chan, "Delay", "0s")
466 ec.register_connection(chan, dev1)
467 ec.register_connection(chan, dev2)
470 ping = ec.register_resource("ns3::V4Ping")
471 ec.set (ping, "Remote", "10.0.0.2")
472 ec.set (ping, "Interval", "1s")
473 ec.set (ping, "Verbose", True)
474 ec.set (ping, "StartTime", "0s")
475 ec.set (ping, "StopTime", "20s")
476 ec.register_connection(ping, nsnode1)
479 ec.enable_trace(dev1, "pcap")
480 ec.enable_trace(dev1, "promiscPcap")
481 ec.enable_trace(dev1, "ascii")
483 ec.enable_trace(dev2, "pcap")
484 ec.enable_trace(dev2, "promiscPcap")
485 ec.enable_trace(dev2, "ascii")
489 ec.wait_finished([ping])
492 rm_simu = ec.get_resource(simu)
494 # TODO: Fix this in ns-3: pcap traces do not flush until the Simulator
495 # process is ended, so we can't get the traces of the 'pcap' and
496 # 'promiscPcap' traces.
498 #for trace in ["pcap", "promiscPcap", "ascii"]:
499 for trace in ["ascii"]:
500 for guid in [dev1, dev2]:
501 output = ec.trace(guid, trace)
503 size = ec.trace(guid, trace, attr = TraceAttr.SIZE)
504 self.assertEquals(size, len(output))
505 self.assertTrue(size > 100)
507 block = ec.trace(guid, trace, attr = TraceAttr.STREAM, block = 5, offset = 1)
508 self.assertEquals(block, output[5:10])
510 trace_path = ec.trace(guid, trace, attr = TraceAttr.PATH)
511 rm = ec.get_resource(guid)
512 path = os.path.join(rm_simu.run_home, rm._trace_filename.get(trace))
513 self.assertEquals(trace_path, path)
517 def test_simple_wifi_ping(self):
518 bounds_width = bounds_height = 200
522 ec = ExperimentController(exp_id = "test-ns3-wifi-ping")
524 node = ec.register_resource("LinuxNode")
525 ec.set(node, "hostname", self.fedora_host)
526 ec.set(node, "username", self.fedora_user)
527 ec.set(node, "identity", self.fedora_identity)
528 ec.set(node, "cleanProcesses", True)
529 #ec.set(node, "cleanHome", True)
531 simu = ec.register_resource("LinuxNS3Simulation")
532 ec.set(simu, "verbose", True)
533 ec.register_connection(simu, node)
535 nsnode1 = add_ns3_node(ec, simu)
536 dev1, phy1 = add_wifi_device(ec, nsnode1, "10.0.0.1", "24", access_point = True)
537 mobility1 = add_constant_mobility(ec, nsnode1, x, y, 0)
539 nsnode2 = add_ns3_node(ec, simu)
540 dev2, phy2 = add_wifi_device(ec, nsnode2, "10.0.0.2", "24", access_point = False)
541 mobility1 = add_constant_mobility(ec, nsnode2, x, y, 0)
542 #mobility2 = add_random_mobility(ec, nsnode2, x, y, 0, speed, bounds_width, bounds_height)
545 chan = add_wifi_channel(ec)
546 ec.register_connection(chan, phy1)
547 ec.register_connection(chan, phy2)
550 ping = ec.register_resource("ns3::V4Ping")
551 ec.set (ping, "Remote", "10.0.0.1")
552 ec.set (ping, "Interval", "1s")
553 ec.set (ping, "Verbose", True)
554 ec.set (ping, "StartTime", "1s")
555 ec.set (ping, "StopTime", "21s")
556 ec.register_connection(ping, nsnode2)
560 ec.wait_finished([ping])
562 stdout = ec.trace(simu, "stdout")
564 expected = "20 packets transmitted, 20 received, 0% packet loss"
565 self.assertTrue(stdout.find(expected) > -1)
569 def test_routing(self):
574 n1 -- p2p -- n2 -- csma -- n5 -- p2p -- n6
580 ec = ExperimentController(exp_id = "test-ns3-routes")
582 node = ec.register_resource("LinuxNode")
583 ec.set(node, "hostname", self.fedora_host)
584 ec.set(node, "username", self.fedora_user)
585 ec.set(node, "identity", self.fedora_identity)
586 ec.set(node, "cleanProcesses", True)
587 #ec.set(node, "cleanHome", True)
589 simu = ec.register_resource("LinuxNS3Simulation")
590 ec.set(simu, "verbose", True)
591 ec.register_connection(simu, node)
593 nsnode1 = add_ns3_node(ec, simu)
594 p2p12 = add_point2point_device(ec, nsnode1, "10.0.0.1", "30")
596 nsnode2 = add_ns3_node(ec, simu)
597 p2p21 = add_point2point_device(ec, nsnode2, "10.0.0.2", "30")
598 csma2 = add_csma_device(ec, nsnode2, "10.0.1.1", "24")
600 nsnode3 = add_ns3_node(ec, simu)
601 csma3 = add_csma_device(ec, nsnode3, "10.0.1.2", "24")
603 nsnode4 = add_ns3_node(ec, simu)
604 csma4 = add_csma_device(ec, nsnode4, "10.0.1.3", "24")
606 nsnode5 = add_ns3_node(ec, simu)
607 p2p56 = add_point2point_device(ec, nsnode5, "10.0.2.1", "30")
608 csma5 = add_csma_device(ec, nsnode5, "10.0.1.4", "24")
610 nsnode6 = add_ns3_node(ec, simu)
611 p2p65 = add_point2point_device(ec, nsnode6, "10.0.2.2", "30")
614 p2p_chan1 = ec.register_resource("ns3::PointToPointChannel")
615 ec.set(p2p_chan1, "Delay", "0s")
616 ec.register_connection(p2p_chan1, p2p12)
617 ec.register_connection(p2p_chan1, p2p21)
620 csma_chan = ec.register_resource("ns3::CsmaChannel")
621 ec.set(csma_chan, "Delay", "0s")
622 ec.register_connection(csma_chan, csma2)
623 ec.register_connection(csma_chan, csma3)
624 ec.register_connection(csma_chan, csma4)
625 ec.register_connection(csma_chan, csma5)
628 p2p_chan2 = ec.register_resource("ns3::PointToPointChannel")
629 ec.set(p2p_chan2, "Delay", "0s")
630 ec.register_connection(p2p_chan2, p2p56)
631 ec.register_connection(p2p_chan2, p2p65)
633 # Add routes - n1 - n6
634 r1 = ec.register_resource("ns3::Route")
635 ec.set(r1, "network", "10.0.2.0")
636 ec.set(r1, "prefix", "30")
637 ec.set(r1, "nexthop", "10.0.0.2")
638 ec.register_connection(r1, nsnode1)
640 # Add routes - n2 - n6
641 r2 = ec.register_resource("ns3::Route")
642 ec.set(r2, "network", "10.0.2.0")
643 ec.set(r2, "prefix", "30")
644 ec.set(r2, "nexthop", "10.0.1.4")
645 ec.register_connection(r2, nsnode2)
647 # Add routes - n5 - n1
648 r5 = ec.register_resource("ns3::Route")
649 ec.set(r5, "network", "10.0.0.0")
650 ec.set(r5, "prefix", "30")
651 ec.set(r5, "nexthop", "10.0.1.1")
652 ec.register_connection(r5, nsnode5)
654 # Add routes - n6 - n1
655 r6 = ec.register_resource("ns3::Route")
656 ec.set(r6, "network", "10.0.0.0")
657 ec.set(r6, "prefix", "30")
658 ec.set(r6, "nexthop", "10.0.2.1")
659 ec.register_connection(r6, nsnode6)
662 ping = ec.register_resource("ns3::V4Ping")
663 ec.set (ping, "Remote", "10.0.2.2")
664 ec.set (ping, "Interval", "1s")
665 ec.set (ping, "Verbose", True)
666 ec.set (ping, "StartTime", "1s")
667 ec.set (ping, "StopTime", "21s")
668 ec.register_connection(ping, nsnode1)
672 ec.wait_finished([ping])
674 stdout = ec.trace(simu, "stdout")
676 expected = "20 packets transmitted, 20 received, 0% packet loss"
677 self.assertTrue(stdout.find(expected) > -1)
681 def ztest_automatic_routing(self):
686 n1 -- p2p -- n2 -- csma -- n5 -- p2p -- n6
692 ec = ExperimentController(exp_id = "test-ns3-dce")
694 node = ec.register_resource("LinuxNode")
695 ec.set(node, "hostname", self.fedora_host)
696 ec.set(node, "username", self.fedora_user)
697 ec.set(node, "identity", self.fedora_identity)
698 ec.set(node, "cleanProcesses", True)
699 #ec.set(node, "cleanHome", True)
701 simu = ec.register_resource("LinuxNS3Simulation")
702 ec.set(simu, "verbose", True)
703 ec.set(simu, "populateRoutingTables", True)
704 ec.register_connection(simu, node)
706 nsnode1 = add_ns3_node(ec, simu)
707 p2p12 = add_point2point_device(ec, nsnode1, "10.0.0.1", "30")
709 nsnode2 = add_ns3_node(ec, simu)
710 p2p21 = add_point2point_device(ec, nsnode2, "10.0.0.2", "30")
711 csma2 = add_csma_device(ec, nsnode2, "10.0.1.1", "24")
713 nsnode3 = add_ns3_node(ec, simu)
714 csma3 = add_csma_device(ec, nsnode3, "10.0.1.2", "24")
716 nsnode4 = add_ns3_node(ec, simu)
717 csma4 = add_csma_device(ec, nsnode4, "10.0.1.3", "24")
719 nsnode5 = add_ns3_node(ec, simu)
720 p2p56 = add_point2point_device(ec, nsnode5, "10.0.2.1", "30")
721 csma5 = add_csma_device(ec, nsnode5, "10.0.1.4", "24")
723 nsnode6 = add_ns3_node(ec, simu)
724 p2p65 = add_point2point_device(ec, nsnode6, "10.0.2.2", "30")
727 p2p_chan1 = ec.register_resource("ns3::PointToPointChannel")
728 ec.set(p2p_chan1, "Delay", "0s")
729 ec.register_connection(p2p_chan1, p2p12)
730 ec.register_connection(p2p_chan1, p2p21)
733 csma_chan = ec.register_resource("ns3::CsmaChannel")
734 ec.set(csma_chan, "Delay", "0s")
735 ec.register_connection(csma_chan, csma2)
736 ec.register_connection(csma_chan, csma3)
737 ec.register_connection(csma_chan, csma4)
738 ec.register_connection(csma_chan, csma5)
741 p2p_chan2 = ec.register_resource("ns3::PointToPointChannel")
742 ec.set(p2p_chan2, "Delay", "0s")
743 ec.register_connection(p2p_chan2, p2p56)
744 ec.register_connection(p2p_chan2, p2p65)
747 ping = ec.register_resource("ns3::V4Ping")
748 ec.set (ping, "Remote", "10.0.1.2")
749 ec.set (ping, "Interval", "1s")
750 ec.set (ping, "Verbose", True)
751 ec.set (ping, "StartTime", "1s")
752 ec.set (ping, "StopTime", "21s")
753 ec.register_connection(ping, nsnode1)
757 ec.wait_finished([ping])
759 stdout = ec.trace(simu, "stdout")
763 expected = "20 packets transmitted, 20 received, 0% packet loss"
764 self.assertTrue(stdout.find(expected) > -1)
769 ec = ExperimentController(exp_id = "test-ns3-dce")
771 node = ec.register_resource("LinuxNode")
772 ec.set(node, "hostname", self.fedora_host)
773 ec.set(node, "username", self.fedora_user)
774 ec.set(node, "identity", self.fedora_identity)
775 ec.set(node, "cleanProcesses", True)
776 #ec.set(node, "cleanHome", True)
778 simu = ec.register_resource("LinuxNS3Simulation")
779 ec.set(simu, "verbose", True)
780 ec.set(simu, "enableDCE", True)
781 ec.set(simu, "buildMode", "debug")
782 ec.set(simu, "nsLog", "DceApplication")
783 ec.register_connection(simu, node)
785 nsnode1 = add_ns3_node(ec, simu)
786 ec.set(nsnode1, "enableDCE", True)
787 p2p1 = add_point2point_device(ec, nsnode1, "10.0.0.1", "30")
788 ec.set(p2p1, "DataRate", "5Mbps")
790 nsnode2 = add_ns3_node(ec, simu)
791 ec.set(nsnode2, "enableDCE", True)
792 p2p2 = add_point2point_device(ec, nsnode2, "10.0.0.2", "30")
793 ec.set(p2p2, "DataRate", "5Mbps")
796 chan = ec.register_resource("ns3::PointToPointChannel")
797 ec.set(chan, "Delay", "2ms")
799 ec.register_connection(chan, p2p1)
800 ec.register_connection(chan, p2p2)
802 ### create applications
803 udp_perf = ec.register_resource("ns3::DceApplication")
804 ec.set (udp_perf, "binary", "udp-perf")
805 ec.set (udp_perf, "stackSize", 1<<20)
806 ec.set (udp_perf, "arguments", "--duration=10;--nodes=2")
807 ec.set (udp_perf, "StartTime", "1s")
808 ec.set (udp_perf, "StopTime", "20s")
809 ec.register_connection(udp_perf, nsnode1)
811 udp_perf_client = ec.register_resource("ns3::DceApplication")
812 ec.set (udp_perf_client, "binary", "udp-perf")
813 ec.set (udp_perf_client, "stackSize", 1<<20)
814 ec.set (udp_perf_client, "arguments", "--client;--nodes=2;--host=10.0.0.1;--duration=10")
815 ec.set (udp_perf_client, "StartTime", "2s")
816 ec.set (udp_perf_client, "StopTime", "20s")
817 ec.register_connection(udp_perf_client, nsnode2)
821 ec.wait_finished([udp_perf_client])
823 stderr = ec.trace(simu, "stderr")
825 expected = "DceApplication:StartApplication"
826 self.assertTrue(stderr.find(expected) > -1)
831 if __name__ == '__main__':