相信相信很多人在開始用OpenvSwitch(如下簡稱OVS)或者修改源碼的時候,都不知道如何去調試,根據個人學習歷程以及從網上搜集的資料作一個彙總。javascript
一. 我的經驗
- 從網上找相關資料,熟悉OpenvSwitch的構架和本身須要修改的代碼,後續若是有事件,我會寫關於OpenvSwitch2.4.0的代碼分析(和前面版本的核心相同);
- 推薦一個QQ羣:387310964,裏面的大神都挺熱心的,凡問必答;
- 前面寫了一個自動化編譯和安裝OVS的腳本,經過個人觀察,即便編譯有錯誤,不會自動中斷,而是會編譯完成,而且啓動OpenvSwitch;
- 學會使用log。
- 我同時安裝了CPqD,能夠驗證控制器的功能
- 熟練使用wireshark
二. 調試方法
首先來看下OVS的結構圖:
![](http://static.javashuo.com/static/loading.gif)
調試就是從上圖中的幾大構件分別入手的。html
- ovsdb-server
這個數據庫存儲着交換機的配置信息,包括網橋,接口,控制器的地址等。主要有如下核心表組成,其中「Open_vSwitch」是根目錄表,只有一列,下面會提供查看錶的命令:ovs-vsctl
![](http://static.javashuo.com/static/loading.gif)
ovs-vsctl是用來配置ovs-vswitchd模塊的,可是配置信息都是存儲在數據庫中的,因此其本質是一個訪問和配置數據庫的接口,他主要提供瞭如下命令:
• ovs-vsctl add-br
• ovs-vsctl list-br
• ovs-vsctl add-port
• ovs-vsctl list-ports
• ovs-vsctl get-manager
• ovs-vsctl get-controller
• ovs-vsctl list
以上命令的做用能夠經過英文很容易的看出來,不過建議你們仍是運行一下,直觀感覺瞭解下,加深印象,方便之後調試。
- ovs-vswitchd
這是OVS最核心的模塊了,對外負責和控制器經過OpenFlow通訊,經過OVSDB協議和數據庫通訊,經過netlink和內核模塊通訊,經過netdev抽象接口和系統通訊。調試命令主要有如下:
***
ovs-dpctl主要是面向內核datapath模塊的
• ovs-dpctl show 用於查看內核datapath以及相關的轉發命中數
• ovs-dpctl dump-flows 用處查看datapath中的流表
***
ovs-ofctl主要是面向OpenFlow模塊的
• ovs-ofctl show
• ovs-ofctl dump-flows
• ovs-ofctl add-flow
• ovs-ofctl del-flows
[flow]
• ovs-ofctl snoop
***
ovs-appctl主要是面向守護程序的,其中-t
指定守護程序名稱,默認爲ovs-vswitchd
• help 羅列程序支持的命令
• version
• vlog/list 羅列日誌模塊和他們的level(error,warn,info,dbg等)
• vlog/set [spec] 設置日誌level
• ovs-appctl ofproto/trace flow: 追蹤流量的處理過程
- log文件
log文件存儲的路徑是/var/log/openvswitch,裏面包括:
• ovs-vswitchd.log
• ovsdb-server.log
三. 總結
上面只是列舉了一些經常使用的調試命令,更詳細的能夠看官網,固然調試是一項十分複雜繁瑣的工程,因此熟悉和使用好上面的命令是最基本的,其餘的只能具體狀況具體處理了。good luck!java
posted @
2015-12-23 11:56
cotyb 閱讀(
...) 評論(
)
編輯
收藏
另外還有一個命令ovsdb-tool,是管理數據庫文件的,使用方式以下: ovsdb-tool show-log [-mmm]