diff options
author | Joe Stringer <joe@ovn.org> | 2016-01-07 17:47:23 -0800 |
---|---|---|
committer | Joe Stringer <joe@ovn.org> | 2016-02-02 14:26:46 -0800 |
commit | 34c3c2b755d403bc6db7cf2eca6c89e3791b6bd1 (patch) | |
tree | 43d7a662251330c3d09222bb73e4eb293ecdf458 /datapath | |
parent | 401da7b9823136fb7bdb60662ab529c48f01aafc (diff) | |
download | openvswitch-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.h | 14 | ||||
-rw-r--r-- | datapath/linux/compat/nf_conntrack_reasm.c | 6 |
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 */ |