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

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

2013-07-10 12:21 627 查看
fib_info结构

struct fib_info {
struct hlist_node     fib_hash;
struct hlist_node     fib_lhash;
int                  fib_treeref;
atomic_t         fib_clntref;
int                  fib_dead;
unsigned         fib_flags;
int                  fib_protocol;
__be32                  fib_prefsrc;
u32                fib_priority;
u32                fib_metrics[RTAX_MAX];
#define fib_mtu fib_metrics[RTAX_MTU-1]
#define fib_window fib_metrics[RTAX_WINDOW-1]
#define fib_rtt fib_metrics[RTAX_RTT-1]
#define fib_advmss fib_metrics[RTAX_ADVMSS-1]
int                  fib_nhs;
#ifdef CONFIG_IP_ROUTE_MULTIPATH
int                  fib_power;
#endif
struct fib_nh          fib_nh[0];
#define fib_dev             fib_nh[0].nh_dev
};


这个结构表示一个路由信息,一个路由信息可以被多个路由复用

例如:
struct fib_info{
.fib_protocol   = RTPROT_KERNEL;// 表示这一条由内核发起的消息
.fib_nhs        = 1;//表示fib_nh的数目
.fib_flags      = 0;
.fib_prefsrc    = 172.16.48.2; //接口上的primary地址
struct fib_nh{
.nh_oif     = indexof(eth0);
.nh_flags   = 0;
.nh_weight  = 1;
.nh_scope   = RT_SCOPE_NOWHERE;
.nh_dev     = eth0;
}
}

fib_nh结构

struct fib_nh {
struct net_device    *nh_dev;
struct hlist_node     nh_hash;
struct fib_info        *nh_parent;
unsigned         nh_flags;
unsigned char        nh_scope;
#ifdef CONFIG_IP_ROUTE_MULTIPATH
int                  nh_weight;
int                  nh_power;
#endif
#ifdef CONFIG_NET_CLS_ROUTE
__u32                   nh_tclassid;
#endif
int                  nh_oif;
u32                nh_gw;
};


fib_nh结构存放着下一跳路由的地址(nh_gw)。一个路由(fib_alias)可能有多个fib_nh结构,它表示这个路由有多个下一跳地址,即它是多路径(multipath)的。下一跳地址的选择也有多种算法,这些算法都是基于nh_weight, nh_power域的。nh_hash域则是用于将nh_hash链入HASH表的。

u32 nh_gw;//下以跳的路由地址

struct net_device *nh_dev; //下一跳的DEV指针

以上几种数据结构之间的关系





可以这样理解这些结构之间的关系:

1,fib_table中包含fn_hash结构指针

2,fn_hash中包含fn_zone的数组,按照目的地址长度进行分类,相同长度的地址共用一个fz_zone

3, fn_key相同的两条路由(同一子网),共享一个路由节点(fn_node)

4,根据具体子网内地址的不同,使用不同的fib_alias和fib_info

5,目的地址相同的情况下,也可以使用多条路由,不同的路由存放在不同的fib_nh里面
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: