Gdzie tabela routingu jest przechowywana wewnętrznie w jądrze Linuksa?


12

Kiedy wykonuję route -n, skąd dokładnie (z którego struct) są pobierane wyświetlane informacje?

Próbowałem wykonać, strace route -nale nie pomogłem znaleźć właściwego miejsca, w którym jest przechowywane.



Jest przechowywany w pamięci. Czy szukasz adresu pamięci?
— Bandrami

@ Bandrami Chciałbym zobaczyć, co structjest odpowiedzialne za przechowywanie informacji.
— syntagma

Dla każdego, kto szuka pliku na dysku, jest on albo zbudowany na podstawie tego, co daje serwer DHCP, albo na podstawie tego, co można znaleźć /etc/sysconfig/network-scripts/ifcfg-${DEV}w prostych przypadkach i / lub na podstawie tego, co można znaleźć /etc/sysconfig/network-scripts/route-${DEV}w bardziej skomplikowanych przypadkach (przypadek Red Hat / CentOS 7). Ten ostatni plik zawiera dane wyjściowe ip -r. Zobacz Dodawanie trasy statycznej w CentOS .
— David Tonhofer

Odpowiedzi:


17

Narzędzie routelub ippobiera informacje z pseudo systemu plików o nazwie procfs. Zwykle jest montowany pod /proc. Istnieje plik o nazwie /proc/net/route, w którym można zobaczyć tabelę routingu IP jądra. Zamiast tego możesz wydrukować tabelę routingu cat, ale narzędzie trasy formatuje dane wyjściowe jako czytelne dla człowieka, ponieważ adresy IP są przechowywane w postaci szesnastkowej.

Ten plik nie jest zwykłym plikiem. Jest zawsze generowany dokładnie w momencie otwierania go przy próbie odczytu, tak jak wszystkie pliki w systemie plików proc.

I jesteś interessted jak plik jest napisane, to trzeba szukać w źródłach jądra: To funkcja wyświetla tabelę wyznaczanie trasy. Widzisz w linii 2510 , nagłówek tabeli routingu jest drukowany. Wygląda na to, że tabela routingu znajduje się głównie w strukturze fib_infozdefiniowanej w pliku nagłówkowym ip_fib.h, linia 98 .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.