Wie viele benutzerdefinierte Routentabellen kann ich unter Linux haben?

12

Ich habe unter Linux mit benutzerdefinierten Routentabellen gearbeitet und bin ein wenig verwirrt über die Dokumentation und das Verhalten des Befehls "ip route". Es scheint, dass die einzigen gültigen Werte 0-255 plus die in / etc / iproute2 / rt_tables definierten Namen sein sollten:

255 local
254 main
253 default
0   unspec

Dies würde 1-252 für benutzerdefinierte Tabellen belassen. Der Versuch, einen undefinierten Tabellennamen zu verwenden, führt zu einem Fehler:

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

Es scheint jedoch, dass ich Zahlen weit über 255 ohne Fehler verwenden kann:

$ 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

Irgendwann wird es noch seltsamer. Genau bei maxint (2 ^ 31) "überläuft" es in die lokale Tabelle (255):

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

Kann mir jemand erklären, was passiert? Gibt es tatsächlich benutzerdefinierte maxint-Routingtabellen, die verwendet werden können?

Bob
quelle

Antworten:

8

Für den 2.6er Kernel ist die max-Tabelle 0xFFFFFFFF (von rtnetlink.h). Iproute2 verwendet jedoch eine Ganzzahl mit Vorzeichen in seinem Filter, um die Suche durchzuführen. Bei 2 ^ 31 wird davon ausgegangen, dass Sie eine ungültige Tabelle angegeben haben, und standardmäßig wird Ihnen die Tabelle 255 angezeigt.

Ciclamino
quelle
Ein ungültiger Name gibt also einen Fehler aus, eine ungültige Ganzzahl hingegen 255? Außerdem gehe ich davon aus, dass 255 das vorherige Maximum war (in 2.4 vielleicht?), Aber in Kernel 2.6 auf eine 32-Bit-Zahl erhöht wurde.
Bob
Ja, das Maximum in 2.4 und 2.2 war 255.
Ciclamino
Außerdem scheint es kein geplantes Verhalten zu sein, immer die Tabelle 255 für Werte mit dem 32. Bit anzuzeigen, sondern nur einen Fehler. Mit einem einzeiligen Patch für iproute konnte ich eine Tabelle mit der Nummer 4294967290 erstellen und anzeigen. Es kann jedoch sein, dass dies nicht so einfach ist. Möglicherweise gibt es andere Teile, die sich noch nicht mit 2 ^ 32-Tabellen befassen.
Ciclamino
Akzeptiert, danke. Vielleicht solltest du deinen Patch einreichen :)
Bob
1
Neuere Tools erlauben in der Regel Tabellenwerte bis zu 2 ^ 32-1 (z. B .: $ 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(keine Ausgabe). Das vorherige Verhalten bestand möglicherweise darin, die "unspec" -Tabelle 0 (nicht 255) anzuzeigen, 0 enthält jedoch 255 (und eine beliebige) andere Tabelle)
AB