网络子系统62_路由子系统处理设备事件

简介:
//	监听设备事件
//		在ip_rt_init->devinet_init中注册
1.1 static struct notifier_block ip_netdev_notifier = {
	.notifier_call =inetdev_event,
};

//	路由子系统对网络设备事件的处理
//		与事件相关的设备需要有inet配置信息

//	函数主要任务:
//		1.开启设备,加入多播组,为回环设备配置ip地址
//		2.关闭设备,设备退出多播组
//		3.设备注销,删除该设备的配置信息
//		4.设备更名,更新设备的配置信息

//	注:路由子系统不处理设备注册事件,因为设备注册时,还没有inet配置信息。
1.2 static int inetdev_event(struct notifier_block *this, unsigned long event,
			 void *ptr)
{
	struct net_device *dev = ptr;
	struct in_device *in_dev = __in_dev_get(dev);
	//只处理有inet配置信息的网络设备
	if (!in_dev)
		goto out;

	switch (event) {
	//设备注册,说明有bug,因为设备注册时,不会有inet配置信息,已经返回
	case NETDEV_REGISTER:
		dev->ip_ptr = NULL;
		break;
	//设备开启
	case NETDEV_UP:
		//ip要求mtu至少68
		if (dev->mtu < 68)
			break;
		//由路由子系统处理回环设备的inet配置信息
		if (dev == &loopback_dev) {
			struct in_ifaddr *ifa;
			//分配ip地址描述符
			if ((ifa = inet_alloc_ifa()) != NULL) {
				//初始化ip地址,掩码
				ifa->ifa_local =
				  ifa->ifa_address = htonl(INADDR_LOOPBACK);
				ifa->ifa_prefixlen = 8;
				ifa->ifa_mask = inet_make_mask(8);
				in_dev_hold(in_dev);
				ifa->ifa_dev = in_dev;
				//ip地址的scope为host,表示此ip只在本机内部有效
				ifa->ifa_scope = RT_SCOPE_HOST;
				memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
				//将ifa插入到in_dev->ifa_list
				inet_insert_ifa(ifa);
			}
			in_dev->cnf.no_xfrm = 1;
			in_dev->cnf.no_policy = 1;
		}
		//加入多播组
		ip_mc_up(in_dev);
		break;
	case NETDEV_DOWN:
		//离开多播组
		ip_mc_down(in_dev);
		break;
	case NETDEV_CHANGEMTU:
		if (dev->mtu >= 68)
			break;
	case NETDEV_UNREGISTER:
		inetdev_destroy(in_dev);
		break;
	case NETDEV_CHANGENAME:
		inetdev_changename(dev, in_dev);
		break;
	}
out:
	return NOTIFY_DONE;
}

//	删除设备的配置信息
//	函数主要任务:
//		1.删除设备配置每个ip地址
//		2.删除设备调整邻居协议的参数
//		3.通过邻居协议设备配置信息不再使用
1.3 static void inetdev_destroy(struct in_device *in_dev)
{
	struct in_ifaddr *ifa;
	struct net_device *dev;
	//表示配置信息不再被使用
	in_dev->dead = 1;
	//遍历设备配置的地址
	while ((ifa = in_dev->ifa_list) != NULL) {
		//配置信息中删除该地址
		inet_del_ifa(in_dev, &in_dev->ifa_list, 0);
		inet_free_ifa(ifa);
	}

	dev = in_dev->dev;
	dev->ip_ptr = NULL;
	//每个设备用于调整邻居协议的参数,通过table->params链接在一起
	neigh_parms_release(&arp_tbl, in_dev->arp_parms);
	//通知邻居协议与此设备相关的邻居项失效
	arp_ifdown(dev);
	call_rcu(&in_dev->rcu_head, in_dev_rcu_put);
}

目录
相关文章
|
23天前
|
安全 网络安全 网络虚拟化
【软件设计师备考 专题 】常用网络设备和各类通信设备(一)
【软件设计师备考 专题 】常用网络设备和各类通信设备
97 2
|
1月前
|
SQL 安全 网络协议
网络安全产品之认识漏洞扫描设备
为了保障系统的安全性,需要及时发现和修复漏洞。这可以通过漏洞扫描设备等工具进行自动化检测和修复,同时也可以加强安全意识和培训,提高人员的安全防范能力。虽然无法完全避免漏洞的存在,但通过采取有效的措施可以大大减少漏洞的数量和危害程度,保障系统的安全性和稳定性。本文让我们一起来认识漏洞扫描设备。
49 0
|
2月前
|
运维 网络协议 网络架构
网络技术基础(6)——IP路由基础
【2月更文挑战第10天】网络基础笔记(加班了几天,中途耽搁了,预计推迟6天)
|
26天前
|
监控 Linux Shell
【Shell 命令集合 网络通讯 】Linux管理终端设备的登录过程 getty命令 使用指南
【Shell 命令集合 网络通讯 】Linux管理终端设备的登录过程 getty命令 使用指南
31 0
|
26天前
|
安全 Shell Linux
【Shell 命令集合 网络通讯 】Linux 打开终端设备 mingetty命令 使用指南
【Shell 命令集合 网络通讯 】Linux 打开终端设备 mingetty命令 使用指南
38 0
|
8天前
|
边缘计算 网络虚拟化 虚拟化
虚拟网络设备性能优化
在现代网络架构中,虚拟网络设备扮演着越来越重要的角色🌐,特别是在云计算☁️和容器化技术📦广泛应用的背景下。虚拟网络设备如虚拟以太网设备(veth)、虚拟交换机(vSwitch)、和虚拟路由器等,提供了灵活的网络连接和隔离方案🔗。然而,与物理网络设备相比,虚拟网络设备在处理能力💪、带宽利用率📈和延迟⏳方面可能存在性能瓶颈。因此,性能优化成为了虚拟网络设备管理中的一个重要议题🛠️。本文将探讨虚拟网络设备的性能优化手段,帮助网络管理员更有效地利用这些设备。
|
8天前
|
安全 网络安全 网络虚拟化
虚拟网络设备与网络安全:深入分析与实践应用
在数字化时代📲,网络安全🔒成为了企业和个人防御体系中不可或缺的一部分。随着网络攻击的日益复杂和频繁🔥,传统的物理网络安全措施已经无法满足快速发展的需求。虚拟网络设备🖧,作为网络架构中的重要组成部分,通过提供灵活的配置和强大的隔离能力🛡️,为网络安全提供了新的保障。本文将从多个维度深入分析虚拟网络设备是如何保障网络安全的,以及它们的实际意义和应用场景。
|
23天前
|
安全 网络安全 网络虚拟化
【软件设计师备考 专题 】常用网络设备和各类通信设备(三)
【软件设计师备考 专题 】常用网络设备和各类通信设备
33 0
|
23天前
|
安全 算法 网络安全
【软件设计师备考 专题 】常用网络设备和各类通信设备(二)
【软件设计师备考 专题 】常用网络设备和各类通信设备
40 2
|
1月前
|
存储 编解码 安全
网络设备和网络软件
网络设备和网络软件
22 0