[LEDE-DEV,RFC] iproute2: update to v4.10.0

Message ID 8760j5zbkn.fsf@husum.klickitat.com
State RFC
Headers show

Commit Message

Russell Senior March 19, 2017, 12:38 p.m.
Thanks to Syrone Wong <wong.syrone@gmail.com> for the pointer to UAPI
fixes.  This builds now, at least on x86/geode.  It would be nice to
have some testing.

Signed-off-by: Russell Senior <russell@personaltelco.net>
---
 package/network/utils/iproute2/Makefile            |   8 +-
 .../utils/iproute2/patches/006-no_sctp.patch       |   4 +-
 .../utils/iproute2/patches/008-no_netem.patch      |   6 +-
 .../utils/iproute2/patches/010-type_fixes.patch    | 396 ---------------------
 .../iproute2/patches/100-allow_pfifo_fast.patch    |   2 +-
 .../utils/iproute2/patches/110-extra-ccopts.patch  |   2 +-
 .../iproute2/patches/130-missing_include.patch     |  20 --
 ...pi-libc-compat.h-do-not-rely-on-__GLIBC__.patch | 107 ++++++
 ...er.h-prevent-redefinition-of-struct-ethhd.patch |  67 ++++
 .../utils/iproute2/patches/300-ip_tiny.patch       |  14 +-
 .../iproute2/patches/900-drop_FAILED_POLICY.patch  |   4 +-
 .../patches/910-sanitize_headers_for_musl.patch    |  10 -
 .../iproute2/patches/911-fix_in_h_include.patch    |  30 --
 .../iproute2/patches/950-add-cake-to-tc.patch      |  13 +-
 ...ix-ip-monitor-can-t-work-when-NET_NS-is-n.patch |  40 ---
 15 files changed, 199 insertions(+), 524 deletions(-)
 delete mode 100644 package/network/utils/iproute2/patches/010-type_fixes.patch
 delete mode 100644 package/network/utils/iproute2/patches/130-missing_include.patch
 create mode 100644 package/network/utils/iproute2/patches/271-uapi-libc-compat.h-do-not-rely-on-__GLIBC__.patch
 create mode 100644 package/network/utils/iproute2/patches/272-uapi-if_ether.h-prevent-redefinition-of-struct-ethhd.patch
 delete mode 100644 package/network/utils/iproute2/patches/910-sanitize_headers_for_musl.patch
 delete mode 100644 package/network/utils/iproute2/patches/911-fix_in_h_include.patch
 delete mode 100644 package/network/utils/iproute2/patches/960-ipmonitor-fix-ip-monitor-can-t-work-when-NET_NS-is-n.patch

Comments

Yousong Zhou March 20, 2017, 12:35 p.m. | #1
On 19 March 2017 at 20:38, Russell Senior <russell@personaltelco.net> wrote:
>
> Thanks to Syrone Wong <wong.syrone@gmail.com> for the pointer to UAPI
> fixes.  This builds now, at least on x86/geode.  It would be nice to
> have some testing.
>
> Signed-off-by: Russell Senior <russell@personaltelco.net>
> ---

Tested-by: Yousong Zhou <yszhou4tech@gmail.com>

CC jogo, can we have these two patches in generic dir (271, 272) upstreamed?

Regards,
               yousong
Kevin Darbyshire-Bryant March 20, 2017, 12:43 p.m. | #2
On 20/03/17 12:35, Yousong Zhou wrote:
> On 19 March 2017 at 20:38, Russell Senior <russell@personaltelco.net> wrote:
>>
>> Thanks to Syrone Wong <wong.syrone@gmail.com> for the pointer to UAPI
>> fixes.  This builds now, at least on x86/geode.  It would be nice to
>> have some testing.
>>
>> Signed-off-by: Russell Senior <russell@personaltelco.net>
>> ---
>
> Tested-by: Yousong Zhou <yszhou4tech@gmail.com>
>
> CC jogo, can we have these two patches in generic dir (271, 272) upstreamed?
>
> Regards,
>                yousong

Was this tested on a 4.4 kernel?  When I tried it wouldn't compile (but 
it was a quick 5 seconds before I had to run out the door type test, so 
I could have done summit stooopid)
Russell Senior March 20, 2017, 7:54 p.m. | #3
>>>>> "Kevin" == Kevin Darbyshire-Bryant <kevin@darbyshire-bryant.me.uk> writes:

Kevin> On 20/03/17 12:35, Yousong Zhou wrote:
>> On 19 March 2017 at 20:38, Russell Senior <russell@personaltelco.net> wrote:
>>> 
>>> Thanks to Syrone Wong <wong.syrone@gmail.com> for the pointer to
>>> UAPI fixes.  This builds now, at least on x86/geode.  It would be
>>> nice to have some testing.
>>> 
>>> Signed-off-by: Russell Senior <russell@personaltelco.net> ---
>> 
>> Tested-by: Yousong Zhou <yszhou4tech@gmail.com>
>> 
>> CC jogo, can we have these two patches in generic dir (271, 272)
>> upstreamed?
>> 
>> Regards, yousong

Kevin> Was this tested on a 4.4 kernel?  When I tried it wouldn't
Kevin> compile (but it was a quick 5 seconds before I had to run out the
Kevin> door type test, so I could have done summit stooopid)

I tested ip-tiny on a Buffalo WZR600DHP (ar71xx):

root@hostname:/# uname -a
Linux hostname 4.4.53 #0 Sun Mar 19 12:42:50 2017 mips GNU/Linux
root@hostname:/# ip -V
ip utility, iproute2-ss4.10.0-1-lede

The new ip-tiny ipk is 20k bigger than the old version (~79k vs ~100k).
There may be some additional pruning possible to get it back down to a
similar size.
Kevin Darbyshire-Bryant March 20, 2017, 10:36 p.m. | #4
On 20/03/17 19:54, Russell Senior wrote:
<snip>
>
> Kevin> Was this tested on a 4.4 kernel?  When I tried it wouldn't
> Kevin> compile (but it was a quick 5 seconds before I had to run out the
> Kevin> door type test, so I could have done summit stooopid)
>
> I tested ip-tiny on a Buffalo WZR600DHP (ar71xx):
>
> root@hostname:/# uname -a
> Linux hostname 4.4.53 #0 Sun Mar 19 12:42:50 2017 mips GNU/Linux
> root@hostname:/# ip -V
> ip utility, iproute2-ss4.10.0-1-lede
>
> The new ip-tiny ipk is 20k bigger than the old version (~79k vs ~100k).
> There may be some additional pruning possible to get it back down to a
> similar size.

As I suspected, I was doing something stoopid - managed to get a build 
out & running on an Archer C7.  :-)

