ฉันสามารถกำหนดตารางเส้นทางที่กำหนดเองได้กี่ตัวบน 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.