Quante tabelle di route personalizzate posso avere su Linux?


12

Ho lavorato con tabelle di instradamento personalizzate su Linux e sono un po 'confuso da parte della documentazione e del comportamento del comando "ip route". Sembra che gli unici valori validi dovrebbero essere 0-255 più i nomi definiti in / etc / iproute2 / rt_tables:

255 local
254 main
253 default
0   unspec

Ciò lascerebbe 1-252 per le tabelle personalizzate. Il tentativo di utilizzare un nome di tabella non definito genera un errore:

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

Tuttavia, sembra che posso usare numeri molto più alti di 255 senza errori:

$ 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

Ad un certo punto, le cose diventano ancora più strane. Proprio su maxint (2 ^ 31), "trabocca" nella tabella locale (255):

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

Qualcuno può spiegare cosa sta succedendo? Esistono effettivamente tabelle di routing personalizzate maxint che possono essere utilizzate?

Risposte:


8

Per quanto riguarda il kernel 2.6, la tabella massima è 0xFFFFFFFF (da rtnetlink.h). Tuttavia, iproute2 utilizza un numero intero con segno nel suo filtro per eseguire la ricerca, quindi a 2 ^ 31 pensa che sia stata specificata una tabella non valida e per impostazione predefinita mostra la tabella 255.


Quindi, un nome non valido ti dà un errore, ma un numero intero non valido ti dà 255? Inoltre, suppongo che 255 fosse il massimo precedente (in 2.4 forse?) Ma è stato aumentato a un numero di 32 bit nel kernel 2.6?
Bob,

Sì, il massimo in 2.4 e 2.2 era 255.
Ciclamino,

Inoltre, mostrare sempre la tabella 255 per i valori con il 32 ° bit non sembra essere un comportamento pianificato, ma solo un bug. Con una patch di una riga per iproute sono stato in grado di creare e mostrare una tabella con il numero 4294967290. Tuttavia, potrebbe non essere così semplice, potrebbero esserci altri pezzi che ancora non trattano 2 ^ 32 tabelle.
Ciclamino,

Accettato, grazie. Forse dovresti inviare la tua patch :)
Bob,

1
Strumenti più recenti tendono a consentire valori di tabella fino a 2 ^ 32-1 (ad esempio: $ 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(nessun output). Il comportamento precedente potrebbe essere stato quello di mostrare la tabella "unspec" 0 (non 255), ma 0 includerà 255 (e qualsiasi altra tabella)
AB
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.