Kill all processes of per user

針對某位 user 砍它所有 processes

  • pgrep -u pichuang | sudo xargs kill -9

  • pkill -u pichuang

  • ps aux | grep pichuang | awk '{ print $2 }' | sudo xargs kill -9

通常是遇到 fork bomb 才會用到 XD

SDN Lab 6$ Trace Flow

若想觀察 Openflow packet 有沒有正確的被 match, ovs-appctl 有提供了一個 function 可以給大家測試用

環境設定請參考拙作 SDN Lab 5$ REST and Ryu

建立了一個 linear,2 Topology, 此時利用 ovs-appctl ofproto/trace 來產生出 packet 來 trace flow以下是產生一個來自 in_port=1 的封包, 送到 s1 的處理流程,

ovs-appctl ofproto/trace s1 in_port=1,dl_src=00:00:00:00:00:01,dl_dst=00:00:00:00:00:02 -generate

注意這邊 ryu 有使用到 simple_switch_13.py ryu_rest_testing

我們可以看到 s1 最終決定將 packet 打到 actions=out_port:2

若將 Controller 關閉之後, 在啟動同樣 Mininet Topology, 也產生了一樣的 packet, 則會產生下圖

看官可以看到 s1 進行了 actions=controller, 產生了一個 packet_in 至 Controller, 但因為 Controller 並沒有開起來, 沒人可以處理這個 packet_in, 所以 Datapath actions: drop

到這邊應該是用非常簡單地描述針對單一 ovs sw 做 trace flow 的動作, 更詳細的可以在研究一下, 這以下是不是還有什麼可以玩的

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