下圖是利用 Ryu 和 mininet 設計的一個簡單網路拓璞(三個switch, 四個host),並且用 Ryu with GUI 顯示在 Web 介面上。
Ryu_with_GUI.png

除了 Ryu 之外,目前看過幾個比較熱門的 SDN Framwwork
例如: OpenDaylight, Floodlight。上面三種 SDN Framwwork 都具有各自的 Web GUI 介面,目前看起來 Ryu 較為陽春(如上圖,可以發現 Ryu with GUI 並沒有畫出 host 的圖形),不過我相信很快就可以追上!

目前 Ryu with GUI 是由 yamada-hntts-clo/ryu 專案 fork 出來做的一個 patch。稍微追了一下發現 ntts-clo/ryu 是從原官方專案 osrg/ryu fork 出來的。

Architecture


Ryu with GUI 的架構圖如下圖:
architecture.png

Requirements


Ryu with GUI 需要依賴以下幾個 python 套件,請先用 pip install 安裝好:

  • Ryu (Install Ryu SDN Framework)
  • Flask (Python 上一個非常知名的輕量化 Web Famework)
  • gevent-websocket (在Web Browser 與 GUI Server做聯繫的套件)

注意:在安裝 gevent-websocket 之前,需要先安裝 python-dev 可以使用以下指令進行安裝:

1
$ sudo apt-get install python-dev

Add Patch


前面有稍微提過,Ryu with GUI 並不包含在官方提供的 source code 裡面,需要再加入一些 patch 好讓 Ryu with GUI 運作。

由此 gui-patch-v3-rebase 下載 ZIP 解壓縮後在路徑 /gui-patch-v3-rebase/ryu/gui 將 gui 整個資料夾複製到原官方 Ryu 專案相同位置的地方(/ryu/ryu/)。接著要到 /ryu/ryu/topology 修改 switches.py 45行-53行的地方註解掉。

switches.png

Usage


  • Running Ryu
    執行 Ryu with GUI 需要以下幾個應用程式透過 REST API 與 GUI Server 溝通
1
$ ryu-manager --verbose --observe-links ryu.topology.switches ryu.app.rest_topology ryu.app.ofctl_rest ryu.app.simple_switch
  • Running GUI server
1
$ ./ryu/gui/controller.py

小結


設置過程並不困難,稍微注意一下 Add patch 步驟即可,但是感覺網路上能找的資料有一點少,所以做了一些筆記。
下次再來寫一篇 Ryu 和 Mininet 的結合使用。

參考資料