diff mbox

[ovs-dev] compat: Fix build error in kernel 4.10.0

Message ID 20170425152656.15328-1-ligs@dtdream.com
State Superseded
Headers show

Commit Message

Guoshuai Li April 25, 2017, 3:26 p.m. UTC
In kernel 4.10.0, the function "nf_defrag_ipv6_enable" need
parameters "struct net *", so we need call it for each namespace init
to load netfilter fragment kmod.

Reported-by: Raymond Burkholder <ray@oneunified.net>
Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2017-April/331411.html
Signed-off-by: Guoshuai Li <ligs@dtdream.com>
---
 datapath/linux/compat/ip_fragment.c        | 14 ++++++++++++++
 datapath/linux/compat/nf_conntrack_reasm.c | 14 ++++++++++++++
 2 files changed, 28 insertions(+)

Comments

Raymond Burkholder April 25, 2017, 4:50 p.m. UTC | #1
Ok, thanx!  That gave me a successful build.  A two minute turnaround on a
patch request!

> -----Original Message-----
> From: ovs-dev-bounces@openvswitch.org [mailto:ovs-dev-
> bounces@openvswitch.org] On Behalf Of Guoshuai Li
> Sent: Tuesday, April 25, 2017 12:27
> To: ovs-dev@openvswitch.org
> Subject: [ovs-dev] [PATCH] compat: Fix build error in kernel 4.10.0
> 
> In kernel 4.10.0, the function "nf_defrag_ipv6_enable" need parameters
> "struct net *", so we need call it for each namespace init to load
netfilter
> fragment kmod.
> 
> Reported-by: Raymond Burkholder <ray@oneunified.net>
> Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2017-
> April/331411.html
> Signed-off-by: Guoshuai Li <ligs@dtdream.com>
> ---
>  datapath/linux/compat/ip_fragment.c        | 14 ++++++++++++++
>  datapath/linux/compat/nf_conntrack_reasm.c | 14 ++++++++++++++
>  2 files changed, 28 insertions(+)
> 
> diff --git a/datapath/linux/compat/ip_fragment.c
> b/datapath/linux/compat/ip_fragment.c
> index b0f5d0e..efa86fc 100644
> --- a/datapath/linux/compat/ip_fragment.c
> +++ b/datapath/linux/compat/ip_fragment.c
> @@ -729,18 +729,32 @@ int rpl_ip_defrag(struct net *net, struct sk_buff
> *skb, u32 user)
>  	return -ENOMEM;
>  }
> 
> +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0) static int __net_init
> +ipv4_frags_init_net(struct net *net) {
> +	nf_defrag_ipv4_enable(net);
> +
> +	return 0;
> +}
> +#endif
> +
>  static void __net_exit ipv4_frags_exit_net(struct net *net)  {
>  	inet_frags_exit_net(&net->ipv4.frags, &ip4_frags);  }
> 
>  static struct pernet_operations ip4_frags_ops = {
> +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
> +	.init = ipv4_frags_init_net,
> +#endif
>  	.exit = ipv4_frags_exit_net,
>  };
> 
>  int __init rpl_ipfrag_init(void)
>  {
> +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0)
>  	nf_defrag_ipv4_enable();
> +#endif
>  	register_pernet_subsys(&ip4_frags_ops);
>  	ip4_frags.hashfn = ip4_hashfn;
>  	ip4_frags.constructor = ip4_frag_init; diff --git
> a/datapath/linux/compat/nf_conntrack_reasm.c
> b/datapath/linux/compat/nf_conntrack_reasm.c
> index 0bc4d9e..cb6da6c 100644
> --- a/datapath/linux/compat/nf_conntrack_reasm.c
> +++ b/datapath/linux/compat/nf_conntrack_reasm.c
> @@ -558,12 +558,24 @@ out_unlock:
>  	return ret;
>  }
> 
> +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0) static int
> +nf_ct_net_init(struct net *net) {
> +	nf_defrag_ipv6_enable(net);
> +
> +	return 0;
> +}
> +#endif
> +
>  static void nf_ct_net_exit(struct net *net)  {
>  	inet_frags_exit_net(&net->nf_frag.frags, &nf_frags);  }
> 
>  static struct pernet_operations nf_ct_net_ops = {
> +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
> +	.init = nf_ct_net_init,
> +#endif
>  	.exit = nf_ct_net_exit,
>  };
> 
> @@ -571,7 +583,9 @@ int rpl_nf_ct_frag6_init(void)  {
>  	int ret = 0;
> 
> +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0)
>  	nf_defrag_ipv6_enable();
> +#endif
>  	nf_frags.hashfn = nf_hashfn;
>  	nf_frags.constructor = ip6_frag_init;
>  	nf_frags.destructor = NULL;
> --
> 2.10.1.windows.1
> 
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> 
> --
> This message has been scanned for viruses and dangerous content by
> MailScanner, and is believed to be clean.
Gregory Rose April 25, 2017, 5 p.m. UTC | #2
On Tue, 2017-04-25 at 23:26 +0800, Guoshuai Li wrote:
> In kernel 4.10.0, the function "nf_defrag_ipv6_enable" need
> parameters "struct net *", so we need call it for each namespace init
> to load netfilter fragment kmod.
> 
> Reported-by: Raymond Burkholder <ray@oneunified.net>
> Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2017-April/331411.html
> Signed-off-by: Guoshuai Li <ligs@dtdream.com>

Compile tested and looks OK to me.

Reviewed-by: Greg Rose <gvrose8192@gmail.com>

