Chinaunix首页 | 论坛 | 博客
  • 博客访问: 674392
  • 博文数量: 404
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 1237
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-03 10:45
文章分类

全部博文(404)

文章存档

2017年(1)

2016年(27)

2015年(39)

2014年(55)

2013年(66)

2012年(216)

分类:

2012-10-24 20:42:57

声明:本文为原创
#####请转贴时保留以下内容######
作者GTT
本文档归属http://oldtown.cublog.cn/.转载请注明出处!
请提出宝贵意见Mail:mtloveft@hotmail.com
Linux Version:2.6.33
提示本文是介绍linux 如何实现ipv4路由
 
fib_info结构的组织
fib_info结构定义了fib_hash与fib_lhash两个字段,用于将fib_info结构链接到两个hash表中,这两个hash表是:
fib_info_hash        所有的fib_info结构被插入到这个hash表中,通过fib_find_info接口来查找该表。
fib_info_laddrhash  主要在路由表项有一个首选源地址时,才将fib_info结构插入到这个表中。
这个hash表主要是便于删除由于本地配置IP地址的删除而影响到的路由表项。
在这两个hash表中,都是通过fib_create_info方法将新fib_info实例链接到hash表上
 
fib_info结构定义如下

struct fib_info {
    struct hlist_node fib_hash;
    struct hlist_node fib_lhash;
    struct net *fib_net;
    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
}

 
next-hop结构的组织
 
next-hop的定义如下

struct fib_nh {
    struct net_device *nh_dev;
//网络设备

    struct hlist_node nh_hash;
//用于链入网络设备hash表

    struct fib_info *nh_parent;
//指向被包含的fib_info

    unsigned nh_flags;
//标志

    unsigned char nh_scope;
//下一跳的路由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;
//egress设备标识

    __be32 nh_gw;
//下一跳网关的IP地址

};

 
根据fib_info定义,每个fib_info结构可以包含一个或多个fib_nh结构,
fib_nhs是一个fib_nh类型的数组。在创建fib_info实例时,会多分配出nhs*sizeof(struct fib_nh)
大小的内存。
 
每个fib_nh表示一个下一跳路由器(next-hop router)。
一个下一跳路由器的信息包括通过哪一个设备作为出接口。因而,
当找到这个下一跳router时就很容易得到出接口设备,
 
 
 


阅读(299) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~