免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2021 | 回复: 9
打印 上一主题 下一主题

[内核模块] 难道修改tcp层的ip_local_deliver_finish函数除了直接修改内核编译没有别的办法了吗 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-04 22:07 |只看该作者 |倒序浏览
我采用模块的方式在tcp层和ip层之间加了一层来对skb数据包进行编码解码,这2个编码解码函数编码解码以后还继续交给tcp/ip协议栈处理 但是我发现在接收端接收数据的时候  丢包率非常大。我确定不是链路的问题 因为我发现数据包从下层往上走一直走到ip_local_deliver函数都没有丢包 ,但是走到ip_local_deliver_finish这个函数里丢了。基本上2个数据包就会在这个函数里丢失一个  这是我用netfilter钩子函数用printk打印出来数据包看出来的。比如ip_local_deliver函数最后一句是  return NF_HOOK(NFPROTO_IPV4, NF_INET_LOCAL_IN, skb, skb->dev,NULL,ip_local_deliver_finish);我就在这插入了我自己的处理函数。
这个钩子函数走完后就进入了ip_local_deliver_finish进行处理  我不知道到底在这个函数的哪里出现了问题导致部分数据包被丢失了。所以我想有没有像ip那样的钩子函数可以让我轻松的插入tcp层中添加printk打印数据包来查找原因。或者有没有什么方便的办法来找到丢包的原因 我不想在内核中添加printk重新编译内核太麻烦了   各位大神帮帮忙   谢谢了  

论坛徽章:
1
白羊座
日期:2014-01-05 12:42:56
2 [报告]
发表于 2014-01-05 12:57 |只看该作者
当然系统内核提供了临时修改内存参数

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
3 [报告]
发表于 2014-01-06 08:53 |只看该作者
hellolfh 发表于 2014-01-04 22:07
我采用模块的方式在tcp层和ip层之间加了一层来对skb数据包进行编码解码,这2个编码解码函数编码解码以后还继 ...

systemtap可用,呵呵

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
4 [报告]
发表于 2014-01-06 09:02 |只看该作者
回复 1# hellolfh
看看kprobe的原理自己编写hook,或者用现成的systemtap

   

论坛徽章:
0
5
发表于 2014-01-06 21:10
回复 3# humjb_1983


   多谢指导 谢谢  我查查systemtap

论坛徽章:
0
6
发表于 2014-01-06 21:11
回复 4# 瀚海书香


     感谢指导 谢谢  我查查systemtap

论坛徽章:
0
7
发表于 2014-01-06 21:13
回复 2# gacad


    我是想在内核中添加一些函数 比如printk之类的来查看我插入的模块运行情况  但是我不想用编译内核的方式来修改

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
8 [报告]
发表于 2014-01-07 10:24 |只看该作者
回复 1# hellolfh

最通用的方法,不要爬麻烦。其实搞个虚拟机玩 kernel 话,还是比较方便的。

都走到修给 kernel code 的地步了,还怕编译 kernel 麻烦。这是一对矛盾啊。

   

论坛徽章:
0
9 [报告]
发表于 2014-01-07 15:23 |只看该作者
回复 8# Godbach


    多谢版主大人回复!!!主要是我编译了好多次了  每次耗时挺长的 我也想换成虚拟机了  我插入模块到内核代码总是死机 我做的东西是在两个主机上无线网络通讯的 我可以在一台电脑上建2个虚拟机上模拟两个无线网卡互相通讯吧?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
10 [报告]
发表于 2014-01-07 15:36 |只看该作者
回复 9# hellolfh


一个 PC 物理主机上建多个 虚拟机没问题。至于模拟无线网卡通信,这个我不大确定了。

虚拟机自己用的也是虚拟网卡

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP