Wo wird die Routing-Tabelle intern im Linux-Kernel gespeichert?

11

route -nWo genau (von welchen structs) werden die angezeigten Informationen abgerufen, wenn ich sie ausführe ?

Ich habe versucht, es auszuführen, strace route -naber ich habe mir nicht geholfen, den richtigen Speicherort zu finden.

Syntagma
quelle
Es ist im Speicher gespeichert. Suchen Sie nach der Speicheradresse?
Bandrami
@Bandrami Ich würde gerne sehen, was structfür das Speichern der Informationen verantwortlich ist.
Syntagma
Für alle, die nach der Datei auf der Festplatte suchen, wird sie entweder aus dem erstellt, was der DHCP-Server ausgibt, oder aus dem, was /etc/sysconfig/network-scripts/ifcfg-${DEV}in einfachen Fällen und / oder aus dem, was /etc/sysconfig/network-scripts/route-${DEV}in komplizierteren Fällen zu finden ist (im Fall von Red Hat / CentOS) 7). Die letztere Datei enthält die Ausgabe von ip -r. Siehe Hinzufügen einer statischen Route unter CentOS .
David Tonhofer

Antworten:

16

Das routeoder das ipDienstprogramm erhalten ihre Informationen von einem Pseudo-Dateisystem namens procfs. Es wird normalerweise unter montiert /proc. Es gibt eine Datei namens /proc/net/route, in der Sie die IP-Routing-Tabelle des Kernels sehen können. Sie können catstattdessen die Routing-Tabelle mit drucken, aber das Routing- Dienstprogramm formatiert die vom Menschen lesbare Ausgabe, da die IP-Adressen in hexadezimaler Form gespeichert sind.

Diese Datei ist nicht nur eine normale Datei. Es wird immer genau zu dem Zeitpunkt generiert, zu dem es geöffnet wird, um zu versuchen, alle Dateien im proc-Dateisystem zu lesen.

Wenn Sie interessiert sind, wie diese Datei geschrieben wird, müssen Sie sich die Kernelquellen ansehen: Diese Funktion gibt die Routing-Tabelle aus. Sie sehen in Zeile 2510 , dass die Kopfzeile der Routing-Tabelle gedruckt wird. Die Routing-Tabelle scheint sich hauptsächlich in der Struktur zu befinden fib_info, die in der Header-Datei ip_fib.h, Zeile 98 definiert ist .

Chaos
quelle