ovs 内核态加打印调试
我想在ovs收发包的时候加printk打印
int ovs_vport_receive(struct vport *vport, struct sk_buff *skb,const struct ip_tunnel_info *tun_info)
{struct sw_flow_key key;int error;OVS_CB(skb)->input_vport = vport;OVS_CB(skb)->mru = 0;OVS_CB(skb)->cutlen = 0;if (unlikely(dev_net(skb->dev) != ovs_dp_get_net(vport->dp))) {u32 mark;mark = skb->mark;skb_scrub_packet(skb, true);skb->mark = mark;tun_info = NULL;}printk(KERN_ERR "\r\n[%s]%d!!!print1 !!!\r\n",__FUNCTION__,__LINE__);//调试打印ovs_skb_init_inner_protocol(skb);skb_clear_ovs_gso_cb(skb);/* Extract flow from 'skb' into 'key'. */error = ovs_flow_key_extract(tun_info, skb, &key);if (unlikely(error)) {kfree_skb(skb);return error;}ovs_dp_process_packet(skb, &key);return 0;
}
修改代码后要在ovs安装目录重新编译
./configure --prefix=/usr --with-linux=/lib/modules/`uname -r`/build //可不必执行
make //必须执行
make install //可不必执行
先停止原来的ovs进程,ps -e就搜不到了
root@nettraffic-vm:~/openvswitch/openvswitch-2.15.0# ovs-ctl stop
* Exiting ovs-vswitchd (79127)
* Exiting ovsdb-server (79124)
卸载mod
rmmod openvswitch
安装新编译的mod
insmod datapath/linux/openvswitch.ko
若出现报错
[20210829_14:01:59]insmod: ERROR: could not insert module datapath/linux/openvswitch.ko: Unknown symbol in module
dmeg查看信息
[20210829_14:20:01][16226.692278] openvswitch: Unknown symbol nf_nat_alloc_null_binding (err 0)
[20210829_14:20:01][16226.692315] openvswitch: Unknown symbol xfrm6_tunnel_register (err 0)
[20210829_14:20:01][16226.692419] openvswitch: Unknown symbol nf_nat_packet (err 0)
[20210829_14:20:01][16226.692515] openvswitch: Unknown symbol nf_nat_setup_info (err 0)
[20210829_14:20:01][16226.692596] openvswitch: Unknown symbol nf_nat_icmp_reply_translation (err 0)
[20210829_14:20:01][16226.692623] openvswitch: Unknown symbol nf_nat_icmpv6_reply_translation (err 0)
[20210829_14:20:01][16226.692768] openvswitch: Unknown symbol nf_ct_nat_ext_add (err 0)
[20210829_14:20:01][16226.692809] openvswitch: Unknown symbol xfrm6_tunnel_deregister (err 0)
说明openvswitch.ko的依赖包没有,查找依赖项
[20210829_14:07:40]root@nettraffic-vm:~/openvswitch/openvswitch-2.15.0# modinfo ./datapath/linux/openvswitch.ko |grep depends
[20210829_14:07:40]depends: nf_conntrack,tunnel6,nf_nat,nf_defrag_ipv6,libcrc32c,nf_nat_ipv6,nf_nat_ipv4
要用modprobe将这些都加入
[20210829_14:08:03]root@nettraffic-vm:~/openvswitch/openvswitch-2.15.0# modprobe nf_conntrack
[20210829_14:08:13]root@nettraffic-vm:~/openvswitch/openvswitch-2.15.0# modprobe tunnel6
[20210829_14:08:19]root@nettraffic-vm:~/openvswitch/openvswitch-2.15.0# modprobe nf_nat
[20210829_14:08:25]root@nettraffic-vm:~/openvswitch/openvswitch-2.15.0# modprobe nf_defrag_ipv6
[20210829_14:08:30]root@nettraffic-vm:~/openvswitch/openvswitch-2.15.0# modprobe libcrc32c
[20210829_14:08:36]root@nettraffic-vm:~/openvswitch/openvswitch-2.15.0# modprobe nf_nat_ipv6
[20210829_14:08:42]root@nettraffic-vm:~/openvswitch/openvswitch-2.15.0# modprobe nf_nat_ipv4
然后insmod openvswitch.ko就可以成功了。
下面继续重启安装
make modules_install
modprobe openvswitch
重启ovs
/etc/init.d/openvswitch-switch start
ovsdb-tool create /usr/local/etc/openvswitch/conf.db /usr/local/share/openvswitch/vswitch.ovsschema
ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \--remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach --log-file
ovs-vsctl --no-wait init
ovs-vswitchd --pidfile --detach
启动mininet后,h1 ping h2。打开一个终端输入dmesg,在最下方可以看到加打印的信息。
[20210829_14:20:01][16916.135075]
[20210829_14:20:01] [ovs_vport_receive]546!!!print1 !!!
[20210829_14:20:01][16916.135111]
[20210829_14:20:01] [ovs_vport_receive]546!!!print1 !!!
[20210829_14:20:01][16917.139510]
[20210829_14:20:01] [ovs_vport_receive]546!!!print1 !!!
[20210829_14:20:01][16917.139553]
[20210829_14:20:01] [ovs_vport_receive]546!!!print1 !!!
参考文档:
用printk命令插入到OVS源码中进行调式
linux内核插入模块时 Unknown symbol in module
ovs 内核态加打印调试相关推荐
- OVS 内核CT实现
文章目录 引言 OVS CT 定义 CT 匹配域 CT 动作 TCP 使用范例 TCP SYN包 TCP SYN-ACK 包 TCP ACK 包 TCP 断连 OVS 内核态 CT 实现 CT 实现框 ...
- 在调试器里看LINUX内核态栈溢出
本文来源: 格友 | 格蠹老雷 图灵最先发明了栈,但没有给它取名字.德国人鲍尔也"发明"了栈,取名叫酒窖.澳大利亚人汉布林也"发明"了栈,取名叫弹夹.195 ...
- 42.Linux应用调试-初步制作系统调用(用户态-内核态)
1首先来讲讲应用程序如何实现系统调用(用户态->内核态)? 我们以应用程序的write()函数为例: 1)首先用户态的write()函数会进入glibc库,里面会将write()转换为swi(S ...
- 详解Linux内核态调试工具kdump
目录 1.kdump介绍 1.1.kexec及其实现机制 1.2.几个基本概念 1.3.kdump机制 1.4.kdump执行流程 2.Kdump配置与使用 2.1.内核配置 2.2.安装kdump ...
- linux内核快速倒车,初探Linux内核态——通过proc文件系统作快速问题定位
这篇博客的内容完全是关于现代Linux内核的.换句话说,指的是与RHEL6一样使用的2.6.3x系列内核,而不是古老的RHEL5所使用的2.6.18内核(都什么鬼了?!),虽然大部分企业都还在使用RH ...
- 通过/proc查看Linux内核态调用栈来定位问题
文章目录 1.定位一个"运行慢"的进程 2.strace -cp 27288 3. pstack 27288 3.进程状态和WCHAN字段 4.进程有什么活动或者完全挂死了? 5. ...
- Linux用户态和内核态
究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能和代码的逻辑性上,先看一个例子: 1)例 ...
- Linux预备知识(三):系统调用-用户态/内核态
1)示例 void testfork() { if(0 = = fork()){ printf("create new process success!\n"); }printf( ...
- 文件描述符在内核态下的一些小把戏
http://bbs.chinaunix.net/thread-1928306-1-1.html 前面的话: linux环境:虚拟机VMware Server上安装的ubuntu10.4,通过putt ...
- 多线程之:用户态和内核态的区别
一:大话版用户态和内核态 (1)用户态和内核态的概念? --->内核态: CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序 ---& ...
最新文章
- Http协议中的方法
- 机器人编程与python语言的区别_儿童编程和机器人编程有啥区别?
- Java中的双重检查锁定
- css z-index
- zebra(斑马)PDA扫码uniapp程序小demo
- leetcode 326 [easy]--- Power of Three
- 全球互联网进入后美国时代:在世界互联网大会上的演讲
- AMI与HDB3的matlab实现
- HEAD detached from XXX
- 服务器的丢包率一般与什么有关
- 【24】搭建FCN语义分割网络完成自己数据库图像分割(1)
- Es tut noch weh 双语歌词
- 江湖2 java_热血江湖2手游一键端源码搭建教程+APP端+WEB端+GM工具
- 用PS怎样处理一张文件照片,打印出来呈灰色不够清晰的纸张,使文字更黑,纸张更白
- Netty-Socketio API
- 找出数组中第k大小的数,输出数所在的位置
- 深入理解Render阶段Fiber树的初始化与更新
- Chrome 浏览器全球大翻车?让 20 多亿用户无网可上
- 一个流氓软件会有哪些典型特征?
- 【TI-mmWave】一、IWR6843ISK-ODS毫米波雷达【固件烧写和上手使用】流程
热门文章
- jQuery砸金蛋抽奖活动php源码
- 傻瓜教学——什么是常量?常量可以分几类?它们分别又是什么?又有什么含义?
- ssh关闭linux的网卡,linux操作系统修改网卡mac地址 ssh -X
- 论文笔记(显微图像拼接)——A fast algorithm for material image sequential stitching
- Linux perf 事件调度算法
- 2017年杭州市大学生自主创业政策
- 信息收集(成功就是99%的运气+1%的搜索引擎)
- amr文件怎么转换成mp3?
- 详解RS232、RS485、RS422、串口和握手
- 计算机主机箱背后的接口,计算机主机背面有哪些接口