文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>linux路由实现分析Series---(3)

linux路由实现分析Series---(3)

时间:2010-09-18  来源:mtloveft

声明:本文为原创 #####请转贴时保留以下内容###### 作者:GTT 本文档归属http://oldtown.cublog.cn/.转载请注明出处! 请提出宝贵意见Mail:[email protected] 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时就很容易得到出接口设备,
     

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载