您的位置:首页 > 理论基础 > 数据结构算法

linux路由内核实现分析(二)---FIB相关数据结构(3)

2013-07-10 12:19 447 查看
fib_node结构

struct fib_node {
struct hlist_node     fn_hash;
struct list_head       fn_alias;
u32                fn_key;
};


这个结构实际上代表一个路由节点,fn_key是这个路由节点的IP地址或者网络号(对于本地接收路由,它就是代表本地网络设备接口的IP地址,如 172.16.48.2,对于子网单播,它就是子网号,比如172.16.48.0)。对于子网号172.16.48.0,其子网掩码就是 255.255.255.0,该路由项的目的地址长度就是24。而对于本地接收和广播路由,其掩码是255.255.255.255,目的地址长度是 32,同一目的地址长度的路由节点被维护在同一个路由域fn_zone中

struct list_head fn_alias;

//指向fib_alias结构的链表

相同的子网可以共享一个fib_node,fib_alias结构用以标明不同的路由信息,127.10.0.1和127.0.0.1两个A类地址,可以共享一个路由节点(fib_node),但是他们的fib_alias有所不同

一个典型的路由节点示例:

fn_alias{
fa_info{
.fib_protocol   = RTPROT_KERNEL;
.fib_nhs        = 1;
.fib_flags      = 0;
.fib_prefsrc    = 172.16.48.2;
struct fib_nh{
.nh_oif     = indexof(eth0);
.nh_flags   = 0;
.nh_weight  = 1;
.nh_scope   = RT_SCOPE_HOST;
.nh_dev     = eth0;
}
}
.fa_tos = 0;
.fa_type = RTN_UNICAST;
.fa_scope = RT_SCOPE_LINK;
.fa_state = 0;
}
.fn_key = 172.16.48.0;
}


这个路由节点的目的地址长度是24(子网掩码是255.255.255.0),所以它被放到fz_order的值为24的路由域fz_zone中去
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: