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