// 路由表处理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;
}
网络子系统68_路由表处理设备ip配置事件
最新推荐文章于 2024-10-24 18:07:02 发布