iproute2: bump to 4.11

Signed-off-by: Kevin Darbyshire-Bryant <kevin@darbyshire-bryant.me.uk>
This commit is contained in:
Kevin Darbyshire-Bryant 2017-03-20 21:53:46 +00:00 committed by Felix Fietkau
parent 6af0facb4e
commit a4198f8c8d
16 changed files with 228 additions and 529 deletions

View file

@ -8,13 +8,14 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=iproute2 PKG_NAME:=iproute2
PKG_VERSION:=4.4.0 PKG_VERSION:=4.11.0
PKG_RELEASE:=10 PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@KERNEL/linux/utils/net/iproute2 PKG_SOURCE_URL:=@KERNEL/linux/utils/net/iproute2
PKG_HASH:=bc91c367288a19f78ef800cd6840363be1f22da8436fbae88e1a7250490d6514 PKG_HASH:=72671028bda696d0cb8f48ec8e702581c3a501caeed33eec3a81d7041cbc8026
PKG_BUILD_PARALLEL:=1 PKG_BUILD_PARALLEL:=1
PKG_BUILD_DEPENDS:=iptables
PKG_LICENSE:=GPL-2.0 PKG_LICENSE:=GPL-2.0
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
@ -72,6 +73,12 @@ $(call Package/iproute2/Default)
TITLE:=Network statistics utility TITLE:=Network statistics utility
endef endef
define Package/devlink
$(call Package/iproute2/Default)
TITLE:=Network devlink utility
DEPENDS:=+libmnl
endef
ifeq ($(BUILD_VARIANT),tiny) ifeq ($(BUILD_VARIANT),tiny)
IP_CONFIG_TINY:=y IP_CONFIG_TINY:=y
endif endif
@ -86,15 +93,15 @@ define Build/Configure
> $(PKG_BUILD_DIR)/include/SNAPSHOT.h > $(PKG_BUILD_DIR)/include/SNAPSHOT.h
endef endef
TARGET_CFLAGS += -DHAVE_SETNS
TARGET_CFLAGS += -ffunction-sections -fdata-sections TARGET_CFLAGS += -ffunction-sections -fdata-sections
MAKE_FLAGS += \ MAKE_FLAGS += \
EXTRA_CCOPTS="$(TARGET_CFLAGS) -I../include -I$(STAGING_DIR)/usr/include/libnl-tiny" \ EXTRA_CCOPTS="-I$(STAGING_DIR)/usr/include/libnl-tiny" \
KERNEL_INCLUDE="$(LINUX_DIR)/include" \ KERNEL_INCLUDE="$(LINUX_DIR)/include" \
SHARED_LIBS="" \ SHARED_LIBS="" \
LDFLAGS="$(TARGET_LDFLAGS) -Wl,--gc-sections" \ LDFLAGS="$(TARGET_LDFLAGS) -Wl,--gc-sections" \
IP_CONFIG_TINY=$(IP_CONFIG_TINY) \ IP_CONFIG_TINY=$(IP_CONFIG_TINY) \
IPT_LIB_DIR=/usr/lib/iptables \
FPIC="$(FPIC)" FPIC="$(FPIC)"
define Build/Compile define Build/Compile
@ -145,6 +152,11 @@ define Package/nstat/install
$(INSTALL_BIN) $(PKG_BUILD_DIR)/misc/nstat $(1)/usr/sbin/ $(INSTALL_BIN) $(PKG_BUILD_DIR)/misc/nstat $(1)/usr/sbin/
endef endef
define Package/devlink/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/devlink/devlink $(1)/usr/sbin/
endef
$(eval $(call BuildPackage,ip-tiny)) $(eval $(call BuildPackage,ip-tiny))
$(eval $(call BuildPackage,ip-full)) $(eval $(call BuildPackage,ip-full))
$(eval $(call BuildPackage,tc)) $(eval $(call BuildPackage,tc))
@ -152,3 +164,4 @@ $(eval $(call BuildPackage,genl))
$(eval $(call BuildPackage,ip-bridge)) $(eval $(call BuildPackage,ip-bridge))
$(eval $(call BuildPackage,ss)) $(eval $(call BuildPackage,ss))
$(eval $(call BuildPackage,nstat)) $(eval $(call BuildPackage,nstat))
$(eval $(call BuildPackage,devlink))

View file

