相信相信不少人在开始用OpenvSwitch(以下简称OVS)或者修改源码的时候,都不知道如何去调试,根据我的学习历程以及从网上搜集的资料做一个汇总。

一. 个人经验

  1. 从网上找相关资料,熟悉OpenvSwitch的构架和自己需要修改的代码,后续如果有事件,我会写关于OpenvSwitch2.4.0的代码分析(和前面版本的核心相同);
  2. 推荐一个QQ群:387310964,里面的大神都挺热心的,凡问必答;
  3. 前面写了一个自动化编译和安装OVS的脚本,通过我的观察,即使编译有错误,不会自动中断,而是会编译完成,并且启动OpenvSwitch;
  4. 学会使用log。
  5. 我同时安装了CPqD,可以验证控制器的功能
  6. 熟练使用wireshark

二. 调试方法

首先来看下OVS的结构图:

调试就是从上图中的几大构件分别入手的。

  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
    另外还有一个命令ovsdb-tool,是管理数据库文件的,使用方式如下:
    ovsdb-tool show-log [-mmm]
    以上命令的作用可以通过英文很容易的看出来,不过建议大家还是运行一下,直观感受了解下,加深印象,方便以后调试。
  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!

    总结OpenvSwitch的调试经验的更多相关文章

    1. (转)CMOS Sensor的调试经验分享

      CMOS Sensor的调试经验分享 我这里要介绍的就是CMOS摄像头的一些调试经验. 首先,要认识CMOS摄像头的结构.我们通常拿到的是集成封装好的模组,一般由三个部分组成:镜头.感应器和图像信号处 ...

    2. CMOS Sensor的调试经验分享

      转自:http://bbs.52rd.com/forum.php?mod=viewthread&tid=276351 CMOS Sensor的调试经验分享 我这里要介绍的就是CMOS摄像头的一 ...

    3. 调试经验--硬盘U菜

      调试经验--硬盘U菜 随着嵌入式设备功能的开发,随着对存储设备的需求:需要存储大量数据信息.需要在转储数据,U盘升级功能等.     在使用存储设备的过程中,我们遇到一些问题,也总结了些经验: 1.几 ...

    4. CMOS Sensor的调试经验分享【转】

      转自:https://blog.csdn.net/yapingmcu/article/details/37817727 转自:http://bbs.52rd.com/forum.php?mod=vie ...

    5. 程序异常崩溃后用windbg辅助调试解决的经验 以及 堆栈问题调试经验

      1,程序异常崩溃后用windbg辅助调试解决的经验  状况:我的程序调用别人的库做 文件写入工作. 在这一过程中出现异常,程序崩溃. 经反复检查,认为自己的程序没有错,但无法判断在别人库里哪里有错. ...

    6. 17调试经验之串口读写flash协议

      一是设计功能 我的理解协议就是一个命令包,通过给出不同的控制命令,来调动不同的功能模块,实现不同的功能,如读数据,写数据,擦除等. 二设计过程 先看了尤老师的视频,主要讲了大致设计原理和总体框架,当然 ...

    7. 电机三环pid控制及调试经验

      一.伺服电机的双环pid 双环pid在正常底盘运动的控制中已经足够了,但是对于双轴云台的控制来说,双环pid的云台控制的响应速度是远远不够的,所以加入了电流环的控制. 两篇大佬的文章--这是我学习pi ...

    8. 13 年的 Bug 调试经验总结

      在<Learning From Your Bugs>一文中,我写了关于我是如何追踪我所遇到的一些最有趣的bug.最近,我回顾了我所有的194个条目(从13岁开始),看看有什么经验教训是我可 ...

    9. mipi 调试经验

      转载自http://blog.csdn.net/g_salamander/article/details/9163455 以下是最近几个月在调试 MIPI DSI / CSI 的一些经验总结,因为协议 ...

    随机推荐

    1. ECS 实例网络带宽

      1. 带宽是否独享? 是独享. 2. 带宽单线还是双线,电信还是网通? 多线 BGP(中国电信.联通.移动.教育网等)接入,确保全国用户访问畅通. 3. 5 Mbps 带宽怎么理解? 5 Mbps 带 ...

    2. STM32的IO口灌入电流和输出驱动电流最大是多少?

      最大可以输出8mA,灌入20mA,但要保证所有进入芯片VDD的电流不能超过150mA,同样所有从VSS流出的电流也不能超过150mA. 详细请看STM32的数据手册中的相关内容. 例如,STM32F1 ...

    3. Lintcode---线段树的构造

      线段树是一棵二叉树,他的每个节点包含了两个额外的属性start和end用于表示该节点所代表的区间.start和end都是整数,并按照如下的方式赋值: 根节点的 start 和 end 由 build  ...

    4. Markdown进阶指南

      数学公式编辑 Mac OS下建议使用Daum Equation Editor,按照MathType那样写公式,自动生成TeX代码 行内公式:用$...$包住Tex代码 行间公式:用$$..$$包住Te ...

    5. ajax请求的data数据格式

      ajax提交data类型 一.问题来源 今天使用ajax时,发现get传data时,传递json字符串时传不过去参数,所以做了一些实验测试ajax的get和post的传递data时的不同. 二.概念 ...

    6. js模块化规范AMD、CMD、CommonJS...

      1. AMD 1.1 什么是AMD? AMD 英文名 Asynchronous Module Definition ,中文名 异步模块定义 .这是一个浏览器模块化开发的规范. 由于浏览器环境执行环境的 ...

    7. [转]解决Access restriction: The type * is not accessible due to restrict

      我在eclipse使用org.omg下的东西的时候报此错误 我用的第一种方法解决了问题 转自:http://blog.sina.com.cn/s/blog_6714fba70100x6mz.html ...

    8. lua工具库penlight--07函数编程(一)

      函数编程 序列 Lua 迭代器 (最简单的形式) 是一个函数,可以多次调用返回一个或多个值.for in语句理解迭代器和循环,直到该函数将返回nil. Lua有标准的序列迭代器 (ipairs和pai ...

    9. OpenCV3.1.0+VS2013配置+Win10(64位)(转载)

      OpenCV3.1.0+VS2013配置+Win10(64位) [环境]VS2013和MATLAB相互调用混合编程 Matlab 2016a和VS2013混合Dll编程步骤 更换了硬盘之后,重新配置了 ...

    10. 上传图片时,使用JS获得图片文件大小

      这个方法用于获得图片文件的大小: 在FF,Chrome,IE6,IE7,IE8可用,不支持IE9+.(如果是IE9就需要flash插件了) var getSize = function(oFile,c ...