路由表(FIB)的初始化
宏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)的初始化相关推荐
- linux路由表生成,路由表(FIB)内容的生成(一)
前面已经讲到过路由表的初始化,路由表是一个比较复杂的数据结构,一下子并不好理解.下面我们通过模块初始化时Linux的notify机制所触发的网络设备事件回调myfib_netdev_event,来逐步 ...
- 路由表(FIB)内容的生成(一)
前面已经讲到过路由表的初始化,路由表是一个比较复杂的数据结构,一下子并不好理解.下面我们通过模块初始化时Linux的notify机制所触发的网络设备事件回调myfib_netdev_event,来逐步 ...
- 路由表(FIB)详解
宏CONFIG_IP_MULTIPLE_TABLES表示路由策略,当定义了该宏,也即意味着内核配置了"路由策略".产生的最大的不同就是内核可以使用多达256张FIB.其实,这256 ...
- MPLS中的标签信息库LIB和标签转发信息库LFIB + RIB/FIB + ARP/FDB + CAM/TCAM
MPLS中的标签信息库LIB和标签转发信息库LFIB LIB(label Information Base) ,标签信息库 对路由表中的每一条IGP的IP前缀来说,第一台LSR都会进行本地捆绑,也就是 ...
- RIB表与FIB表、ARP表与FDB表
1.RIB与FIB的区别: RIB:路由表 FIB:转发信息表 FIB表更多是出现在需要快速转发的路由器上,这种路由器上的路由表条目通常都达成千上万条,如果按照传统的检索路由表进行转发的方式,其转发效 ...
- 路由 路由分类(IGP与EGP、直连、静态、动态)与路由表介绍
4.0.0 路由 路由分类(IGP与EGP.直连.静态.动态)与路由表介绍 目录 路由分类 IGP内部网关协议 EGP外部网关协议 直连路由 静态路由 动态路由 路由表 RIB路由表 FIB转发信息表 ...
- rib fib arp fdb
1.RIB与FIB的区别: RIB:路由表 FIB:转发信息表 FIB表更多是出现在需要快速转发的路由器上,这种路由器上的路由表条目通常都达成千上万条,如果按照传统的检索路由表进行转发的方式,其转发效 ...
- 【FRR 】【BGP协议分析】 1 - BGP 初始化
FRR支持BGP-4,BGP-4+协议,BGP协议本身的知识点,可以参考很多资料,TCP/IP路由技术是一本不错的书,建议多看几次,还有红茶哥的博客和视频 http://blog.sina.com.c ...
- 如何用java实现一个p2p种子搜索(2)-路由表实现
路由表实现 回顾一下上一篇讲的内容,上一篇提到从dht网络中获取infohash,那么加入dht网络后的最重要的第一步就是怎么去建立路由表. 路由表里面保存的是dht中其他node的信息,所以node ...
最新文章
- PDU (协议数据单元)
- mysql 类型 自动转化_自动MySQL数据类型转换
- boost::mp11::mp_reverse相关用法的测试程序
- 分享一下dudu回答的一个方法
- Navigation Drawer介绍
- 多线程编程(三)--创建线程之Thread VS Runnable
- SQL Server 筛选时间区间
- OpenCV人脸识别之一:数据收集和预处理
- T05 FX 试打报告
- oracle must be declared,oracle must be declared
- 64位程序core分析
- 树莓派从零开始学习记录
- 我们为什么需要实施实验室管理系统?
- docker镜像制作、数据管理
- 手机 机器人 谢超_大咖云集 长三角智造峰会演讲嘉宾名单曝光
- solidworks图纸模板添加_「solidworks工程图模板」solidworks怎么添加置工程图模板? - seo实验室...
- html视频自动播放循环播放,HTML5 通过Vedio标签实现视频循环播放的示例代码
- html文本域 高度自适应,Javascript 文本域根据输入内容自适应高度
- 关于计算机软件的研究生就业,计算机软件与理论研究生毕业就业方向
- 双非跨考(管理跨考计算机)在努力为了研三可以去大厂工作
热门文章
- python用代码执行另一个python文件
- ajax传值controller怎么写,关于ajax请求Controller传值问题详细记录
- 抓取经过无线路由器的数据_无线网关是什么 无线网关的作用
- matlab第七章符号对象,MATLAB语言:第七章 MATLAB符号计算
- 第四单元作业——UML分析总结学期总结
- 一些需要烂熟于心的代码
- python/socket编程之粘包
- Nodejs nmp 常用命令
- Velocity教程 (zhuan)
- 最短路径 一 Dijkstra 模板(O(n^2))