Ile niestandardowych tabel tras mogę mieć w systemie Linux?

12

Pracowałem z niestandardowymi tabelami tras w systemie Linux i jestem nieco zdezorientowany niektórymi dokumentacjami i zachowaniem polecenia „ip route”. Wydaje się, że jedynymi prawidłowymi wartościami powinny być 0-255 plus nazwy zdefiniowane w / etc / iproute2 / rt_tables:

255 local
254 main
253 default
0   unspec

Pozostawiłoby to 1-252 dla tabel niestandardowych. Próba użycia niezdefiniowanej nazwy tabeli powoduje błąd:

$ ip route show table kermit
Error: argument "kermit" is wrong: table id value is invalid

Wydaje się jednak, że mogę bez błędów używać liczb znacznie wyższych niż 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

W pewnym momencie robi się jeszcze dziwniej. Bezpośrednio na maxint (2 ^ 31) „przepełnia się” do lokalnej tabeli (255):

$ ip route show table 2147483647
[no output]
$ ip route show table 2147483648
[exact output of table 255 (local)]

Czy ktoś może wyjaśnić, co się dzieje? Czy faktycznie istnieją maksymalne niestandardowe tabele routingu, których można użyć?

Kok
źródło

Odpowiedzi:

8

Jeśli chodzi o jądro 2.6, maksymalna tabela to 0xFFFFFFFF (z rtnetlink.h). Jednak iproute2 używa w filtrze liczby całkowitej ze znakiem, aby wykonać wyszukiwanie, więc przy 2 ^ 31 myśli, że podałeś niepoprawną tabelę i domyślnie wyświetla tabelę 255.

Ciclamino
źródło
Niepoprawna nazwa oznacza błąd, ale niepoprawna liczba całkowita daje 255? Zakładam również, że 255 było poprzednim maksimum (może w 2.4?), Ale zostało zwiększone do 32-bitowej liczby w jądrze 2.6?
Bob
Tak, maksimum w 2.4 i 2.2 wynosiło 255.
Ciclamino
Ponadto, zawsze pokazanie tabeli 255 dla wartości z 32-tym bitem nie wydaje się być planowanym zachowaniem, tylko błędem. Dzięki jednopreskowej łatce do iproute udało mi się stworzyć i wyświetlić tabelę o numerze 4294967290. Jednak może to nie być takie proste, mogą istnieć inne elementy, które nadal nie radzą sobie z tabelami 2 ^ 32.
Ciclamino,
Zaakceptowano, dziękuję. Może powinieneś przesłać łatkę :)
Bob
1
Nowsze narzędzia zwykle dopuszczają wartości tabeli do 2 ^ 32-1 (np .: $ 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(brak danych wyjściowych). Poprzednie zachowanie mogło polegać na pokazywaniu tabeli „nieokreślonej” 0 (nie 255), ale 0 będzie zawierać 255 (i dowolne inny stół)
AB