Mininet实验 动态改变转发规则

介绍

拓扑如下:

在该环境下,假设H1 ping H4,初始的路由规则是S1-S2-S5,一秒后,路由转发规则变为S1-S3-S5,再过一秒,规则变为S1-S4-S5,然后再回到最初的转发规则S1-S2-S5。通过这个循环调度的例子动态地改变交换机的转发规则。


pox脚本

pox脚本lab_controller.py

不得不说这脚本问题是真的多。

  1 from pox.core import core
  2
  3 import pox.openflow.libopenflow_01 as of
  4
  5 from pox.lib.util import dpidToStr
  6
  7 from pox.lib.addresses import IPAddr, EthAddr
  8
  9 from pox.lib.packet.arp import arp
 10
 11 from pox.lib.packet.ethernet import ethernet, ETHER_BROADCAST
 12
 13 from pox.lib.packet.packet_base import packet_base
 14
 15 from pox.lib.packet.packet_utils import *
 16
 17 import pox.lib.packet as pkt
 18
 19 from pox.lib.recoco import Timer
 20
 21 import time
 22
 23 log = core.getLogger()
 24
 25 s1_dpid = 0
 26
 27 s2_dpid = 0
 28
 29 s3_dpid = 0
 30
 31 s4_dpid = 0
 32
 33 s5_dpid = 0
 34
 35 s1_p1 = 0
 36
 37 s1_p4 = 0
 38
 39 s1_p5 = 0
 40
 41 s1_p6 = 0
 42
 43 s2_p1 = 0
 44
 45 s3_p1 = 0
 46
 47 s4_p1 = 0
 48
 49 pre_s1_p1 = 0
 50
 51 pre_s1_p4 = 0
 52
 53 pre_s1_p5 = 0
 54
 55 pre_s1_p6 = 0
 56
 57 pre_s2_p1 = 0
 58
 59 pre_s3_p1 = 0
 60
 61 pre_s4_p1 = 0
 62
 63 turn = 0
 64
 65
 66 def getTheTime():  # fuction to create a timestamp
 67
 68     flock = time.localtime()
 69
 70     then = "[%s-%s-%s" % (str(flock.tm_year),
 71                           str(flock.tm_mon), str(flock.tm_mday))
 72
 73     if int(flock.tm_hour) < 10:
 74
 75         hrs = "0%s" % (str(flock.tm_hour))
 76
 77     else:
 78
 79         hrs = str(flock.tm_hour)
 80
 81     if int(flock.tm_min) < 10:
 82
 83         mins = str(flock.tm_min)
 84
 85         secs = "0%s" % (str(flock.tm_sec))
 86
 87     else:
 88
 89         secs = str(flock.tm_sec)
 90
 91     then += "]%s.%s.%s" % (hrs, mins, secs)
 92
 93     return then
 94
 95
 96 def _timer_func():
 97     global s1_dpid, s2_dpid, s3_dpid, s4_dpid, s5_dpid, turn
 98
 99     # print getTheTime(), "sent the port stats request to s1_dpid"
