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

fn_zone结构

struct fn_zone {
       struct fn_zone        *fz_next;
       struct hlist_head     *fz_hash;      
       int                  fz_nent;  
       int                  fz_divisor;     
       u32                fz_hashmask; 
#define FZ_HASHMASK(fz)         ((fz)->fz_hashmask)
 
       int                  fz_order;
       __be32                  fz_mask;
#define FZ_MASK(fz)          ((fz)->fz_mask)
};
struct fn_zone        *fz_next;//用于联系fz_zone链表的指针。
 
struct hlist_head     *fz_hash;
 
//这个结构2.6版本才引入的,在2.4.x下是
struct fib_node       **fz_hash;
//
前面已经提到,2.6内核使用RCU的方式来管理双向链表,但是在2.4内核中,直接引入
一个fib_node的的链表头
 
int                  fz_nent;  
//用于记录 fib_node结构的数目
 
int                  fz_order;
//记录了当前fz_zone结构在fz_hash中的位置
 
通过函数inet_make_mask来经由fz_order计算出相对应的fz_mask,
 
__u32 inet_make_mask(fz)
{
       return htonl(~((1<<(32-fz))-1));
}
 
这样,如果fz_order = 0,那么fz_mask = 0x00000000,如果fz_order = 1,fz_mask = 0x80000000
正好和fz_hash中定义的子网掩码相同,fz_order=0的时候对应默认网关。



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值