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

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中去

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值