3、測試
回顧字元裝置驅動編寫框架:
回顧塊裝置驅動編寫框架:
--------------- 若干層網路協議–純軟體
hard_start_xmit || /\ (上報)
(發包) / || netif_rx 傳輸的是包,放在sk_buff裡
硬體相關的驅動程式(要提供hard_start_xmit, 有資料時要用netif_rx上報)
硬體
怎麼寫網絡卡驅動程式?
\1. 分配乙個net_device結構體
\2. 設定:
2.1 發包函式: hard_start_xmit
2.2 收到資料時(在中斷處理函式裡)用netif_rx上報資料
2.3 其他設定
\3. 註冊: register_netdevice
ifconfig // 檢視
\3. ping 3.3.3.3 // ping自己成功,這是純軟體概念,與網絡卡硬體層無關
ping 3.3.3.4 // ping別人宕機,需要經過硬體層,使用收發包函式來傳輸,但還沒設定,必然宕機
能夠ping的通自己,說明傳輸時沒有經過硬體相關層,即沒有使用收發包函式就直接返回資料了。
ifconfig // 檢視
\3. ping 3.3.3.3 // ping自己成功,這是純軟體概念,與網絡卡硬體層無關
ping 3.3.3.4 // ping別人成功,經過硬體層設定
問題1:雖然成功ping通別的ip,傳送了6個包,但是缺少統計資訊不能顯示出來;
問題2:並且hwaddr 00:00:00:00:00:00。
ifconfig // 檢視
\3. ping 3.3.3.3 // ping自己成功,這是純軟體概念,與網絡卡硬體層無關
ping 3.3.3.4 // ping成功
改1:更新統計資訊
問題3:但是不能收到別人的包,只能發包
\1. insmod virt_net.ko
ifconfig
\2. ifconfig vnet0 3.3.3.3
ifconfig // 檢視
\3. ping 3.3.3.3 // ping自己成功,這是純軟體概念,與網絡卡硬體層無關
ping 3.3.3.4 // ping成功
改3:虛構乙個包,再使用函式 netif_rx(rx_skb)來提交sk_buff
這樣就可以實現收發功能了
= skb->len;
[外鏈轉存中…(img-fujwxwca-1612338393611)]
問題3:但是不能收到別人的包,只能發包
\1. insmod virt_net.ko
ifconfig
\2. ifconfig vnet0 3.3.3.3
ifconfig // 檢視
\3. ping 3.3.3.3 // ping自己成功,這是純軟體概念,與網絡卡硬體層無關
ping 3.3.3.4 // ping成功
改3:虛構乙個包,再使用函式 netif_rx(rx_skb)來提交sk_buff
[外鏈轉存中…(img-w2ovaeio-1612338393612)]
這樣就可以實現收發功能了
Linux驅動之虛擬網絡卡
底層 工作在核心層的朋友應該有這種感覺,才開始學的時候真的很難,也就是說上手難,我就拿linux驅動來說吧,寫乙個完整的驅動,你得裝乙個虛擬機器跑linux吧,用來編譯驅動程式,虛擬機器裡面需要安裝一些庫和工具,驅動程式必須跑在乙個完整的系統上,所以首先你得搭建好整個系統,你還得了解硬體時序等,這些...
虛擬網絡卡 TUN TAP 驅動程式設計原理
http www.ibm.com developerworks cn linux l tuntap index.html 簡介 虛擬網絡卡tun tap驅動是乙個開源專案,支援很多的類unix平台,openvpn和vtun都是基於它實現隧道包封裝。本文將介紹tun tap驅動的使用並分析虛擬網絡卡t...
虛擬網絡卡TUN TAP驅動程式設計原理
虛擬網絡卡tun tap驅動是乙個開源專案,支援很多的類unix平台,openvpn和vtun都是基於它實現隧道包封裝。本文將介紹tun tap驅動的使用並分析虛擬網絡卡tun tap驅動程式在linux環境下的設計思路。tun tap 驅動程式實現了虛擬網絡卡的功能,tun表示虛擬的是點對點裝置,...