總結OpenvSwitch的調試經驗

相信相信很多人在開始用OpenvSwitch(如下簡稱OVS)或者修改源碼的時候,都不知道如何去調試,根據個人學習歷程以及從網上搜集的資料作一個彙總。javascript

一. 我的經驗

  1. 從網上找相關資料,熟悉OpenvSwitch的構架和本身須要修改的代碼,後續若是有事件,我會寫關於OpenvSwitch2.4.0的代碼分析(和前面版本的核心相同);
  2. 推薦一個QQ羣:387310964,裏面的大神都挺熱心的,凡問必答;
  3. 前面寫了一個自動化編譯和安裝OVS的腳本,經過個人觀察,即便編譯有錯誤,不會自動中斷,而是會編譯完成,而且啓動OpenvSwitch;
  4. 學會使用log。
  5. 我同時安裝了CPqD,能夠驗證控制器的功能
  6. 熟練使用wireshark

二. 調試方法

首先來看下OVS的結構圖:

調試就是從上圖中的幾大構件分別入手的。html

  1. 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


    以上命令的做用能夠經過英文很容易的看出來,不過建議你們仍是運行一下,直觀感覺瞭解下,加深印象,方便之後調試。
  2. 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: 追蹤流量的處理過程
  3. log文件
    log文件存儲的路徑是/var/log/openvswitch,裏面包括:
    •  ovs-vswitchd.log
    •  ovsdb-server.log
  4. 三. 總結

    上面只是列舉了一些經常使用的調試命令,更詳細的能夠看官網,固然調試是一項十分複雜繁瑣的工程,因此熟悉和使用好上面的命令是最基本的,其餘的只能具體狀況具體處理了。good luck!java

    posted @ 2015-12-23 11:56  cotyb 閱讀( ...) 評論( ...) 編輯 收藏
    AmazingCounters.com
    另外還有一個命令ovsdb-tool,是管理數據庫文件的,使用方式以下: ovsdb-tool show-log [-mmm]
相關文章
相關標籤/搜索