上一篇提到關於MiniNam的安裝,現在我們就以MiniNam為例子,研究關於SDN Switch上Flow Table的設定吧
- 考慮一個環狀的網路拓樸(ring)
自定義環狀拓樸語法如上 - 同時執行Ryu controller 和 MiniNam
[ Ryu ]
ryu-manager –verbose –observe-links ryu/app/rest_topology.py ryu/app/ofctl_rest.py ryu/app/simple_switch_13.py[ MiniNam ]
./MiniNam –custom topo_new4.py –topo myoop –controller remote環狀拓樸圖形介面 - 進行ping測試,兩主機間彼此不相通,為什麼?
- Ryu ofctl API 介紹
#取得所有Switch資訊
$ curl -X GET http://localhost:8080/stats/switches (localhost可用127.0.0.1取代)# 獲得單一Switch上目前設定的Flow Table規則
$ curl -X GET http://localhost:8080/stats/flow/<Switch的dpid>
系統預設有兩條flow entry,其中「Output: 4294967293」表示直接將封包交由給Controller做處理,第一條和第二條的差別在於match欄位,第一條將比對到的“01:80:c2:00:00:0e”(系統保留mac)交給controller執行 第二/三/四台switch其flow entry同第一台,故省略
- 在開始新增flow entry前,我們要先了解dpid和port的關係
比對switches 和 interface 便可得知其關係 其對應 port 關係如圖所示 - 開始新增flow entry至switch
# 新增指令
curl -X POST -d {要送到SWITCH的FLOW ENTRY} http://127.0.0.1:8080/stats/flowentry/add新增6比flow entry至switch 1 分別加入的這6筆封包流向 新增2筆flow entry 至 switch 2 - ping 測試
h1 ping h2 成功 h2 ping h1 成功 - 上述已成功完成flow entry雙向設定,也就是說h1和 h2 之間有兩條路徑可走,接下來我們只設定單向的路由(順時針方向)
switch 1 設定 switch 2 設定 switch 3 設定 switch 4 設定 - h1 和 h2 可相互ping 通,且封包走順時針方向