Apologies for the noise.  Good to have iproute up to date :-)

Kevin
Russell Senior March 20, 2017, 11:51 p.m. | #5
>>>>> "Russell" == Russell Senior <russell@personaltelco.net> writes:

>>>>> "Kevin" == Kevin Darbyshire-Bryant <kevin@darbyshire-bryant.me.uk> writes:
Kevin> On 20/03/17 12:35, Yousong Zhou wrote:
>>> On 19 March 2017 at 20:38, Russell Senior <russell@personaltelco.net> wrote:
>>>> 
>>>> Thanks to Syrone Wong <wong.syrone@gmail.com> for the pointer to
>>>> UAPI fixes.  This builds now, at least on x86/geode.  It would be
>>>> nice to have some testing.
>>>> 
>>>> Signed-off-by: Russell Senior <russell@personaltelco.net> ---
>>> 
>>> Tested-by: Yousong Zhou <yszhou4tech@gmail.com>
>>> 
>>> CC jogo, can we have these two patches in generic dir (271, 272)
>>> upstreamed?
>>> 
>>> Regards, yousong

Kevin> Was this tested on a 4.4 kernel?  When I tried it wouldn't
Kevin> compile (but it was a quick 5 seconds before I had to run out the
Kevin> door type test, so I could have done summit stooopid)

Russell> I tested ip-tiny on a Buffalo WZR600DHP (ar71xx):

Russell> root@hostname:/# uname -a Linux hostname 4.4.53 #0 Sun Mar 19
Russell> 12:42:50 2017 mips GNU/Linux root@hostname:/# ip -V ip utility,
Russell> iproute2-ss4.10.0-1-lede

Russell> The new ip-tiny ipk is 20k bigger than the old version (~79k vs
Russell> ~100k).  There may be some additional pruning possible to get
Russell> it back down to a similar size.

There may also be a missing depends.  I had temporary -j16 build
failures due to a missing iptables header file.  Restarting worked,
presumably because the header had by then appeared where expected.  I am
not sure what, exactly, was providing the header.

../include/xtables.h:34:29: fatal error: xtables-version.h: No such file or directory
Syrone Wong March 21, 2017, 12:14 a.m. | #6
My solution is to disable parallel build and make iptables as build dependency.

PKG_BUILD_PARALLEL:=0
PKG_BUILD_DEPENDS:=iptables

BTW, iproute2 doesn't honor COPTS correctly, I fixed this by reordering flags.

more detail can be found here:

https://github.com/wongsyrone/lede-1/commit/1d75df6a16ce98fa20bb84ba88c0004ceb89e987
https://github.com/wongsyrone/lede-1/commit/32d516646d6bcba2b7aeb2d3d692944070cbe58b

Best Regards,
Syrone Wong


On Tue, Mar 21, 2017 at 7:51 AM, Russell Senior
<russell@personaltelco.net> wrote:
>>>>>> "Russell" == Russell Senior <russell@personaltelco.net> writes:
>
>>>>>> "Kevin" == Kevin Darbyshire-Bryant <kevin@darbyshire-bryant.me.uk> writes:
> Kevin> On 20/03/17 12:35, Yousong Zhou wrote:
>>>> On 19 March 2017 at 20:38, Russell Senior <russell@personaltelco.net> wrote:
>>>>>
>>>>> Thanks to Syrone Wong <wong.syrone@gmail.com> for the pointer to
>>>>> UAPI fixes.  This builds now, at least on x86/geode.  It would be
>>>>> nice to have some testing.
>>>>>
>>>>> Signed-off-by: Russell Senior <russell@personaltelco.net> ---
>>>>
>>>> Tested-by: Yousong Zhou <yszhou4tech@gmail.com>
>>>>
>>>> CC jogo, can we have these two patches in generic dir (271, 272)
>>>> upstreamed?
>>>>
>>>> Regards, yousong
>
> Kevin> Was this tested on a 4.4 kernel?  When I tried it wouldn't
> Kevin> compile (but it was a quick 5 seconds before I had to run out the
> Kevin> door type test, so I could have done summit stooopid)
>
> Russell> I tested ip-tiny on a Buffalo WZR600DHP (ar71xx):
>
> Russell> root@hostname:/# uname -a Linux hostname 4.4.53 #0 Sun Mar 19
> Russell> 12:42:50 2017 mips GNU/Linux root@hostname:/# ip -V ip utility,
> Russell> iproute2-ss4.10.0-1-lede
>
> Russell> The new ip-tiny ipk is 20k bigger than the old version (~79k vs
> Russell> ~100k).  There may be some additional pruning possible to get
> Russell> it back down to a similar size.
>
> There may also be a missing depends.  I had temporary -j16 build
> failures due to a missing iptables header file.  Restarting worked,
> presumably because the header had by then appeared where expected.  I am
> not sure what, exactly, was providing the header.
>
> ../include/xtables.h:34:29: fatal error: xtables-version.h: No such file or directory
>
>
> --
> Russell Senior, President
> russell@personaltelco.net
>
> _______________________________________________
> Lede-dev mailing list
> Lede-dev@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/lede-dev
Yousong Zhou March 21, 2017, 1:58 p.m. | #7
On 21 March 2017 at 03:54, Russell Senior <russell@personaltelco.net> wrote:
> The new ip-tiny ipk is 20k bigger than the old version (~79k vs ~100k).
> There may be some additional pruning possible to get it back down to a
> similar size.

It will be really nice if the size can be squeezed for at least the
ip-tiny package.  Are you already working on this?

The other thing is that adding iptables as a build dependency should
be the way to go if only header files of that packages are needed to
build iproute2.

Regards,
                yousong

Patch

diff --git a/package/network/utils/iproute2/Makefile b/package/network/utils/iproute2/Makefile
index 1c1ee3f24e..65ae5cb457 100644
--- a/package/network/utils/iproute2/Makefile
+++ b/package/network/utils/iproute2/Makefile
@@ -6,14 +6,15 @@ 
 #
 
 include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=iproute2
-PKG_VERSION:=4.4.0
-PKG_RELEASE:=9
+PKG_VERSION:=4.10.0
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=@KERNEL/linux/utils/net/iproute2
-PKG_HASH:=bc91c367288a19f78ef800cd6840363be1f22da8436fbae88e1a7250490d6514
+PKG_HASH:=22b1e1c1fc704ad35837e5a66103739727b8b48ac90b48c13f79b7367ff0a9a8
 PKG_BUILD_PARALLEL:=1
 PKG_LICENSE:=GPL-2.0
 
@@ -89,6 +90,7 @@  MAKE_FLAGS += \
 	SHARED_LIBS="" \
 	LDFLAGS="$(TARGET_LDFLAGS) -Wl,--gc-sections" \
 	IP_CONFIG_TINY=$(IP_CONFIG_TINY) \