@ -1,7 +1,8 @@
--- /dev/null --- /dev/null
+++ b/Config +++ b/Config
@@ -0,0 +1,4 @@ @@ -0,0 +1,5 @@
+# Fixed config to disable ATM support even if present on host system +# Fixed config to disable ATM support even if present on host system
+IP_CONFIG_SETNS:=y
+TC_CONFIG_ATM:=n +TC_CONFIG_ATM:=n
+TC_CONFIG_ACTION_GACT=y +TC_CONFIG_XT:=y
+TC_CONFIG_ACTION_PROB=y +HAVE_MNL:=y

View file

@ -1,6 +1,6 @@
--- a/ip/ipxfrm.c --- a/ip/ipxfrm.c
+++ b/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) { switch (sel->proto) {
case IPPROTO_TCP: case IPPROTO_TCP:
case IPPROTO_UDP: case IPPROTO_UDP:
@ -8,7 +8,7 @@
case IPPROTO_DCCP: case IPPROTO_DCCP:
default: /* XXX */ default: /* XXX */
if (sel->sport_mask) if (sel->sport_mask)
@@ -1341,7 +1340,6 @@ static int xfrm_selector_upspec_parse(st @@ -1321,7 +1320,6 @@ static int xfrm_selector_upspec_parse(st
switch (sel->proto) { switch (sel->proto) {
case IPPROTO_TCP: case IPPROTO_TCP:
case IPPROTO_UDP: case IPPROTO_UDP:

View file

@ -1,11 +1,11 @@
--- a/Makefile --- a/Makefile
+++ b/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) CFLAGS := $(WFLAGS) $(CCOPTS) -I../include $(DEFINES) $(CFLAGS)
YACCFLAGS = -d -t -v YACCFLAGS = -d -t -v
-SUBDIRS=lib ip tc bridge misc netem genl tipc man -SUBDIRS=lib ip tc bridge misc netem genl tipc devlink man
+SUBDIRS=lib ip tc bridge misc genl tipc man +SUBDIRS=lib ip tc bridge misc genl tipc devlink man
LIBNETLINK=../lib/libnetlink.a ../lib/libutil.a LIBNETLINK=../lib/libnetlink.a ../lib/libutil.a
LDLIBS += $(LIBNETLINK) LDLIBS += $(LIBNETLINK)

View file

@ -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>

View file

@ -1,6 +1,6 @@
--- a/tc/q_fifo.c --- a/tc/q_fifo.c
+++ b/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); extern int prio_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt);
struct qdisc_util pfifo_fast_qdisc_util = { struct qdisc_util pfifo_fast_qdisc_util = {
.id = "pfifo_fast", .id = "pfifo_fast",

View file

@ -1,6 +1,6 @@
--- a/Makefile --- a/Makefile
+++ b/Makefile +++ b/Makefile
@@ -34,7 +34,7 @@ HOSTCC = gcc @@ -45,7 +45,7 @@ HOSTCC ?= $(CC)
DEFINES += -D_GNU_SOURCE DEFINES += -D_GNU_SOURCE
# Turn on transparent support for LFS # Turn on transparent support for LFS
DEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE DEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE

View file

@ -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>

View file

@ -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 _LIBC_COMPAT_H
#define _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 /* _LIBC_COMPAT_H */

View file

@ -0,0 +1,79 @@
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 _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
@@ -142,11 +143,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 /* _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
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -14,8 +14,8 @@
#include <string.h>
#include <netinet/in.h>
#include <linux/if_link.h>
-#include <linux/if_bridge.h>
#include <netinet/ether.h>
+#include <linux/if_bridge.h>
#include <net/if.h>
#include "rt_names.h"

View file

@ -1,6 +1,6 @@
--- a/ip/Makefile --- a/ip/Makefile
+++ b/ip/Makefile +++ b/ip/Makefile
@@ -17,6 +17,13 @@ ifeq ($(IP_CONFIG_SETNS),y) @@ -19,6 +19,13 @@ ifeq ($(IP_CONFIG_SETNS),y)
CFLAGS += -DHAVE_SETNS CFLAGS += -DHAVE_SETNS
endif endif
@ -14,7 +14,7 @@
ALLOBJ=$(IPOBJ) $(RTMONOBJ) ALLOBJ=$(IPOBJ) $(RTMONOBJ)
SCRIPTS=ifcfg rtpr routel routef SCRIPTS=ifcfg rtpr routel routef
TARGETS=ip rtmon TARGETS=ip rtmon
@@ -44,7 +51,7 @@ else @@ -48,7 +55,7 @@ else
ip: static-syms.o ip: static-syms.o
static-syms.o: static-syms.h 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 ; \ sed -n '/'$$s'[^ ]* =/{s:.* \([^ ]*'$$s'[^ ]*\) .*:extern char \1[] __attribute__((weak)); if (!strcmp(sym, "\1")) return \1;:;p}' $$files ; \
--- a/ip/ip.c --- a/ip/ip.c
+++ b/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); int (*func)(int argc, char **argv);
} cmds[] = { } cmds[] = {
{ "address", do_ipaddr }, { "address", do_ipaddr },
@ -46,6 +46,8 @@
{ "l2tp", do_ipl2tp }, { "l2tp", do_ipl2tp },
{ "fou", do_ipfou }, { "fou", do_ipfou },
+#endif +#endif
{ "ila", do_ipila },
{ "macsec", do_ipmacsec },
{ "tunnel", do_iptunnel }, { "tunnel", do_iptunnel },
{ "tunl", do_iptunnel }, { "tunl", do_iptunnel },
+#ifndef IPROUTE2_TINY +#ifndef IPROUTE2_TINY
@ -65,12 +67,12 @@
+#ifndef IPROUTE2_TINY +#ifndef IPROUTE2_TINY
{ "netconf", do_ipnetconf }, { "netconf", do_ipnetconf },
+#endif +#endif
{ "vrf", do_ipvrf},
{ "help", do_help }, { "help", do_help },
{ 0 } { 0 }
};
--- a/lib/utils.c --- a/lib/utils.c
+++ b/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); return inet_ntop(af, addr, buf, buflen);
case AF_MPLS: case AF_MPLS:
return mpls_ntop(af, addr, buf, buflen); return mpls_ntop(af, addr, buf, buflen);
@ -78,7 +80,7 @@
case AF_IPX: case AF_IPX:
return ipx_ntop(af, addr, buf, buflen); return ipx_ntop(af, addr, buf, buflen);
case AF_DECnet: 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); memcpy(dna.a_addr, addr, 2);
return dnet_ntop(af, &dna, buf, buflen); return dnet_ntop(af, &dna, buf, buflen);
} }

View file

@ -11,7 +11,7 @@ Subject: [PATCH] add support for dropping with FAILED_POLICY
--- a/include/linux/fib_rules.h --- a/include/linux/fib_rules.h
+++ b/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_BLACKHOLE, /* Drop without notification */
FR_ACT_UNREACHABLE, /* Drop with ENETUNREACH */ FR_ACT_UNREACHABLE, /* Drop with ENETUNREACH */
FR_ACT_PROHIBIT, /* Drop with EACCES */ FR_ACT_PROHIBIT, /* Drop with EACCES */
@ -24,7 +24,7 @@ Subject: [PATCH] add support for dropping with FAILED_POLICY
--- a/include/linux/rtnetlink.h --- a/include/linux/rtnetlink.h
+++ b/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_THROW, /* Not in this table */
RTN_NAT, /* Translate this address */ RTN_NAT, /* Translate this address */
RTN_XRESOLVE, /* Use external resolver */ RTN_XRESOLVE, /* Use external resolver */

View file

@ -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"

View file

@ -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 */

View file

@ -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 --- a/include/linux/pkt_sched.h
+++ b/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 maxq; /* maximum queue size */
__u32 ecn_mark; /* packets marked with ecn*/ __u32 ecn_mark; /* packets marked with ecn*/
}; };
@ -63,21 +61,16 @@ index 8d2530d..c55a9a8 100644
+}; +};
+ +
#endif #endif
diff --git a/tc/Makefile b/tc/Makefile
index 56acbaa..d421b8e 100644
--- a/tc/Makefile --- a/tc/Makefile
+++ b/tc/Makefile +++ b/tc/Makefile
@@ -63,6 +63,7 @@ TCMODULES += q_codel.o @@ -67,6 +67,7 @@ TCMODULES += q_codel.o
TCMODULES += q_fq_codel.o TCMODULES += q_fq_codel.o
TCMODULES += q_fq.o TCMODULES += q_fq.o
TCMODULES += q_pie.o TCMODULES += q_pie.o
+TCMODULES += q_cake.o +TCMODULES += q_cake.o
TCMODULES += q_hhf.o TCMODULES += q_hhf.o
TCMODULES += q_clsact.o
TCMODULES += e_bpf.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 --- /dev/null
+++ b/tc/q_cake.c +++ b/tc/q_cake.c
@@ -0,0 +1,692 @@ @@ -0,0 +1,692 @@

View file

@ -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