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