[IPV6]: ADDRCONF: Split up ipv6_generate_eui64() by device type.
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
955189efb4
commit
073a8e0e15
@@ -1299,12 +1299,8 @@ static void addrconf_leave_anycast(struct inet6_ifaddr *ifp)
|
|||||||
__ipv6_dev_ac_dec(ifp->idev, &addr);
|
__ipv6_dev_ac_dec(ifp->idev, &addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ipv6_generate_eui64(u8 *eui, struct net_device *dev)
|
static int addrconf_ifid_eui48(u8 *eui, struct net_device *dev)
|
||||||
{
|
{
|
||||||
switch (dev->type) {
|
|
||||||
case ARPHRD_ETHER:
|
|
||||||
case ARPHRD_FDDI:
|
|
||||||
case ARPHRD_IEEE802_TR:
|
|
||||||
if (dev->addr_len != ETH_ALEN)
|
if (dev->addr_len != ETH_ALEN)
|
||||||
return -1;
|
return -1;
|
||||||
memcpy(eui, dev->dev_addr, 3);
|
memcpy(eui, dev->dev_addr, 3);
|
||||||
@@ -1332,20 +1328,39 @@ static int ipv6_generate_eui64(u8 *eui, struct net_device *dev)
|
|||||||
eui[0] ^= 2;
|
eui[0] ^= 2;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
case ARPHRD_ARCNET:
|
}
|
||||||
|
|
||||||
|
static int addrconf_ifid_arcnet(u8 *eui, struct net_device *dev)
|
||||||
|
{
|
||||||
/* XXX: inherit EUI-64 from other interface -- yoshfuji */
|
/* XXX: inherit EUI-64 from other interface -- yoshfuji */
|
||||||
if (dev->addr_len != ARCNET_ALEN)
|
if (dev->addr_len != ARCNET_ALEN)
|
||||||
return -1;
|
return -1;
|
||||||
memset(eui, 0, 7);
|
memset(eui, 0, 7);
|
||||||
eui[7] = *(u8*)dev->dev_addr;
|
eui[7] = *(u8*)dev->dev_addr;
|
||||||
return 0;
|
return 0;
|
||||||
case ARPHRD_INFINIBAND:
|
}
|
||||||
|
|
||||||
|
static int addrconf_ifid_infiniband(u8 *eui, struct net_device *dev)
|
||||||
|
{
|
||||||
if (dev->addr_len != INFINIBAND_ALEN)
|
if (dev->addr_len != INFINIBAND_ALEN)
|
||||||
return -1;
|
return -1;
|
||||||
memcpy(eui, dev->dev_addr + 12, 8);
|
memcpy(eui, dev->dev_addr + 12, 8);
|
||||||
eui[0] |= 2;
|
eui[0] |= 2;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ipv6_generate_eui64(u8 *eui, struct net_device *dev)
|
||||||
|
{
|
||||||
|
switch (dev->type) {
|
||||||
|
case ARPHRD_ETHER:
|
||||||
|
case ARPHRD_FDDI:
|
||||||
|
case ARPHRD_IEEE802_TR:
|
||||||
|
return addrconf_ifid_eui48(eui, dev);
|
||||||
|
case ARPHRD_ARCNET:
|
||||||
|
return addrconf_ifid_arcnet(eui, dev);
|
||||||
|
case ARPHRD_INFINIBAND:
|
||||||
|
return addrconf_ifid_infiniband(eui, dev);
|
||||||
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user