Linux虛擬回環網路

2021-09-25 08:08:35 字數 2045 閱讀 1235

簡介

本文章主要實現乙個在linux3.4.***下的虛擬網絡卡,並在虛擬網絡卡中實現 ping 的命令。

網路部分的邏輯分層圖如下:

實現簡單的虛擬網絡卡的第一步

virt_net.c 檔案

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

static struct net_device *vnet_dev;

static const struct net_device_ops virt_netdev_ops = ;

static int virt_net_init(void)

module_init(virt_net_init);

module_exit(virt_net_exit);

module_author("[email protected]

,[email protected]");

module_license(「gpl」);

makefile 檔案

kern_dir = ~/wor_lip/linux-3.4.112

all:

make -c $(kern_dir) m=pwdmodules

clean:

make -c $(kern_dir) m=pwdmodules clean

rm -rf modules.order

obj-m += virt_net.o

需要特別提醒的是,至少應該提供 netdev_ops 中的 ndo_start_xmit 方法。

編譯通過後載入。

ifconfig -a 檢視所有網絡卡,

ifconfig vnet0 192.0.0.2,然後就可以 ping 這個位址了,此時如果ping的是192.0.0.1,會呼叫傳送函式,而此部分函式沒有提供傳送函式,便會 kernel panic

mac位址 00:00:00:00:00:00

乙個完整的模擬回環網絡卡程式,實現資料報的自發自收過程

實現思路主要就是交換資料報中的源目的mac頭資訊,源目的ip資訊等功能。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

static struct net_device *vnet_dev;

static int virt_net_send_packet(struct sk_buff *skb, struct net_device *dev)

;static int virt_net_init(void)

module_init(virt_net_init);

module_exit(virt_net_exit);

module_license(「gpl」);

此時可以 ping 相同網段下的不同位址了,比如同上例中的 ping 192.0.0.1 便能成功了。

特殊說明:

網路虛擬化之linux虛擬網路基礎

在linux裡面devic 裝置 與傳統網路概念裡的物理裝置 如交換機 路由器 不同,linux所說的裝置,其背後指的是乙個類似於資料結構 核心模組或裝置驅動這樣的含義。就是說device可能只是軟體系統裡的乙個驅動,乙個函式介面。tap位於二層資料鏈路層,tun位於三層網路層,兩者在linux裡的...

Linux回環網絡卡驅動設計

回環網絡卡驅動 1.回環網絡卡和普通網絡卡的區別是他是虛擬的不是實際的物理網絡卡,它相當於把普通網絡卡的傳送端和接收端短接在一起。2.在核心源 裡的回環網絡卡程式 drivers net loopback.c 不是以乙個模組的形式給出,但是他的初始化 loopback net init 和退出函式 ...

Linux 虛擬化網路技術 虛擬網路協議棧

本文通過 openstack neutron l3 agent 實現的 linux 虛擬路由器來描述 linux 的虛擬網路協議棧。neutron l3 agent 服務,執行在 openstack 的網路節點上,實現了 3 層路由和 nat 功能。利用 linux network namespac...