100
101     if turn == 0:
102         msg = of.ofp_flow_mod()
103
104         msg.command = of.OFPFC_MODIFY_STRICT
105
106         msg.priority = 100
107
108         msg.idle_timeout = 0
109
110         msg.hard_timeout = 0
111
112         msg.match.dl_type = 0x0800
113
114         msg.match.nw_dst = "10.0.0.4"
115
116         msg.actions.append(of.ofp_action_output(port=5))
117
118         core.openflow.getConnection(s1_dpid).send(msg)
119
120         turn = 1
121
122         return
123
124     if turn == 1:
125         msg = of.ofp_flow_mod()
126
127         msg.command = of.OFPFC_MODIFY_STRICT
128
129         msg.priority = 100
130
131         msg.idle_timeout = 0
132
133         msg.hard_timeout = 0
134
135         msg.match.dl_type = 0x0800
136
137         msg.match.nw_dst = "10.0.0.4"
138
139         msg.actions.append(of.ofp_action_output(port=6))
140
141         core.openflow.getConnection(s1_dpid).send(msg)
142
143         turn = 2
144         return
145
146     if turn == 2:
147         msg = of.ofp_flow_mod()
148
149         msg.command = of.OFPFC_MODIFY_STRICT
150
151         msg.priority = 100
152
153         msg.idle_timeout = 0
154
155         msg.hard_timeout = 0
156
157         msg.match.dl_type = 0x0800
158
159         msg.match.nw_dst = "10.0.0.4"
160
161         msg.actions.append(of.ofp_action_output(port=4))
162
163         turn = 0
164
165         return
166
167
168 def _handle_portstats_received(event):
169     global s1_p1, s1_p4, s1_p5, s1_p6, s2_p1, s3_p1, s4_p1
170
171     global pre_s1_p1, pre_s1_p4, pre_s1_p5, pre_s1_p6, pre_s2_p1, pre_s3_p1, pre_s4_p1
172
173     if event.connection.dpid == s1_dpid:
174
175         for f in event.stats:
176
177             if int(f.port_no) < 65534:
178
179                 if f.port_no == 1:
180                     pre_s1_p1 = s1_p1
181
182                     s1_p1 = f.rx_packets
183
184                 if f.port_no == 4:
185                     pre_s1_p4 = s1_p4
186
187                     s1_p4 = f.tx_packets
188
189                     # s1_p4=f.tx_bytes
190
191                 if f.port_no == 5:
192                     pre_s1_p5 = s1_p5
193
194                     s1_p5 = f.tx_packets
195
196                 if f.port_no == 6:
197                     pre_s1_p6 = s1_p6
198
199                     s1_p6 = f.tx_packets
200
201         for f in event.stats:
202
203             if int(f.port_no) < 65534:
204
205                 if f.port_no == 1:
206                     pre_s2_p1 = s2_p1
207
208                     s2_p1 = f.rx_packets
209
210                     # s2_p1=f.rx_bytes
211
212     if event.connection.dpid == s3_dpid:
213
214         for f in event.stats:
215
216             if int(f.port_no) < 65534:
217
218                 if f.port_no == 1:
219                     pre_s3_p1 = s3_p1
220
221                     s3_p1 = f.rx_packets
222
223     if event.connection.dpid == s4_dpid:
224
225         for f in event.stats:
226
227             if int(f.port_no) < 65534:
228
229                 if f.port_no == 1:
230                     pre_s4_p1 = s4_p1
231
232                     s4_p1 = f.rx_packets
233
234
235 def _handle_ConnectionUp(event):
236     global s1_dpid, s2_dpid, s3_dpid, s4_dpid, s5_dpid
237
238     print "ConnectionUp: ", dpidToStr(event.connection.dpid)
239
240     # remember the connection dpid for switch
241
242     for m in event.connection.features.ports:
243
244         if m.name == "s1-eth1":
245
246             s1_dpid = event.connection.dpid
247
248             print "s1_dpid=", s1_dpid
249
250         elif m.name == "s2-eth1":
251
252             s2_dpid = event.connection.dpid
253
254             print "s2_dpid=", s2_dpid
255
256         elif m.name == "s3-eth1":
257
258             s3_dpid = event.connection.dpid
259
260             print "s3_dpid=", s3_dpid
261
262         elif m.name == "s4-eth1":
263
264             s4_dpid = event.connection.dpid
265
266             print "s4_dpid=", s4_dpid
267
268         elif m.name == "s5-eth1":
269
270             s5_dpid = event.connection.dpid
271
272             print "s5_dpid=", s5_dpid
273
274     if s1_dpid <> 0 and s2_dpid <> 0 and s3_dpid <> 0 and s4_dpid <> 0:
275         Timer(1, _timer_func, recurring=True)
276
277
278 def _handle_PacketIn(event):
279     global s1_dpid, s2_dpid, s3_dpid, s4_dpid, s5_dpid
280
281     packet = event.parsed
282
283     if event.connection.dpid == s1_dpid:
284
285         a = packet.find(‘arp‘)
286
287         if a and a.protodst == "10.0.0.4":
288             msg = of.ofp_packet_out(data=event.ofp)
289
290             msg.actions.append(of.ofp_action_output(port=4))
291
292             event.connection.send(msg)
293
294         if a and a.protodst == "10.0.0.5":
295             msg = of.ofp_packet_out(data=event.ofp)
296
297             msg.actions.append(of.ofp_action_output(port=5))
298
299             event.connection.send(msg)
300
301         if a and a.protodst == "10.0.0.6":
302             msg = of.ofp_packet_out(data=event.ofp)
303
304             msg.actions.append(of.ofp_action_output(port=6))
305
306             event.connection.send(msg)
307
308         if a and a.protodst == "10.0.0.1":
309             msg = of.ofp_packet_out(data=event.ofp)
310
311             msg.actions.append(of.ofp_action_output(port=1))
312
313             event.connection.send(msg)
314
315         if a and a.protodst == "10.0.0.2":
316             msg = of.ofp_packet_out(data=event.ofp)
317
318             msg.actions.append(of.ofp_action_output(port=2))
319
320             event.connection.send(msg)
321
322         if a and a.protodst == "10.0.0.3":
323             msg = of.ofp_packet_out(data=event.ofp)
324
325             msg.actions.append(of.ofp_action_output(port=3))
326
327             event.connection.send(msg)
328
329         msg = of.ofp_flow_mod()
330
331         msg.priority = 100
332
333         msg.idle_timeout = 0
334
335         msg.hard_timeout = 0
336
337         msg.match.dl_type = 0x0800
338
339         msg.match.nw_dst = "10.0.0.1"
340
341         msg.actions.append(of.ofp_action_output(port=1))
342
343         event.connection.send(msg)
344
345         msg = of.ofp_flow_mod()
346
347         msg.priority = 100
348
349         msg.idle_timeout = 0
350
351         msg.hard_timeout = 0
352
353         msg.match.dl_type = 0x0800
354
355         msg.match.nw_dst = "10.0.0.2"
356
357         msg.actions.append(of.ofp_action_output(port=2))
358
359         event.connection.send(msg)
360
361         msg = of.ofp_flow_mod()
362
363         msg.priority = 100
364
365         msg.idle_timeout = 0
366
367         msg.hard_timeout = 0
368
369         msg.match.dl_type = 0x0800
370
371         msg.match.nw_dst = "10.0.0.3"
372
373         msg.actions.append(of.ofp_action_output(port=3))
374
375         event.connection.send(msg)
376
377         msg = of.ofp_flow_mod()
378
379         msg.priority = 100
380
381         msg.idle_timeout = 0
382
383         msg.hard_timeout = 1
384
385         msg.match.dl_type = 0x0800
386
387         msg.match.nw_dst = "10.0.0.4"
388
389         msg.actions.append(of.ofp_action_output(port=4))
390
391         event.connection.send(msg)
392
393         msg = of.ofp_flow_mod()
394
395         msg.priority = 100
396
397         msg.idle_timeout = 0
398
399         msg.hard_timeout = 0
400
401         msg.match.dl_type = 0x0800
402
403         msg.match.nw_dst = "10.0.0.5"
404
405         msg.actions.append(of.ofp_action_output(port=5))
406
407         event.connection.send(msg)
408
409         msg = of.ofp_flow_mod()
410
411         msg.priority = 100
412
413         msg.idle_timeout = 0
414
415         msg.hard_timeout = 0
416
417         msg.match.dl_type = 0x0800
418
419         msg.match.nw_dst = "10.0.0.6"
420
421         msg.actions.append(of.ofp_action_output(port=6))
422
423         event.connection.send(msg)
424
425
426
427     elif event.connection.dpid == s2_dpid:
428
429         msg = of.ofp_flow_mod()
430
431         msg.priority = 10
432
433         msg.idle_timeout = 0
434
435         msg.hard_timeout = 0
436
437         msg.match.in_port = 1
438
439         msg.match.dl_type = 0x0806
440
441         msg.actions.append(of.ofp_action_output(port=2))
442
443         event.connection.send(msg)
444
445         msg = of.ofp_flow_mod()
446
447         msg.priority = 10
448
449         msg.idle_timeout = 0
450
451         msg.hard_timeout = 0
452
453         msg.match.in_port = 1
454
455         msg.match.dl_type = 0x0800
456
457         msg.actions.append(of.ofp_action_output(port=2))
458
459         event.connection.send(msg)
460
461         msg = of.ofp_flow_mod()
462
463         msg.priority = 10
464
465         msg.idle_timeout = 0
466
467         msg.hard_timeout = 0
468
469         msg.match.in_port = 2
470
471         msg.match.dl_type = 0x0806
472
473         msg.actions.append(of.ofp_action_output(port=1))
474
475         event.connection.send(msg)
476
477         msg = of.ofp_flow_mod()
478
479         msg.priority = 10
480
481         msg.idle_timeout = 0
482
483         msg.hard_timeout = 0
484
485         msg.match.in_port = 2
486
487         msg.match.dl_type = 0x0800
488
489         msg.actions.append(of.ofp_action_output(port=1))
490
491         event.connection.send(msg)
492
493
494
495     elif event.connection.dpid == s3_dpid:
496
497         msg = of.ofp_flow_mod()
498
499         msg.priority = 10
500
501         msg.idle_timeout = 0
502
503         msg.hard_timeout = 0
504
505         msg.match.in_port = 1
506
507         msg.match.dl_type = 0x0806
508
509         msg.actions.append(of.ofp_action_output(port=2))
510
511         event.connection.send(msg)
512
513         msg = of.ofp_flow_mod()
514
515         msg.priority = 10
516
517         msg.idle_timeout = 0
518
519         msg.hard_timeout = 0
520
521         msg.match.in_port = 1
522
523         msg.match.dl_type = 0x0800
524
525         msg.actions.append(of.ofp_action_output(port=2))
526
527         event.connection.send(msg)
528
529         msg = of.ofp_flow_mod()
530
531         msg.priority = 10
532
533         msg.idle_timeout = 0
534
535         msg.hard_timeout = 0
536
537         msg.match.in_port = 2
538
539         msg.match.dl_type = 0x0806
540
541         msg.actions.append(of.ofp_action_output(port=1))
542
543         event.connection.send(msg)
544
545         msg = of.ofp_flow_mod()
546
547         msg.priority = 10
548
549         msg.idle_timeout = 0
550
551         msg.hard_timeout = 0
552
553         msg.match.in_port = 2
554
555         msg.match.dl_type = 0x0800
556
557         msg.actions.append(of.ofp_action_output(port=1))
558
559         event.connection.send(msg)
560
561
562
563     elif event.connection.dpid == s4_dpid:
564
565         msg = of.ofp_flow_mod()
566
567         msg.priority = 10
568
569         msg.idle_timeout = 0
570
571         msg.hard_timeout = 0
572
573         msg.match.in_port = 1
574
575         msg.match.dl_type = 0x0806
576
577         msg.actions.append(of.ofp_action_output(port=2))
578
579         event.connection.send(msg)
580
581         msg = of.ofp_flow_mod()
582
583         msg.priority = 10
584
585         msg.idle_timeout = 0
586
587         msg.hard_timeout = 0
588
589         msg.match.in_port = 1
590
591         msg.match.dl_type = 0x0800
592
593         msg.actions.append(of.ofp_action_output(port=2))
594
595         event.connection.send(msg)
596
597         msg = of.ofp_flow_mod()
598
599         msg.priority = 10
600
601         msg.idle_timeout = 0
602
603         msg.hard_timeout = 0
604
605         msg.match.in_port = 2
606
607         msg.match.dl_type = 0x0806
608
609         msg.actions.append(of.ofp_action_output(port=1))
610
611         event.connection.send(msg)
612
613         msg = of.ofp_flow_mod()
614
615         msg.priority = 10
616
617         msg.idle_timeout = 0
618
619         msg.hard_timeout = 0
620
621         msg.match.in_port = 2
622
623         msg.match.dl_type = 0x0800
624
625         msg.actions.append(of.ofp_action_output(port=1))
626
627         event.connection.send(msg)
628
629
630
631     elif event.connection.dpid == s5_dpid:
632
633         a = packet.find(‘arp‘)
634
635         if a and a.protodst == "10.0.0.4":
636             msg = of.ofp_packet_out(data=event.ofp)
637
638             msg.actions.append(of.ofp_action_output(port=4))
639
640             event.connection.send(msg)
641
642         if a and a.protodst == "10.0.0.5":
643             msg = of.ofp_packet_out(data=event.ofp)
644
645             msg.actions.append(of.ofp_action_output(port=5))
646
647             event.connection.send(msg)
648
649         if a and a.protodst == "10.0.0.6":
650             msg = of.ofp_packet_out(data=event.ofp)
651
652             msg.actions.append(of.ofp_action_output(port=6))
653
654             event.connection.send(msg)
655
656         if a and a.protodst == "10.0.0.1":
657             msg = of.ofp_packet_out(data=event.ofp)
658
659             msg.actions.append(of.ofp_action_output(port=1))
660
661             event.connection.send(msg)
662
663         if a and a.protodst == "10.0.0.2":
664             msg = of.ofp_packet_out(data=event.ofp)
665
666             msg.actions.append(of.ofp_action_output(port=2))
667
668             event.connection.send(msg)
669
670         if a and a.protodst == "10.0.0.3":
671             msg = of.ofp_packet_out(data=event.ofp)
672
673             msg.actions.append(of.ofp_action_output(port=3))
674
675             event.connection.send(msg)
676
677         msg = of.ofp_flow_mod()
678
679         msg.priority = 100
680
681         msg.idle_timeout = 0
682
683         msg.hard_timeout = 0
684
685         msg.match.dl_type = 0x0800
686
687         msg.match.nw_dst = "10.0.0.1"
688
689         msg.actions.append(of.ofp_action_output(port=1))
690
691         event.connection.send(msg)
692
693         msg = of.ofp_flow_mod()
694
695         msg.priority = 100
696
697         msg.idle_timeout = 0
698
699         msg.hard_timeout = 0
700
701         msg.match.dl_type = 0x0800
702
703         msg.match.nw_dst = "10.0.0.2"
704
705         msg.actions.append(of.ofp_action_output(port=2))
706
707         event.connection.send(msg)
708
709         msg = of.ofp_flow_mod()
710
711         msg.priority = 100
712
713         msg.idle_timeout = 0
714
715         msg.hard_timeout = 0
716
717         msg.match.dl_type = 0x0800
718
719         msg.match.nw_dst = "10.0.0.3"
720
721         msg.actions.append(of.ofp_action_output(port=3))
722
723         event.connection.send(msg)
724
725         msg = of.ofp_flow_mod()
726
727         msg.priority = 100
728
729         msg.idle_timeout = 0
730
731         msg.hard_timeout = 0
732
733         msg.match.dl_type = 0x0800
734
735         msg.match.nw_dst = "10.0.0.4"
736
737         msg.actions.append(of.ofp_action_output(port=4))
738
739         event.connection.send(msg)
740
741         msg = of.ofp_flow_mod()
742
743         msg.priority = 100
744
745         msg.idle_timeout = 0
746
747         msg.hard_timeout = 0
748
749         msg.match.dl_type = 0x0800
750
751         msg.match.nw_dst = "10.0.0.5"
752
753         msg.actions.append(of.ofp_action_output(port=5))
754
755         event.connection.send(msg)
756
757         msg = of.ofp_flow_mod()
758
759         msg.priority = 100
760
761         msg.idle_timeout = 0
762
763         msg.hard_timeout = 0
764
765         msg.match.dl_type = 0x0800
766
767         msg.match.nw_dst = "10.0.0.6"
768
769         msg.actions.append(of.ofp_action_output(port=6))
770
771         event.connection.send(msg)
772
773
774 def launch():
775     global start_time
776
777     core.openflow.addListenerByName("PortStatsReceived", _handle_portstats_received)
778
779     core.openflow.addListenerByName("ConnectionUp", _handle_ConnectionUp)
780
781     core.openflow.addListenerByName("PacketIn", _handle_PacketIn)

