在为一个网络设备接口的IP地址创建四个路由项(本地接收,子网广播,子网单播,本地接收的广播)的时候,需要为每个路由项创建一个路由节点,struct fib_node结构体表示一个路由节点,下面是其定义:
    struct fib_node{
        struct hlist_node   fn_hash;
        struct list_head    fn_alias;
        u32         fn_key;
    };
    一个路由节点总是维护在一个路由域struct fn_zone中,fn_hash成员就是用于把这个路由节点放到struct fn_zone结构体中的,fn_key是这个路由节点的IP地址或者网络号(对于本地接收路由,它就是代表本地网络设备接口的IP地址,如 172.16.48.2,对于子网单播,它就是子网号,比如172.16.48.0)。对于子网号172.16.48.0,其子网掩码就是 255.255.255.0,该路由项的目的地址长度就是24。而对于本地接收和广播路由,其掩码是255.255.255.255,目的地址长度是 32,同一目的地址长度的路由节点被维护在同一个路由域struct fn_zone中。
    全局变量fn_hash_kmem是一个后备高速缓冲区,所有的路由节点都在这块区域分配。
    fn_alias是一个list,其节点是一个结构体struct fib_alias,其定义如下:
    struct fib_alias{
        struct list_head    fa_list;
        struct rcu_head rcu;
        struct fib_info     *fa_info;
        u8          fa_tos;
        u8          fa_type;
        u8          fa_scope;
        u8          fa_state;
    };
    它实际存放路由节点的关键信息,它之所以以一个list的形式存放在struct fib_node中,是因为,比如,127.10.0.1和127.0.0.1两个A类IP地址,它们创建的广播路由的fn_key都是 127.255.255.255,所以共享一个路由节点,但是它们有各自的struct fib_alias。其成员fa_info指向相应的路由信息节点。
    下面可以看一个比较典型的路由节点,比如本地网络设备接口eth0的子网单播路由的路由节点,其内容如下:    strcut fib_node{
        .fn_alias{
            .fa_info{
                .fib_protocol   = RTPROT_KERNEL;
                .fib_nhs        = 1;
                .fib_flags      = 0;
                .fib_prefsrc    = 172.16.48.2;
                struct fib_nh{
                    .nh_oif     = indexof(eth0);
                    .nh_flags   = 0;
                    .nh_weight  = 1;
                    .nh_scope   = RT_SCOPE_HOST;
                    .nh_dev     = eth0;
                }
            }
            .fa_tos = 0;
            .fa_type = RTN_UNICAST;
            .fa_scope = RT_SCOPE_LINK;
            .fa_state = 0;
        }
        .fn_key = 172.16.48.0;
    }
    这个路由节点的目的地址长度是24(子网掩码是255.255.255.0),所以它被放到fz_order的值为24的路由域fz_zone中去。关于路由域和路由表,下回分解。

创建一个路由节点struct fib_node相关推荐

  1. 『中级篇』docker-swarm创建一个多节点集群(43)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』docker-swarm创建一个多节点集群(43) docker Swarm是Docker官方提供的一款集群管理工具 ...

  2. go : go gin mysql 创建一个简单的后端web服务

    吃别人吃不了的苦,忍别人受不了的气,付出比别人更多的,才会享受的比别人更多 !!! 具体代码在: https://gitee.com/hjx_RuGuoYunZhiDao/strom-huang-go ...

  3. 【DOM编程艺术】动态创建标记(签)---创建和插入节点

    window.οnlοad=function(){var para=document.createElement('p');var info= 'nodeName:';info += para.nod ...

  4. 一个5节点的polardb mysql_POLARDB问题

    Q:为什么云数据库POLARDB版优于传统MySQL数据库? {#section_73b_04t_cl7 .section}传统MySQL在购买时,需要指定购买的磁盘大小,通常不超过3TB.如果空间不 ...

  5. tensorflow1.11.0 tf.constant()函数(创建一个常数张量)

    tf.constant tf.constant(value,dtype=None,shape=None,name='Const',verify_shape=False ) Defined in ten ...

  6. zookeeper 创建临时顺序节点_Zookeeper学习笔记

    1.Zookeeper简介 Zookeeper:是一个分布式的.开源的程序协调服务,是 hadoop 项目下的一个子项目. 他提供的主要功能包括:配置管理.名字服务.分布式锁.集群管理 . 2.zno ...

  7. [ASP.NET MVC2 系列] ASP.NET MVC 之如何创建自定义路由约束

     [ASP.NET MVC2 系列]      [ASP.NET MVC2 系列] ASP.Net MVC教程之<在15分钟内用ASP.Net MVC创建一个电影数据库应用程序>      ...

  8. 怎样添加、移除、移动、复制、创建和查找节点?

    1)创建新节点 createDocumentFragment() //创建一个DOM片段 createElement() //创建一个具体的元素 createTextNode() //创建一个文本节点 ...

  9. 实现 Virtual DOM 下的一个 VNode 节点

    实现 Virtual DOM 下的一个 VNode 节点 什么是VNode 我们知道,render function 会被转化成 VNode 节点.Virtual DOM 其实就是一棵以 JavaSc ...

最新文章

  1. MongoDB 从节点 延迟的测试
  2. JavaScript, ABAP和Scala里的尾递归(Tail Recursion)
  3. 数据结构——二叉树的非递归算法
  4. Hibernate事实:始终检查Criteria API SQL查询
  5. 计算机基础知识excle,职称计算机基础知识:Excel工作表的复制
  6. python中的索引从几开始计数_计算机为什么要从 0 开始计数?
  7. 渐进增强和优雅降级有什么区别
  8. 图解+笔记-4.2.1 字符串获取操作、字符串合并和重复操作
  9. ubuntu切换到root
  10. Atitit 模块打包器(module bundler)的概念与使用 目录 1. 解决问题 1 1.1. 多js合并方便性能加载 1 1.2. 静态模块打包 2 1.3. 动态模块打包 2 2. 最
  11. 帆软之使用FineTube将其他来源数据同步至简道云表单(多图预警)
  12. selenium 谷歌驱动 下载网址
  13. 【音频隐写提取】MP3Stego下载、命令、使用方法
  14. 本地测试微信授权登录
  15. 征途服务器 文件夹需手,手游新征途手工架设服务端+配套双客户端+架设流程+服务器部署文档等...
  16. IT运维工程师要会什么?
  17. 简单的RTSP播放器
  18. WWDC22:“花里胡哨”的苹果又会给我们带来什么惊喜呢?
  19. rap2服务端delos环境搭建
  20. 2021强烈推荐的十大Win10必备工具(重装系统必备)

热门文章

  1. 中移4G模块-ML302-OpenCpu开发-串口开发
  2. django自动转化前端模板中static的css,js引用
  3. Neo4j配置安装与测试
  4. pandas忽略行列索引,纵向拼接多个dataframe
  5. angular下拉框点击无反应_angular 实现 下拉菜单 的 点击其他区域关闭下拉菜单功能?...
  6. php提供了什么来实现反射,php提供实现反射的方法和实例代码
  7. vue2.0中ckeckbox(复选框)的使用心得,及对click事件和change的理解
  8. 以下各节已定义,但尚未为布局页“~/Views/_LayoutHome.cshtml”呈现:“mainContent; jsSrc”。...
  9. 洛谷 1972 莫队
  10. Linux内核启动过程和Bootloader(总述)