1. 程式人生 > >linux核心--網絡卡接收資料包的函式呼叫關係

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