mininet脚本

  1 #!/usr/bin/python
  2
  3
  4
  5 from mininet.topo import Topo
  6
  7 from mininet.net import Mininet
  8
  9 from mininet.node import CPULimitedHost
 10
 11 from mininet.link import TCLink
 12
 13 from mininet.util import dumpNodeConnections
 14
 15 from mininet.log import setLogLevel
 16
 17 from mininet.node import Controller
 18
 19 from mininet.cli import CLI
 20
 21 from functools import partial
 22
 23 from mininet.node import RemoteController
 24
 25 import os
 26
 27
 28
 29
 30
 31 class MyTopo(Topo):
 32
 33     "Single switch connected to n hosts."
 34
 35     def __init__(self):
 36
 37         Topo.__init__(self)
 38
 39         s1=self.addSwitch(‘s1‘)
 40
 41         s2=self.addSwitch(‘s2‘)
 42
 43         s3=self.addSwitch(‘s3‘)
 44
 45         s4=self.addSwitch(‘s4‘)
 46
 47         s5=self.addSwitch(‘s5‘)
 48
 49         h1=self.addHost(‘h1‘)
 50
 51         h2=self.addHost(‘h2‘)
 52
 53         h3=self.addHost(‘h3‘)
 54
 55         h4=self.addHost(‘h4‘)
 56
 57         h5=self.addHost(‘h5‘)
 58
 59         h6=self.addHost(‘h6‘)
 60
 61
 62
 63         self.addLink(h1, s1, bw=1, delay=‘10ms‘, loss=0, max_queue_size=1000, use_htb=True)
 64
 65         self.addLink(h2, s1, bw=1, delay=‘10ms‘, loss=0, max_queue_size=1000, use_htb=True)
 66
 67         self.addLink(h3, s1, bw=1, delay=‘10ms‘, loss=0, max_queue_size=1000, use_htb=True)
 68
 69         self.addLink(s1, s2, bw=1, delay=‘10ms‘, loss=0, max_queue_size=1000, use_htb=True)
 70
 71         self.addLink(s1, s3, bw=1, delay=‘10ms‘, loss=0, max_queue_size=1000, use_htb=True)
 72
 73         self.addLink(s1, s4, bw=1, delay=‘10ms‘, loss=0, max_queue_size=1000, use_htb=True)
 74
 75         self.addLink(s2, s5, bw=1, delay=‘10ms‘, loss=0, max_queue_size=1000, use_htb=True)
 76
 77         self.addLink(s3, s5, bw=1, delay=‘10ms‘, loss=0, max_queue_size=1000, use_htb=True)
 78
 79         self.addLink(s4, s5, bw=1, delay=‘10ms‘, loss=0, max_queue_size=1000, use_htb=True)
 80
 81         self.addLink(s5, h4, bw=1, delay=‘10ms‘, loss=0, max_queue_size=1000, use_htb=True)
 82
 83         self.addLink(s5, h5, bw=1, delay=‘10ms‘, loss=0, max_queue_size=1000, use_htb=True)
 84
 85         self.addLink(s5, h6, bw=1, delay=‘10ms‘, loss=0, max_queue_size=1000, use_htb=True)
 86
 87
 88
 89 def perfTest():
 90
 91     "Create network and run simple performance test"
 92
 93     topo = MyTopo()
 94
 95
 96     net = Mininet(topo=topo, host=CPULimitedHost, link=TCLink, controller=partial(RemoteController, ip=‘127.0.0.1‘, port=6633))
 97
 98     net.start()
 99
