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.