Linux

使用任意名稱創建到 Loopback 介面的別名

  • May 27, 2013

我有一個奇怪的問題,看起來很簡單,但到目前為止我都躲開了。我正在嘗試支持具有硬編碼乙太網設備名稱(“eth0”)的舊版應用程序。有人告訴我,這種硬編碼不會改變。

現在,我們正試圖將該軟體引入一個更現代的作業系統(Fedora 17)中,該作業系統使用持久設備命名,因此沒有“eth0”介面。此外,這項工作要求我使用環回介面與另一個模組進行通信,作為虛擬化工作的一部分(實際上這裡還有很多事情要做,但這需要太長時間來描述)。

我知道可以創建形式為“lo:0”的別名,但是該軟體正在明確尋找“eth0”,到目前為止我的研究和測試表明“iface:N”命名方案是只支持一個。

所以,簡而言之:

有沒有辦法創建一個名為“eth0”的虛擬介面,通過 lo 進行通信?

可能有更簡單的方法。但是,如果可以選擇編譯自己的核心,則可以基於現有的 loopback driver創建一個驅動程序,更改名稱(該版本中的第 193 行),然後載入模組。您將擁有第二個具有所需名稱的環回介面。

編輯:更具體地說,我的意思是添加另一個環回驅動程序,而不是替換現有的驅動程序。將驅動程序/net/loopback.c 複製到驅動程序/net/loopback2.c 後,應用以下更新檔(在 3.8 之上完成):

diff --git a/drivers/net/Makefile b/drivers/net/Makefile
index 335db78..cba692f 100644
--- a/drivers/net/Makefile
+++ b/drivers/net/Makefile
@@ -13,7 +13,7 @@ obj-$(CONFIG_MACVLAN) += macvlan.o
obj-$(CONFIG_MACVTAP) += macvtap.o
obj-$(CONFIG_MII) += mii.o
obj-$(CONFIG_MDIO) += mdio.o
-obj-$(CONFIG_NET) += Space.o loopback.o
+obj-$(CONFIG_NET) += Space.o loopback.o loopback2.o
obj-$(CONFIG_NETCONSOLE) += netconsole.o
obj-$(CONFIG_PHYLIB) += phy/
obj-$(CONFIG_RIONET) += rionet.o
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 9ef07d0..ed9d82d 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -2718,6 +2718,7 @@ static inline bool netif_supports_nofcs(struct net_device *dev)
}

extern struct pernet_operations __net_initdata loopback_net_ops;
+extern struct pernet_operations __net_initdata loopback2_net_ops;

/* Logging, debugging and troubleshooting/diagnostic helpers. */

diff --git a/net/core/dev.c b/net/core/dev.c
index f64e439..7c1cffb 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -6834,6 +6834,9 @@ static int __init net_dev_init(void)
       if (register_pernet_device(&loopback_net_ops))
               goto out;

+       if (register_pernet_device(&loopback2_net_ops))
+               goto out;
+
       if (register_pernet_device(&default_device_ops))
               goto out;

我意識到僅僅載入模組是不夠的,因為這會修改 net/core/dev.c 中的程式碼。您還將安裝已修補的核心。

引用自:https://unix.stackexchange.com/questions/73602