[PATCH net-next v2 00/10] Fix net header dependencies

STALE5530d

Revision v2 of 2 in this series.

17 messages, 2 authors, 2011-08-28 · open the first message on its own page

[PATCH net-next v2 00/10] Fix net header dependencies

From: Ben Hutchings <hidden>
Date: 2011-08-25 04:38:52

Various networking headers depend on definitions from others which they
don't include.  We can't fix all of these, because some definitions are
duplicated between kernel headers and glibc headers and we cannot tell
which is the right one to include.  We also have to be wary of
introducing a dependency cycle.

Since v1, I've dropped the patches to <linux/scc.h> and <linux/if_ppp.h>
and added the acknowledgements I got last time.

Ben.

Ben Hutchings (10):
  headers, pppox: Add missing #include to <linux/if_pppox.h>
  headers, ax25: Add missing #include to <linux/netrom.h>,
    <linux/rose.h>
  headers, pppol2tp: Use __kernel_pid_t in <linux/pppol2tp.h>
  headers, net: Use __kernel_sa_family_t in more definitions shared
    with userland
  headers, net: Define struct __kernel_sockaddr, replacing struct
    sockaddr
  headers, netfilter: Use kernel type names __u8, __u16, __u32
  headers, tipc: Add missing #include to <linux/tipc_config.h> for
    userland
  headers, netfilter: Add missing #include <limits.h> for userland
  headers, xtables: Add missing #include <linux/netfilter.h>
  headers, can: Add missing #include to <linux/can/bcm.h>

 include/linux/atalk.h                     |    3 ++-
 include/linux/ax25.h                      |    2 +-
 include/linux/caif/caif_socket.h          |    7 +------
 include/linux/can.h                       |    2 +-
 include/linux/can/bcm.h                   |    1 +
 include/linux/if.h                        |   12 ++++++------
 include/linux/if_pppol2tp.h               |    2 +-
 include/linux/if_pppox.h                  |    9 +++++----
 include/linux/in.h                        |    2 +-
 include/linux/ipx.h                       |    2 +-
 include/linux/irda.h                      |    9 +++------
 include/linux/l2tp.h                      |    7 ++++---
 include/linux/llc.h                       |   10 +++++++---
 include/linux/netfilter/xt_connlimit.h    |    1 +
 include/linux/netfilter/xt_conntrack.h    |    1 +
 include/linux/netfilter/xt_iprange.h      |    1 +
 include/linux/netfilter_arp/arp_tables.h  |   14 +++++++-------
 include/linux/netfilter_decnet.h          |    3 +++
 include/linux/netfilter_ipv4.h            |    3 +++
 include/linux/netfilter_ipv4/ip_tables.h  |   20 ++++++++++----------
 include/linux/netfilter_ipv6.h            |    3 +++
 include/linux/netfilter_ipv6/ip6_tables.h |   22 +++++++++++-----------
 include/linux/netlink.h                   |    2 +-
 include/linux/netrom.h                    |    2 ++
 include/linux/phonet.h                    |    6 ++++--
 include/linux/rose.h                      |    7 +++++--
 include/linux/socket.h                    |   17 +++++++++--------
 include/linux/tipc_config.h               |    4 ++++
 include/linux/un.h                        |    4 +++-
 include/linux/x25.h                       |    3 ++-
 30 files changed, 104 insertions(+), 77 deletions(-)

-- 
1.7.5.4

[PATCH net-next v2 01/10] headers, pppox: Add missing #include to <linux/if_pppox.h>

From: Ben Hutchings <hidden>
Date: 2011-08-25 04:40:50

<linux/if_ppox.h> uses ETH_ALEN, defined in <linux/if_ether.h>.

Signed-off-by: Ben Hutchings <redacted>
---
 include/linux/if_pppox.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/include/linux/if_pppox.h b/include/linux/if_pppox.h
index 397921b..60e5558 100644
--- a/include/linux/if_pppox.h
+++ b/include/linux/if_pppox.h
@@ -20,8 +20,8 @@
 #include <linux/types.h>
 #include <asm/byteorder.h>
 
-#ifdef  __KERNEL__
 #include <linux/if_ether.h>
+#ifdef  __KERNEL__
 #include <linux/if.h>
 #include <linux/netdevice.h>
 #include <linux/ppp_channel.h>
-- 
1.7.5.4


[PATCH net-next v2 02/10] headers, ax25: Add missing #include to <linux/netrom.h>, <linux/rose.h>

From: Ben Hutchings <hidden>
Date: 2011-08-25 04:43:18

These headers use the ax25_address type defined in <linux/ax25.h>.

Signed-off-by: Ben Hutchings <redacted>
Acked-by: Ralf Baechle <redacted>
---
 include/linux/netrom.h |    2 ++
 include/linux/rose.h   |    2 ++
 2 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/include/linux/netrom.h b/include/linux/netrom.h
index 6939b32..af7313c 100644
--- a/include/linux/netrom.h
+++ b/include/linux/netrom.h
@@ -7,6 +7,8 @@
 #ifndef	NETROM_KERNEL_H
 #define	NETROM_KERNEL_H
 
+#include <linux/ax25.h>
+
 #define NETROM_MTU	236
 
 #define NETROM_T1	1
diff --git a/include/linux/rose.h b/include/linux/rose.h
index c7b4b18..e8289cd 100644
--- a/include/linux/rose.h
+++ b/include/linux/rose.h
@@ -7,6 +7,8 @@
 #ifndef	ROSE_KERNEL_H
 #define	ROSE_KERNEL_H
 
+#include <linux/ax25.h>
+
 #define ROSE_MTU	251
 
 #define ROSE_MAX_DIGIS 6
-- 
1.7.5.4


[PATCH net-next v2 03/10] headers, pppol2tp: Use __kernel_pid_t in <linux/pppol2tp.h>

From: Ben Hutchings <hidden>
Date: 2011-08-25 04:43:50

<linux/types.h> defines __kernel_pid_t for userland; pid_t is
defined elsewhere (and potentially differently).

