网络子系统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);
}

目录
相关文章
|
2天前
|
安全 测试技术 网络架构
【专栏】如何编写网络设备割接方案?这七个步骤要牢记!
【4月更文挑战第28天】本文介绍了编写网络设备割接方案的七个步骤,包括明确割接目标、收集信息、制定计划、设计流程、风险评估、准备测试环境和编写文档。通过实际案例分析,展示了如何成功完成割接,确保业务连续性和稳定性。遵循这些步骤,可提高割接成功率,为公司的网络性能和安全提供保障。
|
3天前
|
网络协议 物联网 网络安全
|
2天前
|
运维 网络协议 安全
【专栏】30 个思科设备巡检命令,值得每位网络工程师收藏!
【4月更文挑战第28天】本文列举了30个必备的思科设备巡检命令,涵盖设备基本信息、性能、网络连接、安全及其它重要方面。这些命令包括`show version`、`show running-config`、`show ip route`、`show access-lists`等,对监控设备状态、排查故障及优化性能至关重要。熟悉并运用这些命令能提升网络工程师的工作效率,确保网络稳定运行。不断学习新命令以适应网络技术发展是网络工程师的必修课。
|
2天前
|
网络虚拟化 数据安全/隐私保护 数据中心
【专栏】思科和华为网络设备命令对比,多维度,建议网络工程师收藏!
【4月更文挑战第28天】本文对比了思科与华为网络设备的基本配置、接口、VLAN、路由、访问控制列表及其它关键命令。尽管两者在很多操作上相似,如设备命名(思科:`hostname`,华为:`sysname`)、查看版本信息(思科:`show version`,华为:`display version`),但在某些方面存在差异,如接口速率设置(两者都使用`speed`和`duplex`,但命令结构略有不同)和VLAN配置(华为的`port hybrid`命令)。
|
3天前
|
安全 网络安全 网络架构
|
3天前
|
存储 网络协议 网络安全
IP路由详解:网络互联的心脏
【4月更文挑战第22天】
25 7
IP路由详解:网络互联的心脏
|
5天前
|
网络协议 安全 网络安全
|
5天前
|
存储 网络架构
|
5天前
|
存储 监控 安全
企业如何建立网络事件应急响应团队?
建立企业网络事件应急响应团队是应对勒索软件等威胁的关键。团队的迅速、高效行动能减轻攻击影响。首先,企业需决定是外包服务还是自建团队。外包通常更经济,适合多数公司,但大型或有复杂IT环境的企业可能选择内部团队。团队包括应急响应小组和技术支持监控团队,前者专注于安全事件处理,后者负责日常IT运维和安全监控。团队应包括安全分析工程师、IT工程师、恶意软件分析师、项目经理、公关和法律顾问等角色。此外,选择合适的工具(如SIEM、SOAR、XDR),制定行动手册、合规政策,创建报告模板,并进行定期训练和演练以确保团队的有效性。外包时,理解团队构成和运作方式依然重要。
13 1
|
7天前
|
安全 JavaScript 前端开发
第十六届山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题—B模块安全事件响应/网络安全数据取证/应用安全
该内容描述了一次网络安全演练,包括七个部分:Linux渗透提权、内存取证、页面信息发现、数字取证调查、网络安全应急响应、Python代码分析和逆向分析。参与者需在模拟环境中收集Flag值,涉及任务如获取服务器信息、提权、解析内存片段、分析网络数据包、处理代码漏洞、解码逆向操作等。每个部分都列出了若干具体任务,要求提取或生成特定信息作为Flag提交。
11 0