网络子系统66_策略路由初始化

简介:
//	策略路由链表
//		系统中所有策略路由通过fib_rules链接在一起

static struct fib_rule default_rule = {
	.r_clntref =	ATOMIC_INIT(2),//引用计数
	.r_preference =	0x7FFF,//路由规则优先级
	.r_table =	RT_TABLE_DEFAULT,//路由表标示符
	.r_action =	RTN_UNICAST,//路由类型,间接定义了当路由查找匹配时应采取的动作
};

static struct fib_rule main_rule = {
	.r_next =	&default_rule,
	.r_clntref =	ATOMIC_INIT(2),
	.r_preference =	0x7FFE,
	.r_table =	RT_TABLE_MAIN,
	.r_action =	RTN_UNICAST,
};

static struct fib_rule local_rule = {
	.r_next =	&main_rule,
	.r_clntref =	ATOMIC_INIT(2),
	.r_table =	RT_TABLE_LOCAL,
	.r_action =	RTN_UNICAST,
};

static struct fib_rule *fib_rules = &local_rule;

//	策略路由初始化
//		向netdev_chain注册监听块
//	调用路径:ip_rt_init->ip_fib_init->fib_rules_init
2.1 void __init fib_rules_init(void)
{
	register_netdevice_notifier(&fib_rules_notifier);
}

2.1 static struct notifier_block fib_rules_notifier = {
	.notifier_call =fib_rules_event,
};

//	策略路由对设备事件的处理
//		只处理设备注册,注销事件
static int fib_rules_event(struct notifier_block *this, unsigned long event, void *ptr)
{
	struct net_device *dev = ptr;
	//设备注销,删除与设备相关的策略路由
	if (event == NETDEV_UNREGISTER)
		fib_rules_detach(dev);
	else if (event == NETDEV_REGISTER)
		fib_rules_attach(dev);//添加与设备相关的策略
	return NOTIFY_DONE;
}

//	禁止与设备相关的策略路由
//		将策略路由r_ifindex=-1,禁止策略路由
2.2 static void fib_rules_detach(struct net_device *dev)
{
	struct fib_rule *r;
	//遍历系统中所有的策略路由
	for (r=fib_rules; r; r=r->r_next) {
		if (r->r_ifindex == dev->ifindex) {//策略路由使用的设备index
			write_lock_bh(&fib_rules_lock);
			r->r_ifindex = -1;//禁止该策略路由
			write_unlock_bh(&fib_rules_lock);
		}
	}
}

//	激活设备的策略路由
//		fib_rule->r_ifname表示策略应用的设备
2.3 static void fib_rules_attach(struct net_device *dev)
{
	struct fib_rule *r;

	for (r=fib_rules; r; r=r->r_next) {
		if (r->r_ifindex == -1 && strcmp(dev->name, r->r_ifname) == 0) {
			write_lock_bh(&fib_rules_lock);
			r->r_ifindex = dev->ifindex;
			write_unlock_bh(&fib_rules_lock);
		}
	}
}

目录
相关文章
|
10月前
|
PyTorch 算法框架/工具
【PyTorch】初始化网络各层权重
【PyTorch】初始化网络各层权重
48 0
|
11月前
|
算法 Cloud Native Linux
《云原生网络数据面可观测性最佳实践》—— 一、容器网络内核原理——3.tc子系统(上)
《云原生网络数据面可观测性最佳实践》—— 一、容器网络内核原理——3.tc子系统(上)
|
11月前
|
Cloud Native Linux 网络性能优化
《云原生网络数据面可观测性最佳实践》—— 一、容器网络内核原理——3.tc子系统(下)
《云原生网络数据面可观测性最佳实践》—— 一、容器网络内核原理——3.tc子系统(下)
|
PyTorch 算法框架/工具
A网络的embedding层的权重参数已经初始化为F了,copy.deepcopy(A)的结果网络也跟着初始化为F了嘛?
A网络的embedding层的权重参数已经通过 self.embedding.weight.data.copy_(pretrained_embeddings)初始化为F,那么 copy.deepcopy(A)的结果网络也跟着初始化为F了嘛?
165 0
|
机器学习/深度学习 数据挖掘 PyTorch
初始化神经网络权重的方法总结
初始化神经网络权重的方法总结
188 0
初始化神经网络权重的方法总结
|
网络协议 Ubuntu 测试技术
ESP32-C3入门教程 网络 篇(一、 Wi-Fi 使用入门 — 初始化及STA、AP模式)
前面的8节基础课算是把 ESP32-C3 的外设和一些基本功能都测试过, 接下来就要进行无线协议 WIFI 和 蓝牙的功能测试。 这节课我们就从 WIFI 开始,了解 ESP32-C3 的WIFI 功能。
770 1
ESP32-C3入门教程 网络 篇(一、 Wi-Fi 使用入门 — 初始化及STA、AP模式)
|
数据安全/隐私保护 iOS开发 MacOS
Pd虚拟机安装系统提示 “网络初始化失败 操作失败 ”的解决方案
为近期升级到 macOS 12.x ,导致 PD16.x 又不能用了,于是又找到了 PD17.x,安装很顺利,但是启动具体虚拟机的时候却提示:网络初始化失败
Pd虚拟机安装系统提示 “网络初始化失败 操作失败 ”的解决方案
|
Android开发
【Android 逆向】Android 逆向通用工具开发 ( PC 端工程分析 | 网络初始化操作 | PC 端工程核心业务逻辑 )
【Android 逆向】Android 逆向通用工具开发 ( PC 端工程分析 | 网络初始化操作 | PC 端工程核心业务逻辑 )
123 0
|
JSON Android开发 数据格式
【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | SOCKET 网络套接字初始化 | 读取远程端 “Android 模拟器“ 信息 | 向远程端写出数据 )
【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | SOCKET 网络套接字初始化 | 读取远程端 “Android 模拟器“ 信息 | 向远程端写出数据 )
189 0
|
Android开发 Windows
【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | 配置头文件 | 配置编译参数 | 网络初始化 WSAStartup 与清理 WSACleanup 操作 )
【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | 配置头文件 | 配置编译参数 | 网络初始化 WSAStartup 与清理 WSACleanup 操作 )
134 0