下载
第19章 选路请求和选路消息
19.1 引言
内核的各种协议并不直接使用前一章提供的函数来访问选路树,而是调用本章提供的几
个函数:r t a l l o c 和r t a l l o c 1 是完成路由表查询的两个函数; r t r e q u e s t函数用于添加和
删除路由表项;另外大多数接口在接口连接或断开时都会调用函数 r t i n i t 。
选路消息在两个方向上传递信息。进程(如r o u t e命令)或守护进程(r o u t e d或g a t e d)把选路
消息写入选路插口,以使内核添加路由、删除路由或修改现有的路由。当有事件发生时,如接
口断开、收到重定向等,内核也会发送选路消息。进程通过选路插口来读取它们感兴趣的内容。
在本章中,我们将讨论这些选路消息的格式及其含义,关于选路插口的讨论将在下一章进行。
内核还提供了另一种访问路由表的接口,即系统的 s y s c t l 调用,我们将在本章的结尾部
分阐述。该系统调用允许进程读取整个路由表或所有已配置的接口及接口地址。
1 9 . 2 r t a l l o c 和r t a l l o c 1 函数
通常,路由表的查找是通过调用 r t a l l o c 和r t a l l o c 1 函数来实现的。图 1 9 - 1 给出了
r t a l l o c 。
图19-1 r t a l l o c 函数
5 8 - 6 5 参数r o 是一个指针,它指向T C P或U D P所使用的Internet PCB(第2 2 章)中的r o u t e结
构。如果r o 已经指向了某个r t e n t r y 结构(即r o _ r t非空),而该结构指向一个接口结构且路
由有效,则函数立即返回。否则, r t a l l o c 1将被调用,调用的第二个参数为 1。我们很快会
看到该参数的用途。
如图1 9 - 2 所示,r t a l l o c 1 调用了r n h _ m a t c h a d d r 函数,对于I n t e r n e t 地址来说,该函
数就是r n _ m a t c h数(图1 8 - 1 7 )。
6 6 - 7 6 第一个参数是一个指针,它指向一个含有待查找地址的插口地址结构。 s a _ f a m i l y
成员用于选择所查找的路由表。
1. 调用r n _ m a t c h
7 7 - 7 8 如果符合下列三个条件,则查找成功。
1) 存在该协议族的路由表;
2) r n _ m a t c h返回一个非空指针;并且
评论1
最新资源