免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 40415 | 回复: 12

netif_rx把sk_buff提交到哪儿去了 什么时候调用netif_receive_skb,netif_rx [复制链接]

论坛徽章:
0
发表于 2008-07-04 20:42 |显示全部楼层
5可用积分
LDD3上说:
The last step in packet reception is performed by netif_rx, which hands off the socket buffer to the upper layers

想问一句netif_rx把sk_buff提交到哪一层去了???LDD3上介绍的网络驱动对应与OSI模型的哪些层???上面这句英语的upper layers指的是是OSI模型里的哪一层。


Packets should be fed to the kernel with netif_receive_skb, rather than netif_rx.

什么时候把包传递给内核,什么时候传递给上一层。即什么时候调用netif_receive_skb,什么时候调用netif_rx??、有什么区别

[ 本帖最后由 lovesunshine 于 2008-7-4 21:02 编辑 ]

最佳答案

查看完整内容

楼主看看这个吧, 相当不错:http://linux.chinaunix.net/bbs/viewthread.php?tid=886985&extra=

论坛徽章:
0
发表于 2008-07-04 20:42 |显示全部楼层
楼主看看这个吧, 相当不错:

http://linux.chinaunix.net/bbs/v ... d=886985&extra=

论坛徽章:
0
发表于 2008-07-04 21:33 |显示全部楼层
netif_rx是旧的收包函数
比如在某个网卡收到一个包后,首先就是调用这个函数

netif_rx把包放入一个每CPU队列:
__skb_queue_tail(&queue->input_pkt_queue, skb);
并且raise软中断NET_RX_SOFTIRQ,让它进一步处理包,因为收包是在网卡驱动的中断中

最后软中断处理函数 net_rx_action会得到运行

这个函数会对每个收到包的设备调用其设备的出队列函数, 把包从上面的队列中拿出来(process_backlog函数)
拿出来之后就会调用netif_receive_skb开始靠近协议栈

你自己去看看这个函数,有很多人可能要处理它,比如PF_PACKET(tcpdump),bridge,等,如果最后包还在,那么就会进入协议栈的3层,对ipv4的包,调用了ipv4的包接收函数,ip_rcv,这个函数在简单的校验之后会到netfilter,如果还幸存,那就复杂了, 比如典型的最后就到tcp或者udp的收包程序,它们检查有没有socket需要,不需要就扔掉等

评分

参与人数 1信誉积分 +5 收起 理由
thinkdancer + 5

查看全部评分

论坛徽章:
0
发表于 2008-07-04 22:21 |显示全部楼层
我是这样理解的:

在netif_rx函数中会调用netif_rx_schedule, 然后该函数又会去调用__netif_rx_schedule
在函数__netif_rx_schedule中会去触发软中断NET_RX_SOFTIRQ, 也即是去调用net_rx_action.
然后在net_rx_action函数中会去调用设备的poll函数, 它是设备自己注册的.
在设备的poll函数中, 会去调用neif_receive_skb函数,  在该函数中有下面一条语句 pt_prev->func, 此处的func为一个函数指针, 在之前的注册中设置为ip_rcv.
因此, 就完成了从链路层上传到网络层的这一个过程了.

论坛徽章:
0
发表于 2008-07-04 22:27 |显示全部楼层
2楼的解释貌似好理解一点

[ 本帖最后由 lovesunshine 于 2008-7-4 22:33 编辑 ]

论坛徽章:
0
发表于 2008-07-04 22:30 |显示全部楼层
4楼给的东东 不错不错啊,非常感谢  


特别喜欢这个网站

论坛徽章:
0
发表于 2008-07-04 22:31 |显示全部楼层
分虽少 怎么散分???

论坛徽章:
0
发表于 2008-07-04 22:35 |显示全部楼层
本版精华有很多高手写的网络好文

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
发表于 2011-06-19 20:49 |显示全部楼层
向各位大神学习!

论坛徽章:
0
发表于 2012-12-07 17:38 |显示全部楼层
大牛好多啊,浏览你们的老帖,都能让俺受益匪浅
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP