Commit dfd982ba authored by YOSHIFUJI Hideaki's avatar YOSHIFUJI Hideaki

[IPV6] ADDRCONF: Uninline ipv6_isatap_eui64().

Signed-off-by: default avatarYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
parent 3eb84f49
...@@ -233,20 +233,7 @@ static inline int ipv6_addr_is_ll_all_routers(const struct in6_addr *addr) ...@@ -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); (addr->s6_addr32[3] ^ htonl(0x00000002))) == 0);
} }
static inline int ipv6_isatap_eui64(u8 *eui, __be32 addr) extern 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;
}
static inline int ipv6_addr_is_isatap(const struct in6_addr *addr) static inline int ipv6_addr_is_isatap(const struct in6_addr *addr)
{ {
......
...@@ -1494,6 +1494,29 @@ static int addrconf_ifid_infiniband(u8 *eui, struct net_device *dev) ...@@ -1494,6 +1494,29 @@ static int addrconf_ifid_infiniband(u8 *eui, struct net_device *dev)
return 0; 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) static int ipv6_generate_eui64(u8 *eui, struct net_device *dev)
{ {
switch (dev->type) { switch (dev->type) {
...@@ -1506,8 +1529,7 @@ static int ipv6_generate_eui64(u8 *eui, struct net_device *dev) ...@@ -1506,8 +1529,7 @@ static int ipv6_generate_eui64(u8 *eui, struct net_device *dev)
case ARPHRD_INFINIBAND: case ARPHRD_INFINIBAND:
return addrconf_ifid_infiniband(eui, dev); return addrconf_ifid_infiniband(eui, dev);
case ARPHRD_SIT: case ARPHRD_SIT:
if (dev->priv_flags & IFF_ISATAP) return addrconf_ifid_sit(eui, dev);
return ipv6_isatap_eui64(eui, *(__be32 *)dev->dev_addr);
} }
return -1; return -1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment