import了SDN hub的VM後,總是會想要試看看能不能下個Flow Entry,

現在就來試看看如何手動設定flow entry。

1. 啟動SDN HUB VM內的mininet。
#sudo mn --controller=remote --switch ovsk,protocols=OpenFlow13

2.啟動RYU Controller [2014/07/02修正,要支援OpenFlow 1.3的話,要使用simple_switch_13.py這支程式]
 ./bin/ryu-manager --verbose --observe-links ryu/topology/switches.py ryu/app/rest_topology.py ryu/app/ofctl_rest.py ryu/app/simple_switch_13.py

3.詢問目前有多少OpenFlow Controller受到這台Controller控管。其實此步驟主要是詢問switch的DPID
這個步驟需要使用Web Browser,這裡使用FireFox,在網址列輸入http://127.0.0.1:8080/v1.0/topology/switches,127.0.0.1是controller的IP,請大家自行更改囉。
螢幕截圖 2014-06-02 14.32.01  

4. 詢問這台dpid為0000000000000001的SWITCH上,目前有多少筆FLOW ENTRY?內容又是什麼?
指令是http://127.0.0.1:8080/stats/flow/<dpid>,所以在網址列入http://127.0.0.1:8080/stats/flow/0000000000000001

螢幕截圖 2014-06-02 14.39.08

裡面已經有二筆預設的flow entry囉,  而OUTPUT:4294967293,其實就是PACKET_IN,也就是把封包送回controller去分析。

OpenFlow 1.3.2 Page 43. 當中的 emu ofp_port_no 內,定義了OFPP_CONTROLLER  =  0xfffffffd  (也就是10進制的4294967293)

5. 那麼現在要來新增一筆FLOW ENTRY了,因為新增Flow Entry需要上傳資料給Controller,所以需要另一個程式curl輔助。
指令的格式是:curl -X POST -d {要送到SWITCH的FLOW ENTRY} http://127.0.0.1:8080/stats/flowentry/add

一開始先來個簡單的,從Port 2進來的封包,都從Port 1送出,指令是
#curl -X POST -d '{"dpid":"0000000000000001", "priority":"32765","actions":[{"type":"OUTPUT","port":1}]},"match":{"in_port":2}' http://127.0.0.1:8080/stats/flowentry/add
#curl -X POST -d '{"dpid":"0000000000000001", "priority":"32765","actions":[{"type":"OUTPUT","port":1}],"match":{"in_port":2}}' http://127.0.0.1:8080/stats/flowentry/add(2014/10/09)

螢幕截圖 2014-06-02 15.21.18  

6. (※此段所有的"priority":"32764",都請改為"priority":"32766",不然STEP 5的flow entry會先被執行)
接著來個刺激的,從Port 2進來的封包,加上VLAN TAG 10後,從Port 1送出,指令是

#curl -X POST -d '{"dpid":"0000000000000001", "priority":"32764","actions":[{"type":"PUSH_VLAN","ethertype":33024},{"type":"SET_FIELD","field":"vlan_vid","value":10}{"type":"OUTPUT","port":1}]},"match":{"in_port":2}' http://127.0.0.1:8080/stats/flowentry/add

螢幕截圖 2014-06-02 15.33.57  

螢幕截圖 2014-06-02 15.35.08  

7.1抓個封包來看看狀況:

 螢幕截圖 2014-06-02 15.41.50  

開始擷取封包後,從mininet 的h1 ping h2,

這個沒有VLAN TAG,表示是mininet s1-eth2的封包。(input)

螢幕截圖 2014-06-02 15.44.30  

這個有VLAN TAG,表示是mininet s1-eth1的封包。(output)

螢幕截圖 2014-06-02 15.44.55  

8.那麼,其他add/delete/modify flowentry的指令,可以在哪查到呢?就寫在/home/ubuntu/ryu/ryu/lib/ofctl_v1.3.py,大家可以找找電腦裡有沒有類似的檔案。

 

創作者介紹
創作者 qmaw 的頭像
qmaw

qmaw的部落格

qmaw 發表在 痞客邦 留言(3) 人氣()