Chinaunix首页 | 论坛 | 博客
  • 博客访问: 401719
  • 博文数量: 124
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 872
  • 用 户 组: 普通用户
  • 注册时间: 2018-03-29 14:38
个人简介

默默的一块石头

文章分类

全部博文(124)

文章存档

2022年(26)

2021年(10)

2020年(28)

2019年(60)

我的朋友

分类: LINUX

2019-12-06 10:02:23

/* ip配置块 */  in_device为ip配置块,关联了二层设备,包含ip地址列表,组播配置,arp参数,接口配置等;

struct in_device {
    /* 二层设备 */
    struct net_device    *dev;
    /* 引用计数 */
    atomic_t        refcnt;
    /* 是否正在销毁 */
    int            dead;
    /* ip地址列表 */
    struct in_ifaddr    *ifa_list;    /* IP ifaddr chain        */


    /* 组播相关 */
    struct ip_mc_list __rcu    *mc_list;    /* IP multicast filter chain    */
    struct ip_mc_list __rcu    * __rcu *mc_hash;


    int            mc_count;    /* Number of installed mcasts    */
    spinlock_t        mc_tomb_lock;
    struct ip_mc_list    *mc_tomb;
    unsigned long        mr_v1_seen;
    unsigned long        mr_v2_seen;
    unsigned long        mr_maxdelay;
    unsigned char        mr_qrv;
    unsigned char        mr_gq_running;
    unsigned char        mr_ifc_count;
    struct timer_list    mr_gq_timer;    /* general query timer */
    struct timer_list    mr_ifc_timer;    /* interface change timer */


    /* arp参数 */
    struct neigh_parms    *arp_parms;
    /* 设备接口的一些配置 */
    struct ipv4_devconf    cnf;
    struct rcu_head        rcu_head;
};


in_ifaddr表示地址结构,其成员包含了地址,掩码,范围等信息,多个地址连接成链表,主地址在前,从地址在后;
/* 地址结构 */
struct in_ifaddr {
    struct hlist_node    hash;
    /* 下一个地址节点 */
    struct in_ifaddr    *ifa_next;
    /* 所属ip配置块 */
    struct in_device    *ifa_dev;
    struct rcu_head        rcu_head;
    /*
        ifa_local和ifa_address都用来存储ip地址
        但在不同设备接口意义不同
        (1) 在配置了广播的设备上,都表示本地ip地址
        (2) 在点对点设备上,ifa_address存储的是对端ip地址,
        而ifa_local存储的是本地ip地址
    */
    __be32            ifa_local;
    __be32            ifa_address;
    /* 子网掩码 */
    __be32            ifa_mask;
    /* 广播地址 */
    __be32            ifa_broadcast;
    /* 
        地址范围,值越小表示的范围越大
        RT_SCOPE_UNIVERSE-在任何地方使用
        RT_SCOPE_SITE-本地封闭系统的内部路由
        RT_SCOPE_LINK-局域网内使用,如广播地址
        RT_SCOPE_HOST-主机内部通信,如回环地址
        RT_SCOPE_NOWHERE-目的地址不存在
        
    */
    unsigned char        ifa_scope;
    /* 子网掩码长度 */
    unsigned char        ifa_prefixlen;
    /* 
        地址属性标记 
        IFA_F_SECONDARY-从属ip地址
        IFA_F_NODAD-禁止重复地址检测,ipv6使用
        IFA_F_HOMEADDRESS-移动ipv6家乡地址,ipv6使用
        IFA_F_DEPRECATED-此ip地址不鼓励使用,也不禁止
        IFA_F_TENTATIVE-尝试阶段的ip地址,仍在进行地址检测工作
        IFA_F_PERMANENT-永久性地址,无此标识,则会动态配置ip地址
    */
    __u32            ifa_flags;
    /* 地址标签,通常是网络设备名或者网络设备别名 */
    char            ifa_label[IFNAMSIZ];


    /* In seconds, relative to tstamp. Expiry is at tstamp + HZ * lft. */
    /* 生命周期 */
    __u32            ifa_valid_lft;
    __u32            ifa_preferred_lft;
    /* 时间戳 */
    unsigned long        ifa_cstamp; /* created timestamp */
    unsigned long        ifa_tstamp; /* updated timestamp */
};


阅读(1683) | 评论(0) | 转发(0) |
0

上一篇:路由

下一篇:内核函数之fib_add_ifaddr()

给主人留下些什么吧!~~