我一直在
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)]
任何人都可以解释发生了什么?实际上是否可以使用maxint自定义路由表?
解决方法
就2.6内核而言,max表是0xFFFFFFFF(来自rtnetlink.h).但是,iproute2在其过滤器中使用有符号整数进行查找,因此在2 ^ 31时它认为您指定了一个无效表,并默认显示表255.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。