8.1 引言
初始化路由表有很多种方法,其中使用ICMP路由器发现报文就是一种方法。rdisc程序正是使用ICMP路由器发现报文来完成路由表的初始化和更新。
rdisc程序根据编译的不同可以程序可以编译成具有或没有服务器功能。如果设置了RDISC_SERVER宏,则会有服务器的功能,也就是会对ICMP报文路由器请求报文进行回复。否则,不会对ICMP报文路由器请求报文进行回复。
ICMP路由器发现报文格式可以参看RFC 1256。
8.2 rdisc程序的使用
ICMP路由发现报文目前使用的并不多,对rdisc的测试也并不方便。
rdisc程序的选项的解释如下:
-a
将所有路由加入内核路由项,不管优先级是多大。
-b
与-a选项相反,在接受ICMP路由通告报文时,只将优先级最高的路由加入内核路由项,而删除那些低优先级的路由。
-d
设置为debug模式。
-f
即使没有发现任何路由也永远运行程序。一般情况下,如果程序在发送3个请求报文之后仍然没有接受到通告报文就退出运行,并返回非零值。
注意:-f参数能够覆盖-s参数的效果。
-p <preference>
在发送ICMP路由器通告报文是,需要在对应路由器地址字段后面设置4字节的优先级字段。这个字段就是本地接口地址的优先级。
在初始化的时候,会将所有存储的本机接口的优先级设置为<preference>。
-s
程序快速发送3个请求报文,以快速找出路由。如果此后没有接收到报文就退出运行,并返回非零值。
注意:-f参数能够覆盖-s参数的效果。
-t
测试模式。
设置这个选项使得程序不退居后台运行。
-T <interval>
将在网络接口发送ICMP路由器通告报文的最大的时间间隔设置为<interval>。单位是秒。
注意:RFC 1256协议里规定此时间间隔不得小于4秒,不得超过1800妙,默认值是MAX_ADV_INT(600)。
-v
冗余输出模式,也就是向log中输出很多debug信息。
-V
打印出版本信息,然后退出。
8.3 rdisc程序的流程图
这里画出的流程图是具有服务器功能的程序的流程图,如下所示: