ovs 内核态加打印调试

本文档详细记录了如何在Open vSwitch (OVS) 中添加printk调试语句,并在遇到insmod模块加载时的'Unknown symbol in module'错误时,如何通过检查依赖、加载依赖模块来解决问题。通过重新编译OVS,停用、卸载旧模块,然后加载新编译的模块,最终成功实现内核调试打印。
摘要由CSDN通过智能技术生成

我想在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值