閱讀915 返回首頁    go 阿裏雲 go 技術社區[雲棲]


網絡子係統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地址
//			2.1 從路由表中刪除路由項
//			2.2 如果此ip地址為設備最後一個可用地址,關閉設備上的ip協議
//			2.3 否則,刷新路由緩存
//	注:當為設備添加/刪除ip地址時,由inet_insert_ifa,inet_del_ifa觸發
1.2 static int fib_inetaddr_event(struct notifier_block *this, unsigned long event, void *ptr)
{
	struct in_ifaddr *ifa = (struct in_ifaddr*)ptr;

	switch (event) {
		//設備添加ip地址
	case NETDEV_UP:
		//在路由表中添加路由項
		fib_add_ifaddr(ifa);
		//同步多路徑路由
#ifdef CONFIG_IP_ROUTE_MULTIPATH
		fib_sync_up(ifa->ifa_dev->dev);
#endif
		//刷新路由緩存
		rt_cache_flush(-1);
		break;
		//設備刪除ip地址
	case NETDEV_DOWN:
		//從路由表中刪除路由項
		fib_del_ifaddr(ifa);
		if (ifa->ifa_dev && ifa->ifa_dev->ifa_list == NULL) {
			//設備可用的最後一個ip地址
			//關閉設備的ip路由功能
			fib_disable_ip(ifa->ifa_dev->dev, 1);
		} else {
			//刷新路由緩存
			rt_cache_flush(-1);
		}
		break;
	}
	return NOTIFY_DONE;
}

最後更新:2017-04-03 14:53:48

  上一篇:go bash重拾
  下一篇:go 網絡子係統67_路由表處理設備事件