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
針對某位 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
若想觀察 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 的動作, 更詳細的可以在研究一下, 這以下是不是還有什麼可以玩的
本次目標是要透過 REST 跟 Ryu 做一些 POST GET 來控制底下的 OpenvSwitch, 包含Query, 下 Flow entry...等等
首先要請大家安裝 Chrome Extension - POSTMAN 來快速測試 REST API, 別再傻傻的用 curl 慢慢 key 指令了
然而 Ryu 的 REST 是透過 loading application 實現的, 詳細可以參考 Ryu 內建的 App 清單, 以下會舉例透過 POSTMAN 要到所有 switch stats 及如何下一條簡單 Flow entry
安裝 Ryu
yaourt ryu-git
啟動 Ryu
ryu-manager --verbose rest.py simple_switch_13.py ofctl_rest.py rest_topology.py
安裝 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
在 rest_topology.py 註解裡有詳細說明 REST API 該如何使用
得知使用 get all the switches 即可獲得
GET /v1.0/topology/switches
填入 POSTMAN
Result
(Optional) 儲存 request
得知使用 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 卻出錯的範例