100     print "Dumping host connections"
101
102     dumpNodeConnections(net.hosts)
103
104     h1,h2,h3=net.get(‘h1‘,‘h2‘,‘h3‘)
105
106     h4,h5,h6=net.get(‘h4‘,‘h5‘,‘h6‘)
107
108     h1.setMAC("0:0:0:0:0:1")
109
110     h2.setMAC("0:0:0:0:0:2")
111
112     h3.setMAC("0:0:0:0:0:3")
113
114     h4.setMAC("0:0:0:0:0:4")
115
116     h5.setMAC("0:0:0:0:0:5")
117
118     h6.setMAC("0:0:0:0:0:6")
119
120     CLI(net)
121
122     net.stop()
123
124
125
126 if __name__ == ‘__main__‘:
127
128     setLogLevel(‘info‘)
129
130     perfTest()

如果是在不同的机器使用的pox将控制器ip修改到对应pox所在的ip,我使用的是同一台计算机上的就直接修改成了127.0.0.1。



然后运行pox脚本再运行mininet脚本,得到下图:

mininet运行没啥问题,不过提示0丢包率是非法的emmmmm。 然后pox的内容有些奇怪,咋感觉少了一句的感觉。强迫症,到脚本里填上。在第260行填上一行输出。得到下图:

鉴于有人说,h1 ping不到 h4,就先pingall一下,得到下图:

