網絡卡驅動收發包過程

2021-08-28 00:12:14 字數 987 閱讀 7424

網絡卡工作在物理層和資料鏈路層,主要由phy/mac晶元、tx/rx fifo、dma等組成,其中網線通過變壓器接phy晶元、phy晶元通過mii接mac晶元、mac晶元接pci匯流排

phy晶元主要負責:csma/cd、模數轉換、編譯碼、串並轉換

mac晶元主要負責:

位元流和幀的轉換:7位元組的前導碼preamble和1位元組的幀首定界符sfd crc校驗

packet filtering:l2 filtering、vlan filtering、manageability / host filtering

no napi:mac每收到乙個乙太網包,都會產生乙個接收中斷給cpu,即完全靠中斷方式來收包缺點是當網路流量很大時,cpu大部分時間都耗在了處理mac的中斷。

netpoll:在網路和i/o子系統尚不能完整可用時,模擬了來自指定裝置的中斷,即輪詢收包。缺點是實時性差。

napi: 採用 中斷 + 輪詢 的方式:mac收到乙個包來後會產生接收中斷,但是馬上關閉。直到收夠了netdev_max_backlog個包(預設300),或者收完mac上所有包後,才再開啟接收中斷

硬中斷函式把napi_struct加入cpu的poll_list,軟中斷函式net_rx_action()遍歷poll_list,執行poll函式。

每個網路裝置(mac層)都有自己的net_device資料結構,這個結構上有napi_struct。

每當收到資料報時,網路裝置驅動會把自己的napi_struct掛到cpu私有變數上。

這樣在軟中斷時,net_rx_action會遍歷cpu私有變數的poll_list,

執行上面所掛的napi_struct結構的poll鉤子函式,將資料報從驅動傳到網路協議棧。

網絡卡驅動收發包過程

網絡卡工作在物理層和資料鏈路層,主要由phy mac晶元 tx rx fifo dma等組成,其中網線通過變壓器接phy晶元 phy晶元通過mii接mac晶元 mac晶元接pci匯流排 phy晶元主要負責 csma cd 模數轉換 編譯碼 串並轉換 mac晶元主要負責 intel的千兆網絡卡以825...

網絡卡驅動收發包過程

網絡卡工作在物理層和資料鏈路層,主要由phy mac晶元 tx rx fifo dma等組成,其中網線通過變壓器接phy晶元 phy晶元通過mii接mac晶元 mac晶元接pci匯流排 phy晶元主要負責 csma cd 模數轉換 編譯碼 串並轉換 mac晶元主要負責 intel的千兆網絡卡以825...

Linux 網絡卡驅動學習(五)(收發包具體過程)

裝置初始化函式 網路裝置驅動在 linux 核心中是以核心模組的形式存在的,對應於模組的初始化,需要提供乙個初始化函式來初始化網路裝置的硬體暫存器 配置 dma 以及初始化相關核心變數等。裝置初始化函式在核心模組被載入時呼叫,它的函式形式如下 static int init xx init void...