> ---
>  datapath/linux/compat/ip_fragment.c        | 14 ++++++++++++++
>  datapath/linux/compat/nf_conntrack_reasm.c | 14 ++++++++++++++
>  2 files changed, 28 insertions(+)
> 
> diff --git a/datapath/linux/compat/ip_fragment.c b/datapath/linux/compat/ip_fragment.c
> index b0f5d0e..efa86fc 100644
> --- a/datapath/linux/compat/ip_fragment.c
> +++ b/datapath/linux/compat/ip_fragment.c
> @@ -729,18 +729,32 @@ int rpl_ip_defrag(struct net *net, struct sk_buff *skb, u32 user)
>  	return -ENOMEM;
>  }
>  
> +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
> +static int __net_init ipv4_frags_init_net(struct net *net)
> +{
> +	nf_defrag_ipv4_enable(net);
> +
> +	return 0;
> +}
> +#endif
> +
>  static void __net_exit ipv4_frags_exit_net(struct net *net)
>  {
>  	inet_frags_exit_net(&net->ipv4.frags, &ip4_frags);
>  }
>  
>  static struct pernet_operations ip4_frags_ops = {
> +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
> +	.init = ipv4_frags_init_net,
> +#endif
>  	.exit = ipv4_frags_exit_net,
>  };
>  
>  int __init rpl_ipfrag_init(void)
>  {
> +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0)
>  	nf_defrag_ipv4_enable();
> +#endif
>  	register_pernet_subsys(&ip4_frags_ops);
>  	ip4_frags.hashfn = ip4_hashfn;
>  	ip4_frags.constructor = ip4_frag_init;
> diff --git a/datapath/linux/compat/nf_conntrack_reasm.c b/datapath/linux/compat/nf_conntrack_reasm.c
> index 0bc4d9e..cb6da6c 100644
> --- a/datapath/linux/compat/nf_conntrack_reasm.c
> +++ b/datapath/linux/compat/nf_conntrack_reasm.c
> @@ -558,12 +558,24 @@ out_unlock:
>  	return ret;
>  }
>  
> +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
> +static int nf_ct_net_init(struct net *net)
> +{
> +	nf_defrag_ipv6_enable(net);
> +
> +	return 0;
> +}
> +#endif
> +
>  static void nf_ct_net_exit(struct net *net)
>  {
>  	inet_frags_exit_net(&net->nf_frag.frags, &nf_frags);
>  }
>  
>  static struct pernet_operations nf_ct_net_ops = {
> +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
> +	.init = nf_ct_net_init,
> +#endif
>  	.exit = nf_ct_net_exit,
>  };
>  
> @@ -571,7 +583,9 @@ int rpl_nf_ct_frag6_init(void)
>  {
>  	int ret = 0;
>  
> +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0)
>  	nf_defrag_ipv6_enable();
> +#endif
>  	nf_frags.hashfn = nf_hashfn;
>  	nf_frags.constructor = ip6_frag_init;
>  	nf_frags.destructor = NULL;
diff mbox

Patch

diff --git a/datapath/linux/compat/ip_fragment.c b/datapath/linux/compat/ip_fragment.c
index b0f5d0e..efa86fc 100644
--- a/datapath/linux/compat/ip_fragment.c
+++ b/datapath/linux/compat/ip_fragment.c
@@ -729,18 +729,32 @@  int rpl_ip_defrag(struct net *net, struct sk_buff *skb, u32 user)
 	return -ENOMEM;
 }
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+static int __net_init ipv4_frags_init_net(struct net *net)
+{
+	nf_defrag_ipv4_enable(net);
+
+	return 0;
+}
+#endif
+
 static void __net_exit ipv4_frags_exit_net(struct net *net)
 {
 	inet_frags_exit_net(&net->ipv4.frags, &ip4_frags);
 }
 
 static struct pernet_operations ip4_frags_ops = {
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+	.init = ipv4_frags_init_net,
+#endif
 	.exit = ipv4_frags_exit_net,
 };
 
 int __init rpl_ipfrag_init(void)
 {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0)
 	nf_defrag_ipv4_enable();
+#endif
 	register_pernet_subsys(&ip4_frags_ops);
 	ip4_frags.hashfn = ip4_hashfn;
 	ip4_frags.constructor = ip4_frag_init;
diff --git a/datapath/linux/compat/nf_conntrack_reasm.c b/datapath/linux/compat/nf_conntrack_reasm.c
index 0bc4d9e..cb6da6c 100644
--- a/datapath/linux/compat/nf_conntrack_reasm.c
+++ b/datapath/linux/compat/nf_conntrack_reasm.c
@@ -558,12 +558,24 @@  out_unlock:
 	return ret;
 }
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+static int nf_ct_net_init(struct net *net)
+{
+	nf_defrag_ipv6_enable(net);
+
+	return 0;
+}
+#endif
+
 static void nf_ct_net_exit(struct net *net)
 {
 	inet_frags_exit_net(&net->nf_frag.frags, &nf_frags);
 }
 
 static struct pernet_operations nf_ct_net_ops = {
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+	.init = nf_ct_net_init,
+#endif
 	.exit = nf_ct_net_exit,
 };
 
@@ -571,7 +583,9 @@  int rpl_nf_ct_frag6_init(void)
 {
 	int ret = 0;
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0)
 	nf_defrag_ipv6_enable();
+#endif
 	nf_frags.hashfn = nf_hashfn;
 	nf_frags.constructor = ip6_frag_init;
 	nf_frags.destructor = NULL;