[IPV6] ADDRCONF: Uninline ipv6_isatap_eui64().
authorYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Thu, 10 Apr 2008 06:42:09 +0000 (15:42 +0900)
committerYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Sat, 12 Apr 2008 04:43:17 +0000 (13:43 +0900)
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
include/net/addrconf.h
net/ipv6/addrconf.c

index 1ba4e5bf5801c06e1ed4b77c7af00729849920d9..8317c1bcd86cdeb8a7d6859e64e149b698d7b05b 100644 (file)
@@ -233,20 +233,7 @@ static inline int ipv6_addr_is_ll_all_routers(const struct in6_addr *addr)
                (addr->s6_addr32[3] ^ htonl(0x00000002))) == 0);
 }
 
-static inline int ipv6_isatap_eui64(u8 *eui, __be32 addr)
-{
-       eui[0] = (ipv4_is_zeronet(addr) || ipv4_is_private_10(addr) ||
-                 ipv4_is_loopback(addr) || ipv4_is_linklocal_169(addr) ||
-                 ipv4_is_private_172(addr) || ipv4_is_test_192(addr) ||
-                 ipv4_is_anycast_6to4(addr) || ipv4_is_private_192(addr) ||
-                 ipv4_is_test_198(addr) || ipv4_is_multicast(addr) ||
-                 ipv4_is_lbcast(addr)) ? 0x00 : 0x02;
-       eui[1] = 0;
-       eui[2] = 0x5E;
-       eui[3] = 0xFE;
-       memcpy (eui+4, &addr, 4);
-       return 0;
-}
+extern int __ipv6_isatap_ifid(u8 *eui, __be32 addr);
 
 static inline int ipv6_addr_is_isatap(const struct in6_addr *addr)
 {
index b17fafc56241c7c1e03fbeeea6eb3c7d54673b15..d15f3e095e7e8ad931aa97d973ea2f68b435d59d 100644 (file)
@@ -1494,6 +1494,29 @@ static int addrconf_ifid_infiniband(u8 *eui, struct net_device *dev)
        return 0;
 }
 
+int __ipv6_isatap_ifid(u8 *eui, __be32 addr)
+{
+       eui[0] = (ipv4_is_zeronet(addr) || ipv4_is_private_10(addr) ||
+                 ipv4_is_loopback(addr) || ipv4_is_linklocal_169(addr) ||
+                 ipv4_is_private_172(addr) || ipv4_is_test_192(addr) ||
+                 ipv4_is_anycast_6to4(addr) || ipv4_is_private_192(addr) ||
+                 ipv4_is_test_198(addr) || ipv4_is_multicast(addr) ||
+                 ipv4_is_lbcast(addr)) ? 0x00 : 0x02;
+       eui[1] = 0;
+       eui[2] = 0x5E;
+       eui[3] = 0xFE;
+       memcpy(eui + 4, &addr, 4);
+       return 0;
+}
+EXPORT_SYMBOL(__ipv6_isatap_ifid);
+
+static int addrconf_ifid_sit(u8 *eui, struct net_device *dev)
+{
+       if (dev->priv_flags & IFF_ISATAP)
+               return __ipv6_isatap_ifid(eui, *(__be32 *)dev->dev_addr);
+       return -1;
+}
+
 static int ipv6_generate_eui64(u8 *eui, struct net_device *dev)
 {
        switch (dev->type) {
@@ -1506,8 +1529,7 @@ static int ipv6_generate_eui64(u8 *eui, struct net_device *dev)
        case ARPHRD_INFINIBAND:
                return addrconf_ifid_infiniband(eui, dev);
        case ARPHRD_SIT:
-               if (dev->priv_flags & IFF_ISATAP)
-                       return ipv6_isatap_eui64(eui, *(__be32 *)dev->dev_addr);
+               return addrconf_ifid_sit(eui, dev);
        }
        return -1;
 }