net/ipv6: support more tunnel interfaces for EUI64 link-local generation
Signed-off-by: Felix Jia <felix.jia@alliedtelesis.co.nz> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d35a00b8e3
commit
45ce0fd19d
|
@ -2146,12 +2146,14 @@ static int ipv6_generate_eui64(u8 *eui, struct net_device *dev)
|
||||||
case ARPHRD_SIT:
|
case ARPHRD_SIT:
|
||||||
return addrconf_ifid_sit(eui, dev);
|
return addrconf_ifid_sit(eui, dev);
|
||||||
case ARPHRD_IPGRE:
|
case ARPHRD_IPGRE:
|
||||||
|
case ARPHRD_TUNNEL:
|
||||||
return addrconf_ifid_gre(eui, dev);
|
return addrconf_ifid_gre(eui, dev);
|
||||||
case ARPHRD_6LOWPAN:
|
case ARPHRD_6LOWPAN:
|
||||||
return addrconf_ifid_eui64(eui, dev);
|
return addrconf_ifid_eui64(eui, dev);
|
||||||
case ARPHRD_IEEE1394:
|
case ARPHRD_IEEE1394:
|
||||||
return addrconf_ifid_ieee1394(eui, dev);
|
return addrconf_ifid_ieee1394(eui, dev);
|
||||||
case ARPHRD_TUNNEL6:
|
case ARPHRD_TUNNEL6:
|
||||||
|
case ARPHRD_IP6GRE:
|
||||||
return addrconf_ifid_ip6tnl(eui, dev);
|
return addrconf_ifid_ip6tnl(eui, dev);
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -3195,6 +3197,9 @@ static void addrconf_dev_config(struct net_device *dev)
|
||||||
(dev->type != ARPHRD_IEEE1394) &&
|
(dev->type != ARPHRD_IEEE1394) &&
|
||||||
(dev->type != ARPHRD_TUNNEL6) &&
|
(dev->type != ARPHRD_TUNNEL6) &&
|
||||||
(dev->type != ARPHRD_6LOWPAN) &&
|
(dev->type != ARPHRD_6LOWPAN) &&
|
||||||
|
(dev->type != ARPHRD_IP6GRE) &&
|
||||||
|
(dev->type != ARPHRD_IPGRE) &&
|
||||||
|
(dev->type != ARPHRD_TUNNEL) &&
|
||||||
(dev->type != ARPHRD_NONE)) {
|
(dev->type != ARPHRD_NONE)) {
|
||||||
/* Alas, we support only Ethernet autoconfiguration. */
|
/* Alas, we support only Ethernet autoconfiguration. */
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -993,6 +993,9 @@ static void ip6gre_tunnel_setup(struct net_device *dev)
|
||||||
dev->flags |= IFF_NOARP;
|
dev->flags |= IFF_NOARP;
|
||||||
dev->addr_len = sizeof(struct in6_addr);
|
dev->addr_len = sizeof(struct in6_addr);
|
||||||
netif_keep_dst(dev);
|
netif_keep_dst(dev);
|
||||||
|
/* This perm addr will be used as interface identifier by IPv6 */
|
||||||
|
dev->addr_assign_type = NET_ADDR_RANDOM;
|
||||||
|
eth_random_addr(dev->perm_addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ip6gre_tunnel_init_common(struct net_device *dev)
|
static int ip6gre_tunnel_init_common(struct net_device *dev)
|
||||||
|
|
|
@ -49,6 +49,7 @@
|
||||||
#include <net/xfrm.h>
|
#include <net/xfrm.h>
|
||||||
#include <net/net_namespace.h>
|
#include <net/net_namespace.h>
|
||||||
#include <net/netns/generic.h>
|
#include <net/netns/generic.h>
|
||||||
|
#include <linux/etherdevice.h>
|
||||||
|
|
||||||
#define IP6_VTI_HASH_SIZE_SHIFT 5
|
#define IP6_VTI_HASH_SIZE_SHIFT 5
|
||||||
#define IP6_VTI_HASH_SIZE (1 << IP6_VTI_HASH_SIZE_SHIFT)
|
#define IP6_VTI_HASH_SIZE (1 << IP6_VTI_HASH_SIZE_SHIFT)
|
||||||
|
@ -842,6 +843,9 @@ static void vti6_dev_setup(struct net_device *dev)
|
||||||
dev->flags |= IFF_NOARP;
|
dev->flags |= IFF_NOARP;
|
||||||
dev->addr_len = sizeof(struct in6_addr);
|
dev->addr_len = sizeof(struct in6_addr);
|
||||||
netif_keep_dst(dev);
|
netif_keep_dst(dev);
|
||||||
|
/* This perm addr will be used as interface identifier by IPv6 */
|
||||||
|
dev->addr_assign_type = NET_ADDR_RANDOM;
|
||||||
|
eth_random_addr(dev->perm_addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue