From: Joe Stringer <joestrin...@nicira.com> Loosely based upon Linux commit 0838aa7fcfcd "netfilter: fix netns dependencies with conntrack templates" and commit 5e8018fc6142 "netfilter: nf_conntrack: add efficient mark to zone mapping".
Signed-off-by: Joe Stringer <joestrin...@nicira.com> --- v2: Backport missing nf_ct_tmpl_free(). Fix warning on Linux-4.2. --- acinclude.m4 | 4 ++ datapath/linux/Modules.mk | 1 + .../include/net/netfilter/nf_conntrack_core.h | 44 ++++++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 datapath/linux/compat/include/net/netfilter/nf_conntrack_core.h diff --git a/acinclude.m4 b/acinclude.m4 index 7c8afaca62a7..a3dd3eb99bbd 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -376,6 +376,10 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ 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/net/netfilter/nf_conntrack.h], + [tmpl_alloc.*conntrack_zone], + [OVS_DEFINE([HAVE_NF_CT_TMPL_ALLOC_TAKES_STRUCT_ZONE])]) + OVS_GREP_IFELSE([$KSRC/include/linux/random.h], [prandom_u32]) OVS_GREP_IFELSE([$KSRC/include/net/rtnetlink.h], [get_link_net]) diff --git a/datapath/linux/Modules.mk b/datapath/linux/Modules.mk index 63179655cee5..29a90ea1dd8b 100644 --- a/datapath/linux/Modules.mk +++ b/datapath/linux/Modules.mk @@ -91,6 +91,7 @@ openvswitch_headers += \ linux/compat/include/net/sock.h \ linux/compat/include/net/stt.h \ linux/compat/include/net/vxlan.h \ + linux/compat/include/net/netfilter/nf_conntrack_core.h \ linux/compat/include/net/netfilter/nf_conntrack_expect.h \ linux/compat/include/net/netfilter/nf_conntrack_zones.h \ linux/compat/include/net/sctp/checksum.h diff --git a/datapath/linux/compat/include/net/netfilter/nf_conntrack_core.h b/datapath/linux/compat/include/net/netfilter/nf_conntrack_core.h new file mode 100644 index 000000000000..faa219a4ba65 --- /dev/null +++ b/datapath/linux/compat/include/net/netfilter/nf_conntrack_core.h @@ -0,0 +1,44 @@ +#ifndef _NF_CONNTRACK_CORE_WRAPPER_H +#define _NF_CONNTRACK_CORE_WRAPPER_H + +#include_next <net/netfilter/nf_conntrack_core.h> + +#ifndef HAVE_NF_CT_TMPL_ALLOC_TAKES_STRUCT_ZONE + +#include <net/netfilter/nf_conntrack_zones.h> + +#define nf_ct_tmpl_alloc rpl_nf_ct_tmpl_alloc +/* Released via destroy_conntrack() */ +static inline struct nf_conn * +nf_ct_tmpl_alloc(struct net *net, const struct nf_conntrack_zone *zone, + gfp_t flags) +{ + struct nf_conn *tmpl; + + tmpl = kzalloc(sizeof(*tmpl), flags); + if (tmpl == NULL) + return NULL; + + tmpl->status = IPS_TEMPLATE; + write_pnet(&tmpl->ct_net, net); + + if (nf_ct_zone_add(tmpl, flags, zone) < 0) + goto out_free; + + atomic_set(&tmpl->ct_general.use, 0); + + return tmpl; +out_free: + kfree(tmpl); + return NULL; +} + +static void rpl_nf_ct_tmpl_free(struct nf_conn *tmpl) +{ + nf_ct_ext_destroy(tmpl); + nf_ct_ext_free(tmpl); + kfree(tmpl); +} +#define nf_ct_tmpl_free rpl_nf_ct_tmpl_free +#endif /* HAVE_NF_CT_TMPL_ALLOC */ +#endif /* _NF_CONNTRACK_CORE_WRAPPER_H */ -- 2.1.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev