Я работал с пользовательскими таблицами маршрутов в Linux, и меня немного смущает некоторая документация и поведение команды "ip route". Кажется, что единственными допустимыми значениями должны быть 0-255 плюс имена, определенные в / etc / iproute2 / rt_tables:
255 local
254 main
253 default
0 unspec
Это оставит 1-252 для пользовательских таблиц. Попытка использовать неопределенное имя таблицы дает ошибку:
$ ip route show table kermit
Error: argument "kermit" is wrong: table id value is invalid
Однако, похоже, я могу без ошибок использовать числа, намного превышающие 255:
$ ip route show table 1000
[no output]
$ ip route add 10.10.10.0/24 dev eth0 table 1000
[no output]
$ ip route show table 1000
10.10.10.0/24 dev eth0 scope link
В какой-то момент все становится еще более странным. Прямо в maxint (2 ^ 31) он «переливается» в локальную таблицу (255):
$ ip route show table 2147483647
[no output]
$ ip route show table 2147483648
[exact output of table 255 (local)]
Кто-нибудь может объяснить, что происходит? Существуют ли на самом деле настраиваемые таблицы маршрутизации maxint, которые можно использовать?
Что касается ядра 2.6, максимальная таблица равна 0xFFFFFFFF (из rtnetlink.h). Однако iproute2 использует целое число со знаком в своем фильтре для поиска, поэтому в 2 ^ 31 он думает, что вы указали недопустимую таблицу, и по умолчанию показывает вам таблицу 255.