From: Felix Fietkau <nbd@openwrt.org>
Date: Sun, 19 Oct 2014 23:04:17 +0000 (+0000)
Subject: iproute2: fix musl build
X-Git-Tag: reboot~5593
X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=5ef89f1ec5d3053c571fee1a8d6313cdb817ef1a;p=openwrt%2Fstaging%2Fpepe2k.git

iproute2: fix musl build

Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 42981
---

diff --git a/package/network/utils/iproute2/Makefile b/package/network/utils/iproute2/Makefile
index e2f4b0218a..0b9134e0c9 100644
--- a/package/network/utils/iproute2/Makefile
+++ b/package/network/utils/iproute2/Makefile
@@ -81,6 +81,9 @@ ifdef CONFIG_USE_EGLIBC
     TARGET_CFLAGS += -DHAVE_SETNS
   endif
 endif
+ifdef CONFIG_USE_MUSL
+  TARGET_CFLAGS += -DHAVE_SETNS
+endif
 
 TARGET_CFLAGS += -ffunction-sections -fdata-sections
 
diff --git a/package/network/utils/iproute2/patches/010-type_fixes.patch b/package/network/utils/iproute2/patches/010-type_fixes.patch
new file mode 100644
index 0000000000..e0055fce71
--- /dev/null
+++ b/package/network/utils/iproute2/patches/010-type_fixes.patch
@@ -0,0 +1,396 @@
+--- 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>