Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8a7a4b47 authored by Alexander Aring's avatar Alexander Aring Committed by Marcel Holtmann
Browse files

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: default avatarAlexander Aring <aar@pengutronix.de>
Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Reviewed-by: default avatarStefan Schmidt <stefan@osg.samsung.com>
Acked-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent 94e4a680
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -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)
		return -1;
	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;
	}

	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: