Linux'ta kaç tane özel rota tablosu olabilir?


12

Linux üzerinde özel rota tabloları ile çalışıyorum ve "ip route" komutunun bazı belgeleri ve davranışları ile biraz kafam karıştı. Tek geçerli değer 0-255 artı / etc / iproute2 / rt_tables içinde tanımlanan adlar olmalıdır:

255 local
254 main
253 default
0   unspec

Bu, özel tablolar için 1-252 bırakacaktır. Tanımsız bir tablo adı kullanmaya çalışmak bir hata verir:

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

Ancak, 255'ten çok daha yüksek sayıları hatasız kullanabileceğim anlaşılıyor:

$ 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

Bir noktada işler daha da tuhaflaşıyor. Tam maksimumda (2 ^ 31), yerel tabloya "taşar" (255):

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

Herkes neler olduğunu açıklayabilir mi? Kullanılabilecek maksimum özel yönlendirme tabloları var mı?

Yanıtlar:


8

2.6 çekirdeği ile ilgili olarak, max tablosu 0xFFFFFFFF'dir (rtnetlink.h'den). Bununla birlikte, iproute2, arama yapmak için filtresinde imzalı bir tamsayı kullanır, böylece 2 ^ 31'de geçersiz bir tablo belirttiğinizi ve varsayılan olarak tablo 255'i gösterdiğinizi düşünür.


Geçersiz bir ad size bir hata verir, ancak geçersiz bir tamsayı size 255 verir mi? Ayrıca, 255 bir önceki maksimum (2.4 belki?) Olduğunu, ancak çekirdek 2.6?
Bob

Evet, 2.4 ve 2.2'deki maksimum 255'ti.
Ciclamino

Ayrıca, 32. bitli değerler için tablo 255 her zaman herhangi bir planlı davranış gibi görünmüyor, sadece bir hata gibi görünüyor. Iproute için tek satırlık bir yama ile 4294967290 numaralı bir tablo oluşturup gösterebildim. Ancak, bu kadar basit olmayabilir, hala 2 ^ 32 tablolarla ilgilenmeyen başka parçalar da olabilir.
Ciclamino

Kabul edildi, teşekkürler. Belki de yama göndermelisin :)
Bob

1
Daha yeni araçlar, 2 ^ 32-1'e kadar tablo değerlerine izin verme eğilimindedir (örneğin: $ 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(çıktı yok). Önceki davranış, "unspec" tablosunu 0 (255 değil) göstermek olabilirdi, ancak 0, 255 (ve diğer tablo).
AB
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.