Скільки спеціальних таблиць маршрутів у мене може бути в Linux?


12

Я працював зі спеціальними таблицями маршрутів в 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)]

Хтось може пояснити, що відбувається? Чи є насправді максимальні спеціальні таблиці маршрутизації, які можна використовувати?

Відповіді:


8

Що стосується ядра 2.6, то максимальна таблиця дорівнює 0xFFFFFFFF (від rtnetlink.h). Однак iproute2 використовує підписане ціле число у своєму фільтрі для пошуку, тому в 2 ^ 31 він вважає, що ви вказали недійсну таблицю і за замовчуванням показуєте вам таблицю 255.


Отже, невірне ім’я дає помилку, а недійсне ціле число дає 255? Крім того, я припускаю, що 255 був попереднім max (у 2,4, можливо?), Але був збільшений до 32-бітного числа в ядрі 2.6?
Боб

Так, максимум у 2,4 та 2,2 склав 255.
Ciclamino

Крім того, завжди показ таблиці 255 для значень із 32-го біту не представляється плановим поведінкою, а лише помилкою. За допомогою патча з одним рядком для iproute я зміг створити та показати таблицю з номером 4294967290. Однак це може бути не так просто, як і інші фрагменти, які досі не мають стосунку до 2 ^ 32 таблиць.
Цикламіно

Прийняли, спасибі. Можливо, ви повинні надіслати свій патч :)
Боб

1
Більш пізні інструменти, як правило, дозволяють використовувати значення таблиць до 2 ^ 32-1 (наприклад: $ ip -V ip utility, iproute2-ss180813 $ ip route list table 4294967296 Error: argument "4294967296" is wrong: table id value is invalid $ ip route list table 4294967295(немає виводу). Попередня поведінка могла бути відображенням "невизначеної" таблиці 0 (не 255), але 0 включає 255 (і будь-яку інша таблиця).
AB
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.