+	IPT_LIB_DIR=/usr/lib/iptables \
 	FPIC="$(FPIC)"
 
 define Build/Compile
diff --git a/package/network/utils/iproute2/patches/006-no_sctp.patch b/package/network/utils/iproute2/patches/006-no_sctp.patch
index 6805468d81..d4552fe7fb 100644
--- a/package/network/utils/iproute2/patches/006-no_sctp.patch
+++ b/package/network/utils/iproute2/patches/006-no_sctp.patch
@@ -1,6 +1,6 @@ 
 --- a/ip/ipxfrm.c
 +++ b/ip/ipxfrm.c
-@@ -470,7 +470,6 @@ void xfrm_selector_print(struct xfrm_sel
+@@ -465,7 +465,6 @@ void xfrm_selector_print(struct xfrm_sel
  	switch (sel->proto) {
  	case IPPROTO_TCP:
  	case IPPROTO_UDP:
@@ -8,7 +8,7 @@ 
  	case IPPROTO_DCCP:
  	default: /* XXX */
  		if (sel->sport_mask)
-@@ -1341,7 +1340,6 @@ static int xfrm_selector_upspec_parse(st
+@@ -1322,7 +1321,6 @@ static int xfrm_selector_upspec_parse(st
  		switch (sel->proto) {
  		case IPPROTO_TCP:
  		case IPPROTO_UDP:
diff --git a/package/network/utils/iproute2/patches/008-no_netem.patch b/package/network/utils/iproute2/patches/008-no_netem.patch
index fce16e02df..47ffd9946d 100644
--- a/package/network/utils/iproute2/patches/008-no_netem.patch
+++ b/package/network/utils/iproute2/patches/008-no_netem.patch
@@ -1,11 +1,11 @@ 
 --- a/Makefile
 +++ b/Makefile
-@@ -41,7 +41,7 @@ WFLAGS += -Wmissing-declarations -Wold-s
+@@ -52,7 +52,7 @@ WFLAGS += -Wmissing-declarations -Wold-s
  CFLAGS := $(WFLAGS) $(CCOPTS) -I../include $(DEFINES) $(CFLAGS)
  YACCFLAGS = -d -t -v
  
--SUBDIRS=lib ip tc bridge misc netem genl tipc man
-+SUBDIRS=lib ip tc bridge misc genl tipc man
+-SUBDIRS=lib ip tc bridge misc netem genl tipc devlink man
++SUBDIRS=lib ip tc bridge misc genl tipc devlink man
  
  LIBNETLINK=../lib/libnetlink.a ../lib/libutil.a
  LDLIBS += $(LIBNETLINK)
diff --git a/package/network/utils/iproute2/patches/010-type_fixes.patch b/package/network/utils/iproute2/patches/010-type_fixes.patch
deleted file mode 100644
index e0055fce71..0000000000
--- a/package/network/utils/iproute2/patches/010-type_fixes.patch
+++ /dev/null
@@ -1,396 +0,0 @@ 
---- a/include/iptables_common.h
-+++ b/include/iptables_common.h
-@@ -2,6 +2,8 @@
- #define _IPTABLES_COMMON_H
- /* Shared definitions between ipv4 and ipv6. */
- 
-+#include <stdint.h>
-+
- enum exittype {
- 	OTHER_PROBLEM = 1,
- 	PARAMETER_PROBLEM,
-@@ -43,9 +45,9 @@ extern char *lib_dir;
-   extern void init_extensions(void);
- #endif
- 
--#define __be32	u_int32_t
--#define __le32	u_int32_t
--#define __be16	u_int16_t
--#define __le16	u_int16_t
-+#define __be32	uint32_t
-+#define __le32	uint32_t
-+#define __be16	uint16_t
-+#define __le16	uint16_t
- 
- #endif /*_IPTABLES_COMMON_H*/
---- a/include/netinet/tcp.h
-+++ /dev/null
-@@ -1,231 +0,0 @@
--/*
-- * Copyright (c) 1982, 1986, 1993
-- *	The Regents of the University of California.  All rights reserved.
-- *
-- * Redistribution and use in source and binary forms, with or without
-- * modification, are permitted provided that the following conditions
-- * are met:
-- * 1. Redistributions of source code must retain the above copyright
-- *    notice, this list of conditions and the following disclaimer.
-- * 2. Redistributions in binary form must reproduce the above copyright
-- *    notice, this list of conditions and the following disclaimer in the
-- *    documentation and/or other materials provided with the distribution.
-- * 4. Neither the name of the University nor the names of its contributors
-- *    may be used to endorse or promote products derived from this software
-- *    without specific prior written permission.
-- *
-- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-- * SUCH DAMAGE.
-- *
-- *	@(#)tcp.h	8.1 (Berkeley) 6/10/93
-- */
--
--#ifndef _NETINET_TCP_H
--#define _NETINET_TCP_H	1
--
--#include <features.h>
--
--/*
-- * User-settable options (used with setsockopt).
-- */
--#define	TCP_NODELAY	 1	/* Don't delay send to coalesce packets  */
--#define	TCP_MAXSEG	 2	/* Set maximum segment size  */
--#define TCP_CORK	 3	/* Control sending of partial frames  */
--#define TCP_KEEPIDLE	 4	/* Start keeplives after this period */
--#define TCP_KEEPINTVL	 5	/* Interval between keepalives */
--#define TCP_KEEPCNT	 6	/* Number of keepalives before death */
--#define TCP_SYNCNT	 7	/* Number of SYN retransmits */
--#define TCP_LINGER2	 8	/* Life time of orphaned FIN-WAIT-2 state */
--#define TCP_DEFER_ACCEPT 9	/* Wake up listener only when data arrive */
--#define TCP_WINDOW_CLAMP 10	/* Bound advertised window */
--#define TCP_INFO	 11	/* Information about this connection. */
--#define	TCP_QUICKACK	 12	/* Bock/reenable quick ACKs.  */
--#define TCP_CONGESTION	 13	/* Congestion control algorithm.  */
--
--#ifdef __USE_MISC
--# include <sys/types.h>
--
--# ifdef __FAVOR_BSD
--typedef	u_int32_t tcp_seq;
--/*
-- * TCP header.
-- * Per RFC 793, September, 1981.
-- */
--struct tcphdr
--  {
--    u_int16_t th_sport;		/* source port */
--    u_int16_t th_dport;		/* destination port */
--    tcp_seq th_seq;		/* sequence number */
--    tcp_seq th_ack;		/* acknowledgement number */
--#  if __BYTE_ORDER == __LITTLE_ENDIAN
--    u_int8_t th_x2:4;		/* (unused) */
--    u_int8_t th_off:4;		/* data offset */
--#  endif
--#  if __BYTE_ORDER == __BIG_ENDIAN
--    u_int8_t th_off:4;		/* data offset */
--    u_int8_t th_x2:4;		/* (unused) */
--#  endif
--    u_int8_t th_flags;
--#  define TH_FIN	0x01
--#  define TH_SYN	0x02
--#  define TH_RST	0x04
--#  define TH_PUSH	0x08
--#  define TH_ACK	0x10
--#  define TH_URG	0x20
--    u_int16_t th_win;		/* window */
--    u_int16_t th_sum;		/* checksum */
--    u_int16_t th_urp;		/* urgent pointer */
--};
--
--# else /* !__FAVOR_BSD */
--struct tcphdr
--  {
--    u_int16_t source;
--    u_int16_t dest;
--    u_int32_t seq;
--    u_int32_t ack_seq;
--#  if __BYTE_ORDER == __LITTLE_ENDIAN
--    u_int16_t res1:4;
--    u_int16_t doff:4;
--    u_int16_t fin:1;
--    u_int16_t syn:1;
--    u_int16_t rst:1;
--    u_int16_t psh:1;
--    u_int16_t ack:1;
--    u_int16_t urg:1;
--    u_int16_t res2:2;
--#  elif __BYTE_ORDER == __BIG_ENDIAN
--    u_int16_t doff:4;
--    u_int16_t res1:4;
--    u_int16_t res2:2;
--    u_int16_t urg:1;
--    u_int16_t ack:1;
--    u_int16_t psh:1;
--    u_int16_t rst:1;
--    u_int16_t syn:1;
--    u_int16_t fin:1;
--#  else
--#   error "Adjust your <bits/endian.h> defines"
--#  endif
--    u_int16_t window;
--    u_int16_t check;
--    u_int16_t urg_ptr;
--};
--# endif /* __FAVOR_BSD */
--
--enum
--{
--  TCP_ESTABLISHED = 1,
--  TCP_SYN_SENT,
--  TCP_SYN_RECV,
--  TCP_FIN_WAIT1,
--  TCP_FIN_WAIT2,
--  TCP_TIME_WAIT,
--  TCP_CLOSE,
--  TCP_CLOSE_WAIT,
--  TCP_LAST_ACK,
--  TCP_LISTEN,
--  TCP_CLOSING   /* now a valid state */
--};
--
--# define TCPOPT_EOL		0
--# define TCPOPT_NOP		1
--# define TCPOPT_MAXSEG		2
--# define TCPOLEN_MAXSEG		4
--# define TCPOPT_WINDOW		3
--# define TCPOLEN_WINDOW		3
--# define TCPOPT_SACK_PERMITTED	4		/* Experimental */
--# define TCPOLEN_SACK_PERMITTED	2
--# define TCPOPT_SACK		5		/* Experimental */
--# define TCPOPT_TIMESTAMP	8
--# define TCPOLEN_TIMESTAMP	10
--# define TCPOLEN_TSTAMP_APPA	(TCPOLEN_TIMESTAMP+2) /* appendix A */
--
--# define TCPOPT_TSTAMP_HDR	\
--    (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP)
--
--/*
-- * Default maximum segment size for TCP.
-- * With an IP MSS of 576, this is 536,
-- * but 512 is probably more convenient.
-- * This should be defined as MIN(512, IP_MSS - sizeof (struct tcpiphdr)).
-- */
--# define TCP_MSS	512
--
--# define TCP_MAXWIN	65535	/* largest value for (unscaled) window */
--
--# define TCP_MAX_WINSHIFT	14	/* maximum window shift */
--
--# define SOL_TCP		6	/* TCP level */
--
--
--# define TCPI_OPT_TIMESTAMPS	1
--# define TCPI_OPT_SACK		2
--# define TCPI_OPT_WSCALE	4
--# define TCPI_OPT_ECN		8
--# define TCPI_OPT_ECN_SEEN	16
--
--/* Values for tcpi_state.  */
--enum tcp_ca_state
--{
--  TCP_CA_Open = 0,
--  TCP_CA_Disorder = 1,
--  TCP_CA_CWR = 2,
--  TCP_CA_Recovery = 3,
--  TCP_CA_Loss = 4
--};
--
--struct tcp_info
--{
--  u_int8_t	tcpi_state;
--  u_int8_t	tcpi_ca_state;
--  u_int8_t	tcpi_retransmits;
--  u_int8_t	tcpi_probes;
--  u_int8_t	tcpi_backoff;
--  u_int8_t	tcpi_options;
--  u_int8_t	tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;
--
--  u_int32_t	tcpi_rto;
--  u_int32_t	tcpi_ato;
--  u_int32_t	tcpi_snd_mss;
--  u_int32_t	tcpi_rcv_mss;
--
--  u_int32_t	tcpi_unacked;
--  u_int32_t	tcpi_sacked;
--  u_int32_t	tcpi_lost;
--  u_int32_t	tcpi_retrans;
--  u_int32_t	tcpi_fackets;
--
--  /* Times. */
--  u_int32_t	tcpi_last_data_sent;
--  u_int32_t	tcpi_last_ack_sent;	/* Not remembered, sorry.  */
--  u_int32_t	tcpi_last_data_recv;
--  u_int32_t	tcpi_last_ack_recv;
--
--  /* Metrics. */
--  u_int32_t	tcpi_pmtu;
--  u_int32_t	tcpi_rcv_ssthresh;
--  u_int32_t	tcpi_rtt;
--  u_int32_t	tcpi_rttvar;
--  u_int32_t	tcpi_snd_ssthresh;
--  u_int32_t	tcpi_snd_cwnd;
--  u_int32_t	tcpi_advmss;
--  u_int32_t	tcpi_reordering;
--  u_int32_t	tcpi_rcv_rtt;
--  u_int32_t	tcpi_rcv_space;
--  u_int32_t	tcpi_total_retrans;
--
--};
--
--#endif /* Misc.  */
--
--#endif /* netinet/tcp.h */
---- a/include/iptables.h
-+++ b/include/iptables.h
-@@ -20,7 +20,7 @@ struct ipt_get_revision
- {
- 	char name[IPT_FUNCTION_MAXNAMELEN-1];
- 
--	u_int8_t revision;
-+	uint8_t revision;
- };
- #endif /* IPT_SO_GET_REVISION_MATCH   Old kernel source */
- 
-@@ -39,7 +39,7 @@ struct iptables_match
- 	ipt_chainlabel name;
- 
- 	/* Revision of match (0 by default). */
--	u_int8_t revision;
-+	uint8_t revision;
- 
- 	const char *version;
- 
-@@ -92,7 +92,7 @@ struct iptables_target
- 	ipt_chainlabel name;
- 
- 	/* Revision of target (0 by default). */
--	u_int8_t revision;
-+	uint8_t revision;
- 
- 	const char *version;
- 
-@@ -153,7 +153,7 @@ extern char *mask_to_dotted(const struct
- 
- extern void parse_hostnetworkmask(const char *name, struct in_addr **addrpp,
-                       struct in_addr *maskp, unsigned int *naddrs);
--extern u_int16_t parse_protocol(const char *s);
-+extern uint16_t parse_protocol(const char *s);
- 
- extern int do_command(int argc, char *argv[], char **table,
- 		      iptc_handle_t *handle);
---- a/lib/dnet_ntop.c
-+++ b/lib/dnet_ntop.c
-@@ -1,24 +1,25 @@
- #include <errno.h>
- #include <string.h>
-+#include <stdint.h>
- #include <sys/types.h>
- #include <netinet/in.h>
- 
- #include "utils.h"
- 
--static __inline__ u_int16_t dn_ntohs(u_int16_t addr)
-+static __inline__ uint16_t dn_ntohs(uint16_t addr)
- {
- 	union {
--		u_int8_t byte[2];
--		u_int16_t word;
-+		uint8_t byte[2];
-+		uint16_t word;
- 	} u;
- 
- 	u.word = addr;
--	return ((u_int16_t)u.byte[0]) | (((u_int16_t)u.byte[1]) << 8);
-+	return ((uint16_t)u.byte[0]) | (((uint16_t)u.byte[1]) << 8);
- }
- 
--static __inline__ int do_digit(char *str, u_int16_t *addr, u_int16_t scale, size_t *pos, size_t len, int *started)
-+static __inline__ int do_digit(char *str, uint16_t *addr, uint16_t scale, size_t *pos, size_t len, int *started)
- {
--	u_int16_t tmp = *addr / scale;
-+	uint16_t tmp = *addr / scale;
- 
- 	if (*pos == len)
- 		return 1;
-@@ -36,7 +37,7 @@ static __inline__ int do_digit(char *str
- 
- static const char *dnet_ntop1(const struct dn_naddr *dna, char *str, size_t len)
- {
--	u_int16_t addr, area;
-+	uint16_t addr, area;
- 	size_t pos = 0;
- 	int started = 0;
- 
---- a/lib/dnet_pton.c
-+++ b/lib/dnet_pton.c
-@@ -1,23 +1,24 @@
- #include <errno.h>
- #include <string.h>
-+#include <stdint.h>
- #include <sys/types.h>
- #include <netinet/in.h>
- 
- #include "utils.h"
- 
--static __inline__ u_int16_t dn_htons(u_int16_t addr)
-+static __inline__ uint16_t dn_htons(uint16_t addr)
- {
-         union {
--                u_int8_t byte[2];
--                u_int16_t word;
-+                uint8_t byte[2];
-+                uint16_t word;
-         } u;
- 
-         u.word = addr;
--        return ((u_int16_t)u.byte[0]) | (((u_int16_t)u.byte[1]) << 8);
-+        return ((uint16_t)u.byte[0]) | (((uint16_t)u.byte[1]) << 8);
- }
- 
- 
--static int dnet_num(const char *src, u_int16_t * dst)
-+static int dnet_num(const char *src, uint16_t * dst)
- {
- 	int rv = 0;
- 	int tmp;
-@@ -38,9 +39,9 @@ static int dnet_num(const char *src, u_i
- 
- static int dnet_pton1(const char *src, struct dn_naddr *dna)
- {
--	u_int16_t addr;
--	u_int16_t area = 0;
--	u_int16_t node = 0;
-+	uint16_t addr;
-+	uint16_t area = 0;
-+	uint16_t node = 0;
- 	int pos;
- 
- 	pos = dnet_num(src, &area);
---- a/include/libiptc/ipt_kernel_headers.h
-+++ b/include/libiptc/ipt_kernel_headers.h
-@@ -5,7 +5,7 @@
- 
- #include <limits.h>
- 
--#if defined(__GLIBC__) && __GLIBC__ == 2
-+#if 1
- #include <netinet/ip.h>
- #include <netinet/in.h>
- #include <netinet/ip_icmp.h>
diff --git a/package/network/utils/iproute2/patches/100-allow_pfifo_fast.patch b/package/network/utils/iproute2/patches/100-allow_pfifo_fast.patch
index ce958a9345..caf889e123 100644
--- a/package/network/utils/iproute2/patches/100-allow_pfifo_fast.patch
+++ b/package/network/utils/iproute2/patches/100-allow_pfifo_fast.patch
@@ -1,6 +1,6 @@ 
 --- a/tc/q_fifo.c
 +++ b/tc/q_fifo.c
-@@ -98,5 +98,6 @@ struct qdisc_util pfifo_head_drop_qdisc_
+@@ -97,5 +97,6 @@ struct qdisc_util pfifo_head_drop_qdisc_
  extern int prio_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt);
  struct qdisc_util pfifo_fast_qdisc_util = {
  	.id = "pfifo_fast",
diff --git a/package/network/utils/iproute2/patches/110-extra-ccopts.patch b/package/network/utils/iproute2/patches/110-extra-ccopts.patch
index 3cb5a79400..b28e19de57 100644
--- a/package/network/utils/iproute2/patches/110-extra-ccopts.patch
+++ b/package/network/utils/iproute2/patches/110-extra-ccopts.patch
@@ -1,6 +1,6 @@ 
 --- a/Makefile
 +++ b/Makefile
-@@ -34,7 +34,7 @@ HOSTCC = gcc
+@@ -45,7 +45,7 @@ HOSTCC ?= $(CC)
  DEFINES += -D_GNU_SOURCE
  # Turn on transparent support for LFS
  DEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
diff --git a/package/network/utils/iproute2/patches/130-missing_include.patch b/package/network/utils/iproute2/patches/130-missing_include.patch
deleted file mode 100644
index 8759a62599..0000000000
--- a/package/network/utils/iproute2/patches/130-missing_include.patch
+++ /dev/null
@@ -1,20 +0,0 @@ 
---- a/lib/namespace.c
-+++ b/lib/namespace.c
-@@ -10,6 +10,7 @@
- #include <fcntl.h>
- #include <dirent.h>
- #include <limits.h>
-+#include <sys/param.h>
- 
- #include "utils.h"
- #include "namespace.h"
---- a/lib/rt_names.c
-+++ b/lib/rt_names.c
-@@ -18,6 +18,7 @@
- #include <sys/time.h>
- #include <sys/socket.h>
- #include <dirent.h>
-+#include <limits.h>
- 
- #include <asm/types.h>
- #include <linux/rtnetlink.h>
diff --git a/package/network/utils/iproute2/patches/271-uapi-libc-compat.h-do-not-rely-on-__GLIBC__.patch b/package/network/utils/iproute2/patches/271-uapi-libc-compat.h-do-not-rely-on-__GLIBC__.patch
new file mode 100644
index 0000000000..5c27500b8e
--- /dev/null
+++ b/package/network/utils/iproute2/patches/271-uapi-libc-compat.h-do-not-rely-on-__GLIBC__.patch
@@ -0,0 +1,107 @@ 
+From f972afc2509eebcb00d370256c55b112a3b5ffca Mon Sep 17 00:00:00 2001
+From: David Heidelberger <david.heidelberger@ixit.cz>
+Date: Mon, 29 Jun 2015 16:50:40 +0200
+Subject: [PATCH 2/3] uapi/libc-compat.h: do not rely on __GLIBC__
+
+Musl provides the same structs as glibc, but does not provide a define to
+allow its detection. Since the absence of __GLIBC__ also can mean that it
+is included from the kernel, change the __GLIBC__ detection to
+!__KERNEL__, which should always be true when included from userspace.
+
+Signed-off-by: John Spencer <maillist-linux@barfooze.de>
+Tested-by: David Heidelberger <david.heidelberger@ixit.cz>
+Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+---
+ include/uapi/linux/libc-compat.h | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+--- a/include/linux/libc-compat.h
++++ b/include/linux/libc-compat.h
+@@ -48,13 +48,13 @@
+ #ifndef _UAPI_LIBC_COMPAT_H
+ #define _UAPI_LIBC_COMPAT_H
+ 
+-/* We have included glibc headers... */
+-#if defined(__GLIBC__)
++/* We have included libc headers... */
++#if !defined(__KERNEL__)
+ 
+-/* Coordinate with glibc net/if.h header. */
+-#if defined(_NET_IF_H) && defined(__USE_MISC)
++/* Coordinate with libc net/if.h header. */
++#if defined(_NET_IF_H) && (!defined(__GLIBC__) || defined(__USE_MISC))
+ 
+-/* GLIBC headers included first so don't define anything
++/* LIBC headers included first so don't define anything
+  * that would already be defined. */
+ 
+ #define __UAPI_DEF_IF_IFCONF 0
+@@ -65,7 +65,11 @@
+ #define __UAPI_DEF_IF_NET_DEVICE_FLAGS 0
+ /* For the future if glibc adds IFF_LOWER_UP, IFF_DORMANT and IFF_ECHO */
+ #ifndef __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO
++#ifdef __GLIBC__
+ #define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO 1
++#else
++#define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO 0
++#endif
+ #endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO */
+ 
+ #else /* _NET_IF_H */
+@@ -85,10 +89,10 @@
+ 
+ #endif /* _NET_IF_H */
+ 
+-/* Coordinate with glibc netinet/in.h header. */
++/* Coordinate with libc netinet/in.h header. */
+ #if defined(_NETINET_IN_H)
+ 
+-/* GLIBC headers included first so don't define anything
++/* LIBC headers included first so don't define anything
+  * that would already be defined. */
+ #define __UAPI_DEF_IN_ADDR		0
+ #define __UAPI_DEF_IN_IPPROTO		0
+@@ -102,7 +106,7 @@
+  * if the glibc code didn't define them. This guard matches
+  * the guard in glibc/inet/netinet/in.h which defines the
+  * additional in6_addr macros e.g. s6_addr16, and s6_addr32. */
+-#if defined(__USE_MISC) || defined (__USE_GNU)
++#if !defined(__GLIBC__) || defined(__USE_MISC) || defined (__USE_GNU)
+ #define __UAPI_DEF_IN6_ADDR_ALT		0
+ #else
+ #define __UAPI_DEF_IN6_ADDR_ALT		1
+@@ -117,7 +121,7 @@
+ #else
+ 
+ /* Linux headers included first, and we must define everything
+- * we need. The expectation is that glibc will check the
++ * we need. The expectation is that the libc will check the
+  * __UAPI_DEF_* defines and adjust appropriately. */
+ #define __UAPI_DEF_IN_ADDR		1
+ #define __UAPI_DEF_IN_IPPROTO		1
+@@ -127,7 +131,7 @@
+ #define __UAPI_DEF_IN_CLASS		1
+ 
+ #define __UAPI_DEF_IN6_ADDR		1
+-/* We unconditionally define the in6_addr macros and glibc must
++/* We unconditionally define the in6_addr macros and the libc must
+  * coordinate. */
+ #define __UAPI_DEF_IN6_ADDR_ALT		1
+ #define __UAPI_DEF_SOCKADDR_IN6		1
+@@ -168,7 +172,7 @@
+ /* If we did not see any headers from any supported C libraries,
+  * or we are being included in the kernel, then define everything
+  * that we need. */
+-#else /* !defined(__GLIBC__) */
++#else /* defined(__KERNEL__) */
+ 
+ /* Definitions for if.h */
+ #define __UAPI_DEF_IF_IFCONF 1
+@@ -208,6 +212,6 @@
+ /* Definitions for xattr.h */
+ #define __UAPI_DEF_XATTR		1
+ 
+-#endif /* __GLIBC__ */
++#endif /* __KERNEL__ */
+ 
+ #endif /* _UAPI_LIBC_COMPAT_H */
diff --git a/package/network/utils/iproute2/patches/272-uapi-if_ether.h-prevent-redefinition-of-struct-ethhd.patch b/package/network/utils/iproute2/patches/272-uapi-if_ether.h-prevent-redefinition-of-struct-ethhd.patch
new file mode 100644
index 0000000000..7971abdb48
--- /dev/null
+++ b/package/network/utils/iproute2/patches/272-uapi-if_ether.h-prevent-redefinition-of-struct-ethhd.patch
@@ -0,0 +1,67 @@ 
+From fcbb6fed85ea9ff4feb4f1ebd4f0f235fdaf06b6 Mon Sep 17 00:00:00 2001
+From: David Heidelberger <david.heidelberger@ixit.cz>
+Date: Mon, 29 Jun 2015 16:53:03 +0200
+Subject: [PATCH 3/3] uapi/if_ether.h: prevent redefinition of struct ethhdr
+
+Musl provides its own ethhdr struct definition. Add a guard to prevent
+its definition of the appropriate musl header has already been included.
+
+Signed-off-by: John Spencer <maillist-linux@barfooze.de>
+Tested-by: David Heidelberger <david.heidelberger@ixit.cz>
+Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+---
+ include/uapi/linux/if_ether.h    |  3 +++
+ include/uapi/linux/libc-compat.h | 11 +++++++++++
+ 2 files changed, 14 insertions(+)
+
+--- a/include/linux/if_ether.h
++++ b/include/linux/if_ether.h
+@@ -22,6 +22,7 @@
+ #define _UAPI_LINUX_IF_ETHER_H
+ 
+ #include <linux/types.h>
++#include <linux/libc-compat.h>
+ 
+ /*
+  *	IEEE 802.3 Ethernet magic constants.  The frame sizes omit the preamble
+@@ -138,11 +139,13 @@
+  *	This is an Ethernet frame header.
+  */
+ 
++#if __UAPI_DEF_ETHHDR
+ struct ethhdr {
+ 	unsigned char	h_dest[ETH_ALEN];	/* destination eth addr	*/
+ 	unsigned char	h_source[ETH_ALEN];	/* source ether addr	*/
+ 	__be16		h_proto;		/* packet type ID field	*/
+ } __attribute__((packed));
++#endif
+ 
+ 
+ #endif /* _UAPI_LINUX_IF_ETHER_H */
+--- a/include/linux/libc-compat.h
++++ b/include/linux/libc-compat.h
+@@ -89,6 +89,14 @@
+ 
+ #endif /* _NET_IF_H */
+ 
++/* musl defines the ethhdr struct itself in its netinet/if_ether.h.
++ * Glibc just includes the kernel header and uses a different guard. */
++#if defined(_NETINET_IF_ETHER_H)
++#define __UAPI_DEF_ETHHDR		0
++#else
++#define __UAPI_DEF_ETHHDR		1
++#endif
++
+ /* Coordinate with libc netinet/in.h header. */
+ #if defined(_NETINET_IN_H)
+ 
+@@ -184,6 +192,9 @@
+ /* For the future if glibc adds IFF_LOWER_UP, IFF_DORMANT and IFF_ECHO */
+ #define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO 1
+ 
++/* Definitions for if_ether.h */
++#define __UAPI_DEF_ETHHDR 		1
++
+ /* Definitions for in.h */
+ #define __UAPI_DEF_IN_ADDR		1
+ #define __UAPI_DEF_IN_IPPROTO		1
diff --git a/package/network/utils/iproute2/patches/300-ip_tiny.patch b/package/network/utils/iproute2/patches/300-ip_tiny.patch
index 290adbe5f5..3edeeb0d05 100644
--- a/package/network/utils/iproute2/patches/300-ip_tiny.patch
+++ b/package/network/utils/iproute2/patches/300-ip_tiny.patch
@@ -1,6 +1,6 @@ 
 --- a/ip/Makefile
 +++ b/ip/Makefile
-@@ -17,6 +17,13 @@ ifeq ($(IP_CONFIG_SETNS),y)
+@@ -18,6 +18,13 @@ ifeq ($(IP_CONFIG_SETNS),y)
  	CFLAGS += -DHAVE_SETNS
  endif
  
@@ -14,7 +14,7 @@ 
  ALLOBJ=$(IPOBJ) $(RTMONOBJ)
  SCRIPTS=ifcfg rtpr routel routef
  TARGETS=ip rtmon
-@@ -44,7 +51,7 @@ else
+@@ -47,7 +54,7 @@ else
  
  ip: static-syms.o
  static-syms.o: static-syms.h
@@ -25,7 +25,7 @@ 
  		sed -n '/'$$s'[^ ]* =/{s:.* \([^ ]*'$$s'[^ ]*\) .*:extern char \1[] __attribute__((weak)); if (!strcmp(sym, "\1")) return \1;:;p}' $$files ; \
 --- a/ip/ip.c
 +++ b/ip/ip.c
-@@ -73,30 +73,42 @@ static const struct cmd {
+@@ -74,32 +74,44 @@ static const struct cmd {
  	int (*func)(int argc, char **argv);
  } cmds[] = {
  	{ "address",	do_ipaddr },
@@ -46,6 +46,8 @@ 
  	{ "l2tp",	do_ipl2tp },
  	{ "fou",	do_ipfou },
 +#endif
+ 	{ "ila",	do_ipila },
+ 	{ "macsec",	do_ipmacsec },
  	{ "tunnel",	do_iptunnel },
  	{ "tunl",	do_iptunnel },
 +#ifndef IPROUTE2_TINY
@@ -65,12 +67,12 @@ 
 +#ifndef IPROUTE2_TINY
  	{ "netconf",	do_ipnetconf },
 +#endif
+ 	{ "vrf",	do_ipvrf},
  	{ "help",	do_help },
  	{ 0 }
- };
 --- a/lib/utils.c
 +++ b/lib/utils.c
-@@ -710,6 +710,7 @@ const char *rt_addr_n2a(int af, int len,
+@@ -777,6 +777,7 @@ const char *rt_addr_n2a_r(int af, int le
  		return inet_ntop(af, addr, buf, buflen);
  	case AF_MPLS:
  		return mpls_ntop(af, addr, buf, buflen);
@@ -78,7 +80,7 @@ 
  	case AF_IPX:
  		return ipx_ntop(af, addr, buf, buflen);
  	case AF_DECnet:
-@@ -718,6 +719,7 @@ const char *rt_addr_n2a(int af, int len,
+@@ -786,6 +787,7 @@ const char *rt_addr_n2a_r(int af, int le
  		memcpy(dna.a_addr, addr, 2);
  		return dnet_ntop(af, &dna, buf, buflen);
  	}
diff --git a/package/network/utils/iproute2/patches/900-drop_FAILED_POLICY.patch b/package/network/utils/iproute2/patches/900-drop_FAILED_POLICY.patch
index ff2e0aa1ee..44f198f1bf 100644
--- a/package/network/utils/iproute2/patches/900-drop_FAILED_POLICY.patch
+++ b/package/network/utils/iproute2/patches/900-drop_FAILED_POLICY.patch
@@ -11,7 +11,7 @@  Subject: [PATCH] add support for dropping with FAILED_POLICY
 
 --- a/include/linux/fib_rules.h
 +++ b/include/linux/fib_rules.h
-@@ -64,6 +64,10 @@ enum {
+@@ -72,6 +72,10 @@ enum {
  	FR_ACT_BLACKHOLE,	/* Drop without notification */
  	FR_ACT_UNREACHABLE,	/* Drop with ENETUNREACH */
  	FR_ACT_PROHIBIT,	/* Drop with EACCES */
@@ -24,7 +24,7 @@  Subject: [PATCH] add support for dropping with FAILED_POLICY
  
 --- a/include/linux/rtnetlink.h
 +++ b/include/linux/rtnetlink.h
-@@ -210,6 +210,7 @@ enum {
+@@ -215,6 +215,7 @@ enum {
  	RTN_THROW,		/* Not in this table		*/
  	RTN_NAT,		/* Translate this address	*/
  	RTN_XRESOLVE,		/* Use external resolver	*/
diff --git a/package/network/utils/iproute2/patches/910-sanitize_headers_for_musl.patch b/package/network/utils/iproute2/patches/910-sanitize_headers_for_musl.patch
deleted file mode 100644
index ca1125d1d5..0000000000
--- a/package/network/utils/iproute2/patches/910-sanitize_headers_for_musl.patch
+++ /dev/null
@@ -1,10 +0,0 @@ 
---- a/include/linux/if_bridge.h
-+++ b/include/linux/if_bridge.h
-@@ -15,7 +15,6 @@
- 
- #include <linux/types.h>
- #include <linux/if_ether.h>
--#include <linux/in6.h>
- 
- #define SYSFS_BRIDGE_ATTR	"bridge"
- #define SYSFS_BRIDGE_FDB	"brforward"
diff --git a/package/network/utils/iproute2/patches/911-fix_in_h_include.patch b/package/network/utils/iproute2/patches/911-fix_in_h_include.patch
deleted file mode 100644
index 42a7b24bbb..0000000000
--- a/package/network/utils/iproute2/patches/911-fix_in_h_include.patch
+++ /dev/null
@@ -1,30 +0,0 @@ 
---- a/include/linux/in.h
-+++ b/include/linux/in.h
-@@ -15,6 +15,7 @@
-  *		as published by the Free Software Foundation; either version
-  *		2 of the License, or (at your option) any later version.
-  */
-+#ifndef _NETINET_IN_H
- #ifndef _LINUX_IN_H
- #define _LINUX_IN_H
- 
-@@ -297,3 +298,4 @@ struct sockaddr_in {
- 
- 
- #endif /* _LINUX_IN_H */
-+#endif /* _NETINET_IN_H */
---- a/include/linux/in6.h
-+++ b/include/linux/in6.h
-@@ -18,6 +18,7 @@
-  *      2 of the License, or (at your option) any later version.
-  */
- 
-+#ifndef _NETINET_IN_H
- #ifndef _LINUX_IN6_H
- #define _LINUX_IN6_H
- 
-@@ -291,3 +292,4 @@ struct in6_flowlabel_req {
-  * MRT6_MAX
-  */
- #endif /* _LINUX_IN6_H */
-+#endif /* _NETINET_IN_H */
diff --git a/package/network/utils/iproute2/patches/950-add-cake-to-tc.patch b/package/network/utils/iproute2/patches/950-add-cake-to-tc.patch
index 8da17112be..4269b748e6 100644
--- a/package/network/utils/iproute2/patches/950-add-cake-to-tc.patch
+++ b/package/network/utils/iproute2/patches/950-add-cake-to-tc.patch
@@ -1,8 +1,6 @@ 
-diff --git a/include/linux/pkt_sched.h b/include/linux/pkt_sched.h
-index 8d2530d..c55a9a8 100644
 --- a/include/linux/pkt_sched.h
 +++ b/include/linux/pkt_sched.h
-@@ -850,4 +850,60 @@ struct tc_pie_xstats {
+@@ -863,4 +863,60 @@ struct tc_pie_xstats {
  	__u32 maxq;             /* maximum queue size */
  	__u32 ecn_mark;         /* packets marked with ecn*/
  };
@@ -63,21 +61,16 @@  index 8d2530d..c55a9a8 100644
 +};
 +
  #endif
-diff --git a/tc/Makefile b/tc/Makefile
-index 56acbaa..d421b8e 100644
 --- a/tc/Makefile
 +++ b/tc/Makefile
-@@ -63,6 +63,7 @@ TCMODULES += q_codel.o
+@@ -65,6 +65,7 @@ TCMODULES += q_codel.o
  TCMODULES += q_fq_codel.o
  TCMODULES += q_fq.o
  TCMODULES += q_pie.o
 +TCMODULES += q_cake.o
  TCMODULES += q_hhf.o
+ TCMODULES += q_clsact.o
  TCMODULES += e_bpf.o
- 
-diff --git a/tc/q_cake.c b/tc/q_cake.c
-new file mode 100644
-index 0000000..acbe56c
 --- /dev/null
 +++ b/tc/q_cake.c
 @@ -0,0 +1,692 @@
diff --git a/package/network/utils/iproute2/patches/960-ipmonitor-fix-ip-monitor-can-t-work-when-NET_NS-is-n.patch b/package/network/utils/iproute2/patches/960-ipmonitor-fix-ip-monitor-can-t-work-when-NET_NS-is-n.patch
deleted file mode 100644
index 52be021e72..0000000000
--- a/package/network/utils/iproute2/patches/960-ipmonitor-fix-ip-monitor-can-t-work-when-NET_NS-is-n.patch
+++ /dev/null
@@ -1,40 +0,0 @@ 
-From c44003f7e7254ac972eaa1b22a686471ea4ce2d7 Mon Sep 17 00:00:00 2001
-From: Liping Zhang <liping.zhang@spreadtrum.com>
-Date: Tue, 20 Sep 2016 02:09:02 -0700
-Subject: [PATCH] ipmonitor: fix ip monitor can't work when NET_NS is not
- enabled
-
-In ip monitor, netns_map_init will check getnsid is supported or not.
-But when /proc/self/ns/net does not exist, we just print out error
-messages and exit. So user cannot use ip monitor anymore when
-CONFIG_NET_NS is disabled:
-  # ip monitor
-  open("/proc/self/ns/net"): No such file or directory
-
-If open "/proc/self/ns/net" failed, set have_rtnl_getnsid to false.
-
-Fixes: d652ccbf8195 ("netns: allow to dump and monitor nsid")
-Signed-off-by: Liping Zhang <liping.zhang@spreadtrum.com>
-Acked-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
----
- ip/ipnetns.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/ip/ipnetns.c b/ip/ipnetns.c
-index af87065..ccc652c 100644
---- a/ip/ipnetns.c
-+++ b/ip/ipnetns.c
-@@ -72,8 +72,8 @@ static int ipnetns_have_nsid(void)
- 	if (have_rtnl_getnsid < 0) {
- 		fd = open("/proc/self/ns/net", O_RDONLY);
- 		if (fd < 0) {
--			perror("open(\"/proc/self/ns/net\")");
--			exit(1);
-+			have_rtnl_getnsid = 0;
-+			return 0;
- 		}
- 
- 		addattr32(&req.n, 1024, NETNSA_FD, fd);
--- 
-2.6.4
-