實驗6:開源控制器實踐——Ryu


實驗6:開源控制器實踐——Ryu

實驗步驟

一、安裝 Ryu

二、 tcpdump 驗證 Ryu 控制器的 L2Switch

  • 根據官方文檔第一節的 L2Switch 的 python 代碼創建文件並運行 Ryu
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import MAIN_DISPATCHER
from ryu.controller.handler import set_ev_cls
from ryu.ofproto import ofproto_v1_0

class L2Switch(app_manager.RyuApp):
    OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION]

    def __init__(self, *args, **kwargs):
        super(L2Switch, self).__init__(*args, **kwargs)

    @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
    def packet_in_handler(self, ev):
        msg = ev.msg
        dp = msg.datapath
        ofp = dp.ofproto
        ofp_parser = dp.ofproto_parser

        actions = [ofp_parser.OFPActionOutput(ofp.OFPP_FLOOD)]

        data = None
        if msg.buffer_id == ofp.OFP_NO_BUFFER:
             data = msg.data

        out = ofp_parser.OFPPacketOut(
            datapath=dp, buffer_id=msg.buffer_id, in_port=msg.in_port,
            actions=actions, data = data)
        dp.send_msg(out)
  • h1 ping h2,h2 和 h3 都接收到 h1 發送的 ICMP 報文

  • h1 ping h3,h2 和 h3 都接收到 h1 發送的 ICMP 報文

個人總結

  • 本次實驗與實驗 5 類似,不過使用的是不同的控制器。實驗中遇到的一個困惑是 POX 控制器實踐時,h1 ping h2 會先發送 ARP 報文。然而 Ryu 實踐時居然沒看見 ARP 報文,直接發送了 ICMP 報文,剛開始時還以為是 Ryu 和 POX的不同之處,后來搜索了資料,並沒有相關內容,遂使用 arp -a 命令查看,發現 h1 上已經有了 h2 和 h3的 ip/mac 緩存,可能就是這個原因。清除緩存以后重試,發現 ARP 報文。思考了一下,問題在於我在完成 POX 實踐以后並沒有馬上退出 mininet 命令行,導致拓撲被復用,原來設置的 ip/mac 緩存映射表也被保留了下來,這才有了上述不發送 ARP 報文而直接發送ICMP報文的情況。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM