Onde a tabela de roteamento é armazenada internamente no kernel do Linux?

11

Quando executo route -n, de onde exatamente (de quais struct) as informações exibidas são recuperadas?

Tentei executar, strace route -nmas não me ajudou a encontrar o local certo em que está armazenado.

sintagma
fonte
Está armazenado na memória. Você está procurando o endereço de memória em que está?
Bandrami
@ Bandrami Gostaria de ver o que structé responsável por manter as informações.
Syntagma
Para quem procura o arquivo em disco, ele é construído a partir do que o servidor DHCP fornecer, ou do que pode ser encontrado em /etc/sysconfig/network-scripts/ifcfg-${DEV}casos simples e / ou do que pode ser encontrado em /etc/sysconfig/network-scripts/route-${DEV}casos mais complicados (caso do Red Hat / CentOS 7) O último arquivo contém a saída de ip -r. Consulte Adicionar uma rota estática no CentOS .
David Tonhofer 2/11

Respostas:

16

O utilitário routeou ipobtém suas informações de um pseudo sistema de arquivos chamado procfs. Normalmente é montado embaixo /proc. Há um arquivo chamado /proc/net/route, onde você pode ver a tabela de roteamento IP do kernel. Em catvez disso, você pode imprimir a tabela de roteamento , mas o utilitário de rota formata a saída legível por humanos, porque os endereços IP são armazenados em hexadecimal.

Esse arquivo não é apenas um arquivo normal. É sempre gerado exatamente no momento em que é aberto, com uma tentativa de leitura, como todos os arquivos no sistema de arquivos proc.

Se você está interessado em saber como esse arquivo é gravado, é necessário examinar as fontes do kernel: Essa função gera a tabela de roteamento. Você vê na linha 2510 , o cabeçalho da tabela de roteamento é impresso. A tabela de roteamento parece estar principalmente na estrutura fib_infodefinida no arquivo de cabeçalho ip_fib.h, linha 98 .

caos
fonte