Chinaunix首页 | 论坛 | 博客
  • 博客访问: 660613
  • 博文数量: 186
  • 博客积分: 1875
  • 博客等级: 上尉
  • 技术积分: 2117
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-23 23:21
个人简介

有时候,就是想窥视一下不知道的东东,因为好奇!

文章分类

全部博文(186)

文章存档

2024年(2)

2023年(3)

2020年(1)

2019年(1)

2018年(1)

2017年(2)

2016年(69)

2015年(53)

2014年(14)

2013年(1)

2012年(5)

2011年(25)

2010年(9)

分类: LINUX

2015-07-27 21:47:51

第四章 路由
4.1 路由函数表结构及关系图
        a. 图: 略
        b. 从图可看出,路由函数表fib_table是路由的总根, 从此出发可找到各个路由区结构fn_zone, 也可以找到路由节点结构fib_node或者路由信息结构fib_info
4.2 路由函数表的初始化
          ......前一篇
4.3 通过路由函数表查找路由信息
             sys_socketcall()-->sys_bind()-->inet_bind()-->inet_addr_type()-->__inet_dev_addr_type()->fn_hash_lookup()-->fib_semantic_match()
                
             fn_hash_lookup()(2层循环: 外层对路由区队列的循环(同一子网号的路由区节点);内层对路由节点队列的循环)  
             fib_semantic_match()(查找可满足条件的路由......需要进行分析明确逻辑国)

4.4 路由设置及相关结构的初始化
            路由结构是在用户使用工具或路由指令通知链设置路由时初始化的. 下面从3条设置路线分析路由设置过程
            1. 路由设置路线A(net-tools通过ioctl系统调用进入ip_rt_ioctl()函数, 通过路由函数表的钩子函数实现增加或删除路由)
            2. 路由设置路线B(IPROUTE2通过netlink调用inet_rtm_newroute()增加或inet_rtm_delroute()删除路由) 
            3. 路由设置路线C(内核注册的通知节点register_inetaddr_notifier(&fib_inetaddr_notifier))
                static struct notifier_block fib_inetaddr_notifier = {
                    .notifier_call = fib_inetaddr_event,
                };
                fib_add_ifaddr()添加地址到路由中
                fib_del_ifaddr()删除地址到路由中

                fib_inetaddr_event()/fib_netdev_event()-->fib_magic()-->fib_new_table()-->fib_get_table()

                                                                                                                                   -->fib_hash_table()
                fib_new_table()(3条路线中多次出现. 建立路由表)
                fn_hash_insert()-->fn_new_zone()(创建新的路由区结构)
                                          -->fib_create_info()(创建路由信息结构)
                !!!!!!!!!!!!!!!!!!!!!!!!待进一步分析补充
4.5 基于输出方向的路由表查找与创建
          ......
4.6 基于输入方向的路由表查找与创建
          ......
阅读(557) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~