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