Skip to content

Commit

Permalink
compat: Backport ipv6_stub change
Browse files Browse the repository at this point in the history
A patch backported to the Linux stable 4.14 tree and present in the
latest stable 4.14.181 kernel breaks ipv6_stub usage.

The commit is
8ab8786f78c3 ("net ipv6_stub: use ip6_dst_lookup_flow instead of ip6_dst_lookup").

Create the compat layer define to check for it and fixup usage in vxlan
and geneve modules.

Passes Travis here:
https://travis-ci.org/github/gvrose8192/ovs-experimental/builds/689798733

Signed-off-by: Greg Rose <gvrose8192@gmail.com>
Signed-off-by: William Tu <u9012063@gmail.com>
  • Loading branch information
gvrose8192 authored and Alin Gabriel Serdean committed Jul 15, 2020
1 parent 3354864 commit dd83c5d
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 2 deletions.
2 changes: 2 additions & 0 deletions acinclude.m4
Expand Up @@ -529,6 +529,8 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
OVS_GREP_IFELSE([$KSRC/include/net/ip6_fib.h], [rt6_get_cookie],
[OVS_DEFINE([HAVE_RT6_GET_COOKIE])])
OVS_FIND_FIELD_IFELSE([$KSRC/include/net/addrconf.h], [ipv6_stub],
[dst_entry])
OVS_GREP_IFELSE([$KSRC/include/net/addrconf.h], [ipv6_dst_lookup.*net],
[OVS_DEFINE([HAVE_IPV6_DST_LOOKUP_NET])])
OVS_GREP_IFELSE([$KSRC/include/net/addrconf.h], [ipv6_dst_lookup_flow.*net],
Expand Down
11 changes: 10 additions & 1 deletion datapath/linux/compat/geneve.c
Expand Up @@ -962,7 +962,16 @@ static struct dst_entry *geneve_get_v6_dst(struct sk_buff *skb,
return dst;
}

#if defined(HAVE_IPV6_DST_LOOKUP_FLOW_NET)
#if defined(HAVE_IPV6_STUB_WITH_DST_ENTRY) && defined(HAVE_IPV6_DST_LOOKUP_FLOW)
#ifdef HAVE_IPV6_DST_LOOKUP_FLOW_NET
dst = ipv6_stub->ipv6_dst_lookup_flow(geneve->net, gs6->sock->sk, fl6,
NULL);
#else
dst = ipv6_stub->ipv6_dst_lookup_flow(gs6->sock->sk, fl6,
NULL);
#endif
if (IS_ERR(dst)) {
#elif defined(HAVE_IPV6_DST_LOOKUP_FLOW_NET)
if (ipv6_stub->ipv6_dst_lookup_flow(geneve->net, gs6->sock->sk, &dst,
fl6)) {
#elif defined(HAVE_IPV6_DST_LOOKUP_FLOW)
Expand Down
18 changes: 17 additions & 1 deletion datapath/linux/compat/vxlan.c
Expand Up @@ -967,7 +967,10 @@ static struct dst_entry *vxlan6_get_route(struct vxlan_dev *vxlan,
bool use_cache = (dst_cache && ip_tunnel_dst_cache_usable(skb, info));
struct dst_entry *ndst;
struct flowi6 fl6;
#if !defined(HAVE_IPV6_STUB_WITH_DST_ENTRY) || \
!defined(HAVE_IPV6_DST_LOOKUP_FLOW)
int err;
#endif

if (!sock6)
return ERR_PTR(-EIO);
Expand All @@ -990,7 +993,15 @@ static struct dst_entry *vxlan6_get_route(struct vxlan_dev *vxlan,
fl6.fl6_dport = dport;
fl6.fl6_sport = sport;

#if defined(HAVE_IPV6_DST_LOOKUP_FLOW_NET)
#if defined(HAVE_IPV6_STUB_WITH_DST_ENTRY) && defined(HAVE_IPV6_DST_LOOKUP_FLOW)
#ifdef HAVE_IPV6_DST_LOOKUP_FLOW_NET
ndst = ipv6_stub->ipv6_dst_lookup_flow(vxlan->net, sock6->sock->sk,
&fl6, NULL);
#else
ndst = ipv6_stub->ipv6_dst_lookup_flow(sock6->sock->sk, &fl6, NULL);
#endif
if (unlikely(IS_ERR(ndst))) {
#elif defined(HAVE_IPV6_DST_LOOKUP_FLOW_NET)
err = ipv6_stub->ipv6_dst_lookup_flow(vxlan->net, sock6->sock->sk,
&ndst, &fl6);
#elif defined(HAVE_IPV6_DST_LOOKUP_FLOW)
Expand All @@ -1004,8 +1015,13 @@ static struct dst_entry *vxlan6_get_route(struct vxlan_dev *vxlan,
#else
err = ip6_dst_lookup(vxlan->vn6_sock->sock->sk, &ndst, &fl6);
#endif
#if defined(HAVE_IPV6_STUB_WITH_DST_ENTRY) && defined(HAVE_IPV6_DST_LOOKUP_FLOW)
return ERR_PTR(-ENETUNREACH);
}
#else
if (err < 0)
return ERR_PTR(err);
#endif

*saddr = fl6.saddr;
if (use_cache)
Expand Down

0 comments on commit dd83c5d

Please sign in to comment.