Chinaunix首页 | 论坛 | 博客
  • 博客访问: 790184
  • 博文数量: 264
  • 博客积分: 592
  • 博客等级: 中士
  • 技术积分: 1574
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-24 22:02
文章分类

全部博文(264)

文章存档

2019年(2)

2018年(1)

2017年(1)

2016年(4)

2015年(14)

2014年(57)

2013年(88)

2012年(97)

分类: LINUX

2014-02-12 16:03:33

转:http://blog.csdn.net/nerdx/article/details/12843799
  1. //  路由表处理inet配置事件  
  2. //      在ip_rt_init->ip_fib_init中注册  
  3. 1.1 static struct notifier_block fib_inetaddr_notifier = {  
  4.     .notifier_call = fib_inetaddr_event,  
  5. };  
  6.   
  7. //  路由表处理地址配置事件  
  8. //  函数主要功能:  
  9. //      1.设备配置ip地址  
  10. //          1.1 将ip地址添加到路由表  
  11. //          1.2 同步多路径路由  
  12. //          1.3 刷新路由缓存  
  13. //      2.设备删除ip地址  
  14. //          2.1 从路由表中删除路由项  
  15. //          2.2 如果此ip地址为设备最后一个可用地址,关闭设备上的ip协议  
  16. //          2.3 否则,刷新路由缓存  
  17. //  注:当为设备添加/删除ip地址时,由inet_insert_ifa,inet_del_ifa触发  
  18. 1.2 static int fib_inetaddr_event(struct notifier_block *thisunsigned long event, void *ptr)  
  19. {  
  20.     struct in_ifaddr *ifa = (struct in_ifaddr*)ptr;  
  21.   
  22.     switch (event) {  
  23.         //设备添加ip地址  
  24.     case NETDEV_UP:  
  25.         //在路由表中添加路由项  
  26.         fib_add_ifaddr(ifa);  
  27.         //同步多路径路由  
  28. #ifdef CONFIG_IP_ROUTE_MULTIPATH  
  29.         fib_sync_up(ifa->ifa_dev->dev);  
  30. #endif  
  31.         //刷新路由缓存  
  32.         rt_cache_flush(-1);  
  33.         break;  
  34.         //设备删除ip地址  
  35.     case NETDEV_DOWN:  
  36.         //从路由表中删除路由项  
  37.         fib_del_ifaddr(ifa);  
  38.         if (ifa->ifa_dev && ifa->ifa_dev->ifa_list == NULL) {  
  39.             //设备可用的最后一个ip地址  
  40.             //关闭设备的ip路由功能  
  41.             fib_disable_ip(ifa->ifa_dev->dev, 1);  
  42.         } else {  
  43.             //刷新路由缓存  
  44.             rt_cache_flush(-1);  
  45.         }  
  46.         break;  
  47.     }  
  48.     return NOTIFY_DONE;  
  49. }  
阅读(827) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~