免费注册 查看新帖 |

Chinaunix

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

[内核模块] linux内核接收网络数据包 驱动函数 net_rx() 调用那一个 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-04-16 21:32 |只看该作者 |倒序浏览
在linux内核中的  网络设备驱动程序有很多,比如在接收网络数据包时候,函数net_rx()就有好几个,在我的linux-3.1.4版本的内核中 分别在文件 atp.c 、at1700.c 、cs89x0.c 和 mac89x0.c中出现

但是不知道是走的那个一个函数,我就在内核中将net_rx()函数出现的地方都写了一个  printk("net_rx()\n"); 语句来 看到底是走的那一个路线 但是 一个地方都没有出现,这是为什么?

期待各位的解答 谢谢

论坛徽章:
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
2 [报告]
发表于 2014-04-17 08:51 |只看该作者
上次好像做过问答了,net_rx应该是驱动自己定义的,你说的应该通用流程中的netif_rx()吧?

论坛徽章:
0
3 [报告]
发表于 2014-04-17 14:05 |只看该作者
net/ipv4/core/dev.c

论坛徽章:
0
4 [报告]
发表于 2014-04-22 15:40 |只看该作者
@humjb_1983 您好 谢谢您的回复,您说的没有错: net_rx应该是驱动自己定义的 !弱弱的问一下:在驱动程序中的 函数   net_rx(struct net_device *dev) 在linux内核中有4个,即在文件at1700.c atp.c cs89x0.c mac89x0.c中均有存在。 我就是不知道在linux 中到底走的是那一个驱动程序,我试着在linux内核中将函数 net_rx(struct net_device *dev) 出现的地方 都打印,但是没有得到打印的结果,所以我不知道,当linux内核接收到网络数据包的时候,到底是那一驱动程序的net_rx在工作,然后调用函数netif_rx 将数据包王上层协议提交的,谢谢

论坛徽章:
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
5 [报告]
发表于 2014-04-22 16:57 |只看该作者
本帖最后由 humjb_1983 于 2014-04-22 16:57 编辑

不是每个驱动都会定义net_rx的,所以,你没用上面说的4中驱动,那么肯定抓不到~
你这种思路有点问题,为啥非要纠结net_rx呢,这个东东本来就是驱动实现的,不是协议栈的必经流程。
如果要确认具体使用的哪种驱动,很简单,看看你用的网卡使用的啥驱动即可:
ethtool -i ethx
确认后,可以在该驱动中关键部分打点,比如中断处理函数中。

另外,也可以直接在netif_rx处,dumpstack()一下,就可以看到调用流程了。

论坛徽章:
0
6 [报告]
发表于 2014-04-22 17:25 |只看该作者
@humjb_1983 谢谢您 我的目的是找到是那一个驱动程序 在运行 ,然后改动驱动程序的代码,您说得对 我的 思路有问题,主要是我是菜鸟,看了基本关于linux内核的书,介绍的驱动程序 都是有 net_rx这个函数,我就认为了 每个驱动都有。只能说说完学习没有方法,没有完全学习到位 谢谢,我找到 的地方了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP