宏CONFIG_IP_MULTIPLE_TABLES表示配置路由策略(对路由器而言?),如果定义了该宏,系统可以创建多达256张路由表,全部存放在数组struct fib_table *fib_tables[RT_TABLE_MAX+1]中。
    如果配置了路由策略,在FIB的初始化函数中,首先创建了两张路由表myip_fib_local_table, myip_fib_main_table(它们会成为fib_tables中的一项)。
    如果没有配置路由策略,则只是向内核注册一个通知回调fib_rules_notifier。关于这个回调的含义,在使用到时再分析。
    最后,初始化函数向内核注册了两个通知回调myfib_netdev_notifier,myfib_inetaddr_notifier。结束了FIB的初始化过程。
    理解FIB的关键是理解表示路由表的数据结构,fib_tables是一张总的路由表集,含有256张表,表示一张路由表的数据结构是struct fib_table:
        struct fib_table {
            unsigned char   tb_id;
            unsigned    tb_stamp;
            int     (*tb_lookup)(struct fib_table *tb, const struct flowi *flp, struct fib_result *res);
            int     (*tb_insert)(struct fib_table *table, struct rtmsg *r,
                    struct kern_rta *rta, struct nlmsghdr *n,
                    struct netlink_skb_parms *req);
            int     (*tb_delete)(struct fib_table *table, struct rtmsg *r,
                    struct kern_rta *rta, struct nlmsghdr *n,
                    struct netlink_skb_parms *req);
            int     (*tb_dump)(struct fib_table *table, struct sk_buff *skb,
                    struct netlink_callback *cb);
            int     (*tb_flush)(struct fib_table *table);
            void        (*tb_select_default)(struct fib_table *table,
                    const struct flowi *flp, struct fib_result *res);

unsigned char   tb_data[0];
    };
它含有路由表的id,表戳,以及对表的操作集(包括路由的插入,删除等)。tb_data是路由数据,它实际上是一个结构体struct fn_hash:
        struct fn_hash {
            struct fn_zone  *fn_zones[33];
            struct fn_zone  *fn_zone_list;
        };

通过zone可以找到路由节点struct fib_node,进而找到路由信息struct fib_info。关于这些数据的细节,我们在代码实现到这一步时再进行分析。

路由表(FIB)的初始化相关推荐

  1. linux路由表生成,路由表(FIB)内容的生成(一)

    前面已经讲到过路由表的初始化,路由表是一个比较复杂的数据结构,一下子并不好理解.下面我们通过模块初始化时Linux的notify机制所触发的网络设备事件回调myfib_netdev_event,来逐步 ...

  2. 路由表(FIB)内容的生成(一)

    前面已经讲到过路由表的初始化,路由表是一个比较复杂的数据结构,一下子并不好理解.下面我们通过模块初始化时Linux的notify机制所触发的网络设备事件回调myfib_netdev_event,来逐步 ...

  3. 路由表(FIB)详解

    宏CONFIG_IP_MULTIPLE_TABLES表示路由策略,当定义了该宏,也即意味着内核配置了"路由策略".产生的最大的不同就是内核可以使用多达256张FIB.其实,这256 ...

  4. MPLS中的标签信息库LIB和标签转发信息库LFIB + RIB/FIB + ARP/FDB + CAM/TCAM

    MPLS中的标签信息库LIB和标签转发信息库LFIB LIB(label Information Base) ,标签信息库 对路由表中的每一条IGP的IP前缀来说,第一台LSR都会进行本地捆绑,也就是 ...

  5. RIB表与FIB表、ARP表与FDB表

    1.RIB与FIB的区别: RIB:路由表 FIB:转发信息表 FIB表更多是出现在需要快速转发的路由器上,这种路由器上的路由表条目通常都达成千上万条,如果按照传统的检索路由表进行转发的方式,其转发效 ...

  6. 路由 路由分类(IGP与EGP、直连、静态、动态)与路由表介绍

    4.0.0 路由 路由分类(IGP与EGP.直连.静态.动态)与路由表介绍 目录 路由分类 IGP内部网关协议 EGP外部网关协议 直连路由 静态路由 动态路由 路由表 RIB路由表 FIB转发信息表 ...

  7. rib fib arp fdb

    1.RIB与FIB的区别: RIB:路由表 FIB:转发信息表 FIB表更多是出现在需要快速转发的路由器上,这种路由器上的路由表条目通常都达成千上万条,如果按照传统的检索路由表进行转发的方式,其转发效 ...

  8. 【FRR 】【BGP协议分析】 1 - BGP 初始化

    FRR支持BGP-4,BGP-4+协议,BGP协议本身的知识点,可以参考很多资料,TCP/IP路由技术是一本不错的书,建议多看几次,还有红茶哥的博客和视频 http://blog.sina.com.c ...

  9. 如何用java实现一个p2p种子搜索(2)-路由表实现

    路由表实现 回顾一下上一篇讲的内容,上一篇提到从dht网络中获取infohash,那么加入dht网络后的最重要的第一步就是怎么去建立路由表. 路由表里面保存的是dht中其他node的信息,所以node ...

最新文章

  1. PDU (协议数据单元)
  2. mysql 类型 自动转化_自动MySQL数据类型转换
  3. boost::mp11::mp_reverse相关用法的测试程序
  4. 分享一下dudu回答的一个方法
  5. Navigation Drawer介绍
  6. 多线程编程(三)--创建线程之Thread VS Runnable
  7. SQL Server 筛选时间区间
  8. OpenCV人脸识别之一:数据收集和预处理
  9. T05 FX 试打报告
  10. oracle must be declared,oracle must be declared
  11. 64位程序core分析
  12. 树莓派从零开始学习记录
  13. 我们为什么需要实施实验室管理系统?
  14. docker镜像制作、数据管理
  15. 手机 机器人 谢超_大咖云集 长三角智造峰会演讲嘉宾名单曝光
  16. solidworks图纸模板添加_「solidworks工程图模板」solidworks怎么添加置工程图模板? - seo实验室...
  17. html视频自动播放循环播放,HTML5 通过Vedio标签实现视频循环播放的示例代码
  18. html文本域 高度自适应,Javascript 文本域根据输入内容自适应高度
  19. 关于计算机软件的研究生就业,计算机软件与理论研究生毕业就业方向
  20. 双非跨考(管理跨考计算机)在努力为了研三可以去大厂工作

热门文章

  1. python用代码执行另一个python文件
  2. ajax传值controller怎么写,关于ajax请求Controller传值问题详细记录
  3. 抓取经过无线路由器的数据_无线网关是什么 无线网关的作用
  4. matlab第七章符号对象,MATLAB语言:第七章 MATLAB符号计算
  5. 第四单元作业——UML分析总结学期总结
  6. 一些需要烂熟于心的代码
  7. python/socket编程之粘包
  8. Nodejs nmp 常用命令
  9. Velocity教程 (zhuan)
  10. 最短路径 一 Dijkstra 模板(O(n^2))