mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 19:56:18 +00:00
[IPV6] ADDRCONF: Uninline ipv6_isatap_eui64().
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
This commit is contained in:
parent
3eb84f4929
commit
dfd982baff
2 changed files with 25 additions and 16 deletions
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue