Signed-off-by: Kevin Darbyshire-Bryant <kevin@darbyshire-bryant.me.uk>master
parent
6af0facb4e
commit
a4198f8c8d
@ -1,7 +1,8 @@ |
||||
--- /dev/null
|
||||
+++ b/Config
|
||||
@@ -0,0 +1,4 @@
|
||||
@@ -0,0 +1,5 @@
|
||||
+# Fixed config to disable ATM support even if present on host system
|
||||
+IP_CONFIG_SETNS:=y
|
||||
+TC_CONFIG_ATM:=n
|
||||
+TC_CONFIG_ACTION_GACT=y
|
||||
+TC_CONFIG_ACTION_PROB=y
|
||||
+TC_CONFIG_XT:=y
|
||||
+HAVE_MNL:=y
|
||||
|
@ -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)
|
||||
|
@ -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>
|
@ -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>
|
@ -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 */
|
@ -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"
|
@ -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"
|
@ -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 */
|
@ -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
|
||||
|
Loading…
Reference in new issue