Crear un alias para la interfaz Loopback con un nombre arbitrario

Crear un alias para la interfaz Loopback con un nombre arbitrario

Tengo un problema extraño que parece bastante simple pero que hasta ahora se me ha escapado. Estoy intentando admitir una aplicación heredada que tiene un nombre de dispositivo Ethernet codificado ("eth0"). Me han dicho que esta codificación no cambiará.

Ahora, estamos intentando incorporar este software a un sistema operativo mucho más moderno (Fedora 17) que utiliza nombres de dispositivos persistentes y, como tal, no tiene una interfaz "eth0". Además, este esfuerzo requiere que use la interfaz de bucle invertido para comunicarme con otro módulo como parte de un esfuerzo de virtualización (en realidad hay MUCHO más sucediendo aquí, pero tomaría demasiado tiempo describirlo).

Soy consciente de que es posible crear un alias con la forma "lo:0", sin embargo, el software busca explícitamente "eth0" y mi investigación y pruebas hasta ahora han indicado que el esquema de nombres "iface:N" es el Sólo uno es compatible.

Entonces, en resumen:

¿Hay alguna forma de crear una interfaz virtual llamada "eth0" que se comunique a través de lo?

Respuesta1

Puede que haya una forma más sencilla. Pero si compilar su propio kernel es una opción, puede crear un controlador basado enel controlador de loopback existente, cambie el nombre (línea 193 en esa versión) y cargue el módulo. Tendría una segunda interfaz loopback con el nombre que desee.

Editar: para ser más específico, me refiero a agregarotrocontrolador de bucle invertido, que no reemplaza al existente. Después de copiar drivers/net/loopback.c a drivers/net/loopback2.c, aplique el siguiente parche (realizado sobre 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;

Me doy cuenta de que simplemente cargar el módulo no será suficiente, ya que esto modifica el código en net/core/dev.c. También tendrás que instalar el kernel parcheado.

información relacionada