Signed-off-by: Ben Hutchings <redacted>
---
 include/linux/if_pppol2tp.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/include/linux/if_pppol2tp.h b/include/linux/if_pppol2tp.h
index 184bc55..23cefa1 100644
--- a/include/linux/if_pppol2tp.h
+++ b/include/linux/if_pppol2tp.h
@@ -39,7 +39,7 @@ struct pppol2tp_addr {
  * bits. So we need a different sockaddr structure.
  */
 struct pppol2tpv3_addr {
-	pid_t	pid;			/* pid that owns the fd.
+	__kernel_pid_t	pid;		/* pid that owns the fd.
 					 * 0 => current */
 	int	fd;			/* FD of UDP or IP socket to use */
 
-- 
1.7.5.4


[PATCH net-next v2 04/10] headers, net: Use __kernel_sa_family_t in more definitions shared with userland

From: Ben Hutchings <hidden>
Date: 2011-08-25 04:44:11

Complete the work started with commit
6602a4baf4d1a73cc4685a39ef859e1c5ddf654c ('net: Make userland include
of netlink.h more sane').

Signed-off-by: Ben Hutchings <redacted>
---
 include/linux/atalk.h            |    3 ++-
 include/linux/ax25.h             |    2 +-
 include/linux/caif/caif_socket.h |    7 +------
 include/linux/can.h              |    2 +-
 include/linux/if_pppox.h         |    7 ++++---
 include/linux/in.h               |    2 +-
 include/linux/ipx.h              |    2 +-
 include/linux/irda.h             |    9 +++------
 include/linux/l2tp.h             |    7 ++++---
 include/linux/llc.h              |   10 +++++++---
 include/linux/netlink.h          |    2 +-
 include/linux/phonet.h           |    5 +++--
 include/linux/rose.h             |    5 +++--
 include/linux/un.h               |    4 +++-
 include/linux/x25.h              |    3 ++-
 15 files changed, 37 insertions(+), 33 deletions(-)
diff --git a/include/linux/atalk.h b/include/linux/atalk.h
index d34c187..f57c368 100644
--- a/include/linux/atalk.h
+++ b/include/linux/atalk.h
@@ -3,6 +3,7 @@
 
 #include <linux/types.h>
 #include <asm/byteorder.h>
+#include <linux/socket.h>
 
 /*
  * AppleTalk networking structures
@@ -28,7 +29,7 @@ struct atalk_addr {
 };
 
 struct sockaddr_at {
-	sa_family_t	  sat_family;
+	__kernel_sa_family_t sat_family;
 	__u8		  sat_port;
 	struct atalk_addr sat_addr;
 	char		  sat_zero[8];
diff --git a/include/linux/ax25.h b/include/linux/ax25.h
index 56c11f0..74c89a4 100644
--- a/include/linux/ax25.h
+++ b/include/linux/ax25.h
@@ -47,7 +47,7 @@ typedef struct {
 } ax25_address;
 
 struct sockaddr_ax25 {
-	sa_family_t	sax25_family;
+	__kernel_sa_family_t sax25_family;
 	ax25_address	sax25_call;
 	int		sax25_ndigis;
 	/* Digipeater ax25_address sets follow */
diff --git a/include/linux/caif/caif_socket.h b/include/linux/caif/caif_socket.h
index d9cb19b..3f3bac6 100644
--- a/include/linux/caif/caif_socket.h
+++ b/include/linux/caif/caif_socket.h
@@ -9,12 +9,7 @@
 #define _LINUX_CAIF_SOCKET_H
 
 #include <linux/types.h>
-
-#ifdef __KERNEL__
 #include <linux/socket.h>
-#else
-#include <sys/socket.h>
-#endif
 
 /**
  * enum caif_link_selector -    Physical Link Selection.
@@ -144,7 +139,7 @@ enum caif_debug_service {
  * CAIF Channel. It defines the service to connect to on the modem.
  */
 struct sockaddr_caif {
-	sa_family_t  family;
+	__kernel_sa_family_t  family;
 	union {
 		struct {
 			__u8  type;		/* type: enum caif_at_type */
diff --git a/include/linux/can.h b/include/linux/can.h
index d183333..bb047dc 100644
--- a/include/linux/can.h
+++ b/include/linux/can.h
@@ -78,7 +78,7 @@ struct can_frame {
  * @can_addr:    protocol specific address information
  */
 struct sockaddr_can {
-	sa_family_t can_family;
+	__kernel_sa_family_t can_family;
 	int         can_ifindex;
 	union {
 		/* transport protocol class address information (e.g. ISOTP) */
diff --git a/include/linux/if_pppox.h b/include/linux/if_pppox.h
index 60e5558..b5f927f 100644
--- a/include/linux/if_pppox.h
+++ b/include/linux/if_pppox.h
@@ -20,6 +20,7 @@
 #include <linux/types.h>
 #include <asm/byteorder.h>
 
+#include <linux/socket.h>
 #include <linux/if_ether.h>
 #ifdef  __KERNEL__
 #include <linux/if.h>
@@ -63,7 +64,7 @@ struct pptp_addr {
 #define PX_MAX_PROTO   3
 
 struct sockaddr_pppox {
-	sa_family_t     sa_family;            /* address family, AF_PPPOX */
+	__kernel_sa_family_t sa_family;       /* address family, AF_PPPOX */
 	unsigned int    sa_protocol;          /* protocol identifier */
 	union {
 		struct pppoe_addr  pppoe;
@@ -77,7 +78,7 @@ struct sockaddr_pppox {
  * type instead.
  */
 struct sockaddr_pppol2tp {
-	sa_family_t     sa_family;      /* address family, AF_PPPOX */
+	__kernel_sa_family_t sa_family; /* address family, AF_PPPOX */
 	unsigned int    sa_protocol;    /* protocol identifier */
 	struct pppol2tp_addr pppol2tp;
 } __attribute__((packed));
@@ -86,7 +87,7 @@ struct sockaddr_pppol2tp {
  * bits. So we need a different sockaddr structure.
  */
 struct sockaddr_pppol2tpv3 {
-	sa_family_t     sa_family;      /* address family, AF_PPPOX */
+	__kernel_sa_family_t sa_family; /* address family, AF_PPPOX */
 	unsigned int    sa_protocol;    /* protocol identifier */
 	struct pppol2tpv3_addr pppol2tp;
 } __attribute__((packed));
diff --git a/include/linux/in.h b/include/linux/in.h
index beeb6de..01129c0 100644
--- a/include/linux/in.h
+++ b/include/linux/in.h
@@ -182,7 +182,7 @@ struct in_pktinfo {
 /* Structure describing an Internet (IP) socket address. */
 #define __SOCK_SIZE__	16		/* sizeof(struct sockaddr)	*/
 struct sockaddr_in {
-  sa_family_t		sin_family;	/* Address family		*/
+  __kernel_sa_family_t	sin_family;	/* Address family		*/
   __be16		sin_port;	/* Port number			*/
   struct in_addr	sin_addr;	/* Internet address		*/
 
diff --git a/include/linux/ipx.h b/include/linux/ipx.h
index aabb1d2..3d48014 100644
--- a/include/linux/ipx.h
+++ b/include/linux/ipx.h
@@ -7,7 +7,7 @@
 #define IPX_MTU		576
 
 struct sockaddr_ipx {
-	sa_family_t	sipx_family;
+	__kernel_sa_family_t sipx_family;
 	__be16		sipx_port;
 	__be32		sipx_network;
 	unsigned char 	sipx_node[IPX_NODE_LEN];
diff --git a/include/linux/irda.h b/include/linux/irda.h
index 00bdad0..a014c32 100644
--- a/include/linux/irda.h
+++ b/include/linux/irda.h
@@ -26,12 +26,9 @@
 #define KERNEL_IRDA_H
 
 #include <linux/types.h>
+#include <linux/socket.h>
 
-/* Please do *not* add any #include in this file, this file is
- * included as-is in user space.
- * Please fix the calling file to properly included needed files before
- * this one, or preferably to include <net/irda/irda.h> instead.
- * Jean II */
+/* Note that this file is shared with user space. */
 
 /* Hint bit positions for first hint byte */
 #define HINT_PNP         0x01
@@ -125,7 +122,7 @@ enum {
 #define LSAP_ANY              0xff
 
 struct sockaddr_irda {
-	sa_family_t sir_family;   /* AF_IRDA */
+	__kernel_sa_family_t sir_family; /* AF_IRDA */
 	__u8        sir_lsap_sel; /* LSAP selector */
 	__u32       sir_addr;     /* Device address */
 	char        sir_name[25]; /* Usually <service>:IrDA:TinyTP */
diff --git a/include/linux/l2tp.h b/include/linux/l2tp.h
index 4bdb31d..e77d7f9 100644
--- a/include/linux/l2tp.h
+++ b/include/linux/l2tp.h
@@ -8,8 +8,8 @@
 #define _LINUX_L2TP_H_
 
 #include <linux/types.h>
-#ifdef __KERNEL__
 #include <linux/socket.h>
+#ifdef __KERNEL__
 #include <linux/in.h>
 #else
 #include <netinet/in.h>
@@ -26,14 +26,15 @@
 #define __SOCK_SIZE__	16		/* sizeof(struct sockaddr)	*/
 struct sockaddr_l2tpip {
 	/* The first fields must match struct sockaddr_in */
-	sa_family_t	l2tp_family;	/* AF_INET */
+	__kernel_sa_family_t l2tp_family; /* AF_INET */
 	__be16		l2tp_unused;	/* INET port number (unused) */
 	struct in_addr	l2tp_addr;	/* Internet address */
 
 	__u32		l2tp_conn_id;	/* Connection ID of tunnel */
 
 	/* Pad to size of `struct sockaddr'. */
-	unsigned char	__pad[sizeof(struct sockaddr) - sizeof(sa_family_t) -
+	unsigned char	__pad[sizeof(struct sockaddr) -
+			      sizeof(__kernel_sa_family_t) -
 			      sizeof(__be16) - sizeof(struct in_addr) -
 			      sizeof(__u32)];
 };
diff --git a/include/linux/llc.h b/include/linux/llc.h
index ad7074b..a2418ae 100644
--- a/include/linux/llc.h
+++ b/include/linux/llc.h
@@ -12,16 +12,20 @@
  *
  * See the GNU General Public License for more details.
  */
+
+#include <linux/socket.h>
+
 #define __LLC_SOCK_SIZE__ 16	/* sizeof(sockaddr_llc), word align. */
 struct sockaddr_llc {
-	sa_family_t     sllc_family;	/* AF_LLC */
-	sa_family_t	sllc_arphrd;	/* ARPHRD_ETHER */
+	__kernel_sa_family_t sllc_family; /* AF_LLC */
+	__kernel_sa_family_t sllc_arphrd; /* ARPHRD_ETHER */
 	unsigned char   sllc_test;
 	unsigned char   sllc_xid;
 	unsigned char	sllc_ua;	/* UA data, only for SOCK_STREAM. */
 	unsigned char   sllc_sap;
 	unsigned char   sllc_mac[IFHWADDRLEN];
-	unsigned char   __pad[__LLC_SOCK_SIZE__ - sizeof(sa_family_t) * 2 -
+	unsigned char   __pad[__LLC_SOCK_SIZE__ -
+			      sizeof(__kernel_sa_family_t) * 2 -
 			      sizeof(unsigned char) * 4 - IFHWADDRLEN];
 };
 
diff --git a/include/linux/netlink.h b/include/linux/netlink.h
index 180540a..8180cd9 100644
--- a/include/linux/netlink.h
+++ b/include/linux/netlink.h
@@ -1,7 +1,7 @@
 #ifndef __LINUX_NETLINK_H
 #define __LINUX_NETLINK_H
 
-#include <linux/socket.h> /* for sa_family_t */
+#include <linux/socket.h> /* for __kernel_sa_family_t */
 #include <linux/types.h>
 
 #define NETLINK_ROUTE		0	/* Routing/device hook				*/
diff --git a/include/linux/phonet.h b/include/linux/phonet.h
index 6fb1384..f53a416 100644
--- a/include/linux/phonet.h
+++ b/include/linux/phonet.h
@@ -24,6 +24,7 @@
 #define LINUX_PHONET_H
 
 #include <linux/types.h>
+#include <linux/socket.h>
 
 /* Automatic protocol selection */
 #define PN_PROTO_TRANSPORT	0
@@ -96,11 +97,11 @@ struct phonetmsg {
 
 /* Phonet socket address structure */
 struct sockaddr_pn {
-	sa_family_t spn_family;
+	__kernel_sa_family_t spn_family;
 	__u8 spn_obj;
 	__u8 spn_dev;
 	__u8 spn_resource;
-	__u8 spn_zero[sizeof(struct sockaddr) - sizeof(sa_family_t) - 3];
+	__u8 spn_zero[sizeof(struct sockaddr) - sizeof(__kernel_sa_family_t) - 3];
 } __attribute__((packed));
 
 /* Well known address */
diff --git a/include/linux/rose.h b/include/linux/rose.h
index e8289cd..1fcfe95 100644
--- a/include/linux/rose.h
+++ b/include/linux/rose.h
@@ -7,6 +7,7 @@
 #ifndef	ROSE_KERNEL_H
 #define	ROSE_KERNEL_H
 
+#include <linux/socket.h>
 #include <linux/ax25.h>
 
 #define ROSE_MTU	251
@@ -46,7 +47,7 @@ typedef struct {
 } rose_address;
 
 struct sockaddr_rose {
-	sa_family_t	srose_family;
+	__kernel_sa_family_t srose_family;
 	rose_address	srose_addr;
 	ax25_address	srose_call;
 	int		srose_ndigis;
@@ -54,7 +55,7 @@ struct sockaddr_rose {
 };
 
 struct full_sockaddr_rose {
-	sa_family_t	srose_family;
+	__kernel_sa_family_t srose_family;
 	rose_address	srose_addr;
 	ax25_address	srose_call;
 	unsigned int	srose_ndigis;
diff --git a/include/linux/un.h b/include/linux/un.h
index 45561c5..3ed3e46 100644
--- a/include/linux/un.h
+++ b/include/linux/un.h
@@ -1,10 +1,12 @@
 #ifndef _LINUX_UN_H
 #define _LINUX_UN_H
 
+#include <linux/socket.h>
+
 #define UNIX_PATH_MAX	108
 
 struct sockaddr_un {
-	sa_family_t sun_family;	/* AF_UNIX */
+	__kernel_sa_family_t sun_family; /* AF_UNIX */
 	char sun_path[UNIX_PATH_MAX];	/* pathname */
 };
 
diff --git a/include/linux/x25.h b/include/linux/x25.h
index 6450a7f..810cce6 100644
--- a/include/linux/x25.h
+++ b/include/linux/x25.h
@@ -12,6 +12,7 @@
 #define	X25_KERNEL_H
 
 #include <linux/types.h>
+#include <linux/socket.h>
 
 #define	SIOCX25GSUBSCRIP	(SIOCPROTOPRIVATE + 0)
 #define	SIOCX25SSUBSCRIP	(SIOCPROTOPRIVATE + 1)
@@ -57,7 +58,7 @@ struct x25_address {
  *	Linux X.25 Address structure, used for bind, and connect mostly.
  */
 struct sockaddr_x25 {
-	sa_family_t	   sx25_family;		/* Must be AF_X25 */
+	__kernel_sa_family_t sx25_family;	/* Must be AF_X25 */
 	struct x25_address sx25_addr;		/* X.121 Address */
 };
 
-- 
1.7.5.4


[PATCH net-next v2 05/10] headers, net: Define struct __kernel_sockaddr, replacing struct sockaddr

From: Ben Hutchings <hidden>
Date: 2011-08-25 04:44:16

Commit 9c501935a3cdcf6b1d35aaee3aa11c7a7051a305 ('net: Support
inclusion of <linux/socket.h> before <sys/socket.h>') removed the
definition of struct sockaddr for userland.

But we still have several headers using struct sockaddr, and we
shouldn't make them include <sys/socket.h> as that risks recursive
inclusion in future.  Define and use an identical struct
__kernel_sockaddr instead.

Signed-off-by: Ben Hutchings <redacted>
---
 include/linux/if.h     |   12 ++++++------
 include/linux/phonet.h |    3 ++-
 include/linux/socket.h |   17 +++++++++--------
 3 files changed, 17 insertions(+), 15 deletions(-)
diff --git a/include/linux/if.h b/include/linux/if.h
index db20bd4..f9ce5fb 100644
--- a/include/linux/if.h
+++ b/include/linux/if.h
@@ -20,7 +20,7 @@
 #define _LINUX_IF_H
 
 #include <linux/types.h>		/* for "__kernel_caddr_t" et al	*/
-#include <linux/socket.h>		/* for "struct sockaddr" et al	*/
+#include <linux/socket.h>		/* for "struct __kernel_sockaddr" et al	*/
 #include <linux/compiler.h>		/* for "__user" et al           */
 
 #define	IFNAMSIZ	16
@@ -176,11 +176,11 @@ struct ifreq {
 	} ifr_ifrn;
 	
 	union {
-		struct	sockaddr ifru_addr;
-		struct	sockaddr ifru_dstaddr;
-		struct	sockaddr ifru_broadaddr;
-		struct	sockaddr ifru_netmask;
-		struct  sockaddr ifru_hwaddr;
+		struct	__kernel_sockaddr ifru_addr;
+		struct	__kernel_sockaddr ifru_dstaddr;
+		struct	__kernel_sockaddr ifru_broadaddr;
+		struct	__kernel_sockaddr ifru_netmask;
+		struct  __kernel_sockaddr ifru_hwaddr;
 		short	ifru_flags;
 		int	ifru_ivalue;
 		int	ifru_mtu;
diff --git a/include/linux/phonet.h b/include/linux/phonet.h
index f53a416..9aba9ce 100644
--- a/include/linux/phonet.h
+++ b/include/linux/phonet.h
@@ -101,7 +101,8 @@ struct sockaddr_pn {
 	__u8 spn_obj;
 	__u8 spn_dev;
 	__u8 spn_resource;
-	__u8 spn_zero[sizeof(struct sockaddr) - sizeof(__kernel_sa_family_t) - 3];
+	__u8 spn_zero[sizeof(struct __kernel_sockaddr) -
+		      sizeof(__kernel_sa_family_t) - 3];
 } __attribute__((packed));
 
 /* Well known address */
diff --git a/include/linux/socket.h b/include/linux/socket.h
index d0e77f6..f13ad7b 100644
--- a/include/linux/socket.h
+++ b/include/linux/socket.h
@@ -10,6 +10,14 @@
 
 typedef unsigned short __kernel_sa_family_t;
 
+/*
+ *	1003.1g requires sa_family_t and that sa_data is char.
+ */
+struct __kernel_sockaddr {
+	__kernel_sa_family_t sa_family;	/* address family, AF_xxx	*/
+	char		sa_data[14];	/* 14 bytes of protocol address	*/
+};
+
 struct __kernel_sockaddr_storage {
 	__kernel_sa_family_t	ss_family;		/* address family */
 	/* Following field(s) are implementation specific */
@@ -39,15 +47,8 @@ extern void socket_seq_show(struct seq_file *seq);
 
 typedef __kernel_sa_family_t	sa_family_t;
 
-/*
- *	1003.1g requires sa_family_t and that sa_data is char.
- */
+#define sockaddr __kernel_sockaddr
  
-struct sockaddr {
-	sa_family_t	sa_family;	/* address family, AF_xxx	*/
-	char		sa_data[14];	/* 14 bytes of protocol address	*/
-};
-
 struct linger {
 	int		l_onoff;	/* Linger active		*/
 	int		l_linger;	/* How long to linger for	*/
-- 
1.7.5.4


[PATCH net-next v2 06/10] headers, netfilter: Use kernel type names __u8, __u16, __u32

From: Ben Hutchings <hidden>
Date: 2011-08-25 04:44:57

These types are guaranteed to be defined by <linux/types.h> for
both userland and kernel, unlike u_intN_t.

Signed-off-by: Ben Hutchings <redacted>
Acked-by: Patrick McHardy <redacted>
---
 include/linux/netfilter_arp/arp_tables.h  |   14 +++++++-------
 include/linux/netfilter_ipv4/ip_tables.h  |   20 ++++++++++----------
 include/linux/netfilter_ipv6/ip6_tables.h |   22 +++++++++++-----------
 3 files changed, 28 insertions(+), 28 deletions(-)
diff --git a/include/linux/netfilter_arp/arp_tables.h b/include/linux/netfilter_arp/arp_tables.h
index adbf4bf..e08565d 100644
--- a/include/linux/netfilter_arp/arp_tables.h
+++ b/include/linux/netfilter_arp/arp_tables.h
@@ -52,7 +52,7 @@ struct arpt_arp {
 	struct in_addr smsk, tmsk;
 
 	/* Device hw address length, src+target device addresses */
-	u_int8_t arhln, arhln_mask;
+	__u8 arhln, arhln_mask;
 	struct arpt_devaddr_info src_devaddr;
 	struct arpt_devaddr_info tgt_devaddr;
 
@@ -71,9 +71,9 @@ struct arpt_arp {
 	unsigned char iniface_mask[IFNAMSIZ], outiface_mask[IFNAMSIZ];
 
 	/* Flags word */
-	u_int8_t flags;
+	__u8 flags;
 	/* Inverse flags */
-	u_int16_t invflags;
+	__u16 invflags;
 };
 
 /* Values for "flag" field in struct arpt_ip (general arp structure).
@@ -102,9 +102,9 @@ struct arpt_entry
 	struct arpt_arp arp;
 
 	/* Size of arpt_entry + matches */
-	u_int16_t target_offset;
+	__u16 target_offset;
 	/* Size of arpt_entry + matches + target */
-	u_int16_t next_offset;
+	__u16 next_offset;
 
 	/* Back pointer */
 	unsigned int comefrom;
@@ -260,8 +260,8 @@ extern unsigned int arpt_do_table(struct sk_buff *skb,
 
 struct compat_arpt_entry {
 	struct arpt_arp arp;
-	u_int16_t target_offset;
-	u_int16_t next_offset;
+	__u16 target_offset;
+	__u16 next_offset;
 	compat_uint_t comefrom;
 	struct compat_xt_counters counters;
 	unsigned char elems[0];
diff --git a/include/linux/netfilter_ipv4/ip_tables.h b/include/linux/netfilter_ipv4/ip_tables.h
index 64a5d95..db79231 100644
--- a/include/linux/netfilter_ipv4/ip_tables.h
+++ b/include/linux/netfilter_ipv4/ip_tables.h
@@ -81,12 +81,12 @@ struct ipt_ip {
 	unsigned char iniface_mask[IFNAMSIZ], outiface_mask[IFNAMSIZ];
 
 	/* Protocol, 0 = ANY */
-	u_int16_t proto;
+	__u16 proto;
 
 	/* Flags word */
-	u_int8_t flags;
+	__u8 flags;
 	/* Inverse flags */
-	u_int8_t invflags;
+	__u8 invflags;
 };
 
 /* Values for "flag" field in struct ipt_ip (general ip structure). */
@@ -114,9 +114,9 @@ struct ipt_entry {
 	unsigned int nfcache;
 
 	/* Size of ipt_entry + matches */
-	u_int16_t target_offset;
+	__u16 target_offset;
 	/* Size of ipt_entry + matches + target */
-	u_int16_t next_offset;
+	__u16 next_offset;
 
 	/* Back pointer */
 	unsigned int comefrom;
@@ -149,9 +149,9 @@ struct ipt_entry {
 
 /* ICMP matching stuff */
 struct ipt_icmp {
-	u_int8_t type;				/* type to match */
-	u_int8_t code[2];			/* range of code */
-	u_int8_t invflags;			/* Inverse flags */
+	__u8 type;				/* type to match */
+	__u8 code[2];				/* range of code */
+	__u8 invflags;				/* Inverse flags */
 };
 
 /* Values for "inv" field for struct ipt_icmp. */
@@ -288,8 +288,8 @@ extern unsigned int ipt_do_table(struct sk_buff *skb,
 struct compat_ipt_entry {
 	struct ipt_ip ip;
 	compat_uint_t nfcache;
-	u_int16_t target_offset;
-	u_int16_t next_offset;
+	__u16 target_offset;
+	__u16 next_offset;
 	compat_uint_t comefrom;
 	struct compat_xt_counters counters;
 	unsigned char elems[0];
diff --git a/include/linux/netfilter_ipv6/ip6_tables.h b/include/linux/netfilter_ipv6/ip6_tables.h
index c9784f7..f549adc 100644
--- a/include/linux/netfilter_ipv6/ip6_tables.h
+++ b/include/linux/netfilter_ipv6/ip6_tables.h
@@ -81,14 +81,14 @@ struct ip6t_ip6 {
 	 *   MH do not match any packets.
 	 * - You also need to set IP6T_FLAGS_PROTO to "flags" to check protocol.
 	 */
-	u_int16_t proto;
+	__u16 proto;
 	/* TOS to match iff flags & IP6T_F_TOS */
-	u_int8_t tos;
+	__u8 tos;
 
 	/* Flags word */
-	u_int8_t flags;
+	__u8 flags;
 	/* Inverse flags */
-	u_int8_t invflags;
+	__u8 invflags;
 };
 
 /* Values for "flag" field in struct ip6t_ip6 (general ip6 structure). */
@@ -118,9 +118,9 @@ struct ip6t_entry {
 	unsigned int nfcache;
 
 	/* Size of ipt_entry + matches */
-	u_int16_t target_offset;
+	__u16 target_offset;
 	/* Size of ipt_entry + matches + target */
-	u_int16_t next_offset;
+	__u16 next_offset;
 
 	/* Back pointer */
 	unsigned int comefrom;
@@ -186,9 +186,9 @@ struct ip6t_error {
 
 /* ICMP matching stuff */
 struct ip6t_icmp {
-	u_int8_t type;				/* type to match */
-	u_int8_t code[2];			/* range of code */
-	u_int8_t invflags;			/* Inverse flags */
+	__u8 type;				/* type to match */
+	__u8 code[2];				/* range of code */
+	__u8 invflags;				/* Inverse flags */
 };
 
 /* Values for "inv" field for struct ipt_icmp. */
@@ -298,8 +298,8 @@ extern int ipv6_find_hdr(const struct sk_buff *skb, unsigned int *offset,
 struct compat_ip6t_entry {
 	struct ip6t_ip6 ipv6;
 	compat_uint_t nfcache;
-	u_int16_t target_offset;
-	u_int16_t next_offset;
+	__u16 target_offset;
+	__u16 next_offset;
 	compat_uint_t comefrom;
 	struct compat_xt_counters counters;
 	unsigned char elems[0];
-- 
1.7.5.4


[PATCH net-next v2 07/10] headers, tipc: Add missing #include to <linux/tipc_config.h> for userland

From: Ben Hutchings <hidden>
Date: 2011-08-25 04:45:17

<linux/tipc_config.h> defines inline functions using ntohs() etc.
For userland these are defined in <arpa/inet.h>.

Signed-off-by: Ben Hutchings <redacted>
---
 include/linux/tipc_config.h |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/include/linux/tipc_config.h b/include/linux/tipc_config.h
index 0db2395..9730b0e 100644
--- a/include/linux/tipc_config.h
+++ b/include/linux/tipc_config.h
@@ -41,6 +41,10 @@
 #include <linux/string.h>
 #include <asm/byteorder.h>
 
+#ifndef __KERNEL__
+#include <arpa/inet.h> /* for ntohs etc. */
+#endif
+
 /*
  * Configuration
  *
-- 
1.7.5.4


[PATCH net-next v2 08/10] headers, netfilter: Add missing #include <limits.h> for userland

From: Ben Hutchings <hidden>
Date: 2011-08-25 04:45:36

Various headers use INT_MIN and INT_MAX, which are defined for
userland in <limits.h>.

Signed-off-by: Ben Hutchings <redacted>
Acked-by: Patrick McHardy <redacted>
---
 include/linux/netfilter_decnet.h |    3 +++
 include/linux/netfilter_ipv4.h   |    3 +++
 include/linux/netfilter_ipv6.h   |    3 +++
 3 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/include/linux/netfilter_decnet.h b/include/linux/netfilter_decnet.h
index 6f42536..0b09732 100644
--- a/include/linux/netfilter_decnet.h
+++ b/include/linux/netfilter_decnet.h
@@ -11,6 +11,9 @@
 
 /* only for userspace compatibility */
 #ifndef __KERNEL__
+
+#include <limits.h> /* for INT_MIN, INT_MAX */
+
 /* IP Cache bits. */
 /* Src IP address. */
 #define NFC_DN_SRC		0x0001
diff --git a/include/linux/netfilter_ipv4.h b/include/linux/netfilter_ipv4.h
index 29c7727..fa0946c 100644
--- a/include/linux/netfilter_ipv4.h
+++ b/include/linux/netfilter_ipv4.h
@@ -9,6 +9,9 @@
 
 /* only for userspace compatibility */
 #ifndef __KERNEL__
+
+#include <limits.h> /* for INT_MIN, INT_MAX */
+
 /* IP Cache bits. */
 /* Src IP address. */
 #define NFC_IP_SRC		0x0001
diff --git a/include/linux/netfilter_ipv6.h b/include/linux/netfilter_ipv6.h
index 1f7e300..57c0251 100644
--- a/include/linux/netfilter_ipv6.h
+++ b/include/linux/netfilter_ipv6.h
@@ -12,6 +12,9 @@
 
 /* only for userspace compatibility */
 #ifndef __KERNEL__
+
+#include <limits.h> /* for INT_MIN, INT_MAX */
+
 /* IP Cache bits. */
 /* Src IP address. */
 #define NFC_IP6_SRC              0x0001
-- 
1.7.5.4


[PATCH net-next v2 09/10] headers, xtables: Add missing #include <linux/netfilter.h>

From: Ben Hutchings <hidden>
Date: 2011-08-25 04:45:42

Various headers use union nf_inet_addr, defined in <linux/netfilter.h>.

Signed-off-by: Ben Hutchings <redacted>
Acked-by: Patrick McHardy <redacted>
---
 include/linux/netfilter/xt_connlimit.h |    1 +
 include/linux/netfilter/xt_conntrack.h |    1 +
 include/linux/netfilter/xt_iprange.h   |    1 +
 3 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/include/linux/netfilter/xt_connlimit.h b/include/linux/netfilter/xt_connlimit.h
index 0ca66e9..d1366f0 100644
--- a/include/linux/netfilter/xt_connlimit.h
+++ b/include/linux/netfilter/xt_connlimit.h
@@ -2,6 +2,7 @@
 #define _XT_CONNLIMIT_H
 
 #include <linux/types.h>
+#include <linux/netfilter.h>
 
 struct xt_connlimit_data;
 
diff --git a/include/linux/netfilter/xt_conntrack.h b/include/linux/netfilter/xt_conntrack.h
index 74b904d..e3c041d 100644
--- a/include/linux/netfilter/xt_conntrack.h
+++ b/include/linux/netfilter/xt_conntrack.h
@@ -6,6 +6,7 @@
 #define _XT_CONNTRACK_H
 
 #include <linux/types.h>
+#include <linux/netfilter.h>
 #include <linux/netfilter/nf_conntrack_tuple_common.h>
 
 #define XT_CONNTRACK_STATE_BIT(ctinfo) (1 << ((ctinfo)%IP_CT_IS_REPLY+1))
diff --git a/include/linux/netfilter/xt_iprange.h b/include/linux/netfilter/xt_iprange.h
index c1f21a7..25fd7cf 100644
--- a/include/linux/netfilter/xt_iprange.h
+++ b/include/linux/netfilter/xt_iprange.h
@@ -2,6 +2,7 @@
 #define _LINUX_NETFILTER_XT_IPRANGE_H 1
 
 #include <linux/types.h>
+#include <linux/netfilter.h>
 
 enum {
 	IPRANGE_SRC     = 1 << 0,	/* match source IP address */
-- 
1.7.5.4


[PATCH net-next v2 10/10] headers, can: Add missing #include to <linux/can/bcm.h>

From: Ben Hutchings <hidden>
Date: 2011-08-25 04:46:07

<linux/can/bcm.h> uses type canid_t, defined in <linux/can.h>.

Signed-off-by: Ben Hutchings <redacted>
Acked-by: Oliver Hartkopp <socketcan@hartkopp.net>
---
 include/linux/can/bcm.h |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/include/linux/can/bcm.h b/include/linux/can/bcm.h
index 1432b27..e96154d 100644
--- a/include/linux/can/bcm.h
+++ b/include/linux/can/bcm.h
@@ -15,6 +15,7 @@
 #define CAN_BCM_H
 
 #include <linux/types.h>
+#include <linux/can.h>
 
 /**
  * struct bcm_msg_head - head of messages to/from the broadcast manager
-- 
1.7.5.4

Re: [PATCH net-next v2 05/10] headers, net: Define struct __kernel_sockaddr, replacing struct sockaddr

From: David Miller <davem@davemloft.net>
Date: 2011-08-26 15:08:31

From: Ben Hutchings <redacted>
Date: Thu, 25 Aug 2011 05:44:15 +0100
Commit 9c501935a3cdcf6b1d35aaee3aa11c7a7051a305 ('net: Support
inclusion of <linux/socket.h> before <sys/socket.h>') removed the
definition of struct sockaddr for userland.

But we still have several headers using struct sockaddr, and we
shouldn't make them include <sys/socket.h> as that risks recursive
inclusion in future.  Define and use an identical struct
__kernel_sockaddr instead.

Signed-off-by: Ben Hutchings <redacted>
 ...
quoted hunk
 
-/*
- *	1003.1g requires sa_family_t and that sa_data is char.
- */
+#define sockaddr __kernel_sockaddr
This cure is worse than the disease.

Now any application that includes sys/socket.h one way or another is
now going to get a real hard build failure since __kernel_sockaddr
will effectively get redefined.

There is no reason sys/socket.h and our headers cannot co-exist and
this is the whole reason we're going through all of this pain to use
the __kernel_foo types in our networking datastructures which are
exposed to userspace.

Re: [PATCH net-next v2 05/10] headers, net: Define struct __kernel_sockaddr, replacing struct sockaddr

From: Ben Hutchings <hidden>
Date: 2011-08-26 15:42:51

On Fri, Aug 26, 2011 at 11:08:20AM -0400, David Miller wrote:
From: Ben Hutchings <redacted>
Date: Thu, 25 Aug 2011 05:44:15 +0100
quoted
Commit 9c501935a3cdcf6b1d35aaee3aa11c7a7051a305 ('net: Support
inclusion of <linux/socket.h> before <sys/socket.h>') removed the
definition of struct sockaddr for userland.

But we still have several headers using struct sockaddr, and we
shouldn't make them include <sys/socket.h> as that risks recursive
inclusion in future.  Define and use an identical struct
__kernel_sockaddr instead.

Signed-off-by: Ben Hutchings <redacted>
 ...
quoted
 
-/*
- *	1003.1g requires sa_family_t and that sa_data is char.
- */
+#define sockaddr __kernel_sockaddr
This cure is worse than the disease.

Now any application that includes sys/socket.h one way or another is
now going to get a real hard build failure since __kernel_sockaddr
will effectively get redefined.
[...]
 
This #define is in the #ifdef __KERNEL__ section.  I don't want t
change all the in-kernel users to say __kernel_sockaddr.  This is
just the same as the preceding 'typedef __kernel_sa_family_t
sa_family_t' except that you can't create struct aliases that way.

Ben.

-- 
Ben Hutchings
We get into the habit of living before acquiring the habit of thinking.
                                                              - Albert Camus

Re: [PATCH net-next v2 05/10] headers, net: Define struct __kernel_sockaddr, replacing struct sockaddr

From: David Miller <davem@davemloft.net>
Date: 2011-08-26 16:04:59

From: Ben Hutchings <redacted>
Date: Fri, 26 Aug 2011 16:42:48 +0100
This #define is in the #ifdef __KERNEL__ section.  I don't want t
change all the in-kernel users to say __kernel_sockaddr.  This is
just the same as the preceding 'typedef __kernel_sa_family_t
sa_family_t' except that you can't create struct aliases that way.
Aha, I didn't catch that part.  Then this is fine, thanks for
explaining Ben.

Re: [PATCH net-next v2 00/10] Fix net header dependencies

From: David Miller <davem@davemloft.net>
Date: 2011-08-26 16:09:56

From: Ben Hutchings <redacted>
Date: Thu, 25 Aug 2011 05:38:44 +0100
Various networking headers depend on definitions from others which they
don't include.  We can't fix all of these, because some definitions are
duplicated between kernel headers and glibc headers and we cannot tell
which is the right one to include.  We also have to be wary of
introducing a dependency cycle.

Since v1, I've dropped the patches to <linux/scc.h> and <linux/if_ppp.h>
and added the acknowledgements I got last time.
All applied, thanks!

Re: [PATCH net-next v2 05/10] headers, net: Define struct __kernel_sockaddr, replacing struct sockaddr

From: David Miller <davem@davemloft.net>
Date: 2011-08-26 16:20:34

From: David Miller <davem@davemloft.net>
Date: Fri, 26 Aug 2011 12:04:51 -0400 (EDT)
From: Ben Hutchings <redacted>
Date: Fri, 26 Aug 2011 16:42:48 +0100
quoted
This #define is in the #ifdef __KERNEL__ section.  I don't want t
change all the in-kernel users to say __kernel_sockaddr.  This is
just the same as the preceding 'typedef __kernel_sa_family_t
sa_family_t' except that you can't create struct aliases that way.
Aha, I didn't catch that part.  Then this is fine, thanks for
explaining Ben.
Actually, this patch breaks the build, specifically of ifenslave.c

I'll leave the other patches in, but you'll need to respin this one.

Documentation/networking/ifenslave.c: In function ‘if_getconfig’:
Documentation/networking/ifenslave.c:553:11: error: incompatible types when assigning to type ‘struct sockaddr’ from type ‘struct __kernel_sockaddr’
Documentation/networking/ifenslave.c:559:13: error: incompatible types when assigning to type ‘struct sockaddr’ from type ‘struct __kernel_sockaddr’
Documentation/networking/ifenslave.c:565:11: error: incompatible types when assigning to type ‘struct sockaddr’ from type ‘struct __kernel_sockaddr’
Documentation/networking/ifenslave.c: In function ‘enslave’:
Documentation/networking/ifenslave.c:727:13: warning: passing argument 2 of ‘set_slave_hwaddr’ from incompatible pointer type
Documentation/networking/ifenslave.c:230:12: note: expected ‘struct sockaddr *’ but argument is of type ‘struct __kernel_sockaddr *’
Documentation/networking/ifenslave.c:772:6: warning: passing argument 2 of ‘set_master_hwaddr’ from incompatible pointer type
Documentation/networking/ifenslave.c:229:12: note: expected ‘struct sockaddr *’ but argument is of type ‘struct __kernel_sockaddr *’
Documentation/networking/ifenslave.c:817:2: warning: passing argument 2 of ‘set_master_hwaddr’ from incompatible pointer type
Documentation/networking/ifenslave.c:229:12: note: expected ‘struct sockaddr *’ but argument is of type ‘struct __kernel_sockaddr *’
Documentation/networking/ifenslave.c:821:2: warning: passing argument 2 of ‘set_slave_hwaddr’ from incompatible pointer type
Documentation/networking/ifenslave.c:230:12: note: expected ‘struct sockaddr *’ but argument is of type ‘struct __kernel_sockaddr *’
make[2]: *** [Documentation/networking/ifenslave] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [Documentation/networking] Error 2
make[1]: *** Waiting for unfinished jobs....
make: *** [vmlinux] Error 2

Re: [PATCH net-next v2 05/10] headers, net: Define struct __kernel_sockaddr, replacing struct sockaddr

From: Ben Hutchings <hidden>
Date: 2011-08-28 16:22:46

On Fri, 2011-08-26 at 12:20 -0400, David Miller wrote:
From: David Miller <davem@davemloft.net>
Date: Fri, 26 Aug 2011 12:04:51 -0400 (EDT)
quoted
From: Ben Hutchings <redacted>
Date: Fri, 26 Aug 2011 16:42:48 +0100
quoted
This #define is in the #ifdef __KERNEL__ section.  I don't want t
change all the in-kernel users to say __kernel_sockaddr.  This is
just the same as the preceding 'typedef __kernel_sa_family_t
sa_family_t' except that you can't create struct aliases that way.
Aha, I didn't catch that part.  Then this is fine, thanks for
explaining Ben.
Actually, this patch breaks the build, specifically of ifenslave.c

I'll leave the other patches in, but you'll need to respin this one.
[...]

Right, it looks like this will have to wait for a proper resolution of
the conflicts between kernel and libc types.

Ben.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help