diff mbox

[ovs-dev,11/13] compat: Detect and use nf_ct_frag6_gather().

Message ID 1452563641-33507-12-git-send-email-joe@ovn.org
State Accepted
Headers show

Commit Message

Joe Stringer Jan. 12, 2016, 1:53 a.m. UTC
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(-)

Comments

Pravin Shelar Jan. 29, 2016, 11:44 p.m. UTC | #1
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.
Joe Stringer Feb. 2, 2016, 10:28 p.m. UTC | #2
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 mbox

Patch

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 */