网络子系统65_路由表初始化

简介:
//	多路由表
//		编译支持多路由表,系统提供255张路由表,由系统使用id为253,254,255的路由表	
1.1 enum rt_class_t
{
	RT_TABLE_UNSPEC=0,
	RT_TABLE_DEFAULT=253,
	RT_TABLE_MAIN=254,
	RT_TABLE_LOCAL=255,
	__RT_TABLE_MAX
};
#define RT_TABLE_MAX (__RT_TABLE_MAX - 1)
struct fib_table *fib_tables[RT_TABLE_MAX+1];

// 默认路由表
//	系统总是默认提供这两个路由表
//		ip_fib_local_table保存本地配置的ip地址
//		ip_fib_main_table保存所有其他的路由表项
1.2 
#define ip_fib_local_table (fib_tables[RT_TABLE_LOCAL])
#define ip_fib_main_table (fib_tables[RT_TABLE_MAIN])




//	路由表初始化
//	调用路径:ip_rt_init->ip_fib_init
//	函数主要任务:
//		1.初始化2张路由表,其中1张本地配置路由表,另1张用于配置管理路由表
//		2.向netdev_chain,inetaddr_chain注册监听块
1.2 void __init ip_fib_init(void)
{
#ifndef CONFIG_IP_MULTIPLE_TABLES
	ip_fib_local_table = fib_hash_init(RT_TABLE_LOCAL);
	ip_fib_main_table  = fib_hash_init(RT_TABLE_MAIN);
#else
	fib_rules_init();
#endif
	register_netdevice_notifier(&fib_netdev_notifier);
	register_inetaddr_notifier(&fib_inetaddr_notifier);
}

//	新建路由表
//	参数:
//		id,路由表id

//	注:
//		1.所有路由表共享fib_node, fib_alias缓存
1.3 struct fib_table * __init fib_hash_init(int id)
{
	struct fib_table *tb;
	//fib_node 缓存
	if (fn_hash_kmem == NULL)
		fn_hash_kmem = kmem_cache_create("ip_fib_hash",
						 sizeof(struct fib_node),
						 0, SLAB_HWCACHE_ALIGN,
						 NULL, NULL);
	//fib_alias 缓存
	if (fn_alias_kmem == NULL)
		fn_alias_kmem = kmem_cache_create("ip_fib_alias",
						  sizeof(struct fib_alias),
						  0, SLAB_HWCACHE_ALIGN,
						  NULL, NULL);
	//路由表
	tb = kmalloc(sizeof(struct fib_table) + sizeof(struct fn_hash),
		     GFP_KERNEL);
	if (tb == NULL)
		return NULL;
	//路由表id
	tb->tb_id = id;
	//路由表的回调函数
	tb->tb_lookup = fn_hash_lookup;
	tb->tb_insert = fn_hash_insert;
	tb->tb_delete = fn_hash_delete;
	tb->tb_flush = fn_hash_flush;
	tb->tb_select_default = fn_hash_select_default;
	tb->tb_dump = fn_hash_dump;
	//tb->tb_data为路由表项hash表
	memset(tb->tb_data, 0, sizeof(struct fn_hash));
	return tb;
}


//	fib_node, fib_alias,fib_info区别:
//		1.
//			1.1 fib_node 表示每个唯一的目的网络
//			1.2 fib_alias 用于区分目的网络相同但其配置参数不同的路由项
//			1.3	fib_info 保存路由信息

//		2.
//			2.1	每个单独的子网对应一个fib_node实例,用fn_key标示,它的值代表该子网
//			2.2 目的子网相同(即fn_key相同)的不同路由共享同一个fib_node,每条路由有自己的fib_alias结构,
//				例如,通向同一子网的不同路由,它们只有tos值不同,因此每个fib_alias实例就被指定一个不通过的tos值。
//			2.3 每个fib_alias都与一个fib_info相关联,该结构保存真实的路由信息。	

目录
相关文章
|
4月前
|
存储 缓存 网络协议
|
6月前
|
监控 网络协议 Linux
【Shell 命令集合 网络通讯 】Linux 显示网络 连接、路由表和网络接口信息 netstat命令 使用指南
【Shell 命令集合 网络通讯 】Linux 显示网络 连接、路由表和网络接口信息 netstat命令 使用指南
193 1
|
3月前
|
机器学习/深度学习
神经网络中权重初始化的重要性
【8月更文挑战第23天】
108 0
|
4月前
|
机器学习/深度学习 数据采集 监控
算法金 | DL 骚操作扫盲,神经网络设计与选择、参数初始化与优化、学习率调整与正则化、Loss Function、Bad Gradient
**神经网络与AI学习概览** - 探讨神经网络设计,包括MLP、RNN、CNN,激活函数如ReLU,以及隐藏层设计,强调网络结构与任务匹配。 - 参数初始化与优化涉及Xavier/He初始化,权重和偏置初始化,优化算法如SGD、Adam,针对不同场景选择。 - 学习率调整与正则化,如动态学习率、L1/L2正则化、早停法和Dropout,以改善训练和泛化。
44 0
算法金 | DL 骚操作扫盲,神经网络设计与选择、参数初始化与优化、学习率调整与正则化、Loss Function、Bad Gradient
|
5月前
|
机器学习/深度学习 PyTorch 算法框架/工具
神经网络参数初始化
**神经网络参数初始化**是深度学习的关键步骤。权重常通过**Xavier**或**He**初始化来打破对称性,适用于ReLU激活;而偏置通常初始化为0。初始化方法还包括**均匀分布**、**正态分布**、**全零**、**全一**和**固定值**。在PyTorch中,`torch.nn.init`模块提供了如`xavier_uniform_`和`kaiming_normal_`等初始化函数。预训练模型也可用于初始化,通过微调提升性能。
|
6月前
|
缓存 算法 网络架构
【网络层】IP组播(多播)、硬件组播、IGMP、组播路由选择协议、移动IP、路由器详解、路由表和路由转发
【网络层】IP组播(多播)、硬件组播、IGMP、组播路由选择协议、移动IP、路由器详解、路由表和路由转发
142 0
|
PyTorch 算法框架/工具
【PyTorch】初始化网络各层权重
【PyTorch】初始化网络各层权重
63 0
|
算法 Cloud Native Linux
《云原生网络数据面可观测性最佳实践》—— 一、容器网络内核原理——3.tc子系统(上)
《云原生网络数据面可观测性最佳实践》—— 一、容器网络内核原理——3.tc子系统(上)
|
Cloud Native Linux 网络性能优化
《云原生网络数据面可观测性最佳实践》—— 一、容器网络内核原理——3.tc子系统(下)
《云原生网络数据面可观测性最佳实践》—— 一、容器网络内核原理——3.tc子系统(下)