Criando um alias para a interface de loopback com um nome arbitrário

2

Eu tenho um problema estranho que parece bastante simples, mas que me evitou até agora. Eu estou tentando suportar um aplicativo herdado que tem um nome de dispositivo de ethernet codificado ("eth0"). Esta codificação, me disseram, não vai mudar.

Agora, estamos tentando trazer este software para um SO muito mais moderno (Fedora 17) que usa nomes de dispositivos persistentes e, como tal, não possui uma interface "eth0". Além disso, esse esforço requer que eu use a interface de loopback para comunicação com outro módulo como parte de um esforço de virtualização (na verdade, há muito mais acontecendo aqui, mas isso levaria muito tempo para descrever).

Estou ciente de que é possível criar um alias na forma "lo: 0", no entanto, o software está procurando explicitamente por "eth0" e minha pesquisa e testes até agora indicaram que a nomenclatura "iface: N" esquema é o único suportado.

Então, resumindo:

Existe alguma maneira de criar uma interface virtual chamada "eth0" que se comunica por lá?

    
por phobos51594 25.04.2013 / 00:38

1 resposta

1

Pode haver uma maneira mais simples. Mas se compilar seu próprio kernel é uma opção, você poderia criar um driver baseado em o driver de loopback existente , altere o nome (linha 193 nessa versão) e carregue o módulo. Você teria uma segunda interface de loopback com o nome desejado.

Editar: Para ser mais específico, quero dizer adicionando outro driver de loopback, não substituindo o existente. Depois de copiar drivers / net / loopback.c para drivers / net / loopback2.c, aplique o seguinte patch (feito em cima de 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;

Estou percebendo que simplesmente carregar o módulo não será suficiente, já que isso modifica o código em net / core / dev.c. Você também terá a instalação do kernel corrigido.

    
por 25.04.2013 / 04:40