下圖簡單描述了網絡卡驅動與linux核心之間的聯絡:
關於上圖的一些說明:
系統初始化:
1. 協議模組呼叫 dev_add_pack() 來註冊協議處理函式到鍊錶 &ptype_base;
2. __init br_init() 用於初始化橋接相關的操作;
3. __init net_dev_init() 初始化了兩個軟中斷;
網絡卡驅動初始化:
1. 網絡卡驅動在其 probe() 函式裡面初始化 net_device 結構體,用來描述網絡卡,以及提供操作網絡卡的介面;
配置網絡卡:
1. 當我們通過ifconfig來配置網絡卡時,會呼叫到net_device->open(),該函式最主要的是註冊了乙個中斷(當網絡卡接收到資料或資料傳送完成會觸發中斷);
資料的傳送與接收:
1. 當我們需要傳送資料時,最終呼叫的是網絡卡驅動提供的函式:net_device->hard_start_xmit();
2. 當我們接收到資料時,會觸發中斷,中斷處理函式呼叫會呼叫核心函式來接收資料,最終由驅動程式呼叫核心函式netif_receive_skb()
3. 網絡卡的中斷處理函式在呼叫核心函式接收資料時又分為非napi/napi兩種方式;
4. napi方式涉及到中斷的下半部處理的概念以及軟中斷。
5. 報文通過netif_receive_skb()送入協議棧之後,首先判斷需不需要進行橋接處理;
6. 如果報文沒有被橋接**處理,再呼叫協議處理函式來處理;
LINUX一網絡卡多IP設定
方法1 少量ip手動繫結 這裡以繫結ip到eth0為例,其它網絡卡的話修改相應的檔名即可 1.複製ifcfg eth0的網絡卡配置檔案並改名為ifcfg eth0 0 root akinlau cp etc sysconfig network scripts ifcfg eth0 etc sysco...
DPDK 收發包處理流程(一)(網絡卡驅動註冊)
本文基於dpdk 1.8.0分析。網絡卡驅動模型一般包含三層,即,pci匯流排裝置 網絡卡裝置以及網絡卡裝置的私有資料結構,即將裝置的共性一層層的抽象,pci匯流排裝置包含網絡卡裝置,網絡卡裝置又包含其私有資料結構。在dpdk中,首先會註冊裝置驅動,然後查詢當前系統有哪些pci裝置,並通過pci i...
linux網路 (一) 網路配置
1.liunx網路 1.1介面和命名規則 eth 0 9 乙太網介面 wlan 0 9 無線網絡卡介面 lo 本地回環介面 1.2linux常規網路配置檔案 1.etc hosts 主機檔案 2.etc resolv.conf dns檔案 3.etc sysconfig network script...