Openflow的一個(gè)簡單JSON-RPC-ish web service交互式接口,由of_service信息服務(wù)派生而來,依賴于webcore組件。可以使用HTTP POST方式發(fā)送JSON進(jìn)行訪問。
創(chuàng)新互聯(lián)專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、烏拉特中網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、商城網(wǎng)站定制開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為烏拉特中等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。目前支持的方法有:
,
method | 介紹 | 參數(shù) |
get_flow_stats | 獲取流表的表項(xiàng) | dpid - 一個(gè)字符串形式的dpid,例如:'00-00-00-00-00-01' flows -所有流表的列表 |
get_switch_desc | 獲取指定交換機(jī)詳細(xì)信息 | dpid - 同上 |
get_switches | 獲取交換機(jī)列表和基本信息 | dpid - 同上 match - 流表的匹配條目 (默認(rèn)匹配所有) table_id - 流表的id (默認(rèn)是所有) out_port - filter by out port (defaults to all) |
set_table | 設(shè)置指定交換機(jī)的流表 | None. |
在使用pox的過程中 基本只能在./pox.py 后面增加 組建一起運(yùn)行,而webservice組建提供了一個(gè)可以通過web訪問交換機(jī)和流表的接口,如上所示,只支持4個(gè)功能,我會(huì)在接下來的過程中進(jìn)行演示~ 我基本是看的 pox wiki里面的資料然后進(jìn)行驗(yàn)證 得出的結(jié)果,不過wiki中有一點(diǎn)bug,我也做了修正。大家也可以參考 pox wiki的內(nèi)容~ 我用的是curl這個(gè)東東 執(zhí)行上面的方法,這個(gè)東東的具體介紹這里就略過了~下面直接說我的運(yùn)行過程把~
首先,這里用到兩個(gè)基本的東東 mininet和pox,既然能看本文章的估計(jì)也不陌生,所以也不進(jìn)行講解,本文章指向?qū)懸恍?,國?nèi)網(wǎng)站中難以找到的一些東東。廢話不多說~
首先運(yùn)行 pox 和mininet(我基本都是su root 用root權(quán)限運(yùn)行,比較個(gè)人使用,不用考慮什么安全問題),我們使用mininet默認(rèn)的拓?fù)?,比較只是功能的演示。
進(jìn)入pox的目錄 啟動(dòng)pox和相應(yīng)的組建,為了驗(yàn)證測試獲取信息我們開啟了l3_learning組建,這個(gè)組建會(huì)在ping操作時(shí)下發(fā)流表:
cd pox ./pox.py openflow.of_01 web.webcore openflow.webservice forwarding.l3_learning
開啟mininet:
mn --controller=remote
一般默認(rèn)的都會(huì)連上~并在pox中輸出如下信息:
INFO:openflow.of_01:[00-00-00-00-00-01 2] connected
我們先在mininet中進(jìn)行ping操作讓控制器下發(fā)流表~
mininet> h2 ping h3
如果能ping通,交換機(jī)中就已經(jīng)有控制器下發(fā)的流表了
現(xiàn)在我們就可以通過,curl訪問web接口,獲取信息了~
我們先獲取交換機(jī)的流表
curl -i -X POST -d '{"method":"get_flow_stats","params":{"dpid":"00-00-00-00-00-01"},"id" : 1}' http://127.0.0.1:8000/OF/
這個(gè)操作分三個(gè)部分,前面的是curl命令,在此不講,中間一對(duì)大括號(hào)中,就是我們要請(qǐng)求的數(shù)據(jù),我們是以post的形式,請(qǐng)求數(shù)據(jù)的,最后就是我們要請(qǐng)求數(shù)據(jù)的網(wǎng)址,pox wiki中 寫的網(wǎng)址是 http://127.0.0.1:8000 不過根據(jù)我自己的測試網(wǎng)站 應(yīng)該是上面那個(gè)。下面我們來具體說下中間那對(duì)大括號(hào)里的內(nèi)容;
一般我們發(fā)送表單都是一對(duì)一對(duì)數(shù)據(jù)的形式發(fā)送的,這種形式在python中稱為字典,其他地方可能稱為,哈希表,映射之類的東東~現(xiàn)在說說具體參數(shù)把,此方法中有三個(gè)參數(shù),method,對(duì)應(yīng)4個(gè)選項(xiàng),已經(jīng)在開頭列出來了,params 對(duì)應(yīng)的又是一個(gè)字典 ,里面包括一些對(duì)應(yīng)方法的參數(shù),比如例子中的方法,method,他就必須指定 我們所要獲取的流表來自那個(gè)交換機(jī),而交換機(jī)一般由dpid所標(biāo)識(shí),所以我們輸入的參數(shù)就是 dpid,因?yàn)楂@取交換機(jī)的信息只是簡單的操作 所以只有一個(gè)參數(shù)。在liux終端中執(zhí)行上面那個(gè)命令 就可以獲取控制器所連接的交換機(jī)的信息,本例子中的輸出如下:
{"result": {"flowstats": [{"packet_count": 2, "hard_timeout": 0, "byte_count": 196, "duration_sec": 3, "actions": [{"dl_addr": "be:48:cb:78:60:92", "type": "OFPAT_SET_DL_DST"}, {"max_len": 0, "type": "OFPAT_OUTPUT", "port": 2}], "duration_nsec": 194000000, "priority": 65535, "idle_timeout": 10, "cookie": 0, "table_id": 0, "match": {"dl_type": "IP", "nw_dst": "10.0.0.2/32", "dl_src": "52:9d:f5:2b:88:d4", "nw_proto": 1, "nw_tos": 0, "tp_dst": 0, "tp_src": 8, "dl_dst": "be:48:cb:78:60:92", "dl_vlan": 65535, "nw_src": "10.0.0.1", "in_port": 1}}, {"packet_count": 2, "hard_timeout": 0, "byte_count": 196, "duration_sec": 3, "actions": [{"dl_addr": "52:9d:f5:2b:88:d4", "type": "OFPAT_SET_DL_DST"}, {"max_len": 0, "type": "OFPAT_OUTPUT", "port": 1}], "duration_nsec": 193000000, "priority": 65535, "idle_timeout": 10, "cookie": 0, "table_id": 0, "match": {"dl_type": "IP", "nw_dst": "10.0.0.1/32", "dl_src": "be:48:cb:78:60:92", "nw_proto": 1, "nw_tos": 0, "tp_dst": 0, "tp_src": 0, "dl_dst": "52:9d:f5:2b:88:d4", "dl_vlan": 65535, "nw_src": "10.0.0.2", "in_port": 2}}], "dpid": "00-00-00-00-00-01"}, "id": 1}
如果沒自己下發(fā)過流表,可能看起來有點(diǎn)艱難,但如果自己下發(fā)過流表,基本都能看懂。
獲取指定交換機(jī)的信息(用 dpid指定不同的交換機(jī)):
curl -i -X POST -d '{"method":"get_switch_desc","params":{"dpid":"00-00-00-00-00-01"},"id" : 1}' http://127.0.0.1:8000/OF/
結(jié)果:
{"result": {"switchdesc": {"dp_desc": "None", "sw_desc": "2.3.2", "hw_desc": "Open vSwitch", "serial_num": "None", "mfr_desc": "Nicira, Inc."}, "dpid": "00-00-00-00-00-01"}, "id": 1}
其實(shí)什么內(nèi)容都木有。。??瓤?。。
獲取交換機(jī)列表和基本信息:
curl -i -X POST -d '{"method":"get_switches","id" : 1}'
結(jié)果:
{"result": [{"n_tables": 254, "ports": [{"hw_addr": "9e:0f:91:2d:a0:8e", "name": "s1-eth2", "port_no": 1}, {"hw_addr": "de:d6:d4:55:9e:e0", "name": "s1-eth3", "port_no": 2}, {"hw_addr": "7a:2a:44:cf:ff:4f", "port_down": true, "link_down": true, "name": "s1", "port_no": 65534}], "dpid": "00-00-00-00-00-01"}], "id": 1}
因?yàn)橹挥幸粋€(gè)交換機(jī),所以就獲得了一組信息~
最后就是下發(fā)流表了~
curl -i -X POST -d '{"method":"set_table","params":{"dpid":"00-00-00-00-00-01","flows":[{"actions": [{"type":"OFPAT_OUTPUT","port":2}],"match": {"dl_type": "IP","in_port":1 }}]}}' http://127.0.0.1:8000/OF/
params 里面除了指定了dpid 還多了一個(gè)flow,在python中中括號(hào)里面的是列表的形式,也就是可以同時(shí)下發(fā)好幾條流表,同理 actions對(duì)應(yīng)的也是列表的形式,對(duì)應(yīng)多個(gè)動(dòng)作。flows里面就是一條一條的流表了,我們指定了流表的匹配那些信息,首先它得是一個(gè)ip數(shù)據(jù)包,然后必須是從1號(hào)端口進(jìn)來的數(shù)據(jù)包,我們還指定了它匹配成功后的動(dòng)作是從2號(hào)端口轉(zhuǎn)發(fā)~
我們?cè)傺菔鞠氯绾瓮瑫r(shí)下發(fā)多條流表:
curl -i -X POST -d '{"method":"set_table","params":{"dpid":"00-00-00-00-00-01","flows":[{"actions": [{"type":"OFPAT_OUTPUT","port":2}],"match": {"dl_type": "IP","in_port":1 }},{"actions":[{"type":"OFPAT_OUTPUT","port":"OFPP_ALL"}]}]}}' http://127.0.0.1:8000/OF/
我們?cè)趂lows列表中 又加入了一條~
然后我們?cè)趍ininet中查看流表,執(zhí)行以下代碼:
mininet> dpctl dump-flows
我們就可以獲取以下信息:
*** s1 ------------------------------------------------------------------------ NXST_FLOW reply (xid=0x4): cookie=0x0, duration=203.063s, table=0, n_packets=0, n_bytes=0, idle_age=203, actions=ALL cookie=0x0, duration=203.102s, table=0, n_packets=0, n_bytes=0, idle_age=203, ip,in_port=1 actions=output:2
到此 所有的內(nèi)容就結(jié)束了,有可能講的不夠明白,也有可能講的太羅嗦,又不懂地方,大家可以留言,或者給我發(fā)郵件~ 當(dāng)然,留言 的話我是不知道幾個(gè)世紀(jì)才會(huì) 上一次博客,所以最好是 發(fā)郵件~
最后還有一個(gè)問題,當(dāng)我match 源ip地址的時(shí)候老是出現(xiàn)問題
curl -i -X POST -d '{"method":"set_table","params":{"dpid":"00-00-00-00-00-01","flows":[{"actions": [{"type":"OFPAT_OUTPUT","port":2}],"match": {"dl_type": "IP","nw_dst":"192.168.42.0/255.255.255.0" }}]}}' http://127.0.0.1:8000/OF/
如果我這樣下發(fā) 就會(huì)出現(xiàn)問題,目前無解。。。別人說他在ovs2.5的版本 和 POX eel 中運(yùn)行沒有錯(cuò)誤。。。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
新聞標(biāo)題:pox中openflow.webservice組建的學(xué)習(xí)與使用-創(chuàng)新互聯(lián)
URL地址:http://www.rwnh.cn/article18/dosedp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、全網(wǎng)營銷推廣、關(guān)鍵詞優(yōu)化、微信小程序、移動(dòng)網(wǎng)站建設(shè)、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容