[OpenWrt-Devel] iproute2: update to 4.17.0

Message ID 877en6mhp6.fsf@husum.klickitat.com
State Changes Requested
Delegated to: John Crispin
Headers show
Series
  • [OpenWrt-Devel] iproute2: update to 4.17.0
Related show

Commit Message

Russell Senior June 10, 2018, 9:53 p.m.
Signed-off-by: Russell Senior <russell@personaltelco.net>
---
 package/network/utils/iproute2/Makefile       |   6 +-
 ...int-fix-hidden-64-bit-type-promotion.patch | 288 ------------------
 .../utils/iproute2/patches/008-no_netem.patch |   4 +-
 .../iproute2/patches/110-extra-ccopts.patch   |   2 +-
 .../iproute2/patches/120-libnetlink-pic.patch |   2 +-
 .../utils/iproute2/patches/300-ip_tiny.patch  |   8 +-
 .../iproute2/patches/950-add-cake-to-tc.patch |  11 -
 7 files changed, 11 insertions(+), 310 deletions(-)
 delete mode 100644 package/network/utils/iproute2/patches/002-json_print-fix-hidden-64-bit-type-promotion.patch

Comments

Hans Dedecker June 11, 2018, 7:16 a.m. | #1
Hi,

On Sun, Jun 10, 2018 at 11:54 PM Russell Senior
<russell@personaltelco.net> wrote:
>
>
> Signed-off-by: Russell Senior <russell@personaltelco.net>
> ---
I get the following compile issues if the rdma utility is enabled :

   CC       rdma.o
In file included from
/home/dedeckeh/arm_virt_staging/staging_dir/toolchain-arm_cortex-a15+neon-vfpv4_gcc-7.3.0_musl_eabi/include/resolv.h:6:0,
                 from ../include/utils.h:7,
                 from rdma.h:25,
                 from rdma.c:12:
