SDN Lab 5$ REST and Ryu
本次目標是要透過 REST 跟 Ryu 做一些 POST GET 來控制底下的 OpenvSwitch, 包含Query, 下 Flow entry...等等
首先要請大家安裝 Chrome Extension - POSTMAN 來快速測試 REST API, 別再傻傻的用 curl 慢慢 key 指令了
- POSTMAN 主要特色有
- 可以透過 chrome 運行各種 HTTP request, 包含常見的 GET POST 及 REFTful 裡的 PUT DELETE
- 純 Web GUI
- 有 Eviroments, Collection 及可儲存送出的 request 內容
- 回傳時有 Pretty JSON 可以看 (送出時沒有檢查機制, 要自己找其他網站做 JSON Validator)
然而 Ryu 的 REST 是透過 loading application 實現的, 詳細可以參考 Ryu 內建的 App 清單, 以下會舉例透過 POSTMAN 要到所有 switch stats 及如何下一條簡單 Flow entry
環境
- Ryu
- OS: Ubuntu 14.04.1 Server LTS X86_64
- IP: 192.168.1.45
- Mininet
- OS: Ubuntu 14.04.1 Server LTS X86_64
- IP: 192.168.1.44
- My Computer
- Browser: Google Chrome
- IP: 192.168.1.11
Ryu
-
安裝 Ryu
- Ubuntu 使用者請參考 John's Lin Blog - [筆記] Install Ryu 3.6 - SDN Framework 做安裝的動作, 本篇不再撰述
- ArchLinux 使用者可使用
yaourt ryu-git
-
啟動 Ryu
ryu-manager --verbose rest.py simple_switch_13.py ofctl_rest.py rest_topology.py
- 以上這四個除了 simple_switch_13.py 以外, 其他都有處理到 REST 的部分, 下面會挑一兩個來解釋如何看及用
Mininet
-
安裝 Mininet
-
啟動 Mininet
#!/bin/sh -ev #Reference: http://www.routereflector.com/wp-content/uploads/2013/11/linear.png # http://www.routereflector.com/2013/11/mininet-as-an-sdn-test-platform/ CONTROLLER_IP=192.168.1.45 mn --topo linear,2 --mac --switch ovsk,protocols=OpenFlow13 --controller remote,$CONTROLLER_IP
- CONTROLLER_IP 請自行替換
- topo template 可以參考 MiniNet as an SDN test platform 自行更改
Use RESTful
如何查詢 all switches?
在 rest_topology.py 註解裡有詳細說明 REST API 該如何使用
-
得知使用 get all the switches 即可獲得
GET /v1.0/topology/switches
填入 POSTMAN
Result
(Optional) 儲存 request
如何下一條 Flow entry 至 OpenvSwitch?
-
得知使用 add a flow entry
POST /stats/flowentry/add
填入 POSTMAN
填入 JSON 及送出, 200 OK
-
這邊要注意的是填入的 key-value, 都不得有錯, 有錯的話可能會有三種情況
- controller 回報 200 OK, 但 switch 是錯的
- controller 回報 400 Bad Request, 因為 raw data 有問題
- controller 回報 500 Internal Server Error, 大部分都是OpenFlow格式錯誤
送出的 raw data 並沒有進行檢查 JSON Format 的功能, 所以有可能會有少了一個
}
但你卻沒發現, 建議送出去之前先透過 JSONLint 之類的 JSON Validator 做檢查
因為少了一個
{
, 產生錯誤的 400 Bad Request 回應
回報 200 OK 但 OpenvSwitch 卻出錯的範例