一切正常。 然后继续实验,在mininet输入h1 ping -i 0.1 h4 每秒从h1传送10个包到h4。

mininet界面到时挺正常的,但是pox界面emmm一片死寂,所以我反复了几次,结果没有变化。估计不是pox出问题了,就是pox脚本写的有问题吧,难不成是我实验环境有问题?

由于对脚本内容了解的不够,所以我先尝试了一下使用poxdesk图形界面来显示结果。先安装一下。

1 cd ./pox/ext
2 git clone https://github.com/MurphyMc/poxdesk
3 cd poxdesk
4 wget http://downloads.sourceforge.net/qooxdoo/qooxdoo-2.0.2-sdk.zip
5 unzip qooxdoo-2.0.2-sdk.zip
6 mv qooxdoo-2.0.2-sdk qx
7 cd poxdesk
8 ./generate.py

我的小水管算是把我卡死了

然后通过命令运行:

1 ./pox.py 脚本名 web messenger messenger.log_service messenger.ajax_transport openflow.of_service poxdesk

然后进入浏览器查看:http://pox-ip:8000/poxdesk。这里pox-ip是pox所在的ip,如果本地就直接使用127.0.0.1就行。

观察s1目标为h4的,发现output一直在5和6之间变化,但是理论来说应该有三种不同的路由规则。结果很尴尬。。。

