10 虛擬網絡卡驅動

2021-10-18 22:21:35 字數 3130 閱讀 7302

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表示虛擬的是點對點裝置,...