On Wed, Jul 2, 2014 at 11:08 AM, Pritesh Kothari <pritesh.koth...@cisco.com> wrote: > Signed-off-by: Pritesh Kothari <pritesh.koth...@cisco.com> > --- > v1: make check passes for 3.2/3.13/3.14/3.15 > --- > FAQ | 1 + > NEWS | 2 +- > acinclude.m4 | 17 ++++++++- > datapath/linux/Modules.mk | 1 - > datapath/linux/compat/include/linux/if.h | 18 --------- > datapath/linux/compat/include/linux/netdevice.h | 12 ++++++ > datapath/linux/compat/include/net/ip_tunnels.h | 8 +++- > datapath/linux/compat/ip_tunnels_core.c | 51 > +++++++++++++++++++++++-- > datapath/linux/compat/vxlan.c | 3 +- > datapath/vport-geneve.c | 2 +- > datapath/vport-gre.c | 2 +- > datapath/vport-lisp.c | 2 +- > datapath/vport-netdev.c | 2 +- > debian/changelog | 3 +- > 14 files changed, 91 insertions(+), 33 deletions(-) > delete mode 100644 datapath/linux/compat/include/linux/if.h > > diff --git a/FAQ b/FAQ > index 3470983..c6d2126 100644 > --- a/FAQ > +++ b/FAQ > @@ -150,6 +150,7 @@ A: The following table lists the Linux kernel versions > against which the > 2.0.x 2.6.32 to 3.10 > 2.1.x 2.6.32 to 3.11 > 2.2.x 2.6.32 to 3.14 > + 2.3.x 2.6.32 to 3.15 > > Open vSwitch userspace should also work with the Linux kernel module > built into Linux 3.3 and later. > diff --git a/NEWS b/NEWS > index 2504f5c..534432a 100644 > --- a/NEWS > +++ b/NEWS > @@ -42,7 +42,7 @@ v2.2.0 - Internal Release > - Upon the receipt of a SIGHUP signal, ovs-vswitchd no longer reopens its > log file (it will terminate instead). Please use 'ovs-appctl > vlog/reopen' > instead. > - - Support for Linux kernels up to 3.14. From Kernel 3.12 onwards OVS uses > + - Support for Linux kernels up to 3.15. From Kernel 3.12 onwards OVS uses > tunnel API for GRE and VXLAN. > - Added DPDK support. > - Added support for custom vlog patterns in Python > diff --git a/acinclude.m4 b/acinclude.m4 > index aa9ffcd..a133b38 100644 > --- a/acinclude.m4 > +++ b/acinclude.m4 > @@ -134,10 +134,10 @@ AC_DEFUN([OVS_CHECK_LINUX], [ > AC_MSG_RESULT([$kversion]) > > if test "$version" -ge 3; then > - if test "$version" = 3 && test "$patchlevel" -le 14; then > + if test "$version" = 3 && test "$patchlevel" -le 15; then > : # Linux 3.x > else > - AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version > newer than 3.14.x is not supported (please refer to the FAQ for advice)]) > + AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version > newer than 3.15.x is not supported (please refer to the FAQ for advice)]) > fi > else > if test "$version" -le 1 || test "$patchlevel" -le 5 || test > "$sublevel" -le 31; then > @@ -270,6 +270,10 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ > OVS_GREP_IFELSE([$KSRC/include/linux/etherdevice.h], [eth_hw_addr_random]) > OVS_GREP_IFELSE([$KSRC/include/linux/etherdevice.h], [ether_addr_copy]) > > + OVS_GREP_IFELSE([$KSRC/include/linux/if.h], [IFF_OVS_DATAPATH]) > + OVS_GREP_IFELSE([$KSRC/include/linux/if.h], [IFF_TX_SKB_SHARING]) > + OVS_GREP_IFELSE([$KSRC/include/linux/if.h], [IFF_LIVE_ADDR_CHANGE]) > + > OVS_GREP_IFELSE([$KSRC/include/linux/if_vlan.h], [vlan_set_encap_proto]) > Why are you changing existing compat code in this patch? Even if you have a reason for such change please send separate patch with the explanation.
> OVS_GREP_IFELSE([$KSRC/include/linux/in.h], [ipv4_is_multicast]) > @@ -281,6 +285,9 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ > OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [can_checksum_protocol]) > OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [netdev_features_t]) > OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [pcpu_sw_netstats]) > + OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [IFF_OVS_DATAPATH]) > + OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [IFF_TX_SKB_SHARING]) > + OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [IFF_LIVE_ADDR_CHANGE]) > > OVS_GREP_IFELSE([$KSRC/include/linux/random.h], [prandom_u32]) > > @@ -322,11 +329,17 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ > OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_get_hash]) > OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_clear_hash]) > OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [l4_rxhash]) > + OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [encapsulation]) > I think better way to search for encap is searching for GRE offload feature, I done same check in patch that I posted "datapath: Enable tunnel GSO features." > OVS_GREP_IFELSE([$KSRC/include/linux/types.h], [bool], > [OVS_DEFINE([HAVE_BOOL_TYPE])]) > OVS_GREP_IFELSE([$KSRC/include/linux/types.h], [__wsum], > [OVS_DEFINE([HAVE_CSUM_TYPES])]) > + > + OVS_GREP_IFELSE([$KSRC/include/uapi/linux/if.h], [IFF_OVS_DATAPATH]) > + OVS_GREP_IFELSE([$KSRC/include/uapi/linux/if.h], [IFF_TX_SKB_SHARING]) > + OVS_GREP_IFELSE([$KSRC/include/uapi/linux/if.h], [IFF_LIVE_ADDR_CHANGE]) > + > OVS_GREP_IFELSE([$KSRC/include/uapi/linux/types.h], [__wsum], > [OVS_DEFINE([HAVE_CSUM_TYPES])]) > > diff --git a/datapath/linux/Modules.mk b/datapath/linux/Modules.mk > index 46aa1f6..9ba8126 100644 > --- a/datapath/linux/Modules.mk > +++ b/datapath/linux/Modules.mk > @@ -29,7 +29,6 @@ openvswitch_headers += \ > linux/compat/include/linux/hash.h \ > linux/compat/include/linux/icmp.h \ > linux/compat/include/linux/icmpv6.h \ > - linux/compat/include/linux/if.h \ > linux/compat/include/linux/if_arp.h \ > linux/compat/include/linux/if_ether.h \ > linux/compat/include/linux/if_vlan.h \ > diff --git a/datapath/linux/compat/include/linux/if.h > b/datapath/linux/compat/include/linux/if.h > deleted file mode 100644 > index c4c656c..0000000 > --- a/datapath/linux/compat/include/linux/if.h > +++ /dev/null > @@ -1,18 +0,0 @@ > -#ifndef __LINUX_IF_WRAPPER_H > -#define __LINUX_IF_WRAPPER_H 1 > - > -#include_next <linux/if.h> > - > -#ifndef IFF_TX_SKB_SHARING > -#define IFF_TX_SKB_SHARING 0 > -#endif > - > -#ifndef IFF_OVS_DATAPATH > -#define IFF_OVS_DATAPATH 0 > -#endif > - > -#ifndef IFF_LIVE_ADDR_CHANGE > -#define IFF_LIVE_ADDR_CHANGE 0 > -#endif > - > -#endif > diff --git a/datapath/linux/compat/include/linux/netdevice.h > b/datapath/linux/compat/include/linux/netdevice.h > index 886c2f8..e2c5ed8 100644 > --- a/datapath/linux/compat/include/linux/netdevice.h > +++ b/datapath/linux/compat/include/linux/netdevice.h > @@ -140,4 +140,16 @@ struct pcpu_sw_netstats { > }; > #endif > > +#ifndef HAVE_IFF_OVS_DATAPATH > +#define IFF_OVS_DATAPATH 0 > +#endif > + > +#ifndef HAVE_IFF_TX_SKB_SHARING > +#define IFF_TX_SKB_SHARING 0 > +#endif > + > +#ifndef HAVE_IFF_LIVE_ADDR_CHANGE > +#define IFF_LIVE_ADDR_CHANGE 0 > +#endif > + > #endif > diff --git a/datapath/linux/compat/include/net/ip_tunnels.h > b/datapath/linux/compat/include/net/ip_tunnels.h > index c7a14ef..075e597 100644 > --- a/datapath/linux/compat/include/net/ip_tunnels.h > +++ b/datapath/linux/compat/include/net/ip_tunnels.h > @@ -2,7 +2,7 @@ > #define __NET_IP_TUNNELS_WRAPPER_H 1 > > #include <linux/version.h> > -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0) > +#if LINUX_VERSION_CODE > KERNEL_VERSION(3,15,0) > #include_next <net/ip_tunnels.h> > #else > > @@ -36,11 +36,15 @@ struct tnl_ptk_info { > #define PACKET_RCVD 0 > #define PACKET_REJECT 1 > > -int iptunnel_xmit(struct rtable *rt, > +int iptunnel_xmit(struct sock *sk, struct rtable *rt, > struct sk_buff *skb, > __be32 src, __be32 dst, __u8 proto, > __u8 tos, __u8 ttl, __be16 df, bool xnet); > > +struct sk_buff *iptunnel_handle_offloads(struct sk_buff *skb, > + bool csum_help, > + int gso_type_mask); > + > int iptunnel_pull_header(struct sk_buff *skb, int hdr_len, __be16 > inner_proto); > > #endif > diff --git a/datapath/linux/compat/ip_tunnels_core.c > b/datapath/linux/compat/ip_tunnels_core.c > index d650be2..5146b3a 100644 > --- a/datapath/linux/compat/ip_tunnels_core.c > +++ b/datapath/linux/compat/ip_tunnels_core.c > @@ -17,7 +17,7 @@ > */ > > #include <linux/version.h> > -#if LINUX_VERSION_CODE < KERNEL_VERSION(3,12,0) > +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,15,0) > > #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt > > @@ -36,8 +36,9 @@ > > #include "compat.h" > #include "gso.h" > +#include "vlan.h" > > -int iptunnel_xmit(struct rtable *rt, > +int iptunnel_xmit(struct sock *sk, struct rtable *rt, > struct sk_buff *skb, > __be32 src, __be32 dst, __u8 proto, > __u8 tos, __u8 ttl, __be16 df, bool xnet) > @@ -112,4 +113,48 @@ int iptunnel_pull_header(struct sk_buff *skb, int > hdr_len, __be16 inner_proto) > return 0; > } > > -#endif /* 3.12 */ > +struct sk_buff *iptunnel_handle_offloads(struct sk_buff *skb, > + bool csum_help, > + int gso_type_mask) > +{ > + int err; > + This function is not called from any other function in OVS. why do you want to add it to ovs compat layer? > +#ifdef HAVE_ENCAPSULATION > + if (likely(!skb->encapsulation)) { > + skb_reset_inner_headers(skb); > + skb->encapsulation = 1; > + } > +#endif > + > + if (skb_is_gso(skb)) { > + err = skb_unclone(skb, GFP_ATOMIC); > + if (unlikely(err)) > + goto error; > + skb_shinfo(skb)->gso_type |= gso_type_mask; > + return skb; > + } > + > + /* If packet is not gso and we are resolving any partial checksum, > + * clear encapsulation flag. This allows setting CHECKSUM_PARTIAL > + * on the outer header without confusing devices that implement > + * NETIF_F_IP_CSUM with encapsulation. > + */ > +#ifdef HAVE_ENCAPSULATION > + if (csum_help) > + skb->encapsulation = 0; > +#endif > + > + if (skb->ip_summed == CHECKSUM_PARTIAL && csum_help) { > + err = skb_checksum_help(skb); > + if (unlikely(err)) > + goto error; > + } else if (skb->ip_summed != CHECKSUM_PARTIAL) > + skb->ip_summed = CHECKSUM_NONE; > + > + return skb; > +error: > + kfree_skb(skb); > + return ERR_PTR(err); > +} > + > +#endif /* 3.15 */ > diff --git a/datapath/linux/compat/vxlan.c b/datapath/linux/compat/vxlan.c > index b8b8fa7..f7db205 100644 > --- a/datapath/linux/compat/vxlan.c > +++ b/datapath/linux/compat/vxlan.c > @@ -226,7 +226,8 @@ int vxlan_xmit_skb(struct vxlan_sock *vs, > if (err) > return err; > > - return iptunnel_xmit(rt, skb, src, dst, IPPROTO_UDP, tos, ttl, df, > false); > + return iptunnel_xmit(skb->sk, rt, skb, src, dst, > + IPPROTO_UDP, tos, ttl, df, false); > } > > static void rcu_free_vs(struct rcu_head *rcu) > diff --git a/datapath/vport-geneve.c b/datapath/vport-geneve.c > index 33047f2..bed759f 100644 > --- a/datapath/vport-geneve.c > +++ b/datapath/vport-geneve.c > @@ -414,7 +414,7 @@ static int geneve_send(struct vport *vport, struct > sk_buff *skb) > > df = tun_key->tun_flags & TUNNEL_DONT_FRAGMENT ? htons(IP_DF) : 0; > > - sent_len = iptunnel_xmit(rt, skb, > + sent_len = iptunnel_xmit(skb->sk, rt, skb, > saddr, tun_key->ipv4_dst, > IPPROTO_UDP, tun_key->ipv4_tos, > tun_key->ipv4_ttl, > diff --git a/datapath/vport-gre.c b/datapath/vport-gre.c > index d2a2602..46f8b0f 100644 > --- a/datapath/vport-gre.c > +++ b/datapath/vport-gre.c > @@ -192,7 +192,7 @@ static int __send(struct vport *vport, struct sk_buff > *skb, > df = tun_key->tun_flags & TUNNEL_DONT_FRAGMENT ? htons(IP_DF) : 0; > skb->local_df = 1; > > - return iptunnel_xmit(rt, skb, saddr, > + return iptunnel_xmit(skb->sk, rt, skb, saddr, > tun_key->ipv4_dst, IPPROTO_GRE, > tun_key->ipv4_tos, > tun_key->ipv4_ttl, df, false); > diff --git a/datapath/vport-lisp.c b/datapath/vport-lisp.c > index c41e09e..e515776 100644 > --- a/datapath/vport-lisp.c > +++ b/datapath/vport-lisp.c > @@ -490,7 +490,7 @@ static int lisp_send(struct vport *vport, struct sk_buff > *skb) > skb->local_df = 1; > > df = tun_key->tun_flags & TUNNEL_DONT_FRAGMENT ? htons(IP_DF) : 0; > - sent_len = iptunnel_xmit(rt, skb, > + sent_len = iptunnel_xmit(skb->sk, rt, skb, > saddr, tun_key->ipv4_dst, > IPPROTO_UDP, tun_key->ipv4_tos, > tun_key->ipv4_ttl, df, false); > diff --git a/datapath/vport-netdev.c b/datapath/vport-netdev.c > index c15923b..c60a6ef 100644 > --- a/datapath/vport-netdev.c > +++ b/datapath/vport-netdev.c > @@ -255,7 +255,7 @@ struct vport *ovs_netdev_get_vport(struct net_device *dev) > { > #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36) || \ > defined HAVE_RHEL_OVS_HOOK > -#if IFF_OVS_DATAPATH != 0 > +#if HAVE_IFF_OVS_DATAPATH > if (likely(dev->priv_flags & IFF_OVS_DATAPATH)) > #else > if (likely(rcu_access_pointer(dev->rx_handler) == netdev_frame_hook)) > diff --git a/debian/changelog b/debian/changelog > index 4658a3d..f43e9ad 100644 > --- a/debian/changelog > +++ b/debian/changelog > @@ -1,7 +1,8 @@ > openvswitch (2.3.90-1) unstable; urgency=low > [ Open vSwitch team ] > * New upstream version > - - Nothing yet! Try NEWS... > + - Support for Linux kernels up to 3.15. From Kernel 3.12 onwards OVS uses > + tunnel API for GRE and VXLAN. > > -- Open vSwitch team <dev@openvswitch.org> Thu, 15 May 2014 17:08:39 -0700 > > -- > 1.9.1 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev