Skip to content

Commit cf1c9cc

Browse files
Jiri Bencdavem330
authored andcommitted
geneve: correctly handle ipv6.disable module parameter
When IPv6 is compiled but disabled at runtime, geneve_sock_add returns -EAFNOSUPPORT. For metadata based tunnels, this causes failure of the whole operation of bringing up the tunnel. Ignore failure of IPv6 socket creation for metadata based tunnels caused by IPv6 not being available. This is the same fix as what commit d074bf9 ("vxlan: correctly handle ipv6.disable module parameter") is doing for vxlan. Note there's also commit c0a47e4 ("geneve: should not call rt6_lookup() when ipv6 was disabled") which fixes a similar issue but for regular tunnels, while this patch is needed for metadata based tunnels. Signed-off-by: Jiri Benc <jbenc@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent f08d611 commit cf1c9cc

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

drivers/net/geneve.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -692,15 +692,20 @@ static int geneve_sock_add(struct geneve_dev *geneve, bool ipv6)
692692
static int geneve_open(struct net_device *dev)
693693
{
694694
struct geneve_dev *geneve = netdev_priv(dev);
695-
bool ipv6 = !!(geneve->info.mode & IP_TUNNEL_INFO_IPV6);
696695
bool metadata = geneve->collect_md;
696+
bool ipv4, ipv6;
697697
int ret = 0;
698698

699+
ipv6 = geneve->info.mode & IP_TUNNEL_INFO_IPV6 || metadata;
700+
ipv4 = !ipv6 || metadata;
699701
#if IS_ENABLED(CONFIG_IPV6)
700-
if (ipv6 || metadata)
702+
if (ipv6) {
701703
ret = geneve_sock_add(geneve, true);
704+
if (ret < 0 && ret != -EAFNOSUPPORT)
705+
ipv4 = false;
706+
}
702707
#endif
703-
if (!ret && (!ipv6 || metadata))
708+
if (ipv4)
704709
ret = geneve_sock_add(geneve, false);
705710
if (ret < 0)
706711
geneve_sock_release(geneve);

0 commit comments

Comments
 (0)