super皮波 发表于 2015-04-23 22:58

关于fib_add_ifaddr

直接上代码了,代码比较老 2.6.20的
比如 我要添加一个ip
ip add addr10.0.1.0/24 dev eth0
这会导致在LOCAL路由表中添加两个导出的广播地址
10.0.1.255/32
10.0.1.0/32(这个导出的广播地址有什么用,也就是下面标红处的代码,多谢)
void fib_add_ifaddr(struct in_ifaddr *ifa)
{
        struct in_device *in_dev = ifa->ifa_dev;
        struct net_device *dev = in_dev->dev;
        struct in_ifaddr *prim = ifa;
        __be32 mask = ifa->ifa_mask;
        __be32 addr = ifa->ifa_local;
        __be32 prefix = ifa->ifa_address&mask;

        if (ifa->ifa_flags&IFA_F_SECONDARY) {
                prim = inet_ifa_byprefix(in_dev, prefix, mask);
                if (prim == NULL) {
                        printk(KERN_DEBUG "fib_add_ifaddr: bug: prim == NULL\n");
                        return;
                }
        }

        fib_magic(RTM_NEWROUTE, RTN_LOCAL, addr, 32, prim);

        if (!(dev->flags&IFF_UP))
                return;

        /* Add broadcast address, if it is explicitly assigned. */
        if (ifa->ifa_broadcast && ifa->ifa_broadcast != htonl(0xFFFFFFFF))
                fib_magic(RTM_NEWROUTE, RTN_BROADCAST, ifa->ifa_broadcast, 32, prim);

        if (!ZERONET(prefix) && !(ifa->ifa_flags&IFA_F_SECONDARY) &&
          (prefix != addr || ifa->ifa_prefixlen < 32)) {
                fib_magic(RTM_NEWROUTE, dev->flags&IFF_LOOPBACK ? RTN_LOCAL :
                          RTN_UNICAST, prefix, ifa->ifa_prefixlen, prim);

                /* Add network specific broadcasts, when it takes a sense */
                if (ifa->ifa_prefixlen < 31) {
                        fib_magic(RTM_NEWROUTE, RTN_BROADCAST, prefix, 32, prim);                        fib_magic(RTM_NEWROUTE, RTN_BROADCAST, prefix|~mask, 32, prim);
                }
        }
}

jiufei19 发表于 2015-04-23 23:12

10.0.1.0/32,被称为limited broadcast,就应该是通常说的那个255.255.255.255广播地址

super皮波 发表于 2015-04-23 23:28

回复 2# jiufei19
那岂不是每一次ip add都要加一次受限广播地址?这不就重复了嘛


   

jiufei19 发表于 2015-04-23 23:40

回复 3# super皮波

不会的,因为有!(ifa->ifa_flags&IFA_F_SECONDARY)这个限制,只有primary地址的加入时才会添加此受限广播地址


   

super皮波 发表于 2015-04-24 21:04

回复 4# jiufei19
懂了,谢谢了 兄弟

   
页: [1]
查看完整版本: 关于fib_add_ifaddr