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