提交 8a7a4b47 编写于 作者: A Alexander Aring 提交者: Marcel Holtmann

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: NAlexander Aring <aar@pengutronix.de>
Signed-off-by: NLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Reviewed-by: NStefan Schmidt <stefan@osg.samsung.com>
Acked-by: NDavid S. Miller <davem@davemloft.net>
Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
上级 94e4a680
......@@ -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:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册