使用任意名稱建立環回介面的別名

使用任意名稱建立環回介面的別名

我有一個奇怪的問題,看起來很簡單,但到目前為止一直困擾著我。我正在嘗試支援具有硬編碼乙太網路設備名稱(“eth0”)的舊應用程式。我被告知,這種硬編碼不會改變。

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

我知道可以創建“lo:0”形式的別名,但是該軟體明確尋找“eth0”,並且迄今為止我的研究和測試表明“iface:N”命名方案是僅支援一項。

所以,簡而言之:

有沒有辦法創建一個名為「eth0」的虛擬接口,透過 lo 進行通訊?

答案1

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

編輯:更具體地說,我的意思是添加其他環回驅動程序,不會取代現有的驅動程式。將 drivers/net/loopback.c 複製到 drivers/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 中的程式碼。您還將安裝修補過的核心。

相關內容