ryu的RESTAPI簡介——我主要用於下發和查看流表


一.Rest API簡介

REST即表述性狀態傳遞(RepreSentational State Transfer),是一種針對網絡應用的設計和開發方式,可以降低開發的復雜性,提高系統的可伸縮性。

表述性狀態轉移是一組構架約束條件和原則,滿足這些約束和原則的應用程序或設計就是RESTful,REST是設計風格而不是標准,它通常基於使用HTTP,URI,XML以及HTML這些現有的廣泛流行的協議和標准。

REST定義了一組體系構架原則,可以根據這些原則設計以系統資源為中心的Web服務,包括使用不同語言編寫的客戶端如何通過HTTP處理和傳輸資源狀態。

 

二.ryu中REST API簡介

ryu已經提供了一些RESTAPI的定義,在ryu/app目錄下可以找到如下相關的文件:

ofctl_rest.py rest_topology.py rest_firewall.py rest_qos.py rest_router.py

打開這些文件簡單瀏覽下可以發現他們分別提供了和OpenFlow協議,拓撲等相關的信息查詢和配置,查詢的結果以json格式返回給瀏覽器,而配置會調用相關模塊的相關函數,可以簡單的看下獲取SDN網絡中的交換機的代碼。獲取switches的指令為:http://ip:port/stats/switches,首先會解析出Http請求(GET),以及所需要的內容(switches),然后調用對應的函數(get_dpids)。在函數中,得到對應的內容,然后以json形式返回

path = '/stats'
uri = path + '/switches'
mapper.connect('stats', uri,
                        controller=StatsController, action='get_dpids',
                        conditions=dict(method=['GET']))

def get_dpids(self, req, **_kwargs):
    dps = list(self.dpset.dps.keys())
    body = json.dumps(dps)
    return Response(content_type='application/json', body=body)

了解代碼是為了更好的用它,或者可以輕易的修改,得到自己想要的結果,淺嘗輒止,不宜重復造車

在使用對應的RESTAPI之前,需要用ryu-manager *.rest*..py加載對應的模塊

三. ryu常用的RESTAPI簡介

最常用RESTAPI是ofctl_rest.py提供的RESTAPI,它提供了與OpenFlow相關的接口,如查看交換機,最有用的應該是查看、添加、修改流表等。在oftcl_rest.py文件的前面注釋部分我們可以得到接口的使用方法,列舉如下:

# Retrieve the switch stats
#
# get the list of all switches
# GET /stats/switches
#
# get the desc stats of the switch
# GET /stats/desc/<dpid>
#
# get flows stats of the switch
# GET /stats/flow/<dpid>
#
# get flows stats of the switch filtered by the fields
# POST /stats/flow/<dpid>
#
# get aggregate flows stats of the switch
# GET /stats/aggregateflow/<dpid>
#
# get aggregate flows stats of the switch filtered by the fields
# POST /stats/aggregateflow/<dpid>
#
# get table stats of the switch
# GET /stats/table/<dpid>

比如為了得到SDN網絡中的所有交換機,需要用GET /stats/switches,如果要用瀏覽器進行查看,使用http://ip:port/stats/switches發送GET請求

四. ryu中RESTAPI的三種使用方式

  1. 在瀏覽器中輸入類似http://ip:port/stats/switches命令來發送GET請求,獲取信息,ip為控制器的IP,ryu提供的port為8080
  2. 用curl(curl是利用URL語法在命令行方式下工作的開源文件傳輸工具)代替瀏覽器,在終端輸入curl http://ip:port/stats/switches來傳輸內容
  3. 利用chrome等瀏覽器提供的插件Postman,經過使用,非常推薦這種方法,原因如下:
    1. 提供了Pretty和Raw兩種結果展示方法,Raw和前面兩種方法的返回格式一樣,但是Pretty的格式的可視性和便讀性遠遠好於Raw
    2. 提供了JSON和XML兩種格式展示結果
    3. 下發流表同樣簡單,可視化比較好,只需要在body里面按照python字典的格式書寫流表,然后下發即可
    4. 可以顯示對請求的response,比如成功的話STATUS會顯示200 OK

流表的靈活性是SDN網絡的優勢之一,利用上述方法在查看流表,驗證網絡功能,開發APP具有非常重要的作用


免責聲明!

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



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