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


網絡子係統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;
}

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

  上一篇:go 網絡子係統68_路由表處理設備ip配置事件
  下一篇:go 網絡子係統66_策略路由初始化