diff options
author | David S. Miller <davem@davemloft.net> | 2017-04-30 22:30:13 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-04-30 22:30:13 -0400 |
commit | c4879789b1fd9764df4465e80096b31d9466de0b (patch) | |
tree | d67b515cb3a68a29cf5132a94f1be454fc6c5264 | |
parent | 90a1bb98167c75b65e2a0527ef9200d172be3442 (diff) | |
parent | baf4d7860771287f30fbe9b6b2dc18b04361439d (diff) |
Merge branch 'vxlan-disabled-ipv6'
Jiri Benc says:
====================
vxlan: do not error out on disabled IPv6
This patchset fixes a bug with metadata based tunnels when booted with
ipv6.disable=1.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/vxlan.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index ebc98bb17a51..328b4712683c 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -2758,8 +2758,6 @@ static struct vxlan_sock *vxlan_socket_create(struct net *net, bool ipv6, sock = vxlan_create_sock(net, ipv6, port, flags); if (IS_ERR(sock)) { - pr_info("Cannot bind port %d, err=%ld\n", ntohs(port), - PTR_ERR(sock)); kfree(vs); return ERR_CAST(sock); } @@ -2822,17 +2820,21 @@ static int __vxlan_sock_add(struct vxlan_dev *vxlan, bool ipv6) static int vxlan_sock_add(struct vxlan_dev *vxlan) { - bool ipv6 = vxlan->flags & VXLAN_F_IPV6; bool metadata = vxlan->flags & VXLAN_F_COLLECT_METADATA; + bool ipv6 = vxlan->flags & VXLAN_F_IPV6 || metadata; + bool ipv4 = !ipv6 || metadata; int ret = 0; RCU_INIT_POINTER(vxlan->vn4_sock, NULL); #if IS_ENABLED(CONFIG_IPV6) RCU_INIT_POINTER(vxlan->vn6_sock, NULL); - if (ipv6 || metadata) + if (ipv6) { ret = __vxlan_sock_add(vxlan, true); + if (ret < 0 && ret != -EAFNOSUPPORT) + ipv4 = false; + } #endif - if (!ret && (!ipv6 || metadata)) + if (ipv4) ret = __vxlan_sock_add(vxlan, false); if (ret < 0) vxlan_sock_release(vxlan); |