From f29e3acc336e911e88ffa9bbcba24efaf6caaee7 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Sun, 8 Dec 2019 13:46:21 +0100 Subject: socket: convert to ipv6_dst_lookup_flow for 5.5 Upstream changed the API, so we introduce this super insane compat hack to make everything work again. --- src/compat/compat.h | 4 ++++ src/socket.c | 7 ++++--- 2 files changed, 8 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/compat/compat.h b/src/compat/compat.h index ab22fa4..b4a8f8b 100644 --- a/src/compat/compat.h +++ b/src/compat/compat.h @@ -861,6 +861,10 @@ static inline void skb_mark_not_on_list(struct sk_buff *skb) }) #endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 5, 0) +#define ipv6_dst_lookup_flow(a, b, c, d) ipv6_dst_lookup(a, b, &dst, c) + (void *)0 ?: dst +#endif + #if defined(ISUBUNTU1604) #include #ifndef _WG_LINUX_SIPHASH_H diff --git a/src/socket.c b/src/socket.c index a90dadd..c46256d 100644 --- a/src/socket.c +++ b/src/socket.c @@ -142,9 +142,10 @@ static int send6(struct wg_device *wg, struct sk_buff *skb, if (cache) dst_cache_reset(cache); } - ret = ipv6_stub->ipv6_dst_lookup(sock_net(sock), sock, &dst, - &fl); - if (unlikely(ret)) { + dst = ipv6_stub->ipv6_dst_lookup_flow(sock_net(sock), sock, &fl, + NULL); + if (unlikely(IS_ERR(dst))) { + ret = PTR_ERR(dst); net_dbg_ratelimited("%s: No route to %pISpfsc, error %d\n", wg->dev->name, &endpoint->addr, ret); goto err; -- cgit v1.2.3-59-g8ed1b