原文地址:https://www.cnblogs.com/pullself/p/10202584.html

时间: 2024-08-29 17:53:45

Mininet实验 动态改变转发规则的相关文章

mininet实验 动态改变转发规则实验

写在前面 本实验参考 POX脚本设置好控制器的转发策略,所以只要理解脚本. mininet脚本设置好拓扑和相关信息,所以也只要理解脚本. POX脚本目前基本看不懂. 本实验我学会了:POX控制器Web界面,第一次真正的看到了流表项. 实验拓扑 在该环境下,假设H1 ping H4,初始的路由规则是S1-S2-S5,一秒后,路由转发规则变为S1-S3-S5,再过一秒,规则变为S1-S4-S5,然后再回到最初的转发规则S1-S2-S5.通过这个循环调度的例子动态地改变交换机的转发规则. 实验步骤 1

iptables的转发规则

在http://chenx1242.blog.51cto.com/10430133/1874225这个文章里,我们配置了mq而且在后面的web界面里验证了已经有消息队列生成.但是细心的朋友应该会发现一个BUG,实验机器是2核4G无外网,但是是怎么登陆web界面的呢? 因为消息队列是一个很重要的一环啊,它就好比食道一样,食物通过食道才能到达胃进行吸收,同理activemq也要好好被保护起来.所以一般来说,mq本体的服务器是不配置外网的,但是会另找一个服务器建立一个转发规则,然后我们去访问"转发规则

