相信相信不少人在開始用OpenvSwitch(以下簡稱OVS)或者修改源碼的時候,都不知道如何去調試,根據我的學習歷程以及從網上搜集的資料做一個匯總。
一. 個人經驗
- 從網上找相關資料,熟悉OpenvSwitch的構架和自己需要修改的代碼,后續如果有事件,我會寫關於OpenvSwitch2.4.0的代碼分析(和前面版本的核心相同);
- 推薦一個QQ群:387310964,里面的大神都挺熱心的,凡問必答;
- 前面寫了一個自動化編譯和安裝OVS的腳本,通過我的觀察,即使編譯有錯誤,不會自動中斷,而是會編譯完成,並且啟動OpenvSwitch;
- 學會使用log。
- 我同時安裝了CPqD,可以驗證控制器的功能
- 熟練使用wireshark
二. 調試方法
首先來看下OVS的結構圖:

調試就是從上圖中的幾大構件分別入手的。
- ovsdb-server
這個數據庫存儲着交換機的配置信息,包括網橋,接口,控制器的地址等。主要有以下核心表組成,其中“Open_vSwitch”是根目錄表,只有一列,下面會提供查看表的命令:ovs-vsctl

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
• ovs-ofctl snoop
ovs-appctl主要是面向守護程序的,其中-t
• help 羅列程序支持的命令
• version
• vlog/list 羅列日志模塊和他們的level(error,warn,info,dbg等)
• vlog/set [spec] 設置日志level
• ovs-appctl ofproto/trace flow: 追蹤流量的處理過程
3. log文件
log文件存儲的路徑是/var/log/openvswitch,里面包括:
• ovs-vswitchd.log
• ovsdb-server.log
三. 總結
上面只是列舉了一些常用的調試命令,更詳細的可以看官網,當然調試是一項十分復雜繁瑣的工程,所以熟悉和使用好上面的命令是最基本的,其他的只能具體情況具體處理了。good luck!

