Radix结点数据结构-jpeg标准的中文文档pdf
18.5 Radix结点数据结构在图18-8中可以发现每一个路由表的表头都是一个radix_node_head结构,而选路树中所有的结点(包括内部结点和叶子)都是radix_node结构。radix_node_head结构如图18-16所示。图18-16 radix_node_head结构:每棵选路树的顶点rnh_tree_top指向路由树顶端的radix_node结构。可以看到radix_node_head结构的最后一项分配了三个radix_node结构,其中中间的那个被初始化成树的顶点(图18-8)。rnh_addrsize和rnh_pktsize目前未被使用。rnh_addrsize是为了能够方便地将路由表代码导入到系统中去,因为系统的插口地址结构中没有标识其长度的字节。rnh_pktsize是为了能够利用radix结点机制直接检查分组头结构中的地址,而无需把该地址拷贝到某个插口地址结构中去。从rnh_addr到rnh_walktree是七个函数指针,它们所指向的函数将被调用以完成对树的操作。如图18-17所示,rn_inithead仅初始化了其中的四个指针,剩下的三个指针在Net/3中未被使用。图18-18给出了组成树中结点的radix_node结构。在图18-8中,我们可以发现,在radix_node_head中分配了三个这样的radix_node结构,而在每一个rtentry结构中分配了两个radix_node结构。前五个成员是内部结点和叶子都有的成员。后面是一个union:如果结点是叶子,那么它定义了三个成员;如果是内部结点则定义了不同的成员。
你想深入了解这些结构是如何具体实现的吗?可以查看《Radix树路由表》一书。或者你是否对这些指针函数感到好奇呢?详细的解释可以在《指针函数与函数指针》中找到。了解更多Radix树的设计原理,请参考《radix树_路由表的设计原理》。
是不是很神奇,这些复杂的结构和指针竟然可以如此和谐地共存并协同工作!更多关于这些神秘的radix结点及其用途的细节,请继续探索上述链接提供的资源。