ฉันสามารถกำหนดตารางเส้นทางที่กำหนดเองได้กี่ตัวบน Linux


12

ฉันทำงานกับตารางเส้นทางที่กำหนดเองบน Linux และฉันรู้สึกสับสนเล็กน้อยกับเอกสารและพฤติกรรมของคำสั่ง "ip route" ดูเหมือนว่าค่าที่ถูกต้องควรเป็น 0-255 รวมถึงชื่อที่กำหนดใน / etc / iproute2 / rt_tables:

255 local
254 main
253 default
0   unspec

สิ่งนี้จะปล่อยให้ 1-252 สำหรับตารางที่กำหนดเอง การพยายามใช้ชื่อตารางที่ไม่ได้กำหนดจะทำให้เกิดข้อผิดพลาด:

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

อย่างไรก็ตามดูเหมือนว่าฉันสามารถใช้ตัวเลขที่สูงกว่า 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

เมื่อถึงจุดหนึ่งสิ่งต่าง ๆ ก็ยิ่งแปลก ขวาที่ maxint (2 ^ 31) มัน "ล้น" ลงในตารางท้องถิ่น (255):

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

ใครสามารถอธิบายสิ่งที่เกิดขึ้น มีตารางเส้นทางที่กำหนดเองที่สามารถใช้งานได้จริงหรือไม่?

คำตอบ:


8

เท่าที่เคอร์เนล 2.6 เกี่ยวข้องตารางสูงสุดคือ 0xFFFFFFFF (จาก rtnetlink.h) อย่างไรก็ตาม iproute2 ใช้จำนวนเต็มที่มีลายเซ็นในตัวกรองของมันเพื่อทำการค้นหาดังนั้นที่ 2 ^ 31 คิดว่าคุณระบุตารางที่ไม่ถูกต้องและค่าเริ่มต้นเพื่อแสดงตาราง 255


ดังนั้นชื่อที่ไม่ถูกต้องจะทำให้คุณเกิดข้อผิดพลาด แต่จำนวนเต็มไม่ถูกต้องจะให้ 255 นอกจากนี้ฉันคิดว่า 255 เป็นค่าสูงสุดก่อนหน้า (ใน 2.4 อาจ?) แต่เพิ่มเป็นตัวเลข 32 บิตในเคอร์เนล 2.6
บ๊อบ

ใช่ค่าสูงสุดใน 2.4 และ 2.2 คือ 255
Ciclamino

นอกจากนี้การแสดงตาราง 255 สำหรับค่าที่มีบิตที่ 32 นั้นดูเหมือนจะไม่ได้เป็นพฤติกรรมที่วางแผนไว้ แต่เป็นข้อบกพร่อง ด้วยแพทช์บรรทัดเดียวไปยัง iproute ฉันสามารถสร้างและแสดงตารางที่มีหมายเลข 4294967290 ได้อย่างไรก็ตามอาจไม่ง่ายอย่างนั้นอาจมีชิ้นส่วนอื่นที่ยังไม่สามารถจัดการกับตาราง 2 ^ 32 ได้
Ciclamino

ได้รับการยอมรับขอบคุณ บางทีคุณอาจจะส่งแพทช์ของคุณ :)
บ๊อบ

1
เครื่องมือล่าสุดมักจะอนุญาตให้มีค่าของตารางได้สูงสุด 2 ^ 32-1 (เช่น: $ 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(ไม่มีเอาต์พุต) พฤติกรรมก่อนหน้านี้อาจแสดงตาราง "unspec" 0 (ไม่ใช่ 255) แต่ 0 จะรวม 255 (และอื่น ๆ ) ตารางอื่น ๆ ).
AB
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.