From 220f321c1d0098ef7c988bab8e9161a0005f95a8 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Tue, 29 Dec 2015 09:02:59 -0600 Subject: [PATCH] Upgrade OpenVSwitch to version 2.5.0 to support kernels up to 4.3 Most patches for 4.1 are no longer needed, only a minor patch to fix a missing WAIT_ANY constant. 2.5.0 depends on nf_conntrack (ipv4 and ipv6) Signed-off-by: Jeroen van Bemmel --- net/openvswitch/Makefile | 11 ++- ...add-vlan_hwaccel_push_inside-for-ker.patch | 35 ------- ...path-Add-net-ip6_checksum.h-to-stt.c.patch | 34 ------- .../patches/0006-force-kernel-4-1.patch | 17 ---- .../patches/0007-add-netns-compat.patch | 93 ------------------- .../patches/0009-fix-test-ovn.patch | 11 +++ .../patches/0010-patch-nf_ip_hook-4.1.patch | 20 ---- .../patches/0011-fix-vxlan-xmit-skb-4.1.patch | 18 ---- .../patches/0012-fix-vport-lisp-4.1.patch | 16 ---- 9 files changed, 18 insertions(+), 237 deletions(-) delete mode 100644 net/openvswitch/patches/0003-datapath-do-not-add-vlan_hwaccel_push_inside-for-ker.patch delete mode 100644 net/openvswitch/patches/0005-datapath-Add-net-ip6_checksum.h-to-stt.c.patch delete mode 100644 net/openvswitch/patches/0006-force-kernel-4-1.patch delete mode 100644 net/openvswitch/patches/0007-add-netns-compat.patch create mode 100644 net/openvswitch/patches/0009-fix-test-ovn.patch delete mode 100644 net/openvswitch/patches/0010-patch-nf_ip_hook-4.1.patch delete mode 100644 net/openvswitch/patches/0011-fix-vxlan-xmit-skb-4.1.patch delete mode 100644 net/openvswitch/patches/0012-fix-vport-lisp-4.1.patch diff --git a/net/openvswitch/Makefile b/net/openvswitch/Makefile index 19878d6dfe..3e8d6f6008 100644 --- a/net/openvswitch/Makefile +++ b/net/openvswitch/Makefile @@ -12,7 +12,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=openvswitch PKG_RELEASE:=3 -PKG_VERSION:=2.4.0 +PKG_VERSION:=2.5.0 PKG_RELEASE=$(PKG_SOURCE_VERSION) PKG_LICENSE:=Apache-2.0 PKG_LICENSE_FILES:=COPYING @@ -21,14 +21,17 @@ PKG_USE_MIPS16:=0 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/openvswitch/ovs PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) -PKG_SOURCE_VERSION:=b979c282ef040a20d09b8d6885648b09352f05db +PKG_SOURCE_VERSION:=98b94d1e7002063ce2ea3c3221fe9234cac4e124 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz PKG_BUILD_PARALLEL:=1 PKG_FIXUP:=autoreconf PKG_INSTALL:=1 -SUPPORTED_KERNELS:=LINUX_3_8||LINUX_3_10||LINUX_3_13||LINUX_3_14||LINUX_3_18||LINUX_4_0||LINUX_4_1 +# Upstream package supports kernels between 2.6.32 and 4.3 +# see https://github.com/openvswitch/ovs/blob/master/FAQ.md +# This list is pruned to only those kernels used in OpenWRT +SUPPORTED_KERNELS:=LINUX_3_18||LINUX_4_1||LINUX_4_3 include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/kernel.mk @@ -98,7 +101,7 @@ define KernelPackage/openvswitch SUBMENU:=Network Support TITLE:=Open vSwitch Kernel Package KCONFIG:=CONFIG_BRIDGE - DEPENDS:=+kmod-stp @IPV6 +kmod-gre +kmod-lib-crc32c +kmod-vxlan @($(SUPPORTED_KERNELS)) + DEPENDS:=+kmod-stp @IPV6 +kmod-gre +kmod-lib-crc32c +kmod-vxlan +kmod-nf-conntrack +kmod-nf-conntrack6 @($(SUPPORTED_KERNELS)) FILES:= \ $(PKG_BUILD_DIR)/datapath/linux/openvswitch.$(LINUX_KMOD_SUFFIX) AUTOLOAD:=$(call AutoLoad,21,openvswitch) diff --git a/net/openvswitch/patches/0003-datapath-do-not-add-vlan_hwaccel_push_inside-for-ker.patch b/net/openvswitch/patches/0003-datapath-do-not-add-vlan_hwaccel_push_inside-for-ker.patch deleted file mode 100644 index 673b8d6b5d..0000000000 --- a/net/openvswitch/patches/0003-datapath-do-not-add-vlan_hwaccel_push_inside-for-ker.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 5919cb26c631b1dd77a745a3c546f9d117ed34b3 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens -Date: Sat, 23 May 2015 18:12:09 +0200 -Subject: [PATCH] datapath: do not add vlan_hwaccel_push_inside() for kernel >= - 3.18.13 - -The vlan_hwaccel_push_inside() function was backported in this commit -to kernel 3.18.13: - -commit a67e2e88342accd49587d9bad72f6dabd7673f7c -Author: Jiri Pirko -Date: Wed Nov 19 14:04:59 2014 +0100 - - vlan: introduce *vlan_hwaccel_push_inside helpers - - [ Upstream commit 5968250c868ceee680aa77395b24e6ddcae17d36 ] - -Without this patch compilation breaks on kernel >= 3.18.13 - -Signed-off-by: Hauke Mehrtens ---- - datapath/linux/compat/include/linux/if_vlan.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/datapath/linux/compat/include/linux/if_vlan.h -+++ b/datapath/linux/compat/include/linux/if_vlan.h -@@ -52,7 +52,7 @@ static inline struct sk_buff *rpl_vlan_i - } - #endif - --#if LINUX_VERSION_CODE < KERNEL_VERSION(3,19,0) -+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,18,13) - /* - * __vlan_hwaccel_push_inside - pushes vlan tag to the payload - * @skb: skbuff to tag diff --git a/net/openvswitch/patches/0005-datapath-Add-net-ip6_checksum.h-to-stt.c.patch b/net/openvswitch/patches/0005-datapath-Add-net-ip6_checksum.h-to-stt.c.patch deleted file mode 100644 index 61504d27ab..0000000000 --- a/net/openvswitch/patches/0005-datapath-Add-net-ip6_checksum.h-to-stt.c.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 554daf066bf4a8eb7bbc8edc1a877a3afc0de38d Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jason=20K=C3=B6lker?= -Date: Wed, 2 Sep 2015 22:40:24 +0000 -Subject: [PATCH] datapath: Add net/ip6_checksum.h to stt.c -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -`csum_ipv6_magic` is an asm inline on most platforms. However if it is -not defined (like on ppc64le) including will fall -back to the c implementation by wrapping it in an -`#ifndef _HAVE_ARCH_IPV6_CSUM`. - -Signed-off-by: Jason Kölker -Signed-off-by: Jesse Gross ---- - datapath/linux/compat/stt.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/datapath/linux/compat/stt.c b/datapath/linux/compat/stt.c -index b44f470..dd21753 100644 ---- a/datapath/linux/compat/stt.c -+++ b/datapath/linux/compat/stt.c -@@ -30,6 +30,7 @@ - #include - #include - #include -+#include - #include - #include - #include --- -2.1.4 - diff --git a/net/openvswitch/patches/0006-force-kernel-4-1.patch b/net/openvswitch/patches/0006-force-kernel-4-1.patch deleted file mode 100644 index d87fd90619..0000000000 --- a/net/openvswitch/patches/0006-force-kernel-4-1.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/acinclude.m4 b/acinclude.m4 -index 45cfaf6..42866de 100644 ---- a/acinclude.m4 -+++ b/acinclude.m4 -@@ -134,10 +134,10 @@ AC_DEFUN([OVS_CHECK_LINUX], [ - AC_MSG_RESULT([$kversion]) - - if test "$version" -ge 4; then -- if test "$version" = 4 && test "$patchlevel" -le 0; then -+ if test "$version" = 4 && test "$patchlevel" -le 1; then - : # Linux 4.x - else -- AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 4.0.x is not supported (please refer to the FAQ for advice)]) -+ AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 4.1.x is not supported (please refer to the FAQ for advice)]) - fi - elif test "$version" = 3; then - : # Linux 3.x diff --git a/net/openvswitch/patches/0007-add-netns-compat.patch b/net/openvswitch/patches/0007-add-netns-compat.patch deleted file mode 100644 index b6592c8265..0000000000 --- a/net/openvswitch/patches/0007-add-netns-compat.patch +++ /dev/null @@ -1,93 +0,0 @@ -diff --git a/datapath/datapath.h b/datapath/datapath.h -index fdf35f0..02be8be 100644 ---- a/datapath/datapath.h -+++ b/datapath/datapath.h -@@ -86,10 +86,8 @@ struct datapath { - /* Stats. */ - struct dp_stats_percpu __percpu *stats_percpu; - --#ifdef CONFIG_NET_NS - /* Network namespace ref. */ -- struct net *net; --#endif -+ possible_net_t net; - - u32 user_features; - }; -@@ -154,12 +152,12 @@ int lockdep_ovsl_is_held(void); - - static inline struct net *ovs_dp_get_net(const struct datapath *dp) - { -- return read_pnet(&dp->net); -+ return ovs_compat_read_pnet(&dp->net); - } - - static inline void ovs_dp_set_net(struct datapath *dp, struct net *net) - { -- write_pnet(&dp->net, net); -+ ovs_compat_write_pnet(&dp->net, net); - } - - struct vport *ovs_lookup_vport(const struct datapath *dp, u16 port_no); -diff --git a/datapath/linux/compat/include/net/net_namespace.h b/datapath/linux/compat/include/net/net_namespace.h -index b7dbfe3..7763584 100644 ---- a/datapath/linux/compat/include/net/net_namespace.h -+++ b/datapath/linux/compat/include/net/net_namespace.h -@@ -51,4 +51,57 @@ static void rpl_unregister_pernet_gen_##TYPE(struct rpl_pernet_operations *rpl_p - #define DEFINE_COMPAT_PNET_REG_FUNC(TYPE) - #endif /* 2.6.33 */ - -+/* In recent kernel versions (4.1) this type is defined ; for older versions we have to define it */ -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0) -+#define ovs_compat_read_pnet read_pnet -+#define ovs_compat_write_pnet write_pnet -+ -+#if defined(CONFIG_NET_NS) && defined(NETNS_REFCNT_DEBUG) -+static inline struct net *hold_net(struct net *net) -+{ -+ if (net) -+ atomic_inc(&net->use_count); -+ return net; -+} -+ -+static inline void release_net(struct net *net) -+{ -+ if (net) -+ atomic_dec(&net->use_count); -+} -+#else -+static inline struct net *hold_net(struct net *net) -+{ -+ return net; -+} -+ -+static inline void release_net(struct net *net) -+{ -+} -+#endif -+ -+#else /* lower than 4.1 */ -+typedef struct { -+#ifdef CONFIG_NET_NS -+ struct net *net; -+#endif -+} possible_net_t; -+ -+static inline void ovs_compat_write_pnet(possible_net_t *pnet, struct net *net) -+{ -+#ifdef CONFIG_NET_NS -+ pnet->net = net; -+#endif -+} -+ -+static inline struct net *ovs_compat_read_pnet(const possible_net_t *pnet) -+{ -+#ifdef CONFIG_NET_NS -+ return pnet->net; -+#else -+ return &init_net; -+#endif -+} -+#endif /* 4.1.0 */ -+ - #endif /* net/net_namespace.h wrapper */ diff --git a/net/openvswitch/patches/0009-fix-test-ovn.patch b/net/openvswitch/patches/0009-fix-test-ovn.patch new file mode 100644 index 0000000000..10bd37a24a --- /dev/null +++ b/net/openvswitch/patches/0009-fix-test-ovn.patch @@ -0,0 +1,11 @@ +--- a/tests/test-ovn.c ++++ b/tests/test-ovn.c +@@ -1043,7 +1043,7 @@ wait_pid(pid_t *pids, int *n) + int status; + pid_t pid; + +- pid = waitpid(WAIT_ANY, &status, 0); ++ pid = waitpid(-1, &status, 0); + if (pid < 0) { + ovs_fatal(errno, "waitpid failed"); + } else if (WIFEXITED(status)) { diff --git a/net/openvswitch/patches/0010-patch-nf_ip_hook-4.1.patch b/net/openvswitch/patches/0010-patch-nf_ip_hook-4.1.patch deleted file mode 100644 index 46c3432f2f..0000000000 --- a/net/openvswitch/patches/0010-patch-nf_ip_hook-4.1.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff --git a/datapath/linux/compat/stt.c b/datapath/linux/compat/stt.c -index b44f470..f95416e 100644 ---- a/datapath/linux/compat/stt.c -+++ b/datapath/linux/compat/stt.c -@@ -1326,9 +1326,14 @@ static void clean_percpu(struct work_struct *work) - - static unsigned int nf_ip_hook(FIRST_PARAM - struct sk_buff *skb, -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0) -+ const struct nf_hook_state *state -+#else - const struct net_device *in, - const struct net_device *out, -- int (*okfn)(struct sk_buff *)) -+ int (*okfn)(struct sk_buff *) -+#endif -+ ) - { - struct stt_sock *stt_sock; - int ip_hdr_len; diff --git a/net/openvswitch/patches/0011-fix-vxlan-xmit-skb-4.1.patch b/net/openvswitch/patches/0011-fix-vxlan-xmit-skb-4.1.patch deleted file mode 100644 index 1aecdab87e..0000000000 --- a/net/openvswitch/patches/0011-fix-vxlan-xmit-skb-4.1.patch +++ /dev/null @@ -1,18 +0,0 @@ -diff --git a/datapath/linux/compat/include/net/vxlan.h b/datapath/linux/compat/include/net/vxlan.h -index 0d60c18..db4dfb6 100644 ---- a/datapath/linux/compat/include/net/vxlan.h -+++ b/datapath/linux/compat/include/net/vxlan.h -@@ -99,8 +99,13 @@ static inline int rpl_vxlan_xmit_skb(struct vxlan_sock *vs, - return -ENOSYS; - } - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0) -+ return vxlan_xmit_skb(rt, vs->sock->sk, skb, src, dst, tos, ttl, df, -+ src_port, dst_port, md, xnet, vxflags); -+#else - return vxlan_xmit_skb(rt, skb, src, dst, tos, ttl, df, - src_port, dst_port, md, xnet, vxflags); -+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0) */ - } - - #define vxlan_xmit_skb rpl_vxlan_xmit_skb diff --git a/net/openvswitch/patches/0012-fix-vport-lisp-4.1.patch b/net/openvswitch/patches/0012-fix-vport-lisp-4.1.patch deleted file mode 100644 index 47bbfb4d47..0000000000 --- a/net/openvswitch/patches/0012-fix-vport-lisp-4.1.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/datapath/vport-lisp.c b/datapath/vport-lisp.c -index 0024eb4..ce1c3a8 100644 ---- a/datapath/vport-lisp.c -+++ b/datapath/vport-lisp.c -@@ -455,7 +455,11 @@ static int lisp_send(struct vport *vport, struct sk_buff *skb) - ovs_skb_set_inner_protocol(skb, skb->protocol); - - df = tun_key->tun_flags & TUNNEL_DONT_FRAGMENT ? htons(IP_DF) : 0; -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0) -+ sent_len = udp_tunnel_xmit_skb(rt, lisp_port->lisp_rcv_socket->sk, skb, saddr, tun_key->ipv4_dst, -+#else - sent_len = udp_tunnel_xmit_skb(rt, skb, saddr, tun_key->ipv4_dst, -+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0) */ - tun_key->ipv4_tos, tun_key->ipv4_ttl, - df, src_port, dst_port, false, true); - -- 2.30.2