Signed-off-by: Joe Stringer <[email protected]>
---
acinclude.m4 | 2 ++
datapath/compat.h | 5 +++++
datapath/linux/compat/include/linux/netfilter_ipv6.h | 6 +++---
datapath/linux/compat/include/net/ip6_route.h | 13 +++++++------
datapath/linux/compat/ip6_output.c | 2 +-
5 files changed, 18 insertions(+), 10 deletions(-)
diff --git a/acinclude.m4 b/acinclude.m4
index 3e3426dcf2b4..bb1d94e2187d 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -389,6 +389,8 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
OVS_GREP_IFELSE([$KSRC/include/linux/netfilter.h], [nf_register_net_hook])
OVS_GREP_IFELSE([$KSRC/include/linux/netfilter.h], [nf_hookfn.*nf_hook_ops],
[OVS_DEFINE([HAVE_NF_HOOKFN_ARG_OPS])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/netfilter_ipv6.h], [fragment],
+ [OVS_DEFINE([HAVE_NF_IPV6_OPS_FRAGMENT])])
OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack.h],
[tmpl_alloc.*conntrack_zone],
diff --git a/datapath/compat.h b/datapath/compat.h
index 3cbd121f29cd..0e19051fb094 100644
--- a/datapath/compat.h
+++ b/datapath/compat.h
@@ -55,8 +55,13 @@ static inline bool skb_encapsulation(struct sk_buff *skb)
#endif
#ifdef OVS_FRAGMENT_BACKPORT
+#ifdef HAVE_NF_IPV6_OPS_FRAGMENT
+static inline int __init ip6_output_init(void) { return 0; }
+static inline void ip6_output_exit(void) { }
+#else
int __init ip6_output_init(void);
void ip6_output_exit(void);
+#endif
static inline int __init compat_init(void)
{
diff --git a/datapath/linux/compat/include/linux/netfilter_ipv6.h
b/datapath/linux/compat/include/linux/netfilter_ipv6.h
index 3026e1fe6b7f..3939e1423fcf 100644
--- a/datapath/linux/compat/include/linux/netfilter_ipv6.h
+++ b/datapath/linux/compat/include/linux/netfilter_ipv6.h
@@ -7,7 +7,7 @@
#include <net/ip.h> /* For OVS_VPORT_OUTPUT_PARAMS */
#include <net/ip6_route.h>
-#if LINUX_VERSION_CODE < KERNEL_VERSION(4,3,0)
+#ifndef HAVE_NF_IPV6_OPS_FRAGMENT
/* Try to minimise changes required to the actions.c code for calling IPv6
* fragmentation. We can keep the fragment() API mostly the same, except that
* the callback parameter needs to be in the form that older kernels accept.
@@ -27,7 +27,7 @@ static inline struct ovs_nf_ipv6_ops
*ovs_nf_get_ipv6_ops(void)
{
return &ovs_ipv6_ops;
}
-#else /* !OVS_FRAGMENT_BACKPORT || !CONFIG_NETFILTER || || !CONFIG_IPV6 */
+#else /* !OVS_FRAGMENT_BACKPORT */
static inline const struct ovs_nf_ipv6_ops *ovs_nf_get_ipv6_ops(void)
{
return NULL;
@@ -35,5 +35,5 @@ static inline const struct ovs_nf_ipv6_ops
*ovs_nf_get_ipv6_ops(void)
#endif
#define nf_get_ipv6_ops ovs_nf_get_ipv6_ops
-#endif /* < 4.3 */
+#endif /* HAVE_NF_IPV6_OPS_FRAGMENT */
#endif /* __NETFILTER_IPV6_WRAPPER_H */
diff --git a/datapath/linux/compat/include/net/ip6_route.h
b/datapath/linux/compat/include/net/ip6_route.h
index 93d70e3a7592..d28b195575cb 100644
--- a/datapath/linux/compat/include/net/ip6_route.h
+++ b/datapath/linux/compat/include/net/ip6_route.h
@@ -29,18 +29,19 @@ struct dst_entry *rpl_ip6_route_output(struct net *net,
const struct sock *sk,
#endif /* 2.6.39 */
-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
+#ifndef HAVE_NF_IPV6_OPS_FRAGMENT
+#ifdef OVS_FRAGMENT_BACKPORT
+int rpl_ip6_fragment(struct sock *sk, struct sk_buff *skb,
+ int (*output)(OVS_VPORT_OUTPUT_PARAMS));
+#else
static inline int rpl_ip6_fragment(struct sock *sk, struct sk_buff *skb,
int (*output)(struct sk_buff *))
{
kfree_skb(skb);
return -ENOTSUPP;
}
-#define ip6_fragment rpl_ip6_fragment
-#elif defined(OVS_FRAGMENT_BACKPORT)
-int rpl_ip6_fragment(struct sock *sk, struct sk_buff *skb,
- int (*output)(OVS_VPORT_OUTPUT_PARAMS));
-#define ip6_fragment rpl_ip6_fragment
#endif /* OVS_FRAGMENT_BACKPORT */
+#define ip6_fragment rpl_ip6_fragment
+#endif /* HAVE_NF_IPV6_OPS_FRAGMENT */
#endif /* _NET_IP6_ROUTE_WRAPPER */
diff --git a/datapath/linux/compat/ip6_output.c
b/datapath/linux/compat/ip6_output.c
index 5c0cdec4b382..c3ef46c4a935 100644
--- a/datapath/linux/compat/ip6_output.c
+++ b/datapath/linux/compat/ip6_output.c
@@ -31,7 +31,7 @@
#include <linux/version.h>
-#ifdef OVS_FRAGMENT_BACKPORT
+#if !defined(HAVE_NF_IPV6_OPS_FRAGMENT) && defined(OVS_FRAGMENT_BACKPORT)
#include <linux/errno.h>
#include <linux/kernel.h>
--
2.1.4
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev