Tôi có thể có bao nhiêu bảng lộ trình tùy chỉnh trên Linux?


12

Tôi đã làm việc với các bảng định tuyến tùy chỉnh trên Linux và tôi hơi bối rối bởi một số tài liệu và hành vi của lệnh "ip route". Có vẻ như các giá trị hợp lệ duy nhất phải là 0-255 cộng với các tên được xác định trong / etc / iproute2 / rt_tables:

255 local
254 main
253 default
0   unspec

Điều này sẽ để lại 1-252 cho các bảng tùy chỉnh. Cố gắng sử dụng tên bảng không xác định sẽ gây ra lỗi:

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

Tuy nhiên, dường như tôi có thể sử dụng các số cao hơn 255 mà không gặp lỗi:

$ 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

Tại một số điểm, mọi thứ thậm chí còn kỳ lạ hơn. Ngay tại maxint (2 ^ 31), nó "tràn" vào bảng cục bộ (255):

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

Bất cứ ai có thể giải thích những gì đang xảy ra? Có thực sự có bảng định tuyến tùy chỉnh maxint có thể được sử dụng?

Câu trả lời:


8

Theo như kernel 2.6, bảng max là 0xFFFFFFFF (từ rtnetlink.h). Tuy nhiên, iproute2 sử dụng một số nguyên đã ký trong bộ lọc của nó để thực hiện tra cứu, vì vậy vào lúc 2 ^ 31, nó nghĩ rằng bạn đã chỉ định một bảng không hợp lệ và mặc định hiển thị cho bạn bảng 255.


Vì vậy, một tên không hợp lệ cung cấp cho bạn một lỗi, nhưng một số nguyên không hợp lệ cung cấp cho bạn 255? Ngoài ra, tôi giả sử rằng 255 là mức tối đa trước đó (trong 2.4 có thể?) Nhưng đã được tăng lên thành số 32 bit trong kernel 2.6?
Bob

Có, mức tối đa trong 2.4 và 2.2 là 255.
Ciclamino

Ngoài ra, luôn hiển thị bảng 255 cho các giá trị với bit thứ 32 dường như không phải là bất kỳ loại hành vi được lên kế hoạch nào, chỉ là một lỗi. Với bản vá một dòng cho iproute, tôi có thể tạo và hiển thị bảng có số 4294967290. Tuy nhiên, có thể không đơn giản như vậy, có thể các phần khác vẫn không xử lý được 2 ^ 32 bảng.
Ciclamino

Chấp nhận, cảm ơn. Có lẽ bạn nên gửi bản vá của mình :)
Bob

1
Các công cụ gần đây có xu hướng cho phép các giá trị bảng lên tới 2 ^ 32-1 (ví dụ: $ 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(không có đầu ra). Hành vi trước đó có thể đã hiển thị bảng "unspec" 0 (không phải 255), nhưng 0 sẽ bao gồm 255 (và bất kỳ bảng khác).
AB
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.