linux内核--网卡接收数据包的函数调用关系

网卡中断函数 e1000_intr()
     
-------->加入napi链表 __napi_schedule()


-------->启动napi软中断 __raise_softirq_irqoff()


-------->软中断处理函数 net_rx_action()


-------->取napi链表节点,并针对该网卡轮询收包 poll()


-------->轮询完成 napi_complete()


-------->若有网卡组包功能及进行组包 napi_gro_complete()


-------->网卡接收完成,传递到协议栈netif_receive_skb()


-------->__netif_receive_skb()


-------->__netif_receive_skb_core()


-------->查找所有的网络协议处理函数 list_for_each_entry_rcu(ptype, &ptype_all, list) ,由dev_add_pack注册


-------->传递给协议处理函数 deliver_skb()


-------->进入一个协议处理函数atomic_inc(&skb->users)加一,释放kfree_skb(skb)减一,最后一次真正释放空间__kfree_skb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值