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

//	路由表对网络设备事件的处理
//		在ip_rt_init->ip_fib_init中注册
1.1 static struct notifier_block fib_netdev_notifier = {
	.notifier_call = fib_netdev_event,
};

// 路由表处理设备事件
//	函数主要功能:
//		1.设备开启
//			1.1 将设备配置的所有ip添加到路由表中
//			1.2 同步多路径缓存
//			1.3 刷新路由缓存

//		2.设备关闭,注销
//			2.1 关闭设备上的ip协议

//		3.设备mtu,载波改变:
//			3.1 同步路由缓存
1.2 static int fib_netdev_event(struct notifier_block *this, unsigned long event, void *ptr)
{
	struct net_device *dev = ptr;
	struct in_device *in_dev = __in_dev_get(dev);

	//设备注销
	if (event == NETDEV_UNREGISTER) {
		fib_disable_ip(dev, 2);
		return NOTIFY_DONE;
	}
	// 设备需要配置信息
	if (!in_dev)
		return NOTIFY_DONE;

	switch (event) {
	case NETDEV_UP:
		//设备开启
		for_ifa(in_dev) {
			//将设备配置的ip地址均添加到路由表中
			fib_add_ifaddr(ifa);
		} endfor_ifa(in_dev);
		//多路径同步
#ifdef CONFIG_IP_ROUTE_MULTIPATH
		fib_sync_up(dev);
#endif
		//刷新路由缓存
		rt_cache_flush(-1);
		break;
	case NETDEV_DOWN:
		//设备关闭,关闭设备上的ip协议
		fib_disable_ip(dev, 0);
		break;
		//mtu,载波变化
	case NETDEV_CHANGEMTU:
	case NETDEV_CHANGE:
		//立刻刷新路由缓存
		rt_cache_flush(0);
		break;
	}
	return NOTIFY_DONE;
}
时间: 2024-10-08 00:55:47

网络子系统67_路由表处理设备事件的相关文章

网络子系统68_路由表处理设备ip配置事件

// 路由表处理inet配置事件 // 在ip_rt_init->ip_fib_init中注册 1.1 static struct notifier_block fib_inetaddr_notifier = { .notifier_call = fib_inetaddr_event, }; // 路由表处理地址配置事件 // 函数主要功能: // 1.设备配置ip地址 // 1.1 将ip地址添加到路由表 // 1.2 同步多路径路由 // 1.3 刷新路由缓存 // 2.设备删除ip地址 /

网络子系统69_路由表辅助程序

// 关闭设备上的ip协议 // 函数主要任务: // 1.删除与设备相关的路由信息 // 2.刷新路由缓存 // 3.通知邻居子系统,与该设备有关的邻居项失效 1.1 static void fib_disable_ip(struct net_device *dev, int force) { if (fib_sync_down(0, dev, force)) fib_flush(); rt_cache_flush(0); arp_ifdown(dev); } // 设备状态改变/删除ip,标

网络子系统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_

Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介

原文:Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介 Linux内核分析(四) 两天没有更新了,上次博文我们分析了linux的内存管理子系统,本来我不想对接下来的进程管理子系统.网络子系统.虚拟文件系统在这个阶段进行分析的,但是为了让大家对内核有个整体的把握,今天还是简单的介绍一下剩余的几个子系统,我们对这几个子系统的分析,只要了解其作用和部分内容即可,不必深究,等我们写上几个驱动,到时候按照驱动再来分析这几个子系统我们就清晰多了. 在http://www.cnbl

DDoS攻击是近年来导致网络瘫痪和断网事件的主要罪魁祸首

DDoS攻击是近年来导致网络瘫痪和断网事件的主要罪魁祸首,甚至在百度贴吧上还存在"流量吧",经常有人在上面交易"DDoS木马",企图控制网络流量.高端网络的精髓中国移动通信集团公司某工作人员说,在如今P2P.IM盛行的时代,对于局域网的流量管理.抑制.监测.溯源可谓八字箴言;而对于骨干网络流量的管理,其精髓在于监测和溯源.而如何追本溯源.应对和管理网络异常流量呢?该内部人士介绍,对于异常流量管理这场遭遇战,可以说在电信行业早已打响,这可以追溯到2004年前后.经过近

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

// 监听设备事件 // 在ip_rt_init->devinet_init中注册 1.1 static struct notifier_block ip_netdev_notifier = { .notifier_call =inetdev_event, }; // 路由子系统对网络设备事件的处理 // 与事件相关的设备需要有inet配置信息 // 函数主要任务: // 1.开启设备,加入多播组,为回环设备配置ip地址 // 2.关闭设备,设备退出多播组 // 3.设备注销,删除该设备的配置信

网络子系统63_路由子系统处理netlink事件

// 路由子系统netlink控制块 // 在ip_rt_init->devinet_init中注册. 1.1 static struct rtnetlink_link inet_rtnetlink_table[RTM_MAX - RTM_BASE + 1] = { [4] = { .doit = inet_rtm_newaddr, }, [5] = { .doit = inet_rtm_deladdr, }, [6] = { .dumpit = inet_dump_ifaddr, }, [8]

网络子系统84_sock事件通知进程

// socket初始化 // 调用路径:inet_create->sock_init_data 1.1 void sock_init_data(struct socket *sock, struct sock *sk) { ... //sock状态改变的回调函数,当sock的状态变迁(如从established到close_wait)就会调用这个函数 sk->sk_state_change = sock_def_wakeup; //sock有输入数据的时被调用 sk->sk_data_

网络子系统14_邻居子系统通用接口

//创建一个新的邻居项 //参考 深入理解linux网络技术内幕 // 1.邻居子系统为具体的邻居协议,提供通用的功能接口 // 2.系统中所有的邻居协议被链接在neigh_tables链表中 // 3.neigh_table代表一个具体的邻居协议 // 4.具体邻居协议在运行时的行为,可以通过struct neigh_parms调节, // neigh_params与设备关联,每个邻居协议neigh_table提供一个默认的neigh_params. //注册一个邻居协议到系统中 // 1.与