aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/geneve.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
index 3377ac66a347..5583d993480d 100644
--- a/drivers/net/geneve.c
+++ b/drivers/net/geneve.c
@@ -692,15 +692,20 @@ out:
692static int geneve_open(struct net_device *dev) 692static int geneve_open(struct net_device *dev)
693{ 693{
694 struct geneve_dev *geneve = netdev_priv(dev); 694 struct geneve_dev *geneve = netdev_priv(dev);
695 bool ipv6 = !!(geneve->info.mode & IP_TUNNEL_INFO_IPV6);
696 bool metadata = geneve->collect_md; 695 bool metadata = geneve->collect_md;
696 bool ipv4, ipv6;
697 int ret = 0; 697 int ret = 0;
698 698
699 ipv6 = geneve->info.mode & IP_TUNNEL_INFO_IPV6 || metadata;
700 ipv4 = !ipv6 || metadata;
699#if IS_ENABLED(CONFIG_IPV6) 701#if IS_ENABLED(CONFIG_IPV6)
700 if (ipv6 || metadata) 702 if (ipv6) {
701 ret = geneve_sock_add(geneve, true); 703 ret = geneve_sock_add(geneve, true);
704 if (ret < 0 && ret != -EAFNOSUPPORT)
705 ipv4 = false;
706 }
702#endif 707#endif
703 if (!ret && (!ipv6 || metadata)) 708 if (ipv4)
704 ret = geneve_sock_add(geneve, false); 709 ret = geneve_sock_add(geneve, false);
705 if (ret < 0) 710 if (ret < 0)
706 geneve_sock_release(geneve); 711 geneve_sock_release(geneve);