mirror of https://gitee.com/openkylin/linux.git
ipv6: addrconf: fix 48 bit 6lowpan autoconfiguration
This patch adds support for 48 bit 6LoWPAN address length autoconfiguration which is the case for BTLE 6LoWPAN. Signed-off-by: Alexander Aring <aar@pengutronix.de> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> Reviewed-by: Stefan Schmidt <stefan@osg.samsung.com> Acked-by: David S. Miller <davem@davemloft.net> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
94e4a68039
commit
8a7a4b4767
|
@ -2073,12 +2073,19 @@ static void addrconf_leave_anycast(struct inet6_ifaddr *ifp)
|
|||
__ipv6_dev_ac_dec(ifp->idev, &addr);
|
||||
}
|
||||
|
||||
static int addrconf_ifid_eui64(u8 *eui, struct net_device *dev)
|
||||
static int addrconf_ifid_6lowpan(u8 *eui, struct net_device *dev)
|
||||
{
|
||||
if (dev->addr_len != EUI64_ADDR_LEN)
|
||||
switch (dev->addr_len) {
|
||||
case ETH_ALEN:
|
||||
return addrconf_ifid_eui48(eui, dev);
|
||||
case EUI64_ADDR_LEN:
|
||||
memcpy(eui, dev->dev_addr, EUI64_ADDR_LEN);
|
||||
eui[0] ^= 2;
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
memcpy(eui, dev->dev_addr, EUI64_ADDR_LEN);
|
||||
eui[0] ^= 2;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2170,7 +2177,7 @@ static int ipv6_generate_eui64(u8 *eui, struct net_device *dev)
|
|||
case ARPHRD_TUNNEL:
|
||||
return addrconf_ifid_gre(eui, dev);
|
||||
case ARPHRD_6LOWPAN:
|
||||
return addrconf_ifid_eui64(eui, dev);
|
||||
return addrconf_ifid_6lowpan(eui, dev);
|
||||
case ARPHRD_IEEE1394:
|
||||
return addrconf_ifid_ieee1394(eui, dev);
|
||||
case ARPHRD_TUNNEL6:
|
||||
|
|
Loading…
Reference in New Issue