相信相信很多人在开始用OpenvSwitch(如下简称OVS)或者修改源码的时候,都不知道如何去调试,根据个人学习历程以及从网上搜集的资料作一个汇总。javascript
一. 我的经验
- 从网上找相关资料,熟悉OpenvSwitch的构架和本身须要修改的代码,后续若是有事件,我会写关于OpenvSwitch2.4.0的代码分析(和前面版本的核心相同);
- 推荐一个QQ群:387310964,里面的大神都挺热心的,凡问必答;
- 前面写了一个自动化编译和安装OVS的脚本,经过个人观察,即便编译有错误,不会自动中断,而是会编译完成,而且启动OpenvSwitch;
- 学会使用log。
- 我同时安装了CPqD,能够验证控制器的功能
- 熟练使用wireshark
二. 调试方法
首先来看下OVS的结构图:

调试就是从上图中的几大构件分别入手的。html
- 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
[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]