Skip to content

Commit

Permalink
compat: Detect and use nf_ct_frag6_gather().
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
joestringer committed Feb 2, 2016
1 parent 2035a48 commit 3001f71
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 5 deletions.
4 changes: 4 additions & 0 deletions acinclude.m4
Expand Up @@ -400,6 +400,10 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
[nf_ct_zone_init])
OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_labels.h],
[nf_connlabels_get])
OVS_GREP_IFELSE([$KSRC/include/net/netfilter/ipv6/nf_defrag_ipv6.h],
[nf_ct_frag6_consume_orig])
OVS_GREP_IFELSE([$KSRC/include/net/netfilter/ipv6/nf_defrag_ipv6.h],
[nf_ct_frag6_output])
OVS_GREP_IFELSE([$KSRC/include/linux/random.h], [prandom_u32])
OVS_GREP_IFELSE([$KSRC/include/linux/random.h], [prandom_u32_max])
Expand Down
14 changes: 12 additions & 2 deletions datapath/linux/compat/include/net/netfilter/ipv6/nf_defrag_ipv6.h
Expand Up @@ -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);
Expand All @@ -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 */
6 changes: 3 additions & 3 deletions datapath/linux/compat/nf_conntrack_reasm.c
Expand Up @@ -21,8 +21,6 @@

#include <linux/version.h>

#ifdef OVS_FRAGMENT_BACKPORT

#include <linux/errno.h>
#include <linux/types.h>
#include <linux/string.h>
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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 */

0 comments on commit 3001f71

Please sign in to comment.