I've been working with custom route tables on Linux, and I'm a bit confused by some of the documentation and behavior of the "ip route" command. It seems that the only valid values should be 0-255 plus the names defined in /etc/iproute2/rt_tables:
255 local
254 main
253 default
0 unspec
This would leave 1-252 for custom tables. Attempting to use an undefined table name gives an error:
$ ip route show table kermit
Error: argument "kermit" is wrong: table id value is invalid
However, it seems that I can use numbers far higher than 255 without error:
$ 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
At some point, things get even weirder. Right at maxint (2^31), it "overflows" into the local table (255):
$ ip route show table 2147483647
[no output]
$ ip route show table 2147483648
[exact output of table 255 (local)]
Can anyone explain what is happening? Are there actually maxint custom routing tables that can be used?