linux内核 路由fib表之数据结构

本文深入探讨Linux内核中的FIB路由表结构,包括fib_table、fn_hash、fn_zone、fib_node、fib_alias和fib_info等关键数据结构。通过对这些结构体的分析,理解路由表项的组织方式和路由信息的存储原理。
摘要由CSDN通过智能技术生成

要想看懂路由,最好先能理清各个结构体之间的关联,这样才能有一个整体的印象。

1 内核fib路由表

  1.1   基本结构
   1.1.1 fib_table_hash结构图

  1.1.2 举例说明fn_zone结构体的关系

  

说明:

结构体Fn_zone[33]中存放同一掩码长度表项的集合;

结构体fib_node存放同一网段的路由表项集合;

结构体fib_alias存放具体的一条路由表项;

结构体fib_info存放下一跳网关等信息。

  1.1.3 结构体描述

相关数据结构:fib_table、fn_hash、fn_zone、fib_node、fib_alias、fib_info、fib_nh

全局散列表net->ipv4.fib_table_hash中,存放所有的路由表fib_node;

全局散列表fib_info_hash,存放所有的fib_info实例;

全局散列表fib_info_laddrhash,当路由表项有源地址时,才存放该fib_info

(1)路由表fib_table结构

         路由表是由fib_table结构来描述的,该结构是通过函数fib_hash_table()来赋值的,fib_table结构中的tb_data,是一个零长数组,该地址指向fn_hash结构体;

          struct fib_table

struct hlist_node tb_hlist;

//用来将各个路由表连接成一个双向链表

u32 tb_id;

/路由标识,最多可以有256个路由表(静态路由、策略路由等等表项)

int tb_default;

 

int (*tb_lookup)(struct fib_table*tb,conststruct flowi*flp,struct fib_result*res);

//搜索路由表项

int (*tb_insert)(struct fib_table*,struct fib_config*);

//插入给定的路由表项

int (*tb_delete

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值