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)
54 def add_point2point_device(ec, node, address = None, prefix = None):
55 dev = ec.register_resource("ns3::PointToPointNetDevice")
57 ec.set(dev, "ip", address)
59 ec.set(dev, "prefix", prefix)
60 ec.register_connection(node, dev)
62 queue = ec.register_resource("ns3::DropTailQueue")
63 ec.register_connection(dev, queue)
67 def add_csma_device(ec, node, address = None, prefix = None):
68 dev = ec.register_resource("ns3::CsmaNetDevice")
70 ec.set(dev, "ip", address)
72 ec.set(dev, "prefix", prefix)
73 ec.register_connection(node, dev)
75 queue = ec.register_resource("ns3::DropTailQueue")
76 ec.register_connection(dev, queue)
80 def add_wifi_device(ec, node, address = None, prefix = None,
81 access_point = False):
82 dev = ec.register_resource("ns3::WifiNetDevice")
84 ec.set(dev, "ip", address)
86 ec.set(dev, "prefix", prefix)
87 ec.register_connection(node, dev)
89 phy = ec.register_resource("ns3::YansWifiPhy")
90 ec.set(phy, "Standard", "WIFI_PHY_STANDARD_80211a")
91 ec.register_connection(dev, phy)
93 error = ec.register_resource("ns3::NistErrorRateModel")
94 ec.register_connection(phy, error)
96 manager = ec.register_resource("ns3::ArfWifiManager")
97 ec.register_connection(dev, manager)
100 mac = ec.register_resource("ns3::ApWifiMac")
102 mac = ec.register_resource("ns3::StaWifiMac")
104 ec.set(mac, "Standard", "WIFI_PHY_STANDARD_80211a")
105 ec.register_connection(dev, mac)
109 def add_random_mobility(ec, node, x, y, z, speed, bounds_width,
111 position = "%d:%d:%d" % (x, y, z)
112 bounds = "0|%d|0|%d" % (bounds_width, bounds_height)
113 speed = "ns3::UniformRandomVariable[Min=%d|Max=%s]" % (speed, speed)
114 pause = "ns3::ConstantRandomVariable[Constant=1.0]"
116 mobility = ec.register_resource("ns3::RandomDirection2dMobilityModel")
117 ec.set(mobility, "Position", position)
118 ec.set(mobility, "Bounds", bounds)
119 ec.set(mobility, "Speed", speed)
120 ec.set(mobility, "Pause", pause)
121 ec.register_connection(node, mobility)
124 def add_constant_mobility(ec, node, x, y, z):
125 mobility = ec.register_resource("ns3::ConstantPositionMobilityModel")
126 position = "%d:%d:%d" % (x, y, z)
127 ec.set(mobility, "Position", position)
128 ec.register_connection(node, mobility)
131 def add_wifi_channel(ec):
132 channel = ec.register_resource("ns3::YansWifiChannel")
133 delay = ec.register_resource("ns3::ConstantSpeedPropagationDelayModel")
134 ec.register_connection(channel, delay)
136 loss = ec.register_resource("ns3::LogDistancePropagationLossModel")
137 ec.register_connection(channel, loss)
141 class LinuxNS3ClientTest(unittest.TestCase):
143 #self.fedora_host = "nepi2.pl.sophia.inria.fr"
144 self.fedora_host = "planetlabpc1.upf.edu"
145 #self.fedora_host = "peeramide.irisa.fr"
146 self.fedora_user = "inria_nepi"
147 self.fedora_identity = "%s/.ssh/id_rsa_planetlab" % (os.environ['HOME'])
149 def test_simple_p2p_ping(self):
150 ec = ExperimentController(exp_id = "test-ns3-p2p-ping")
152 node = ec.register_resource("LinuxNode")
153 ec.set(node, "hostname", self.fedora_host)
154 ec.set(node, "username", self.fedora_user)
155 ec.set(node, "identity", self.fedora_identity)
156 ec.set(node, "cleanProcesses", True)
157 #ec.set(node, "cleanHome", True)
159 simu = ec.register_resource("LinuxNS3Simulation")
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_cmsa_ping(self):
195 ec = ExperimentController(exp_id = "test-ns3-csma-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.register_connection(simu, node)
207 nsnode1 = add_ns3_node(ec, simu)
208 dev1 = add_csma_device(ec, nsnode1, "10.0.0.1", "30")
210 nsnode2 = add_ns3_node(ec, simu)
211 dev2 = add_csma_device(ec, nsnode2, "10.0.0.2", "30")
214 chan = ec.register_resource("ns3::CsmaChannel")
215 ec.set(chan, "Delay", "0s")
216 ec.register_connection(chan, dev1)
217 ec.register_connection(chan, dev2)
220 ping = ec.register_resource("ns3::V4Ping")
221 ec.set (ping, "Remote", "10.0.0.2")
222 ec.set (ping, "Interval", "1s")
223 ec.set (ping, "Verbose", True)
224 ec.set (ping, "StartTime", "0s")
225 ec.set (ping, "StopTime", "20s")
226 ec.register_connection(ping, nsnode1)
230 ec.wait_finished([ping])
232 stdout = ec.trace(simu, "stdout")
234 expected = "20 packets transmitted, 20 received, 0% packet loss"
235 self.assertTrue(stdout.find(expected) > -1)
239 def test_compile_local_source(self):
240 ec = ExperimentController(exp_id = "test-ns3-local-source")
242 node = ec.register_resource("LinuxNode")
243 ec.set(node, "hostname", self.fedora_host)
244 ec.set(node, "username", self.fedora_user)
245 ec.set(node, "identity", self.fedora_identity)
246 ec.set(node, "cleanProcesses", True)
247 #ec.set(node, "cleanHome", True)
249 simu = ec.register_resource("LinuxNS3Simulation")
250 sources = os.path.join(os.path.dirname(os.path.realpath(__file__)),
251 "ns-3.18-user.tar.gz")
252 ec.set(simu, "sources", sources)
253 ec.register_connection(simu, node)
255 nsnode1 = add_ns3_node(ec, simu)
256 dev1 = add_csma_device(ec, nsnode1, "10.0.0.1", "30")
258 nsnode2 = add_ns3_node(ec, simu)
259 dev2 = add_csma_device(ec, nsnode2, "10.0.0.2", "30")
262 chan = ec.register_resource("ns3::CsmaChannel")
263 ec.set(chan, "Delay", "0s")
264 ec.register_connection(chan, dev1)
265 ec.register_connection(chan, dev2)
268 ping = ec.register_resource("ns3::V4Ping")
269 ec.set (ping, "Remote", "10.0.0.2")
270 ec.set (ping, "Interval", "1s")
271 ec.set (ping, "Verbose", True)
272 ec.set (ping, "StartTime", "0s")
273 ec.set (ping, "StopTime", "20s")
274 ec.register_connection(ping, nsnode1)
278 ec.wait_finished([ping])
280 stdout = ec.trace(simu, "stdout")
282 expected = "20 packets transmitted, 20 received, 0% packet loss"
283 self.assertTrue(stdout.find(expected) > -1)
287 def test_compile_debug_mode(self):
288 ec = ExperimentController(exp_id = "test-ns3-debug-mode")
290 node = ec.register_resource("LinuxNode")
291 ec.set(node, "hostname", self.fedora_host)
292 ec.set(node, "username", self.fedora_user)
293 ec.set(node, "identity", self.fedora_identity)
294 ec.set(node, "cleanProcesses", True)
295 #ec.set(node, "cleanHome", True)
297 simu = ec.register_resource("LinuxNS3Simulation")
298 ec.set(simu, "verbose", True)
299 ec.set(simu, "nsLog", "V4Ping:Node")
300 ec.set(simu, "buildMode", "debug")
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)
333 stderr = ec.trace(simu, "stderr")
334 expected = "V4Ping:Read32"
335 self.assertTrue(stderr.find(expected) > -1)
339 def test_real_time(self):
340 ec = ExperimentController(exp_id = "test-ns3-real-time")
342 node = ec.register_resource("LinuxNode")
343 ec.set(node, "hostname", self.fedora_host)
344 ec.set(node, "username", self.fedora_user)
345 ec.set(node, "identity", self.fedora_identity)
346 ec.set(node, "cleanProcesses", True)
347 #ec.set(node, "cleanHome", True)
349 simu = ec.register_resource("LinuxNS3Simulation")
350 ec.set(simu, "simulatorImplementationType", "ns3::RealtimeSimulatorImpl")
351 ec.set(simu, "checksumEnabled", True)
352 ec.set(simu, "verbose", True)
353 ec.register_connection(simu, node)
355 nsnode1 = add_ns3_node(ec, simu)
356 dev1 = add_point2point_device(ec, nsnode1, "10.0.0.1", "30")
358 nsnode2 = add_ns3_node(ec, simu)
359 dev2 = add_point2point_device(ec, nsnode2, "10.0.0.2", "30")
362 chan = ec.register_resource("ns3::PointToPointChannel")
363 ec.set(chan, "Delay", "0s")
364 ec.register_connection(chan, dev1)
365 ec.register_connection(chan, dev2)
368 ping = ec.register_resource("ns3::V4Ping")
369 ec.set (ping, "Remote", "10.0.0.2")
370 ec.set (ping, "Interval", "1s")
371 ec.set (ping, "Verbose", True)
372 ec.set (ping, "StartTime", "0s")
373 ec.set (ping, "StopTime", "20s")
374 ec.register_connection(ping, nsnode1)
378 ec.wait_finished([ping])
380 stdout = ec.trace(simu, "stdout")
382 expected = "20 packets transmitted, 20 received, 0% packet loss"
383 self.assertTrue(stdout.find(expected) > -1)
385 rm = ec.get_resource(ping)
386 start_time = rm.start_time
387 stop_time = rm.stop_time
388 delta = stop_time - start_time
390 self.assertTrue(delta.seconds >= 20)
391 self.assertTrue(delta.seconds < 25)
395 def test_dev2p_traces(self):
396 ec = ExperimentController(exp_id = "test-ns3-dev2p-traces")
398 node = ec.register_resource("LinuxNode")
399 ec.set(node, "hostname", self.fedora_host)
400 ec.set(node, "username", self.fedora_user)
401 ec.set(node, "identity", self.fedora_identity)
402 ec.set(node, "cleanProcesses", True)
403 #ec.set(node, "cleanHome", True)
405 simu = ec.register_resource("LinuxNS3Simulation")
406 ec.register_connection(simu, node)
408 nsnode1 = add_ns3_node(ec, simu)
409 dev1 = add_point2point_device(ec, nsnode1, "10.0.0.1", "30")
411 nsnode2 = add_ns3_node(ec, simu)
412 dev2 = add_point2point_device(ec, nsnode2, "10.0.0.2", "30")
415 chan = ec.register_resource("ns3::PointToPointChannel")
416 ec.set(chan, "Delay", "0s")
417 ec.register_connection(chan, dev1)
418 ec.register_connection(chan, dev2)
421 ping = ec.register_resource("ns3::V4Ping")
422 ec.set (ping, "Remote", "10.0.0.2")
423 ec.set (ping, "Interval", "1s")
424 ec.set (ping, "Verbose", True)
425 ec.set (ping, "StartTime", "0s")
426 ec.set (ping, "StopTime", "20s")
427 ec.register_connection(ping, nsnode1)
430 ec.enable_trace(dev1, "pcap")
431 ec.enable_trace(dev1, "promiscPcap")
432 ec.enable_trace(dev1, "ascii")
434 ec.enable_trace(dev2, "pcap")
435 ec.enable_trace(dev2, "promiscPcap")
436 ec.enable_trace(dev2, "ascii")
440 ec.wait_finished([ping])
443 rm_simu = ec.get_resource(simu)
445 # TODO: Fix this in ns-3: pcap traces do not flush until the Simulator
446 # process is ended, so we can't get the traces of the 'pcap' and
447 # 'promiscPcap' traces.
449 #for trace in ["pcap", "promiscPcap", "ascii"]:
450 for trace in ["ascii"]:
451 for guid in [dev1, dev2]:
452 output = ec.trace(guid, trace)
454 size = ec.trace(guid, trace, attr = TraceAttr.SIZE)
455 self.assertEquals(size, len(output))
456 self.assertTrue(size > 100)
458 block = ec.trace(guid, trace, attr = TraceAttr.STREAM, block = 5, offset = 1)
459 self.assertEquals(block, output[5:10])
461 trace_path = ec.trace(guid, trace, attr = TraceAttr.PATH)
462 rm = ec.get_resource(guid)
463 path = os.path.join(rm_simu.run_home, rm._trace_filename.get(trace))
464 self.assertEquals(trace_path, path)
468 def test_simple_wifi_ping(self):
469 bounds_width = bounds_height = 200
473 ec = ExperimentController(exp_id = "test-ns3-wifi-ping")
475 node = ec.register_resource("LinuxNode")
476 ec.set(node, "hostname", self.fedora_host)
477 ec.set(node, "username", self.fedora_user)
478 ec.set(node, "identity", self.fedora_identity)
479 ec.set(node, "cleanProcesses", True)
480 #ec.set(node, "cleanHome", True)
482 simu = ec.register_resource("LinuxNS3Simulation")
483 ec.set(simu, "verbose", True)
484 ec.register_connection(simu, node)
486 nsnode1 = add_ns3_node(ec, simu)
487 dev1, phy1 = add_wifi_device(ec, nsnode1, "10.0.0.1", "24", access_point = True)
488 mobility1 = add_constant_mobility(ec, nsnode1, x, y, 0)
490 nsnode2 = add_ns3_node(ec, simu)
491 dev2, phy2 = add_wifi_device(ec, nsnode2, "10.0.0.2", "24", access_point = False)
492 mobility1 = add_constant_mobility(ec, nsnode2, x, y, 0)
493 #mobility2 = add_random_mobility(ec, nsnode2, x, y, 0, speed, bounds_width, bounds_height)
496 chan = add_wifi_channel(ec)
497 ec.register_connection(chan, phy1)
498 ec.register_connection(chan, phy2)
501 ping = ec.register_resource("ns3::V4Ping")
502 ec.set (ping, "Remote", "10.0.0.1")
503 ec.set (ping, "Interval", "1s")
504 ec.set (ping, "Verbose", True)
505 ec.set (ping, "StartTime", "1s")
506 ec.set (ping, "StopTime", "21s")
507 ec.register_connection(ping, nsnode2)
511 ec.wait_finished([ping])
513 stdout = ec.trace(simu, "stdout")
515 expected = "20 packets transmitted, 20 received, 0% packet loss"
516 self.assertTrue(stdout.find(expected) > -1)
520 def test_routing(self):
525 n1 -- p2p -- n2 -- csma -- n5 -- p2p -- n6
531 ec = ExperimentController(exp_id = "test-ns3-routes")
533 node = ec.register_resource("LinuxNode")
534 ec.set(node, "hostname", self.fedora_host)
535 ec.set(node, "username", self.fedora_user)
536 ec.set(node, "identity", self.fedora_identity)
537 ec.set(node, "cleanProcesses", True)
538 #ec.set(node, "cleanHome", True)
540 simu = ec.register_resource("LinuxNS3Simulation")
541 ec.set(simu, "verbose", True)
542 ec.register_connection(simu, node)
544 nsnode1 = add_ns3_node(ec, simu)
545 p2p12 = add_point2point_device(ec, nsnode1, "10.0.0.1", "30")
547 nsnode2 = add_ns3_node(ec, simu)
548 p2p21 = add_point2point_device(ec, nsnode2, "10.0.0.2", "30")
549 csma2 = add_csma_device(ec, nsnode2, "10.0.1.1", "24")
551 nsnode3 = add_ns3_node(ec, simu)
552 csma3 = add_csma_device(ec, nsnode3, "10.0.1.2", "24")
554 nsnode4 = add_ns3_node(ec, simu)
555 csma4 = add_csma_device(ec, nsnode4, "10.0.1.3", "24")
557 nsnode5 = add_ns3_node(ec, simu)
558 p2p56 = add_point2point_device(ec, nsnode5, "10.0.2.1", "30")
559 csma5 = add_csma_device(ec, nsnode5, "10.0.1.4", "24")
561 nsnode6 = add_ns3_node(ec, simu)
562 p2p65 = add_point2point_device(ec, nsnode6, "10.0.2.2", "30")
565 p2p_chan1 = ec.register_resource("ns3::PointToPointChannel")
566 ec.set(p2p_chan1, "Delay", "0s")
567 ec.register_connection(p2p_chan1, p2p12)
568 ec.register_connection(p2p_chan1, p2p21)
571 csma_chan = ec.register_resource("ns3::CsmaChannel")
572 ec.set(csma_chan, "Delay", "0s")
573 ec.register_connection(csma_chan, csma2)
574 ec.register_connection(csma_chan, csma3)
575 ec.register_connection(csma_chan, csma4)
576 ec.register_connection(csma_chan, csma5)
579 p2p_chan2 = ec.register_resource("ns3::PointToPointChannel")
580 ec.set(p2p_chan2, "Delay", "0s")
581 ec.register_connection(p2p_chan2, p2p56)
582 ec.register_connection(p2p_chan2, p2p65)
584 # Add routes - n1 - n6
585 r1 = ec.register_resource("ns3::Route")
586 ec.set(r1, "network", "10.0.2.0")
587 ec.set(r1, "prefix", "30")
588 ec.set(r1, "nexthop", "10.0.0.2")
589 ec.register_connection(r1, nsnode1)
591 # Add routes - n2 - n6
592 r2 = ec.register_resource("ns3::Route")
593 ec.set(r2, "network", "10.0.2.0")
594 ec.set(r2, "prefix", "30")
595 ec.set(r2, "nexthop", "10.0.1.4")
596 ec.register_connection(r2, nsnode2)
598 # Add routes - n5 - n1
599 r5 = ec.register_resource("ns3::Route")
600 ec.set(r5, "network", "10.0.0.0")
601 ec.set(r5, "prefix", "30")
602 ec.set(r5, "nexthop", "10.0.1.1")
603 ec.register_connection(r5, nsnode5)
605 # Add routes - n6 - n1
606 r6 = ec.register_resource("ns3::Route")
607 ec.set(r6, "network", "10.0.0.0")
608 ec.set(r6, "prefix", "30")
609 ec.set(r6, "nexthop", "10.0.2.1")
610 ec.register_connection(r6, nsnode6)
613 ping = ec.register_resource("ns3::V4Ping")
614 ec.set (ping, "Remote", "10.0.2.2")
615 ec.set (ping, "Interval", "1s")
616 ec.set (ping, "Verbose", True)
617 ec.set (ping, "StartTime", "1s")
618 ec.set (ping, "StopTime", "21s")
619 ec.register_connection(ping, nsnode1)
623 ec.wait_finished([ping])
625 stdout = ec.trace(simu, "stdout")
627 expected = "20 packets transmitted, 20 received, 0% packet loss"
628 self.assertTrue(stdout.find(expected) > -1)
632 def ztest_automatic_routing(self):
637 n1 -- p2p -- n2 -- csma -- n5 -- p2p -- n6
643 ec = ExperimentController(exp_id = "test-ns3-auto-routes")
645 node = ec.register_resource("LinuxNode")
646 ec.set(node, "hostname", self.fedora_host)
647 ec.set(node, "username", self.fedora_user)
648 ec.set(node, "identity", self.fedora_identity)
649 ec.set(node, "cleanProcesses", True)
650 #ec.set(node, "cleanHome", True)
652 simu = ec.register_resource("LinuxNS3Simulation")
653 ec.set(simu, "verbose", True)
654 ec.set(simu, "populateRoutingTables", True)
655 ec.register_connection(simu, node)
657 nsnode1 = add_ns3_node(ec, simu)
658 p2p12 = add_point2point_device(ec, nsnode1, "10.0.0.1", "30")
660 nsnode2 = add_ns3_node(ec, simu)
661 p2p21 = add_point2point_device(ec, nsnode2, "10.0.0.2", "30")
662 csma2 = add_csma_device(ec, nsnode2, "10.0.1.1", "24")
664 nsnode3 = add_ns3_node(ec, simu)
665 csma3 = add_csma_device(ec, nsnode3, "10.0.1.2", "24")
667 nsnode4 = add_ns3_node(ec, simu)
668 csma4 = add_csma_device(ec, nsnode4, "10.0.1.3", "24")
670 nsnode5 = add_ns3_node(ec, simu)
671 p2p56 = add_point2point_device(ec, nsnode5, "10.0.2.1", "30")
672 csma5 = add_csma_device(ec, nsnode5, "10.0.1.4", "24")
674 nsnode6 = add_ns3_node(ec, simu)
675 p2p65 = add_point2point_device(ec, nsnode6, "10.0.2.2", "30")
678 p2p_chan1 = ec.register_resource("ns3::PointToPointChannel")
679 ec.set(p2p_chan1, "Delay", "0s")
680 ec.register_connection(p2p_chan1, p2p12)
681 ec.register_connection(p2p_chan1, p2p21)
684 csma_chan = ec.register_resource("ns3::CsmaChannel")
685 ec.set(csma_chan, "Delay", "0s")
686 ec.register_connection(csma_chan, csma2)
687 ec.register_connection(csma_chan, csma3)
688 ec.register_connection(csma_chan, csma4)
689 ec.register_connection(csma_chan, csma5)
692 p2p_chan2 = ec.register_resource("ns3::PointToPointChannel")
693 ec.set(p2p_chan2, "Delay", "0s")
694 ec.register_connection(p2p_chan2, p2p56)
695 ec.register_connection(p2p_chan2, p2p65)
698 ping = ec.register_resource("ns3::V4Ping")
699 ec.set (ping, "Remote", "10.0.1.2")
700 ec.set (ping, "Interval", "1s")
701 ec.set (ping, "Verbose", True)
702 ec.set (ping, "StartTime", "1s")
703 ec.set (ping, "StopTime", "21s")
704 ec.register_connection(ping, nsnode1)
708 ec.wait_finished([ping])
710 stdout = ec.trace(simu, "stdout")
714 expected = "20 packets transmitted, 20 received, 0% packet loss"
715 self.assertTrue(stdout.find(expected) > -1)
720 if __name__ == '__main__':