Message ID | 1452563641-33507-7-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: > Signed-off-by: Joe Stringer <joe@ovn.org> > --- > acinclude.m4 | 2 ++ > datapath/compat.h | 5 +++++ > datapath/linux/compat/include/linux/netfilter_ipv6.h | 6 +++--- > datapath/linux/compat/include/net/ip6_route.h | 13 +++++++------ > datapath/linux/compat/ip6_output.c | 2 +- > 5 files changed, 18 insertions(+), 10 deletions(-) > > diff --git a/acinclude.m4 b/acinclude.m4 > index 3e3426dcf2b4..bb1d94e2187d 100644 > --- a/acinclude.m4 > +++ b/acinclude.m4 > @@ -389,6 +389,8 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ > OVS_GREP_IFELSE([$KSRC/include/linux/netfilter.h], [nf_register_net_hook]) > 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/linux/netfilter_ipv6.h], [fragment], > + [OVS_DEFINE([HAVE_NF_IPV6_OPS_FRAGMENT])]) > Why not use OVS_FIND_FIELD_IFELSE macro here? > OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack.h], > [tmpl_alloc.*conntrack_zone], > diff --git a/datapath/compat.h b/datapath/compat.h > index 3cbd121f29cd..0e19051fb094 100644 > --- a/datapath/compat.h > +++ b/datapath/compat.h > @@ -55,8 +55,13 @@ static inline bool skb_encapsulation(struct sk_buff *skb) > #endif > > #ifdef OVS_FRAGMENT_BACKPORT > +#ifdef HAVE_NF_IPV6_OPS_FRAGMENT > +static inline int __init ip6_output_init(void) { return 0; } > +static inline void ip6_output_exit(void) { } > +#else > int __init ip6_output_init(void); > void ip6_output_exit(void); > +#endif > > static inline int __init compat_init(void) > { > diff --git a/datapath/linux/compat/include/linux/netfilter_ipv6.h b/datapath/linux/compat/include/linux/netfilter_ipv6.h > index 3026e1fe6b7f..3939e1423fcf 100644 > --- a/datapath/linux/compat/include/linux/netfilter_ipv6.h > +++ b/datapath/linux/compat/include/linux/netfilter_ipv6.h > @@ -7,7 +7,7 @@ > #include <net/ip.h> /* For OVS_VPORT_OUTPUT_PARAMS */ > #include <net/ip6_route.h> > > -#if LINUX_VERSION_CODE < KERNEL_VERSION(4,3,0) > +#ifndef HAVE_NF_IPV6_OPS_FRAGMENT > /* Try to minimise changes required to the actions.c code for calling IPv6 > * fragmentation. We can keep the fragment() API mostly the same, except that > * the callback parameter needs to be in the form that older kernels accept. > @@ -27,7 +27,7 @@ static inline struct ovs_nf_ipv6_ops *ovs_nf_get_ipv6_ops(void) > { > return &ovs_ipv6_ops; > } > -#else /* !OVS_FRAGMENT_BACKPORT || !CONFIG_NETFILTER || || !CONFIG_IPV6 */ > +#else /* !OVS_FRAGMENT_BACKPORT */ > static inline const struct ovs_nf_ipv6_ops *ovs_nf_get_ipv6_ops(void) > { > return NULL; > @@ -35,5 +35,5 @@ static inline const struct ovs_nf_ipv6_ops *ovs_nf_get_ipv6_ops(void) > #endif > #define nf_get_ipv6_ops ovs_nf_get_ipv6_ops > > -#endif /* < 4.3 */ > +#endif /* HAVE_NF_IPV6_OPS_FRAGMENT */ > #endif /* __NETFILTER_IPV6_WRAPPER_H */ > diff --git a/datapath/linux/compat/include/net/ip6_route.h b/datapath/linux/compat/include/net/ip6_route.h > index 93d70e3a7592..d28b195575cb 100644 > --- a/datapath/linux/compat/include/net/ip6_route.h > +++ b/datapath/linux/compat/include/net/ip6_route.h > @@ -29,18 +29,19 @@ struct dst_entry *rpl_ip6_route_output(struct net *net, const struct sock *sk, > > #endif /* 2.6.39 */ > > -#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) > +#ifndef HAVE_NF_IPV6_OPS_FRAGMENT > +#ifdef OVS_FRAGMENT_BACKPORT > +int rpl_ip6_fragment(struct sock *sk, struct sk_buff *skb, > + int (*output)(OVS_VPORT_OUTPUT_PARAMS)); > +#else > static inline int rpl_ip6_fragment(struct sock *sk, struct sk_buff *skb, > int (*output)(struct sk_buff *)) > { > kfree_skb(skb); > return -ENOTSUPP; > } > -#define ip6_fragment rpl_ip6_fragment > -#elif defined(OVS_FRAGMENT_BACKPORT) > -int rpl_ip6_fragment(struct sock *sk, struct sk_buff *skb, > - int (*output)(OVS_VPORT_OUTPUT_PARAMS)); > -#define ip6_fragment rpl_ip6_fragment > #endif /* OVS_FRAGMENT_BACKPORT */ > +#define ip6_fragment rpl_ip6_fragment > +#endif /* HAVE_NF_IPV6_OPS_FRAGMENT */ > > #endif /* _NET_IP6_ROUTE_WRAPPER */ > diff --git a/datapath/linux/compat/ip6_output.c b/datapath/linux/compat/ip6_output.c > index 5c0cdec4b382..c3ef46c4a935 100644 > --- a/datapath/linux/compat/ip6_output.c > +++ b/datapath/linux/compat/ip6_output.c > @@ -31,7 +31,7 @@ > > #include <linux/version.h> > > -#ifdef OVS_FRAGMENT_BACKPORT > +#if !defined(HAVE_NF_IPV6_OPS_FRAGMENT) && defined(OVS_FRAGMENT_BACKPORT) > > #include <linux/errno.h> > #include <linux/kernel.h> > -- > 2.1.4 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev
On 29 January 2016 at 15:09, pravin shelar <pshelar@ovn.org> wrote: > On Mon, Jan 11, 2016 at 5:53 PM, Joe Stringer <joe@ovn.org> wrote: >> Signed-off-by: Joe Stringer <joe@ovn.org> >> --- >> acinclude.m4 | 2 ++ >> datapath/compat.h | 5 +++++ >> datapath/linux/compat/include/linux/netfilter_ipv6.h | 6 +++--- >> datapath/linux/compat/include/net/ip6_route.h | 13 +++++++------ >> datapath/linux/compat/ip6_output.c | 2 +- >> 5 files changed, 18 insertions(+), 10 deletions(-) >> >> diff --git a/acinclude.m4 b/acinclude.m4 >> index 3e3426dcf2b4..bb1d94e2187d 100644 >> --- a/acinclude.m4 >> +++ b/acinclude.m4 >> @@ -389,6 +389,8 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ >> OVS_GREP_IFELSE([$KSRC/include/linux/netfilter.h], [nf_register_net_hook]) >> 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/linux/netfilter_ipv6.h], [fragment], >> + [OVS_DEFINE([HAVE_NF_IPV6_OPS_FRAGMENT])]) >> > > Why not use OVS_FIND_FIELD_IFELSE macro here? Thanks for the suggestion, I rolled this fix in.
diff --git a/acinclude.m4 b/acinclude.m4 index 3e3426dcf2b4..bb1d94e2187d 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -389,6 +389,8 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ OVS_GREP_IFELSE([$KSRC/include/linux/netfilter.h], [nf_register_net_hook]) 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/linux/netfilter_ipv6.h], [fragment], + [OVS_DEFINE([HAVE_NF_IPV6_OPS_FRAGMENT])]) OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack.h], [tmpl_alloc.*conntrack_zone], diff --git a/datapath/compat.h b/datapath/compat.h index 3cbd121f29cd..0e19051fb094 100644 --- a/datapath/compat.h +++ b/datapath/compat.h @@ -55,8 +55,13 @@ static inline bool skb_encapsulation(struct sk_buff *skb) #endif #ifdef OVS_FRAGMENT_BACKPORT +#ifdef HAVE_NF_IPV6_OPS_FRAGMENT +static inline int __init ip6_output_init(void) { return 0; } +static inline void ip6_output_exit(void) { } +#else int __init ip6_output_init(void); void ip6_output_exit(void); +#endif static inline int __init compat_init(void) { diff --git a/datapath/linux/compat/include/linux/netfilter_ipv6.h b/datapath/linux/compat/include/linux/netfilter_ipv6.h index 3026e1fe6b7f..3939e1423fcf 100644 --- a/datapath/linux/compat/include/linux/netfilter_ipv6.h +++ b/datapath/linux/compat/include/linux/netfilter_ipv6.h @@ -7,7 +7,7 @@ #include <net/ip.h> /* For OVS_VPORT_OUTPUT_PARAMS */ #include <net/ip6_route.h> -#if LINUX_VERSION_CODE < KERNEL_VERSION(4,3,0) +#ifndef HAVE_NF_IPV6_OPS_FRAGMENT /* Try to minimise changes required to the actions.c code for calling IPv6 * fragmentation. We can keep the fragment() API mostly the same, except that * the callback parameter needs to be in the form that older kernels accept. @@ -27,7 +27,7 @@ static inline struct ovs_nf_ipv6_ops *ovs_nf_get_ipv6_ops(void) { return &ovs_ipv6_ops; } -#else /* !OVS_FRAGMENT_BACKPORT || !CONFIG_NETFILTER || || !CONFIG_IPV6 */ +#else /* !OVS_FRAGMENT_BACKPORT */ static inline const struct ovs_nf_ipv6_ops *ovs_nf_get_ipv6_ops(void) { return NULL; @@ -35,5 +35,5 @@ static inline const struct ovs_nf_ipv6_ops *ovs_nf_get_ipv6_ops(void) #endif #define nf_get_ipv6_ops ovs_nf_get_ipv6_ops -#endif /* < 4.3 */ +#endif /* HAVE_NF_IPV6_OPS_FRAGMENT */ #endif /* __NETFILTER_IPV6_WRAPPER_H */ diff --git a/datapath/linux/compat/include/net/ip6_route.h b/datapath/linux/compat/include/net/ip6_route.h index 93d70e3a7592..d28b195575cb 100644 --- a/datapath/linux/compat/include/net/ip6_route.h +++ b/datapath/linux/compat/include/net/ip6_route.h @@ -29,18 +29,19 @@ struct dst_entry *rpl_ip6_route_output(struct net *net, const struct sock *sk, #endif /* 2.6.39 */ -#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) +#ifndef HAVE_NF_IPV6_OPS_FRAGMENT +#ifdef OVS_FRAGMENT_BACKPORT +int rpl_ip6_fragment(struct sock *sk, struct sk_buff *skb, + int (*output)(OVS_VPORT_OUTPUT_PARAMS)); +#else static inline int rpl_ip6_fragment(struct sock *sk, struct sk_buff *skb, int (*output)(struct sk_buff *)) { kfree_skb(skb); return -ENOTSUPP; } -#define ip6_fragment rpl_ip6_fragment -#elif defined(OVS_FRAGMENT_BACKPORT) -int rpl_ip6_fragment(struct sock *sk, struct sk_buff *skb, - int (*output)(OVS_VPORT_OUTPUT_PARAMS)); -#define ip6_fragment rpl_ip6_fragment #endif /* OVS_FRAGMENT_BACKPORT */ +#define ip6_fragment rpl_ip6_fragment +#endif /* HAVE_NF_IPV6_OPS_FRAGMENT */ #endif /* _NET_IP6_ROUTE_WRAPPER */ diff --git a/datapath/linux/compat/ip6_output.c b/datapath/linux/compat/ip6_output.c index 5c0cdec4b382..c3ef46c4a935 100644 --- a/datapath/linux/compat/ip6_output.c +++ b/datapath/linux/compat/ip6_output.c @@ -31,7 +31,7 @@ #include <linux/version.h> -#ifdef OVS_FRAGMENT_BACKPORT +#if !defined(HAVE_NF_IPV6_OPS_FRAGMENT) && defined(OVS_FRAGMENT_BACKPORT) #include <linux/errno.h> #include <linux/kernel.h>
Signed-off-by: Joe Stringer <joe@ovn.org> --- acinclude.m4 | 2 ++ datapath/compat.h | 5 +++++ datapath/linux/compat/include/linux/netfilter_ipv6.h | 6 +++--- datapath/linux/compat/include/net/ip6_route.h | 13 +++++++------ datapath/linux/compat/ip6_output.c | 2 +- 5 files changed, 18 insertions(+), 10 deletions(-)