diff options
| -rw-r--r-- | drivers/net/geneve.c | 11 |
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: | |||
| 692 | static int geneve_open(struct net_device *dev) | 692 | static 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); |
