Re: 请问网卡驱动是怎么向ip层返回数据的??(重发) [re: wheelz] | |
|
网卡接收到数据,先申请sk_buff,把数据DMA到sk_buff,然后调用netif_rx,把数据包加入队列。此后的处理就和网卡无关了。
后续处理是在softirq中(以前叫bottom_half)。每次中断返回前内核会检查softirq队列。对于网络数据包接收,会调用处理函数net_rx_action。(初始化网络的时候在net_dev_init函数中将NET_RX_SOFTIRQ指向了net_rx_action,请查阅代码)。 (注意:以上处理过程是常规的方法。现在一般采用POLL方法,处理过程会有所不同)
net_rx_action ---> process_backlog ----> netif_receive_skb
在netif_receive_skb中根据注册的网络协议调用相关接口。对于IP协议就是ip_rcv,开始数据包的IP层之旅。
下面就到了PRE_ROUTING的HOOK点了。接着就是找路、判断是LOCAL_IN还是FORWARD、按各自的方式处理。
|
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!