linux内核--网络栈实现分析,Linux内核--网络栈实现分析(二)--数据包的传递过程(上)...

/*

* Receive a packet from a device driver and queue it for the upper

* (protocol) levels.  It always succeeds. This is the recommended

* interface to use.

*    从设备驱动层接受到的数据发送到协议的

*    上层,该函数实际是一个接口。

*/

void netif_rx(struct sk_buff *skb)

{

static int dropping = 0;

/*

* Any received buffers are un-owned and should be discarded

* when freed. These will be updated later as the frames get

* owners.

*/

skb->sk = NULL;

skb->free = 1;

if(skb->stamp.tv_sec==0)

skb->stamp = xtime;

/*

* Check that we aren't overdoing things.

*/

if (!backlog_size)

dropping = 0;

else if (backlog_size > 300)

dropping = 1;

if (dropping)

{

kfree_skb(skb, FREE_READ);

return;

}

/*

* Add it to the "backlog" queue.

*/

#ifdef CONFIG_SKB_CHECK

IS_SKB(skb);

#endif

skb_queue_tail(&backlog,skb);//加入队列backlog

backlog_size++;

/*

* If any packet arrived, mark it for processing after the

* hardware interrupt returns.

*/

mark_bh(NET_BH);//下半部分bottom half技术可以减少中断处理程序的执行时间

return;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值