summaryrefslogtreecommitdiff
path: root/datapath
diff options
context:
space:
mode:
authorJoe Stringer <joe@ovn.org>2016-01-07 17:47:23 -0800
committerJoe Stringer <joe@ovn.org>2016-02-02 14:26:46 -0800
commit34c3c2b755d403bc6db7cf2eca6c89e3791b6bd1 (patch)
tree43d7a662251330c3d09222bb73e4eb293ecdf458 /datapath
parent401da7b9823136fb7bdb60662ab529c48f01aafc (diff)
downloadopenvswitch-34c3c2b755d403bc6db7cf2eca6c89e3791b6bd1.tar.gz
compat: Detect and use nf_ct_frag6_gather().
This function is a likely candidate for backporting, and currently relies on version checks to include the source or not. Grep for the appropriate functions instead, and include the backport based on that. Signed-off-by: Joe Stringer <joe@ovn.org> Acked-by: Pravin B Shelar <pshelar@ovn.org>
Diffstat (limited to 'datapath')
-rw-r--r--datapath/linux/compat/include/net/netfilter/ipv6/nf_defrag_ipv6.h14
-rw-r--r--datapath/linux/compat/nf_conntrack_reasm.c6
2 files changed, 15 insertions, 5 deletions
diff --git a/datapath/linux/compat/include/net/netfilter/ipv6/nf_defrag_ipv6.h b/datapath/linux/compat/include/net/netfilter/ipv6/nf_defrag_ipv6.h
index 7d51491a9..97052ccc4 100644
--- a/datapath/linux/compat/include/net/netfilter/ipv6/nf_defrag_ipv6.h
+++ b/datapath/linux/compat/include/net/netfilter/ipv6/nf_defrag_ipv6.h
@@ -7,8 +7,14 @@
#include_next <net/netfilter/ipv6/nf_defrag_ipv6.h>
#endif
-#if LINUX_VERSION_CODE < KERNEL_VERSION(4,3,0)
+/* Upstream commit 029f7f3b8701 ("netfilter: ipv6: nf_defrag: avoid/free clone
+ * operations") changed the semantics of nf_ct_frag6_gather(), so we backport
+ * it for all prior kernels.
+ */
+#if defined(HAVE_NF_CT_FRAG6_CONSUME_ORIG) || \
+ defined(HAVE_NF_CT_FRAG6_OUTPUT)
#if defined(OVS_FRAGMENT_BACKPORT)
+#define OVS_NF_DEFRAG6_BACKPORT 1
struct sk_buff *rpl_nf_ct_frag6_gather(struct sk_buff *skb, u32 user);
int __init rpl_nf_ct_frag6_init(void);
void rpl_nf_ct_frag6_cleanup(void);
@@ -24,9 +30,13 @@ static inline void rpl_nf_ct_frag6_cleanup(void) { }
static inline void rpl_nf_ct_frag6_consume_orig(struct sk_buff *skb) { }
#endif /* OVS_FRAGMENT_BACKPORT */
#define nf_ct_frag6_gather rpl_nf_ct_frag6_gather
+#else /* HAVE_NF_CT_FRAG6_CONSUME_ORIG */
+static inline int __init rpl_nf_ct_frag6_init(void) { return 0; }
+static inline void rpl_nf_ct_frag6_cleanup(void) { }
+static inline void rpl_nf_ct_frag6_consume_orig(struct sk_buff *skb) { }
+#endif /* HAVE_NF_CT_FRAG6_CONSUME_ORIG */
#define nf_ct_frag6_init rpl_nf_ct_frag6_init
#define nf_ct_frag6_cleanup rpl_nf_ct_frag6_cleanup
#define nf_ct_frag6_consume_orig rpl_nf_ct_frag6_consume_orig
-#endif /* < 4.3 */
#endif /* __NF_DEFRAG_IPV6_WRAPPER_H */
diff --git a/datapath/linux/compat/nf_conntrack_reasm.c b/datapath/linux/compat/nf_conntrack_reasm.c
index 89a39789d..fec9e5794 100644
--- a/datapath/linux/compat/nf_conntrack_reasm.c
+++ b/datapath/linux/compat/nf_conntrack_reasm.c
@@ -21,8 +21,6 @@
#include <linux/version.h>
-#ifdef OVS_FRAGMENT_BACKPORT
-
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/string.h>
@@ -56,6 +54,8 @@
#include <linux/module.h>
#include <net/netfilter/ipv6/nf_defrag_ipv6.h>
+#ifdef OVS_NF_DEFRAG6_BACKPORT
+
static const char nf_frags_cache_name[] = "nf-frags";
struct nf_ct_frag6_skb_cb
@@ -651,4 +651,4 @@ void rpl_nf_ct_frag6_cleanup(void)
inet_frags_fini(&nf_frags);
}
-#endif /* OVS_FRAGMENT_BACKPORT */
+#endif /* OVS_NF_DEFRAG6_BACKPORT */