Re: [ovs-dev] [PATCH 3/4] compat: Fix build error in kernels 4.10+

2017-04-27 Thread Greg Rose
On Thu, 2017-04-27 at 13:53 -0700, Jarno Rajahalme wrote:
> > On Apr 27, 2017, at 1:08 PM, Greg Rose  wrote:
> > 
> > This is an alternative solution patch for the issue reported by
> > Raymond Burkholder and the patch submitted by Guoshuai Li.  It uses
> > the acinclude.m4 configuration file to check for the net parameter
> > that was added  to the ipv4 and ipv6 frags init functions in the 4.10
> > Linux kernel to check whether DEFRAG_ENABLE_TAKES_NET should be
> > set and then checks for that at compile time.
> > 
> > Reported-by: Raymond Burkholder 
> > CC: Guoshuai Li 
> > Signed-off-by: Greg Rose 
> > ---
> > 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..fccd992 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;
> > }
> > 
> > +#ifdef HAVE_DEFRAG_ENABLE_TAKES_NET
> > +static int __net_init ipv4_frags_init_net(struct net *net)
> > +{
> > +   nf_defrag_ipv4_enable(net);
> > +
> > +   return 0;
> > +}
> > +#endif
> > +
> 
> Did you consider Joe’s proposal to pass the error return to the caller? If it 
> makes sense, then maybe we could use nf_ functions directly and not define 
> the _init_net() functions at all (as the stubs prototype is the same as the 
> _enable function prototype, except for the “__net_init” attribute)?

I must have missed that.  Let me go back to the list and see if I can
find it.

Thanks for the review!

- Greg

> 
> > static void __net_exit ipv4_frags_exit_net(struct net *net)
> > {
> > inet_frags_exit_net(>ipv4.frags, _frags);
> > }
> > 
> > static struct pernet_operations ip4_frags_ops = {
> > +#ifdef HAVE_DEFRAG_ENABLE_TAKES_NET
> > +   .init = ipv4_frags_init_net,
> > +#endif
> > .exit = ipv4_frags_exit_net,
> > };
> > 
> > int __init rpl_ipfrag_init(void)
> > {
> > +#ifndef HAVE_DEFRAG_ENABLE_TAKES_NET
> > nf_defrag_ipv4_enable();
> > +#endif
> > register_pernet_subsys(_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..701faf5 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;
> > }
> > 
> > +#ifdef HAVE_DEFRAG_ENABLE_TAKES_NET
> > +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(>nf_frag.frags, _frags);
> > }
> > 
> > static struct pernet_operations nf_ct_net_ops = {
> > +#ifdef HAVE_DEFRAG_ENABLE_TAKES_NET
> > +   .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;
> > 
> > +#ifndef HAVE_DEFRAG_ENABLE_TAKES_NET
> > nf_defrag_ipv6_enable();
> > +#endif
> > nf_frags.hashfn = nf_hashfn;
> > nf_frags.constructor = ip6_frag_init;
> > nf_frags.destructor = NULL;
> > -- 
> > 1.8.3.1
> > 
> > ___
> > dev mailing list
> > d...@openvswitch.org
> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> 



___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [PATCH 3/4] compat: Fix build error in kernels 4.10+

2017-04-27 Thread Jarno Rajahalme

> On Apr 27, 2017, at 1:08 PM, Greg Rose  wrote:
> 
> This is an alternative solution patch for the issue reported by
> Raymond Burkholder and the patch submitted by Guoshuai Li.  It uses
> the acinclude.m4 configuration file to check for the net parameter
> that was added  to the ipv4 and ipv6 frags init functions in the 4.10
> Linux kernel to check whether DEFRAG_ENABLE_TAKES_NET should be
> set and then checks for that at compile time.
> 
> Reported-by: Raymond Burkholder 
> CC: Guoshuai Li 
> Signed-off-by: Greg Rose 
> ---
> 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..fccd992 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;
> }
> 
> +#ifdef HAVE_DEFRAG_ENABLE_TAKES_NET
> +static int __net_init ipv4_frags_init_net(struct net *net)
> +{
> + nf_defrag_ipv4_enable(net);
> +
> + return 0;
> +}
> +#endif
> +

Did you consider Joe’s proposal to pass the error return to the caller? If it 
makes sense, then maybe we could use nf_ functions directly and not define the 
_init_net() functions at all (as the stubs prototype is the same as the _enable 
function prototype, except for the “__net_init” attribute)?

> static void __net_exit ipv4_frags_exit_net(struct net *net)
> {
>   inet_frags_exit_net(>ipv4.frags, _frags);
> }
> 
> static struct pernet_operations ip4_frags_ops = {
> +#ifdef HAVE_DEFRAG_ENABLE_TAKES_NET
> + .init = ipv4_frags_init_net,
> +#endif
>   .exit = ipv4_frags_exit_net,
> };
> 
> int __init rpl_ipfrag_init(void)
> {
> +#ifndef HAVE_DEFRAG_ENABLE_TAKES_NET
>   nf_defrag_ipv4_enable();
> +#endif
>   register_pernet_subsys(_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..701faf5 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;
> }
> 
> +#ifdef HAVE_DEFRAG_ENABLE_TAKES_NET
> +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(>nf_frag.frags, _frags);
> }
> 
> static struct pernet_operations nf_ct_net_ops = {
> +#ifdef HAVE_DEFRAG_ENABLE_TAKES_NET
> + .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;
> 
> +#ifndef HAVE_DEFRAG_ENABLE_TAKES_NET
>   nf_defrag_ipv6_enable();
> +#endif
>   nf_frags.hashfn = nf_hashfn;
>   nf_frags.constructor = ip6_frag_init;
>   nf_frags.destructor = NULL;
> -- 
> 1.8.3.1
> 
> ___
> dev mailing list
> d...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev

___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] [PATCH 3/4] compat: Fix build error in kernels 4.10+

2017-04-27 Thread Greg Rose
This is an alternative solution patch for the issue reported by
Raymond Burkholder and the patch submitted by Guoshuai Li.  It uses
the acinclude.m4 configuration file to check for the net parameter
that was added  to the ipv4 and ipv6 frags init functions in the 4.10
Linux kernel to check whether DEFRAG_ENABLE_TAKES_NET should be
set and then checks for that at compile time.

Reported-by: Raymond Burkholder 
CC: Guoshuai Li 
Signed-off-by: Greg Rose 
---
 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..fccd992 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;
 }
 
+#ifdef HAVE_DEFRAG_ENABLE_TAKES_NET
+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(>ipv4.frags, _frags);
 }
 
 static struct pernet_operations ip4_frags_ops = {
+#ifdef HAVE_DEFRAG_ENABLE_TAKES_NET
+   .init = ipv4_frags_init_net,
+#endif
.exit = ipv4_frags_exit_net,
 };
 
 int __init rpl_ipfrag_init(void)
 {
+#ifndef HAVE_DEFRAG_ENABLE_TAKES_NET
nf_defrag_ipv4_enable();
+#endif
register_pernet_subsys(_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..701faf5 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;
 }
 
+#ifdef HAVE_DEFRAG_ENABLE_TAKES_NET
+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(>nf_frag.frags, _frags);
 }
 
 static struct pernet_operations nf_ct_net_ops = {
+#ifdef HAVE_DEFRAG_ENABLE_TAKES_NET
+   .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;
 
+#ifndef HAVE_DEFRAG_ENABLE_TAKES_NET
nf_defrag_ipv6_enable();
+#endif
nf_frags.hashfn = nf_hashfn;
nf_frags.constructor = ip6_frag_init;
nf_frags.destructor = NULL;
-- 
1.8.3.1

___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev