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