linux路由内核实现分析(二)---FIB相关数据结构(4)
来源:互联网 发布:shell.windows.com 编辑:程序博客网 时间:2024/06/05 11:24
fib_info结构
struct fib_info { struct hlist_node fib_hash; struct hlist_node fib_lhash; 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};
这个结构表示一个路由信息,一个路由信息可以被多个路由复用
例如:
struct fib_info{ .fib_protocol = RTPROT_KERNEL;// 表示这一条由内核发起的消息 .fib_nhs = 1;//表示fib_nh的数目 .fib_flags = 0; .fib_prefsrc = 172.16.48.2; //接口上的primary地址 struct fib_nh{ .nh_oif = indexof(eth0); .nh_flags = 0; .nh_weight = 1; .nh_scope = RT_SCOPE_NOWHERE; .nh_dev = eth0; } } fib_nh结构 struct fib_nh { struct net_device *nh_dev; struct hlist_node nh_hash; struct fib_info *nh_parent; unsigned nh_flags; unsigned char nh_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; u32 nh_gw;};
fib_nh结构存放着下一跳路由的地址(nh_gw)。一个路由(fib_alias)可能有多个fib_nh结构,它表示这个路由有多个下一跳地址,即它是多路径(multipath)的。下一跳地址的选择也有多种算法,这些算法都是基于nh_weight, nh_power域的。nh_hash域则是用于将nh_hash链入HASH表的。
u32
struct net_device
以上几种数据结构之间的关系
可以这样理解这些结构之间的关系:
1,fib_table中包含fn_hash结构指针
2,fn_hash中包含fn_zone的数组,按照目的地址长度进行分类,相同长度的地址共用一个fz_zone
3, fn_key相同的两条路由(同一子网),共享一个路由节点(fn_node)
4,根据具体子网内地址的不同,使用不同的fib_alias和fib_info
5,目的地址相同的情况下,也可以使用多条路由,不同的路由存放在不同的fib_nh里面
- linux路由内核实现分析(二)---FIB相关数据结构(4)
- linux路由内核实现分析(二)---FIB相关数据结构
- linux路由内核实现分析(二)---FIB相关数据结构(1)
- linux路由内核实现分析(二)---FIB相关数据结构(2)
- linux路由内核实现分析(二)---FIB相关数据结构(3)
- linux内核 路由fib表之数据结构
- linux内核 路由fib表之初始化
- linux内核 路由fib表之创建
- linux内核 路由fib表之删除
- linux路由内核实现分析(四)---路由缓存机制(4)
- linux内核 路由fib表之输入查找
- linux内核 路由fib表之输出查找
- linux路由内核实现分析(三)---路由查找过程
- linux路由内核实现分析(四)---路由缓存机制
- linux路由内核实现分析(三)---路由查找过程
- linux路由内核实现分析(四)---路由缓存机制(1)
- linux路由内核实现分析(四)---路由缓存机制(2)
- linux路由内核实现分析(四)---路由缓存机制(3)
- linux路由内核实现分析(二)---FIB相关数据结构(3)
- 性能优化
- 工作
- 未能创建service
- 【转】C# WinForm控件、自定义控件整理(大全) 真的是好东西
- linux路由内核实现分析(二)---FIB相关数据结构(4)
- ASIDownloadCache 设置下载缓存 以及其他
- Redis配置文件解读
- Android下 使用百度地图sdk
- linux路由内核实现分析(三)---路由查找过程
- 路庆晖:有效提升电商用户访问体验_亿邦电商两会
- mostFrequentSubArray
- Seven habits of effective text editing using Vim
- 程序崩溃时打印调用栈