PF_RING:dev_add_pcak error
时间:2010-05-19
来源:互联网
小弟现在需要用pf_ring来提高linux抓包性能(用于ARM开发板上,Linux 2.6.23.1),千辛万苦把pf_ring.ko(一内核模块)编译出来之后,一insmod,就导致板子重启,后来我一个个函数排查,发现是dev_add_pack()出问题了,因为当我把它注释掉之后加载卸载都没问题,当然,这个一注释掉需要的功能就没有了。下面我贴一下调用dev_add_pack()的代码和其本身的代码:
void register_device_handler(void) {
if(transparent_mode != standard_linux_path) return;
prot_hook.func = packet_rcv;
prot_hook.type = htons(ETH_P_ALL);
dev_add_pack(&prot_hook);
}
void dev_add_pack(struct packet_type *pt)
{
int hash;
spin_lock_bh(&ptype_lock);
if (pt->type == htons(ETH_P_ALL))
list_add_rcu(&pt->list, &ptype_all);
else {
hash = ntohs(pt->type) & 15;
list_add_rcu(&pt->list, &ptype_base[hash]);
}
spin_unlock_bh(&ptype_lock);
}
希望高手指点一下这是什么原因,小弟在此谢过!
void register_device_handler(void) {
if(transparent_mode != standard_linux_path) return;
prot_hook.func = packet_rcv;
prot_hook.type = htons(ETH_P_ALL);
dev_add_pack(&prot_hook);
}
void dev_add_pack(struct packet_type *pt)
{
int hash;
spin_lock_bh(&ptype_lock);
if (pt->type == htons(ETH_P_ALL))
list_add_rcu(&pt->list, &ptype_all);
else {
hash = ntohs(pt->type) & 15;
list_add_rcu(&pt->list, &ptype_base[hash]);
}
spin_unlock_bh(&ptype_lock);
}
希望高手指点一下这是什么原因,小弟在此谢过!
作者: yu_single 发布时间: 2010-05-19
(1)dev_add_pack函数自身不会问题,IP4,IP6,IPX等
协议栈都是透过此函数添加的,并运转良好。
(2)问题最可能出现在你自身的封包过滤函数packet_rcv,
上。你在该函数中,drop掉所有skb,然后返回0,看看
是否还有重启现象
(3)如果没有,就确认是packet_rcv出问题了。
协议栈都是透过此函数添加的,并运转良好。
(2)问题最可能出现在你自身的封包过滤函数packet_rcv,
上。你在该函数中,drop掉所有skb,然后返回0,看看
是否还有重启现象
(3)如果没有,就确认是packet_rcv出问题了。
作者: linux_sir_huang 发布时间: 2010-05-20
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28