¿Dónde se almacena la tabla de enrutamiento internamente en el kernel de Linux?

11

Cuando ejecuto route -n, ¿de dónde exactamente (de qué structs) se recupera la información que se muestra?

Intenté ejecutar strace route -npero no me ayudó a encontrar el lugar correcto donde está almacenado.

sintagma
fuente
Se almacena en la memoria. ¿Estás buscando la dirección de memoria en la que está?
Bandrami
@Bandrami Me gustaría ver qué structes responsable de mantener la información.
sintagma
Para cualquiera que busque el archivo en el disco, se construye a partir de lo que el servidor DHCP ofrece, o de lo que se puede encontrar en /etc/sysconfig/network-scripts/ifcfg-${DEV}casos simples y / o de lo que se puede encontrar en /etc/sysconfig/network-scripts/route-${DEV}casos más complicados (caso de Red Hat / CentOS 7) El último archivo contiene la salida de ip -r. Consulte Agregar una ruta estática en CentOS .
David Tonhofer el

Respuestas:

16

El routeo la iputilidad obtienen su información de un pseudo sistema de archivos llamado procfs. Normalmente está montado debajo /proc. Hay un archivo llamado /proc/net/route, donde puede ver la tabla de enrutamiento IP del núcleo. En su lugar, puede imprimir la tabla de enrutamiento cat, pero la utilidad de ruta formatea la salida legible por humanos, porque las direcciones IP se almacenan en hexadecimal.

Ese archivo no es solo un archivo normal. Siempre se genera exactamente en el momento en que se abre con un intento de lectura, como todos los archivos en el sistema de archivos proc.

Si está interesado en cómo se escribe ese archivo, debe mirar las fuentes del núcleo: esa función genera la tabla de enrutamiento. Verá en la línea 2510 , se imprime el encabezado de la tabla de enrutamiento. La tabla de enrutamiento parece estar principalmente en la estructura fib_infoque se define en el archivo de encabezado ip_fib.h, línea 98 .

caos
fuente