Linux NAPI 非NAPI 網絡卡驅動部分

2021-07-11 10:08:06 字數 1250 閱讀 6484

收包:

napi:中斷來了,在上半部中把net_device加入poll_list,sk_buff仍然在裝置自身佇列中,然後下半部軟中斷過程中輪詢所有的裝置,用裝置的poll函式把自己的sk_buff交給上層。

非napi:中斷來了,在上半部中把sk_buff放到本cpu的多裝置共享佇列中,然後下半部軟中斷過程中用預設poll函式(process_backlog)處理共享佇列中的包。

除了napi和非napi,還有netpoll,cpu去輪詢網絡卡。可以繞過協議棧收取skb。可以在debug時使用。

***************====上半部參考各網絡卡裝置驅動*************************==

比如do_irq()->e1000_intr(),napi把裝置掛到本地cpu的softnet_data佇列/非napi把sk_buff掛到cpu共享佇列,這些事情就在這個函式中完成的。

***************====napi/非napi 網絡卡驅動下半部*************************

net_rx_action(軟中斷號)  //這兒napi/非napi都適用

process_backlog(net_device)  //非napi時所有裝置都用這個函式作為預設的dev->poll介面

e1000_clean(net_device)  //napi時e1000的dev->poll()介面

-|如果裝置被關閉或禁止,返回

-|e1000_clean_tx_irq()

-|e1000_unmap_and_free_tx_resource()  //此時資料已經傳送給網絡卡傳送佇列了,所以挨個**dma ring中的skb->data資源。在核心準備好sk_buff之後再對映?

-|e1000_clean_rx_irq()

-|pci_unmap_single()  //對於已經copy以太包的skb->data,解除其dma對映

-|skb_put()  //刪除以太幀尾4位元組

-|netif_receive_skb() //把以太包交付給上層協議棧

-|e1000_alloc_rx_buffers() //重新對映流式dma

發包:

net_tx_action() //網路發包軟中斷,比如nic的tx fifo可用了之後,呼叫此函式

qdisc_restart()

e1000_xmit_frame()

netif_schedule(dev)

配置網路策略中的 NAP 條件

technet 庫 windows server windows server 2008 r2 und windows server 2008 按類別提供的 windows server 內容 windows server 2008 content by category installed hel...

走近NAP功能 全面了解Vista系統安全機制

自windows vista作業系統發布以來,有關uac和windows defender對vista如何進行防護的討論就充斥了整個安全領域。在眾人熱議vista安全機制的同時,人們忽略了nap這個可以改善微軟的安全政策管理與政策執行能力的功能。在保障網路連線的安全性上,微軟其實對nap寄予厚望。n...

現任明教教主NAC2011 微軟NAP

step by step guide demonstrate 802.1x nap enforcement 1 網路拓撲規劃,伺服器角色介紹,交換機的初始化配置。2 在建立ad mingjiao.org 新增dhcp ca角色。建立nap ou,在nap ou裡建立使用者napuser,將napus...