Dove si trova la tabella di routing memorizzata internamente nel kernel Linux?


11

Quando eseguo route -n, da dove (esattamente quali struct) vengono recuperate le informazioni visualizzate?

Ho provato a eseguire strace route -nma non mi ha aiutato a trovare il posto giusto in cui è memorizzato.



È memorizzato nella memoria. Stai cercando l'indirizzo di memoria in cui si trova?
Bandrami,

@Bandrami Vorrei vedere cosa structè responsabile del possesso delle informazioni.
syntagma,

Per chiunque cerchi il file su disco, è o costruito da qualunque cosa il server DHCP emetta, o da ciò che può essere trovato in /etc/sysconfig/network-scripts/ifcfg-${DEV}casi semplici e / o da ciò che può essere trovato in /etc/sysconfig/network-scripts/route-${DEV}casi più contorti (caso di Red Hat / CentOS 7). Quest'ultimo file contiene l'output di ip -r. Vedi Aggiungi un percorso statico su CentOS .
David Tonhofer,

Risposte:


16

L' utilità routeo ipottiene le informazioni da un pseudo filesystem chiamato procfs. Normalmente è montato sotto /proc. C'è un file chiamato /proc/net/route, dove puoi vedere la tabella di routing IP del kernel. È invece possibile stampare la tabella di routing con cat, ma l'utilità di route formatta l'output leggibile dall'uomo, poiché gli indirizzi IP sono memorizzati in esadecimale.

Quel file non è solo un file normale. Viene sempre generato esattamente nel momento in cui viene aperto con un tentativo di lettura, come tutti i file nel filesystem proc.

Se sei interessato a come è scritto quel file, allora devi guardare i sorgenti del kernel: quella funzione genera la tabella di routing. Si vede alla riga 2510 , viene stampata l'intestazione della tabella di routing. La tabella di routing sembra essere principalmente nella struttura fib_infodefinita nel file di intestazione ip_fib.h, riga 98 .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.