动态改变 网页的宽度 &lt;--&gt; body的滚动条

1. <body style="min-width:600px;overflow:scroll;" allowfullscreen="true"> </body> 当网页的宽度 缩小到 比 min-width的值小时,<body/>就会出现 水平滚动条. 2. 动态改变 <body/> 的 min-width属性: js代码:document.body.style.minWidth = 数值 + "px&qu

jquery.validate动态更改校验规则

有时候表单中有多个字段是相互关联的,以下遇到的就是证件类型和证件号码的关联,在下拉框中选择不同的证件类型,证件号码的值的格式都是不同的,这就需要动态的改变校验规则. 点击(此处)折叠或打开 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <m

JQuery EasyUI 动态改变表单项的验证守则

//JQuery EasyUI 动态改变表单项的验证规则 $(document).ready(function(){ $('#FILE_QUALITY').combobox({ onChange:function(newValue,oldValue){ if(newValue == 2){ $('#FRONT_FOR_UNIT').validatebox({ required: false }); } else if(newValue == 0){ $('#FRONT_FOR_UNIT').va

Android动态改变布局,比如登陆弹出软键盘,登陆框上移(转载)

Android动态改变布局 http://www.cnblogs.com/angeldevil/p/3836256.html 遇到这么个需求,先看图:      其实是一个软件的登录界面,初始是第一个图的样子,当软键盘弹出后变为第二个图的样子,因为登录界面有用户名.密码.登录按钮,不这样的话软键盘弹出后会遮住登录按钮(其实之前的实现放到了ScrollView里面,监听软键盘弹出后滚动到底部,软键盘隐藏后滚动到顶部,也是可以的). 最简单的方法就是多加几个冗余的View,根据软键盘的状态隐藏不需要

unity3d关于怎样动态改变物体 shader

material = new Material(Shader.Find("Custom/Alpha")); material.SetFloat("_Shininess", materialAlpha); void OnRenderImage(RenderTexture source, RenderTexture destination){Graphics.Blit(source, destination, material);} unity3d关于怎样动态改变物体

javascript生成表格增删改查 JavaScript动态改变表格单元格内容 动态生成表格 JS获取表格任意单元格 javascript如何动态删除表格某一行

jsp页面表格布局Html代码 <body > <center> <input type="text" value="111" id="mytext"> <table border="1" width="60%" id="mytable"> <tr> <td id="td1">第一行第一列<

Unity动态改变src的解决方法

在c#程序(winform,wpf)中可以嵌入unity控件,从而实现三维场景.通过设置unity控件的src属性来设置场景,然而src必须是绝对路径,而且只能在设计器进行设置,不能在代码中动态修改,这在需要运行时动态切换场景的时就悲剧了.当然网上有很多关于Unity 如何动态改变src的方法,其方法是正确的,最大的问题莫过于没有说明代码该放在什么地方,干着急. 下面假设unity控件的文件Unity3dControl.cs,那么打开Unity3dControl.designer.cs,找到函数