zoukankan      html  css  js  c++  java
  • 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之间变化,但是理论来说应该有三种不同的路由规则。结果很尴尬。。。

  • 相关阅读:
    数据库设计:数据库设计步骤,er图,三大范式
    连接查询
    连接查询和分组查询
    Django项目的创建与配置
    WEB框架的原理总结
    RabbitMQ---消息队列
    Djang之基于角色的权限控制(RBAC)
    Django之基于RBAC权限控制生成动态菜单
    关于装饰器的一些小练习
    关于简单的python函数的一些小练习题
  • 原文地址:https://www.cnblogs.com/pullself/p/10202584.html
Copyright © 2011-2022 走看看