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

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
    

Use RESTful

如何查詢 all switches?

  1. 找到 rest_topology.py source code

  2. 在 rest_topology.py 註解裡有詳細說明 REST API 該如何使用

  3. 得知使用 get all the switches 即可獲得

    GET /v1.0/topology/switches
    
  4. 填入 POSTMAN

  5. Result
    POSTMAN view
    ryu controller view

  6. (Optional) 儲存 request

如何下一條 Flow entry 至 OpenvSwitch?

  1. 找到 ofctl_rest.py source code

  2. 得知使用 add a flow entry

    POST /stats/flowentry/add
    
  3. 填入 POSTMAN

  4. 填入 JSON 及送出, 200 OK
    correct

  • 這邊要注意的是填入的 key-value, 都不得有錯, 有錯的話可能會有三種情況

    1. controller 回報 200 OK, 但 switch 是錯的
    2. controller 回報 400 Bad Request, 因為 raw data 有問題
    3. controller 回報 500 Internal Server Error, 大部分都是OpenFlow格式錯誤
  • 送出的 raw data 並沒有進行檢查 JSON Format 的功能, 所以有可能會有少了一個 } 但你卻沒發現, 建議送出去之前先透過 JSONLint 之類的 JSON Validator 做檢查

  1. 因為少了一個 {, 產生錯誤的 400 Bad Request 回應

  2. 回報 200 OK 但 OpenvSwitch 卻出錯的範例

Reference

Comments

comments powered by Disqus