summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/compat/compat.h8
-rw-r--r--src/socket.c2
2 files changed, 10 insertions, 0 deletions
diff --git a/src/compat/compat.h b/src/compat/compat.h
index 6a9bfd9..277e7e7 100644
--- a/src/compat/compat.h
+++ b/src/compat/compat.h
@@ -153,6 +153,14 @@ __attribute__((unused)) static inline int udp_sock_create_new(struct net *net, s
#define time_is_after_eq_jiffies64(a) time_before_eq64(get_jiffies_64(), a)
#endif
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 8, 0) && IS_ENABLED(CONFIG_IPV6)
+#include <net/addrconf.h>
+static inline bool ipv6_mod_enabled(void)
+{
+ return ipv6_stub->udpv6_encap_enable != NULL;
+}
+#endif
+
/* https://lkml.org/lkml/2015/6/12/415 */
#include <linux/netdevice.h>
static inline struct net_device *netdev_pub(void *dev)
diff --git a/src/socket.c b/src/socket.c
index f799d91..f894cfe 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -345,6 +345,8 @@ retry:
rcu_assign_pointer(wg->sock4, new4->sk);
#if IS_ENABLED(CONFIG_IPV6)
+ if (!ipv6_mod_enabled())
+ goto out;
port6.local_udp_port = htons(wg->incoming_port);
ret = udp_sock_create(wg->creating_net, &port6, &new6);
if (ret < 0) {