Где таблица маршрутизации хранится внутри ядра Linux?

11

Когда я выполняю route -n, откуда именно (откуда struct) извлекается отображаемая информация?

Я пытался выполнить, strace route -nно я не помог мне найти правильное место, где он хранится.

синтагма
источник
1
Пожалуйста, пройдите этот superuser.com/questions/322717/how-does-route-n-work-in-linux
Сри
Он хранится в памяти. Вы ищете адрес памяти, по которому он находится?
Бандрами
@Bandrami Я хотел бы увидеть, что structотвечает за хранение информации.
синтагма
Для тех, кто ищет файл на диске, он либо создается из того, что выдает DHCP-сервер, либо из того, что можно найти /etc/sysconfig/network-scripts/ifcfg-${DEV}в простых случаях, и / или из того, что можно найти /etc/sysconfig/network-scripts/route-${DEV}в более запутанных случаях (в случае Red Hat / CentOS). 7). Последний файл содержит вывод ip -r. См. Добавление статического маршрута в CentOS .
Дэвид Тонхофер

Ответы:

16

routeИли ipутилиты получают информацию из псевдо файловой системы называется procfs. Обычно устанавливается под /proc. Существует файл с именем /proc/net/route, где вы можете увидеть таблицу IP-маршрутизации ядра. catВместо этого вы можете распечатать таблицу маршрутизации , но утилита маршрутизации форматирует выходные данные, удобные для чтения, поскольку IP-адреса хранятся в шестнадцатеричном виде.

Этот файл не просто обычный файл. Он всегда генерируется ровно в тот момент, когда он открывается при попытке прочитать, как и все файлы в файловой системе proc.

Если вы заинтересованы в том, как записан этот файл, вам нужно взглянуть на исходные коды ядра: эта функция выводит таблицу маршрутизации. Вы видите в строке 2510 заголовок таблицы маршрутизации. Таблица маршрутизации в основном представлена ​​в структуре fib_info, определенной в заголовочном файле ip_fib.h, строка 98 .

хаос
источник