/home/dedeckeh/arm_virt_staging/staging_dir/toolchain-arm_cortex-a15+neon-vfpv4_gcc-7.3.0_musl_eabi/include/netinet/in.h:23:8:
error: redefinition of 'struct in6_addr'
 struct in6_addr {
        ^~~~~~~~
In file included from ./include/uapi/rdma/rdma_user_cm.h:39:0,
                 from rdma.h:20,
                 from rdma.c:12:
../include/uapi/linux/in6.h:33:8: note: originally defined here
 struct in6_addr {
        ^~~~~~~~
In file included from
/home/dedeckeh/arm_virt_staging/staging_dir/toolchain-arm_cortex-a15+neon-vfpv4_gcc-7.3.0_musl_eabi/include/resolv.h:6:0,
                 from ../include/utils.h:7,
                 from rdma.h:25,
                 from rdma.c:12:
/home/dedeckeh/arm_virt_staging/staging_dir/toolchain-arm_cortex-a15+neon-vfpv4_gcc-7.3.0_musl_eabi/include/netinet/in.h:34:8:
error: redefinition of 'struct sockaddr_in6'
 struct sockaddr_in6 {
        ^~~~~~~~~~~~
In file included from ./include/uapi/rdma/rdma_user_cm.h:39:0,
                 from rdma.h:20,
                 from rdma.c:12:
../include/uapi/linux/in6.h:50:8: note: originally defined here
 struct sockaddr_in6 {
        ^~~~~~~~~~~~
In file included from
/home/dedeckeh/arm_virt_staging/staging_dir/toolchain-arm_cortex-a15+neon-vfpv4_gcc-7.3.0_musl_eabi/include/resolv.h:6:0,
                 from ../include/utils.h:7,
                 from rdma.h:25,
                 from rdma.c:12:
/home/dedeckeh/arm_virt_staging/staging_dir/toolchain-arm_cortex-a15+neon-vfpv4_gcc-7.3.0_musl_eabi/include/netinet/in.h:42:8:
error: redefinition of 'struct ipv6_mreq'
 struct ipv6_mreq {
        ^~~~~~~~~
In file included from ./include/uapi/rdma/rdma_user_cm.h:39:0,
                 from rdma.h:20,
                 from rdma.c:12:
../include/uapi/linux/in6.h:60:8: note: originally defined here
 struct ipv6_mreq {
        ^~~~~~~~~
make[4]: *** [../config.mk:33: rdma.o] Error 1
make[3]: *** [Makefile:70: all] Error 2

>  package/network/utils/iproute2/Makefile       |   6 +-
>  ...int-fix-hidden-64-bit-type-promotion.patch | 288 ------------------
>  .../utils/iproute2/patches/008-no_netem.patch |   4 +-
>  .../iproute2/patches/110-extra-ccopts.patch   |   2 +-
>  .../iproute2/patches/120-libnetlink-pic.patch |   2 +-
>  .../utils/iproute2/patches/300-ip_tiny.patch  |   8 +-
>  .../iproute2/patches/950-add-cake-to-tc.patch |  11 -
>  7 files changed, 11 insertions(+), 310 deletions(-)
>  delete mode 100644 package/network/utils/iproute2/patches/002-json_print-fix-hidden-64-bit-type-promotion.patch
>
> diff --git a/package/network/utils/iproute2/Makefile b/package/network/utils/iproute2/Makefile
> index 88a4851748..c5e9c5a66e 100644
> --- a/package/network/utils/iproute2/Makefile
> +++ b/package/network/utils/iproute2/Makefile
> @@ -8,12 +8,12 @@
>  include $(TOPDIR)/rules.mk
>
>  PKG_NAME:=iproute2
> -PKG_VERSION:=4.16.0
> -PKG_RELEASE:=3
> +PKG_VERSION:=4.17.0
> +PKG_RELEASE:=1
>
>  PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
>  PKG_SOURCE_URL:=@KERNEL/linux/utils/net/iproute2
> -PKG_HASH:=0c5c24020fd7349fe25728c5edee9fb6a1bc8a38f08e23be5c57a6301e55ee0a
> +PKG_HASH:=6fa991b092315887775b9e47dc6a89af7ae09dd3ad4ccff754d055c566b4be6e
>  PKG_BUILD_PARALLEL:=1
>  PKG_BUILD_DEPENDS:=iptables
>  PKG_LICENSE:=GPL-2.0
> diff --git a/package/network/utils/iproute2/patches/002-json_print-fix-hidden-64-bit-type-promotion.patch b/package/network/utils/iproute2/patches/002-json_print-fix-hidden-64-bit-type-promotion.patch
> deleted file mode 100644
> index ad93973215..0000000000
> --- a/package/network/utils/iproute2/patches/002-json_print-fix-hidden-64-bit-type-promotion.patch
> +++ /dev/null
> @@ -1,288 +0,0 @@
> -From 8de9593bb9dc05cb1be593a237682e8707e41aa9 Mon Sep 17 00:00:00 2001
> -From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= <toke@toke.dk>
> -Date: Wed, 25 Apr 2018 16:19:35 +0200
> -Subject: [PATCH] json_print: Fix hidden 64-bit type promotion
> -MIME-Version: 1.0
> -Content-Type: text/plain; charset=UTF-8
> -Content-Transfer-Encoding: 8bit
> -
> -print_uint() will silently promote its variable type to uint64_t, but there
> -is nothing that ensures that the format string specifier passed along with
> -it fits (and the function name suggest to pass "%u").
> -
> -Fix this by changing print_uint() to use a native 'unsigned int' type, and
> -introduce a separate print_u64() function for printing 64-bit values. All
> -call sites that were actually printing 64-bit values using print_uint() are
> -converted to use print_u64() instead.
> -
> -Since print_int() was already using native int types, just add a
> -print_s64() to match, but don't convert any call sites.
> -
> -Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk>
> -Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
> ----
> - include/json_print.h  |  4 +++-
> - include/json_writer.h | 12 ++++++----
> - ip/ipaddress.c        | 62 +++++++++++++++++++++++++--------------------------
> - ip/ipmacsec.c         |  8 +++----
> - ip/ipmroute.c         |  6 ++---
> - lib/json_print.c      |  4 +++-
> - lib/json_writer.c     | 30 +++++++++++++++++++++----
> - 7 files changed, 78 insertions(+), 48 deletions(-)
> -
> ---- a/include/json_print.h
> -+++ b/include/json_print.h
> -@@ -56,10 +56,12 @@ void close_json_array(enum output_type t
> -               print_color_##type_name(t, COLOR_NONE, key, fmt, value);        \
> -       }
> - _PRINT_FUNC(int, int);
> -+_PRINT_FUNC(s64, int64_t);
> - _PRINT_FUNC(bool, bool);
> - _PRINT_FUNC(null, const char*);
> - _PRINT_FUNC(string, const char*);
> --_PRINT_FUNC(uint, uint64_t);
> -+_PRINT_FUNC(uint, unsigned int);
> -+_PRINT_FUNC(u64, uint64_t);
> - _PRINT_FUNC(hu, unsigned short);
> - _PRINT_FUNC(hex, unsigned int);
> - _PRINT_FUNC(0xhex, unsigned int);
> ---- a/include/json_writer.h
> -+++ b/include/json_writer.h
> -@@ -34,9 +34,11 @@ void jsonw_string(json_writer_t *self, c
> - void jsonw_bool(json_writer_t *self, bool value);
> - void jsonw_float(json_writer_t *self, double number);
> - void jsonw_float_fmt(json_writer_t *self, const char *fmt, double num);
> --void jsonw_uint(json_writer_t *self, uint64_t number);
> -+void jsonw_uint(json_writer_t *self, unsigned int number);
> -+void jsonw_u64(json_writer_t *self, uint64_t number);
> - void jsonw_hu(json_writer_t *self, unsigned short number);
> --void jsonw_int(json_writer_t *self, int64_t number);
> -+void jsonw_int(json_writer_t *self, int number);
> -+void jsonw_s64(json_writer_t *self, int64_t number);
> - void jsonw_null(json_writer_t *self);
> - void jsonw_lluint(json_writer_t *self, unsigned long long int num);
> -
> -@@ -44,9 +46,11 @@ void jsonw_lluint(json_writer_t *self, u
> - void jsonw_string_field(json_writer_t *self, const char *prop, const char *val);
> - void jsonw_bool_field(json_writer_t *self, const char *prop, bool value);
> - void jsonw_float_field(json_writer_t *self, const char *prop, double num);
> --void jsonw_uint_field(json_writer_t *self, const char *prop, uint64_t num);
> -+void jsonw_uint_field(json_writer_t *self, const char *prop, unsigned int num);
> -+void jsonw_u64_field(json_writer_t *self, const char *prop, uint64_t num);
> - void jsonw_hu_field(json_writer_t *self, const char *prop, unsigned short num);
> --void jsonw_int_field(json_writer_t *self, const char *prop, int64_t num);
> -+void jsonw_int_field(json_writer_t *self, const char *prop, int num);
> -+void jsonw_s64_field(json_writer_t *self, const char *prop, int64_t num);
> - void jsonw_null_field(json_writer_t *self, const char *prop);
> - void jsonw_lluint_field(json_writer_t *self, const char *prop,
> -                       unsigned long long int num);
> ---- a/ip/ipaddress.c
> -+++ b/ip/ipaddress.c
> -@@ -555,21 +555,21 @@ static void print_vf_stats64(FILE *fp, s
> -
> -               /* RX stats */
> -               open_json_object("rx");
> --              print_uint(PRINT_JSON, "bytes", NULL,
> -+              print_u64(PRINT_JSON, "bytes", NULL,
> -                          rta_getattr_u64(vf[IFLA_VF_STATS_RX_BYTES]));
> --              print_uint(PRINT_JSON, "packets", NULL,
> -+              print_u64(PRINT_JSON, "packets", NULL,
> -                          rta_getattr_u64(vf[IFLA_VF_STATS_RX_PACKETS]));
> --              print_uint(PRINT_JSON, "multicast", NULL,
> -+              print_u64(PRINT_JSON, "multicast", NULL,
> -                          rta_getattr_u64(vf[IFLA_VF_STATS_MULTICAST]));
> --              print_uint(PRINT_JSON, "broadcast", NULL,
> -+              print_u64(PRINT_JSON, "broadcast", NULL,
> -                          rta_getattr_u64(vf[IFLA_VF_STATS_BROADCAST]));
> -               close_json_object();
> -
> -               /* TX stats */
> -               open_json_object("tx");
> --              print_uint(PRINT_JSON, "tx_bytes", NULL,
> -+              print_u64(PRINT_JSON, "tx_bytes", NULL,
> -                          rta_getattr_u64(vf[IFLA_VF_STATS_TX_BYTES]));
> --              print_uint(PRINT_JSON, "tx_packets", NULL,
> -+              print_u64(PRINT_JSON, "tx_packets", NULL,
> -                          rta_getattr_u64(vf[IFLA_VF_STATS_TX_PACKETS]));
> -               close_json_object();
> -               close_json_object();
> -@@ -602,50 +602,50 @@ static void print_link_stats64(FILE *fp,
> -
> -               /* RX stats */
> -               open_json_object("rx");
> --              print_uint(PRINT_JSON, "bytes", NULL, s->rx_bytes);
> --              print_uint(PRINT_JSON, "packets", NULL, s->rx_packets);
> --              print_uint(PRINT_JSON, "errors", NULL, s->rx_errors);
> --              print_uint(PRINT_JSON, "dropped", NULL, s->rx_dropped);
> --              print_uint(PRINT_JSON, "over_errors", NULL, s->rx_over_errors);
> --              print_uint(PRINT_JSON, "multicast", NULL, s->multicast);
> -+              print_u64(PRINT_JSON, "bytes", NULL, s->rx_bytes);
> -+              print_u64(PRINT_JSON, "packets", NULL, s->rx_packets);
> -+              print_u64(PRINT_JSON, "errors", NULL, s->rx_errors);
> -+              print_u64(PRINT_JSON, "dropped", NULL, s->rx_dropped);
> -+              print_u64(PRINT_JSON, "over_errors", NULL, s->rx_over_errors);
> -+              print_u64(PRINT_JSON, "multicast", NULL, s->multicast);
> -               if (s->rx_compressed)
> --                      print_uint(PRINT_JSON,
> -+                      print_u64(PRINT_JSON,
> -                                  "compressed",
> -                                  NULL, s->rx_compressed);
> -
> -               /* RX error stats */
> -               if (show_stats > 1) {
> --                      print_uint(PRINT_JSON,
> -+                      print_u64(PRINT_JSON,
> -                                  "length_errors",
> -                                  NULL, s->rx_length_errors);
> --                      print_uint(PRINT_JSON,
> -+                      print_u64(PRINT_JSON,
> -                                  "crc_errors",
> -                                  NULL, s->rx_crc_errors);
> --                      print_uint(PRINT_JSON,
> -+                      print_u64(PRINT_JSON,
> -                                  "frame_errors",
> -                                  NULL, s->rx_frame_errors);
> --                      print_uint(PRINT_JSON,
> -+                      print_u64(PRINT_JSON,
> -                                  "fifo_errors",
> -                                  NULL, s->rx_fifo_errors);
> --                      print_uint(PRINT_JSON,
> -+                      print_u64(PRINT_JSON,
> -                                  "missed_errors",
> -                                  NULL, s->rx_missed_errors);
> -                       if (s->rx_nohandler)
> --                              print_uint(PRINT_JSON,
> -+                              print_u64(PRINT_JSON,
> -                                          "nohandler", NULL, s->rx_nohandler);
> -               }
> -               close_json_object();
> -
> -               /* TX stats */
> -               open_json_object("tx");
> --              print_uint(PRINT_JSON, "bytes", NULL, s->tx_bytes);
> --              print_uint(PRINT_JSON, "packets", NULL, s->tx_packets);
> --              print_uint(PRINT_JSON, "errors", NULL, s->tx_errors);
> --              print_uint(PRINT_JSON, "dropped", NULL, s->tx_dropped);
> --              print_uint(PRINT_JSON,
> -+              print_u64(PRINT_JSON, "bytes", NULL, s->tx_bytes);
> -+              print_u64(PRINT_JSON, "packets", NULL, s->tx_packets);
> -+              print_u64(PRINT_JSON, "errors", NULL, s->tx_errors);
> -+              print_u64(PRINT_JSON, "dropped", NULL, s->tx_dropped);
> -+              print_u64(PRINT_JSON,
> -                          "carrier_errors",
> -                          NULL, s->tx_carrier_errors);
> --              print_uint(PRINT_JSON, "collisions", NULL, s->collisions);
> -+              print_u64(PRINT_JSON, "collisions", NULL, s->collisions);
> -               if (s->tx_compressed)
> -                       print_uint(PRINT_JSON,
> -                                  "compressed",
> -@@ -653,20 +653,20 @@ static void print_link_stats64(FILE *fp,
> -
> -               /* TX error stats */
> -               if (show_stats > 1) {
> --                      print_uint(PRINT_JSON,
> -+                      print_u64(PRINT_JSON,
> -                                  "aborted_errors",
> -                                  NULL, s->tx_aborted_errors);
> --                      print_uint(PRINT_JSON,
> -+                      print_u64(PRINT_JSON,
> -                                  "fifo_errors",
> -                                  NULL, s->tx_fifo_errors);
> --                      print_uint(PRINT_JSON,
> -+                      print_u64(PRINT_JSON,
> -                                  "window_errors",
> -                                  NULL, s->tx_window_errors);
> --                      print_uint(PRINT_JSON,
> -+                      print_u64(PRINT_JSON,
> -                                  "heartbeat_errors",
> -                                  NULL, s->tx_heartbeat_errors);
> -                       if (carrier_changes)
> --                              print_uint(PRINT_JSON, "carrier_changes", NULL,
> -+                              print_u64(PRINT_JSON, "carrier_changes", NULL,
> -                                          rta_getattr_u32(carrier_changes));
> -               }
> -               close_json_object();
> ---- a/lib/json_print.c
> -+++ b/lib/json_print.c
> -@@ -117,8 +117,10 @@ void close_json_array(enum output_type t
> -               }                                                       \
> -       }
> - _PRINT_FUNC(int, int);
> -+_PRINT_FUNC(s64, int64_t);
> - _PRINT_FUNC(hu, unsigned short);
> --_PRINT_FUNC(uint, uint64_t);
> -+_PRINT_FUNC(uint, unsigned int);
> -+_PRINT_FUNC(u64, uint64_t);
> - _PRINT_FUNC(lluint, unsigned long long int);
> - _PRINT_FUNC(float, double);
> - #undef _PRINT_FUNC
> ---- a/lib/json_writer.c
> -+++ b/lib/json_writer.c
> -@@ -215,7 +215,12 @@ void jsonw_hu(json_writer_t *self, unsig
> -       jsonw_printf(self, "%hu", num);
> - }
> -
> --void jsonw_uint(json_writer_t *self, uint64_t num)
> -+void jsonw_uint(json_writer_t *self, unsigned int num)
> -+{
> -+      jsonw_printf(self, "%u", num);
> -+}
> -+
> -+void jsonw_u64(json_writer_t *self, uint64_t num)
> - {
> -       jsonw_printf(self, "%"PRIu64, num);
> - }
> -@@ -225,7 +230,12 @@ void jsonw_lluint(json_writer_t *self, u
> -       jsonw_printf(self, "%llu", num);
> - }
> -
> --void jsonw_int(json_writer_t *self, int64_t num)
> -+void jsonw_int(json_writer_t *self, int num)
> -+{
> -+      jsonw_printf(self, "%d", num);
> -+}
> -+
> -+void jsonw_s64(json_writer_t *self, int64_t num)
> - {
> -       jsonw_printf(self, "%"PRId64, num);
> - }
> -@@ -258,12 +268,18 @@ void jsonw_float_field_fmt(json_writer_t
> -       jsonw_float_fmt(self, fmt, val);
> - }
> -
> --void jsonw_uint_field(json_writer_t *self, const char *prop, uint64_t num)
> -+void jsonw_uint_field(json_writer_t *self, const char *prop, unsigned int num)
> - {
> -       jsonw_name(self, prop);
> -       jsonw_uint(self, num);
> - }
> -
> -+void jsonw_u64_field(json_writer_t *self, const char *prop, uint64_t num)
> -+{
> -+      jsonw_name(self, prop);
> -+      jsonw_u64(self, num);
> -+}
> -+
> - void jsonw_hu_field(json_writer_t *self, const char *prop, unsigned short num)
> - {
> -       jsonw_name(self, prop);
> -@@ -278,12 +294,18 @@ void jsonw_lluint_field(json_writer_t *s
> -       jsonw_lluint(self, num);
> - }
> -
> --void jsonw_int_field(json_writer_t *self, const char *prop, int64_t num)
> -+void jsonw_int_field(json_writer_t *self, const char *prop, int num)
> - {
> -       jsonw_name(self, prop);
> -       jsonw_int(self, num);
> - }
> -
> -+void jsonw_s64_field(json_writer_t *self, const char *prop, int64_t num)
> -+{
> -+      jsonw_name(self, prop);
> -+      jsonw_s64(self, num);
> -+}
> -+
> - void jsonw_null_field(json_writer_t *self, const char *prop)
> - {
> -       jsonw_name(self, prop);
> diff --git a/package/network/utils/iproute2/patches/008-no_netem.patch b/package/network/utils/iproute2/patches/008-no_netem.patch
> index 15a60e794c..58062655c9 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
> -@@ -57,7 +57,7 @@ WFLAGS += -Wmissing-declarations -Wold-s
> +@@ -61,7 +61,7 @@ WFLAGS += -Wmissing-declarations -Wold-s
>   CFLAGS := $(WFLAGS) $(CCOPTS) -I../include -I../include/uapi $(DEFINES) $(CFLAGS)
>   YACCFLAGS = -d -t -v
>
>  -SUBDIRS=lib ip tc bridge misc netem genl tipc devlink rdma man
>  +SUBDIRS=lib ip tc bridge misc genl tipc devlink rdma man
>
> - LIBNETLINK=../lib/libnetlink.a ../lib/libutil.a
> + LIBNETLINK=../lib/libutil.a ../lib/libnetlink.a
>   LDLIBS += $(LIBNETLINK)
> diff --git a/package/network/utils/iproute2/patches/110-extra-ccopts.patch b/package/network/utils/iproute2/patches/110-extra-ccopts.patch
> index a083b7c045..d036ba703c 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
> -@@ -50,7 +50,7 @@ HOSTCC ?= $(CC)
> +@@ -54,7 +54,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/120-libnetlink-pic.patch b/package/network/utils/iproute2/patches/120-libnetlink-pic.patch
> index 889bca28be..aad87a1e4f 100644
> --- a/package/network/utils/iproute2/patches/120-libnetlink-pic.patch
> +++ b/package/network/utils/iproute2/patches/120-libnetlink-pic.patch
> @@ -7,5 +7,5 @@
>  -CFLAGS += -fPIC
>  +CFLAGS += $(FPIC)
>
> - UTILOBJ = utils.o rt_names.o ll_types.o ll_proto.o ll_addr.o \
> + UTILOBJ = utils.o rt_names.o ll_map.o ll_types.o ll_proto.o ll_addr.o \
>         inet_proto.o namespace.o json_writer.o json_print.o \
> diff --git a/package/network/utils/iproute2/patches/300-ip_tiny.patch b/package/network/utils/iproute2/patches/300-ip_tiny.patch
> index d8f39d3910..5c8af0b0f1 100644
> --- a/package/network/utils/iproute2/patches/300-ip_tiny.patch
> +++ b/package/network/utils/iproute2/patches/300-ip_tiny.patch
> @@ -40,7 +40,7 @@
>  +"                   vrf | sr }\n"
>  +#endif
>   "       OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |\n"
> - "                    -h[uman-readable] | -iec |\n"
> + "                    -h[uman-readable] | -iec | -j[son] | -p[retty] |\n"
>   "                    -f[amily] { inet | inet6 | ipx | dnet | mpls | bridge | link } |\n"
>  @@ -73,32 +79,44 @@ static const struct cmd {
>         int (*func)(int argc, char **argv);
> @@ -89,7 +89,7 @@
>         { "help",       do_help },
>  --- a/lib/utils.c
>  +++ b/lib/utils.c
> -@@ -983,6 +983,7 @@ const char *rt_addr_n2a_r(int af, int le
> +@@ -1010,6 +1010,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);
> @@ -97,7 +97,7 @@
>         case AF_IPX:
>                 return ipx_ntop(af, addr, buf, buflen);
>         case AF_DECnet:
> -@@ -992,6 +993,7 @@ const char *rt_addr_n2a_r(int af, int le
> +@@ -1019,6 +1020,7 @@ const char *rt_addr_n2a_r(int af, int le
>                 memcpy(dna.a_addr, addr, 2);
>                 return dnet_ntop(af, &dna, buf, buflen);
>         }
> @@ -115,6 +115,6 @@
>  +  CFLAGS += -DIPROUTE2_TINY
>  +endif
>  +
> - UTILOBJ = utils.o rt_names.o ll_types.o ll_proto.o ll_addr.o \
> + UTILOBJ = utils.o rt_names.o ll_map.o ll_types.o ll_proto.o ll_addr.o \
>         inet_proto.o namespace.o json_writer.o json_print.o \
>         names.o color.o bpf.o exec.o fs.o
> 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 3c2cdaaac3..3d9768ce24 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
> @@ -1508,14 +1508,3 @@
>  +      .print_qopt     = cake_print_opt,
>  +      .print_xstats   = cake_print_xstats,
>  +};
> ---- a/tc/q_ingress.c
> -+++ b/tc/q_ingress.c
> -@@ -40,7 +40,7 @@ static int ingress_parse_opt(struct qdis
> - static int ingress_print_opt(struct qdisc_util *qu, FILE *f,
> -                            struct rtattr *opt)
> - {
> --      fprintf(f, "---------------- ");
> -+      print_string(PRINT_FP, NULL, "---------------- ", NULL);
> -       return 0;
> - }
> -
> --
> 2.17.1
>
>
>
> --
> Russell Senior, President
> russell@personaltelco.net
>
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/listinfo/openwrt-devel
Russell Senior June 13, 2018, 7 a.m. | #2
>>>>> Hans Dedecker <dedeckeh@gmail.com> writes:

> Hi, On Sun, Jun 10, 2018 at 11:54 PM Russell Senior
> <russell@personaltelco.net> wrote:
>> 
>> 
>> Signed-off-by: Russell Senior <russell@personaltelco.net> ---
> I get the following compile issues if the rdma utility is enabled :

I wonder if rdma is actually useful in openwrt.  As far as I can tell
it's related to infiniband interfaces, which would seem to be rare in
openwrt-supported devices.

Comments?
Alberto Bursi June 13, 2018, 7:56 a.m. | #3
On 13/06/2018 09:00, Russell Senior wrote:
>>>>>> Hans Dedecker <dedeckeh@gmail.com> writes:
>> Hi, On Sun, Jun 10, 2018 at 11:54 PM Russell Senior
>> <russell@personaltelco.net> wrote:
>>>
>>> Signed-off-by: Russell Senior <russell@personaltelco.net> ---
>> I get the following compile issues if the rdma utility is enabled :
> I wonder if rdma is actually useful in openwrt.  As far as I can tell
> it's related to infiniband interfaces, which would seem to be rare in
> openwrt-supported devices.
>
> Comments?
>

OpenWrt supports x86_64 PC/server hardware too, there you just need to 
add a pcie card.

I don't know how many people do use that, though, it still caters to a 
specific use-case.

-Alberto

Patch

diff --git a/package/network/utils/iproute2/Makefile b/package/network/utils/iproute2/Makefile
index 88a4851748..c5e9c5a66e 100644
--- a/package/network/utils/iproute2/Makefile
+++ b/package/network/utils/iproute2/Makefile
@@ -8,12 +8,12 @@ 
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=iproute2
-PKG_VERSION:=4.16.0
-PKG_RELEASE:=3
+PKG_VERSION:=4.17.0
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=@KERNEL/linux/utils/net/iproute2
-PKG_HASH:=0c5c24020fd7349fe25728c5edee9fb6a1bc8a38f08e23be5c57a6301e55ee0a
+PKG_HASH:=6fa991b092315887775b9e47dc6a89af7ae09dd3ad4ccff754d055c566b4be6e
 PKG_BUILD_PARALLEL:=1
 PKG_BUILD_DEPENDS:=iptables
 PKG_LICENSE:=GPL-2.0
diff --git a/package/network/utils/iproute2/patches/002-json_print-fix-hidden-64-bit-type-promotion.patch b/package/network/utils/iproute2/patches/002-json_print-fix-hidden-64-bit-type-promotion.patch
deleted file mode 100644
index ad93973215..0000000000
--- a/package/network/utils/iproute2/patches/002-json_print-fix-hidden-64-bit-type-promotion.patch
+++ /dev/null
@@ -1,288 +0,0 @@ 
-From 8de9593bb9dc05cb1be593a237682e8707e41aa9 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= <toke@toke.dk>
-Date: Wed, 25 Apr 2018 16:19:35 +0200
-Subject: [PATCH] json_print: Fix hidden 64-bit type promotion
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-print_uint() will silently promote its variable type to uint64_t, but there
-is nothing that ensures that the format string specifier passed along with
-it fits (and the function name suggest to pass "%u").
-
-Fix this by changing print_uint() to use a native 'unsigned int' type, and
-introduce a separate print_u64() function for printing 64-bit values. All
-call sites that were actually printing 64-bit values using print_uint() are
-converted to use print_u64() instead.
-
-Since print_int() was already using native int types, just add a
-print_s64() to match, but don't convert any call sites.
-
-Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk>
-Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
----
- include/json_print.h  |  4 +++-
- include/json_writer.h | 12 ++++++----
- ip/ipaddress.c        | 62 +++++++++++++++++++++++++--------------------------
- ip/ipmacsec.c         |  8 +++----
- ip/ipmroute.c         |  6 ++---
- lib/json_print.c      |  4 +++-
- lib/json_writer.c     | 30 +++++++++++++++++++++----
- 7 files changed, 78 insertions(+), 48 deletions(-)
-
---- a/include/json_print.h
-+++ b/include/json_print.h
-@@ -56,10 +56,12 @@ void close_json_array(enum output_type t
- 		print_color_##type_name(t, COLOR_NONE, key, fmt, value);	\
- 	}
- _PRINT_FUNC(int, int);
-+_PRINT_FUNC(s64, int64_t);
- _PRINT_FUNC(bool, bool);
- _PRINT_FUNC(null, const char*);
- _PRINT_FUNC(string, const char*);
--_PRINT_FUNC(uint, uint64_t);
-+_PRINT_FUNC(uint, unsigned int);
-+_PRINT_FUNC(u64, uint64_t);
- _PRINT_FUNC(hu, unsigned short);
- _PRINT_FUNC(hex, unsigned int);
- _PRINT_FUNC(0xhex, unsigned int);
---- a/include/json_writer.h
-+++ b/include/json_writer.h
-@@ -34,9 +34,11 @@ void jsonw_string(json_writer_t *self, c
- void jsonw_bool(json_writer_t *self, bool value);
- void jsonw_float(json_writer_t *self, double number);
- void jsonw_float_fmt(json_writer_t *self, const char *fmt, double num);
--void jsonw_uint(json_writer_t *self, uint64_t number);
-+void jsonw_uint(json_writer_t *self, unsigned int number);
-+void jsonw_u64(json_writer_t *self, uint64_t number);
- void jsonw_hu(json_writer_t *self, unsigned short number);
--void jsonw_int(json_writer_t *self, int64_t number);
-+void jsonw_int(json_writer_t *self, int number);
-+void jsonw_s64(json_writer_t *self, int64_t number);
- void jsonw_null(json_writer_t *self);
- void jsonw_lluint(json_writer_t *self, unsigned long long int num);
- 
-@@ -44,9 +46,11 @@ void jsonw_lluint(json_writer_t *self, u
- void jsonw_string_field(json_writer_t *self, const char *prop, const char *val);
- void jsonw_bool_field(json_writer_t *self, const char *prop, bool value);
- void jsonw_float_field(json_writer_t *self, const char *prop, double num);
--void jsonw_uint_field(json_writer_t *self, const char *prop, uint64_t num);
-+void jsonw_uint_field(json_writer_t *self, const char *prop, unsigned int num);
-+void jsonw_u64_field(json_writer_t *self, const char *prop, uint64_t num);
- void jsonw_hu_field(json_writer_t *self, const char *prop, unsigned short num);
--void jsonw_int_field(json_writer_t *self, const char *prop, int64_t num);
-+void jsonw_int_field(json_writer_t *self, const char *prop, int num);
-+void jsonw_s64_field(json_writer_t *self, const char *prop, int64_t num);
- void jsonw_null_field(json_writer_t *self, const char *prop);
- void jsonw_lluint_field(json_writer_t *self, const char *prop,
- 			unsigned long long int num);
---- a/ip/ipaddress.c
-+++ b/ip/ipaddress.c
-@@ -555,21 +555,21 @@ static void print_vf_stats64(FILE *fp, s
- 
- 		/* RX stats */
- 		open_json_object("rx");
--		print_uint(PRINT_JSON, "bytes", NULL,
-+		print_u64(PRINT_JSON, "bytes", NULL,
- 			   rta_getattr_u64(vf[IFLA_VF_STATS_RX_BYTES]));
--		print_uint(PRINT_JSON, "packets", NULL,
-+		print_u64(PRINT_JSON, "packets", NULL,
- 			   rta_getattr_u64(vf[IFLA_VF_STATS_RX_PACKETS]));
--		print_uint(PRINT_JSON, "multicast", NULL,
-+		print_u64(PRINT_JSON, "multicast", NULL,
- 			   rta_getattr_u64(vf[IFLA_VF_STATS_MULTICAST]));
--		print_uint(PRINT_JSON, "broadcast", NULL,
-+		print_u64(PRINT_JSON, "broadcast", NULL,
- 			   rta_getattr_u64(vf[IFLA_VF_STATS_BROADCAST]));
- 		close_json_object();
- 
- 		/* TX stats */
- 		open_json_object("tx");
--		print_uint(PRINT_JSON, "tx_bytes", NULL,
-+		print_u64(PRINT_JSON, "tx_bytes", NULL,
- 			   rta_getattr_u64(vf[IFLA_VF_STATS_TX_BYTES]));
--		print_uint(PRINT_JSON, "tx_packets", NULL,
-+		print_u64(PRINT_JSON, "tx_packets", NULL,
- 			   rta_getattr_u64(vf[IFLA_VF_STATS_TX_PACKETS]));
- 		close_json_object();
- 		close_json_object();
-@@ -602,50 +602,50 @@ static void print_link_stats64(FILE *fp,
- 
- 		/* RX stats */
- 		open_json_object("rx");
--		print_uint(PRINT_JSON, "bytes", NULL, s->rx_bytes);
--		print_uint(PRINT_JSON, "packets", NULL, s->rx_packets);
--		print_uint(PRINT_JSON, "errors", NULL, s->rx_errors);
--		print_uint(PRINT_JSON, "dropped", NULL, s->rx_dropped);
--		print_uint(PRINT_JSON, "over_errors", NULL, s->rx_over_errors);
--		print_uint(PRINT_JSON, "multicast", NULL, s->multicast);
-+		print_u64(PRINT_JSON, "bytes", NULL, s->rx_bytes);
-+		print_u64(PRINT_JSON, "packets", NULL, s->rx_packets);
-+		print_u64(PRINT_JSON, "errors", NULL, s->rx_errors);
-+		print_u64(PRINT_JSON, "dropped", NULL, s->rx_dropped);
-+		print_u64(PRINT_JSON, "over_errors", NULL, s->rx_over_errors);
-+		print_u64(PRINT_JSON, "multicast", NULL, s->multicast);
- 		if (s->rx_compressed)
--			print_uint(PRINT_JSON,
-+			print_u64(PRINT_JSON,
- 				   "compressed",
- 				   NULL, s->rx_compressed);
- 
- 		/* RX error stats */
- 		if (show_stats > 1) {
--			print_uint(PRINT_JSON,
-+			print_u64(PRINT_JSON,
- 				   "length_errors",
- 				   NULL, s->rx_length_errors);
--			print_uint(PRINT_JSON,
-+			print_u64(PRINT_JSON,
- 				   "crc_errors",
- 				   NULL, s->rx_crc_errors);
--			print_uint(PRINT_JSON,
-+			print_u64(PRINT_JSON,
- 				   "frame_errors",
- 				   NULL, s->rx_frame_errors);
--			print_uint(PRINT_JSON,
-+			print_u64(PRINT_JSON,
- 				   "fifo_errors",
- 				   NULL, s->rx_fifo_errors);
--			print_uint(PRINT_JSON,
-+			print_u64(PRINT_JSON,
- 				   "missed_errors",
- 				   NULL, s->rx_missed_errors);
- 			if (s->rx_nohandler)
--				print_uint(PRINT_JSON,
-+				print_u64(PRINT_JSON,
- 					   "nohandler", NULL, s->rx_nohandler);
- 		}
- 		close_json_object();
- 
- 		/* TX stats */
- 		open_json_object("tx");
--		print_uint(PRINT_JSON, "bytes", NULL, s->tx_bytes);
--		print_uint(PRINT_JSON, "packets", NULL, s->tx_packets);
--		print_uint(PRINT_JSON, "errors", NULL, s->tx_errors);
--		print_uint(PRINT_JSON, "dropped", NULL, s->tx_dropped);
--		print_uint(PRINT_JSON,
-+		print_u64(PRINT_JSON, "bytes", NULL, s->tx_bytes);
-+		print_u64(PRINT_JSON, "packets", NULL, s->tx_packets);
-+		print_u64(PRINT_JSON, "errors", NULL, s->tx_errors);
-+		print_u64(PRINT_JSON, "dropped", NULL, s->tx_dropped);
-+		print_u64(PRINT_JSON,
- 			   "carrier_errors",
- 			   NULL, s->tx_carrier_errors);
--		print_uint(PRINT_JSON, "collisions", NULL, s->collisions);
-+		print_u64(PRINT_JSON, "collisions", NULL, s->collisions);
- 		if (s->tx_compressed)
- 			print_uint(PRINT_JSON,
- 				   "compressed",
-@@ -653,20 +653,20 @@ static void print_link_stats64(FILE *fp,
- 
- 		/* TX error stats */
- 		if (show_stats > 1) {
--			print_uint(PRINT_JSON,
-+			print_u64(PRINT_JSON,
- 				   "aborted_errors",
- 				   NULL, s->tx_aborted_errors);
--			print_uint(PRINT_JSON,
-+			print_u64(PRINT_JSON,
- 				   "fifo_errors",
- 				   NULL, s->tx_fifo_errors);
--			print_uint(PRINT_JSON,
-+			print_u64(PRINT_JSON,
- 				   "window_errors",
- 				   NULL, s->tx_window_errors);
--			print_uint(PRINT_JSON,
-+			print_u64(PRINT_JSON,
- 				   "heartbeat_errors",
- 				   NULL, s->tx_heartbeat_errors);
- 			if (carrier_changes)
--				print_uint(PRINT_JSON, "carrier_changes", NULL,
-+				print_u64(PRINT_JSON, "carrier_changes", NULL,
- 					   rta_getattr_u32(carrier_changes));
- 		}
- 		close_json_object();
---- a/lib/json_print.c
-+++ b/lib/json_print.c
-@@ -117,8 +117,10 @@ void close_json_array(enum output_type t
- 		}							\
- 	}
- _PRINT_FUNC(int, int);
-+_PRINT_FUNC(s64, int64_t);
- _PRINT_FUNC(hu, unsigned short);
--_PRINT_FUNC(uint, uint64_t);
-+_PRINT_FUNC(uint, unsigned int);
-+_PRINT_FUNC(u64, uint64_t);
- _PRINT_FUNC(lluint, unsigned long long int);
- _PRINT_FUNC(float, double);
- #undef _PRINT_FUNC
---- a/lib/json_writer.c
-+++ b/lib/json_writer.c
-@@ -215,7 +215,12 @@ void jsonw_hu(json_writer_t *self, unsig
- 	jsonw_printf(self, "%hu", num);
- }
- 
--void jsonw_uint(json_writer_t *self, uint64_t num)
-+void jsonw_uint(json_writer_t *self, unsigned int num)
-+{
-+	jsonw_printf(self, "%u", num);
-+}
-+
-+void jsonw_u64(json_writer_t *self, uint64_t num)
- {
- 	jsonw_printf(self, "%"PRIu64, num);
- }
-@@ -225,7 +230,12 @@ void jsonw_lluint(json_writer_t *self, u
- 	jsonw_printf(self, "%llu", num);
- }
- 
--void jsonw_int(json_writer_t *self, int64_t num)
-+void jsonw_int(json_writer_t *self, int num)
-+{
-+	jsonw_printf(self, "%d", num);
-+}
-+
-+void jsonw_s64(json_writer_t *self, int64_t num)
- {
- 	jsonw_printf(self, "%"PRId64, num);
- }
-@@ -258,12 +268,18 @@ void jsonw_float_field_fmt(json_writer_t
- 	jsonw_float_fmt(self, fmt, val);
- }
- 
--void jsonw_uint_field(json_writer_t *self, const char *prop, uint64_t num)
-+void jsonw_uint_field(json_writer_t *self, const char *prop, unsigned int num)
- {
- 	jsonw_name(self, prop);
- 	jsonw_uint(self, num);
- }
- 
-+void jsonw_u64_field(json_writer_t *self, const char *prop, uint64_t num)
-+{
-+	jsonw_name(self, prop);
-+	jsonw_u64(self, num);
-+}
-+
- void jsonw_hu_field(json_writer_t *self, const char *prop, unsigned short num)
- {
- 	jsonw_name(self, prop);
-@@ -278,12 +294,18 @@ void jsonw_lluint_field(json_writer_t *s
- 	jsonw_lluint(self, num);
- }
- 
--void jsonw_int_field(json_writer_t *self, const char *prop, int64_t num)
-+void jsonw_int_field(json_writer_t *self, const char *prop, int num)
- {
- 	jsonw_name(self, prop);
- 	jsonw_int(self, num);
- }
- 
-+void jsonw_s64_field(json_writer_t *self, const char *prop, int64_t num)
-+{
-+	jsonw_name(self, prop);
-+	jsonw_s64(self, num);
-+}
-+
- void jsonw_null_field(json_writer_t *self, const char *prop)
- {
- 	jsonw_name(self, prop);
diff --git a/package/network/utils/iproute2/patches/008-no_netem.patch b/package/network/utils/iproute2/patches/008-no_netem.patch
index 15a60e794c..58062655c9 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
-@@ -57,7 +57,7 @@ WFLAGS += -Wmissing-declarations -Wold-s
+@@ -61,7 +61,7 @@ WFLAGS += -Wmissing-declarations -Wold-s
  CFLAGS := $(WFLAGS) $(CCOPTS) -I../include -I../include/uapi $(DEFINES) $(CFLAGS)
  YACCFLAGS = -d -t -v
  
 -SUBDIRS=lib ip tc bridge misc netem genl tipc devlink rdma man
 +SUBDIRS=lib ip tc bridge misc genl tipc devlink rdma man
  
- LIBNETLINK=../lib/libnetlink.a ../lib/libutil.a
+ LIBNETLINK=../lib/libutil.a ../lib/libnetlink.a
  LDLIBS += $(LIBNETLINK)
diff --git a/package/network/utils/iproute2/patches/110-extra-ccopts.patch b/package/network/utils/iproute2/patches/110-extra-ccopts.patch
index a083b7c045..d036ba703c 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
-@@ -50,7 +50,7 @@ HOSTCC ?= $(CC)
+@@ -54,7 +54,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/120-libnetlink-pic.patch b/package/network/utils/iproute2/patches/120-libnetlink-pic.patch
index 889bca28be..aad87a1e4f 100644
--- a/package/network/utils/iproute2/patches/120-libnetlink-pic.patch
+++ b/package/network/utils/iproute2/patches/120-libnetlink-pic.patch
@@ -7,5 +7,5 @@ 
 -CFLAGS += -fPIC
 +CFLAGS += $(FPIC)
  
- UTILOBJ = utils.o rt_names.o ll_types.o ll_proto.o ll_addr.o \
+ UTILOBJ = utils.o rt_names.o ll_map.o ll_types.o ll_proto.o ll_addr.o \
  	inet_proto.o namespace.o json_writer.o json_print.o \
diff --git a/package/network/utils/iproute2/patches/300-ip_tiny.patch b/package/network/utils/iproute2/patches/300-ip_tiny.patch
index d8f39d3910..5c8af0b0f1 100644
--- a/package/network/utils/iproute2/patches/300-ip_tiny.patch
+++ b/package/network/utils/iproute2/patches/300-ip_tiny.patch
@@ -40,7 +40,7 @@ 
 +"                   vrf | sr }\n"
 +#endif
  "       OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |\n"
- "                    -h[uman-readable] | -iec |\n"
+ "                    -h[uman-readable] | -iec | -j[son] | -p[retty] |\n"
  "                    -f[amily] { inet | inet6 | ipx | dnet | mpls | bridge | link } |\n"
 @@ -73,32 +79,44 @@ static const struct cmd {
  	int (*func)(int argc, char **argv);
@@ -89,7 +89,7 @@ 
  	{ "help",	do_help },
 --- a/lib/utils.c
 +++ b/lib/utils.c
-@@ -983,6 +983,7 @@ const char *rt_addr_n2a_r(int af, int le
+@@ -1010,6 +1010,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);
@@ -97,7 +97,7 @@ 
  	case AF_IPX:
  		return ipx_ntop(af, addr, buf, buflen);
  	case AF_DECnet:
-@@ -992,6 +993,7 @@ const char *rt_addr_n2a_r(int af, int le
+@@ -1019,6 +1020,7 @@ const char *rt_addr_n2a_r(int af, int le
  		memcpy(dna.a_addr, addr, 2);
  		return dnet_ntop(af, &dna, buf, buflen);
  	}
@@ -115,6 +115,6 @@ 
 +  CFLAGS += -DIPROUTE2_TINY
 +endif
 +
- UTILOBJ = utils.o rt_names.o ll_types.o ll_proto.o ll_addr.o \
+ UTILOBJ = utils.o rt_names.o ll_map.o ll_types.o ll_proto.o ll_addr.o \
  	inet_proto.o namespace.o json_writer.o json_print.o \
  	names.o color.o bpf.o exec.o fs.o
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 3c2cdaaac3..3d9768ce24 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
@@ -1508,14 +1508,3 @@ 
 +	.print_qopt	= cake_print_opt,
 +	.print_xstats	= cake_print_xstats,
 +};
---- a/tc/q_ingress.c
-+++ b/tc/q_ingress.c
-@@ -40,7 +40,7 @@ static int ingress_parse_opt(struct qdis
- static int ingress_print_opt(struct qdisc_util *qu, FILE *f,
- 			     struct rtattr *opt)
- {
--	fprintf(f, "---------------- ");
-+	print_string(PRINT_FP, NULL, "---------------- ", NULL);
- 	return 0;
- }
-