Message ID | 1452563641-33507-12-git-send-email-joe@ovn.org |
---|---|
State | Accepted |
Headers | show |
On Mon, Jan 11, 2016 at 5:53 PM, Joe Stringer <joe@ovn.org> wrote: > 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> > --- > acinclude.m4 | 4 ++++ > .../compat/include/net/netfilter/ipv6/nf_defrag_ipv6.h | 14 ++++++++++++-- > datapath/linux/compat/nf_conntrack_reasm.c | 6 +++--- > 3 files changed, 19 insertions(+), 5 deletions(-) > > diff --git a/acinclude.m4 b/acinclude.m4 > index f0ea2fcea62d..7357a9fdfc74 100644 > --- a/acinclude.m4 > +++ b/acinclude.m4 > @@ -404,6 +404,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]) > 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 7d51491a9c1b..97052ccc4d99 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 89a39789d322..fec9e5794f88 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"; > This is not related to this patch, But we should use different cache name to avoid confusion in case both kmem caches are created.
On 29 January 2016 at 15:44, pravin shelar <pshelar@ovn.org> wrote: > On Mon, Jan 11, 2016 at 5:53 PM, Joe Stringer <joe@ovn.org> wrote: >> 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> >> --- >> acinclude.m4 | 4 ++++ >> .../compat/include/net/netfilter/ipv6/nf_defrag_ipv6.h | 14 ++++++++++++-- >> datapath/linux/compat/nf_conntrack_reasm.c | 6 +++--- >> 3 files changed, 19 insertions(+), 5 deletions(-) >> >> diff --git a/acinclude.m4 b/acinclude.m4 >> index f0ea2fcea62d..7357a9fdfc74 100644 >> --- a/acinclude.m4 >> +++ b/acinclude.m4 >> @@ -404,6 +404,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]) >> 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 7d51491a9c1b..97052ccc4d99 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 89a39789d322..fec9e5794f88 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"; >> > > This is not related to this patch, But we should use different cache > name to avoid confusion in case both kmem caches are created. Sure, I will follow up on this.
diff --git a/acinclude.m4 b/acinclude.m4 index f0ea2fcea62d..7357a9fdfc74 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -404,6 +404,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]) 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 7d51491a9c1b..97052ccc4d99 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 89a39789d322..fec9e5794f88 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 */
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> --- acinclude.m4 | 4 ++++ .../compat/include/net/netfilter/ipv6/nf_defrag_ipv6.h | 14 ++++++++++++-- datapath/linux/compat/nf_conntrack_reasm.c | 6 +++--- 3 files changed, 19 insertions(+), 5 deletions(-)