...and here's a diff for discussion that removes the sa_family_t and
socklen_t typedefs from sys/types.h, transferring them to sys/socket.h and
duping them in netinet/in.h, netinet6/in6.h, and sys/un.h as necessary.
There are only two user-land fixes necessary for a build with this, in
sasyncd and bind (the latter in the locally written privsep bits)
This diff also includes some compliance fixes for netinet/in.h that I had
been noodelling on, hiding behind __BSD_VISIBLE various things which are
not permitted by the standard.
The switching from socklen_t to __socklen_t in the pure kernel headers
(sys/domain.h and sys/socketvar.h) is perhaps a bit dubious; suggestions
are welcome. Perhaps sys/types.h should continue to declare sa_family_t
and socklen_t under __BSD_VISIBLE...
Philip Guenther
Index: include/netdb.h
===================================================================
RCS file: /cvs/src/include/netdb.h,v
retrieving revision 1.27
diff -u -p -r1.27 netdb.h
--- include/netdb.h 2 Jun 2009 16:47:50 -0000 1.27
+++ include/netdb.h 21 Nov 2010 08:37:30 -0000
@@ -89,6 +89,7 @@
#include <sys/param.h>
#include <sys/cdefs.h>
+#include <sys/socket.h>
#define _PATH_HEQUIV "/etc/hosts.equiv"
#define _PATH_HOSTS "/etc/hosts"
Index: sys/sys/domain.h
===================================================================
RCS file: /cvs/src/sys/sys/domain.h,v
retrieving revision 1.9
diff -u -p -r1.9 domain.h
--- sys/sys/domain.h 22 Feb 2009 07:47:22 -0000 1.9
+++ sys/sys/domain.h 21 Nov 2010 08:25:46 -0000
@@ -47,7 +47,7 @@ struct domain {
char *dom_name;
void (*dom_init)(void); /* initialize domain data structures */
/* externalize access rights */
- int (*dom_externalize)(struct mbuf *, socklen_t);
+ int (*dom_externalize)(struct mbuf *, __socklen_t);
/* dispose of internalized rights */
void (*dom_dispose)(struct mbuf *);
struct protosw *dom_protosw, *dom_protoswNPROTOSW;
Index: sys/sys/socket.h
===================================================================
RCS file: /cvs/src/sys/sys/socket.h,v
retrieving revision 1.70
diff -u -p -r1.70 socket.h
--- sys/sys/socket.h 5 Jul 2010 22:20:22 -0000 1.70
+++ sys/sys/socket.h 21 Nov 2010 08:25:48 -0000
@@ -35,10 +35,30 @@
#ifndef _SYS_SOCKET_H_
#define _SYS_SOCKET_H_
-/*
- * needed for ALIGNBYTES
- */
-#include <machine/param.h>
+#include <sys/cdefs.h>
+#include <sys/_types.h>
+#include <machine/param.h> /* needed for ALIGN() */
+
+#ifndef _SOCKLEN_T_DEFINED_
+#define _SOCKLEN_T_DEFINED_
+typedef __socklen_t socklen_t; /* length type for network syscalls */
+#endif
+
+#ifndef _SA_FAMILY_T_DEFINED_
+#define _SA_FAMILY_T_DEFINED_
+typedef __sa_family_t sa_family_t; /* sockaddr address family type */
+#endif
+
+#ifndef _SIZE_T_DEFINED_
+#define _SIZE_T_DEFINED_
+typedef __size_t size_t;
+#endif
+
+#ifndef _SSIZE_T_DEFINED_
+#define _SSIZE_T_DEFINED_
+typedef __ssize_t ssize_t;
+#endif
+
/*
* Definitions related to sockets: types, address families, options.
Index: sys/sys/socketvar.h
===================================================================
RCS file: /cvs/src/sys/sys/socketvar.h,v
retrieving revision 1.47
diff -u -p -r1.47 socketvar.h
--- sys/sys/socketvar.h 24 Sep 2010 02:59:46 -0000 1.47
+++ sys/sys/socketvar.h 21 Nov 2010 08:25:49 -0000
@@ -297,7 +297,7 @@ void soqinsque(struct socket *head, stru
int soqremque(struct socket *so, int q);
int soreceive(struct socket *so, struct mbuf **paddr, struct uio *uio,
struct mbuf **mp0, struct mbuf **controlp, int *flagsp,
- socklen_t controllen);
+ __socklen_t controllen);
int soreserve(struct socket *so, u_long sndcc, u_long rcvcc);
void sorflush(struct socket *so);
int sosend(struct socket *so, struct mbuf *addr, struct uio *uio,
Index: sys/sys/types.h
===================================================================
RCS file: /cvs/src/sys/sys/types.h,v
retrieving revision 1.31
diff -u -p -r1.31 types.h
--- sys/sys/types.h 16 Mar 2008 19:42:57 -0000 1.31
+++ sys/sys/types.h 21 Nov 2010 08:25:52 -0000
@@ -159,8 +159,6 @@ typedef __fsfilcnt_t fsfilcnt_t; /* file
*/
typedef __in_addr_t in_addr_t; /* base type for internet address */
typedef __in_port_t in_port_t; /* IP port type */
-typedef __sa_family_t sa_family_t; /* sockaddr address family type */
-typedef __socklen_t socklen_t; /* length type for network syscalls */
/*
* The following types may be defined in multiple header files.
Index: sys/sys/un.h
===================================================================
RCS file: /cvs/src/sys/sys/un.h,v
retrieving revision 1.10
diff -u -p -r1.10 un.h
--- sys/sys/un.h 22 Feb 2009 07:47:22 -0000 1.10
+++ sys/sys/un.h 21 Nov 2010 08:25:52 -0000
@@ -65,8 +65,19 @@ int unp_internalize(struct mbuf *, struc
void unp_dispose(struct mbuf *);
#else /* !_KERNEL */
+#include <sys/cdefs.h>
+#include <sys/_types.h>
+
+#ifndef _SA_FAMILY_T_DEFINED_
+#define _SA_FAMILY_T_DEFINED_
+typedef __sa_family_t sa_family_t; /* sockaddr address family type */
+#endif
+
+#if __BSD_VISIBLE
/* actual length of an initialized sockaddr_un */
#define SUN_LEN(su) \
(sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))
+#endif /* __BSD_VISIBLE */
+
#endif /* _KERNEL */
#endif /* !_SYS_UN_H_ */
Index: sys/netinet/in.h
===================================================================
RCS file: /cvs/src/sys/netinet/in.h,v
retrieving revision 1.85
diff -u -p -r1.85 in.h
--- sys/netinet/in.h 23 Sep 2010 04:45:15 -0000 1.85
+++ sys/netinet/in.h 21 Nov 2010 08:25:55 -0000
@@ -40,6 +40,16 @@
#ifndef _NETINET_IN_H_
#define _NETINET_IN_H_
+#include <sys/cdefs.h>
+#include <sys/_types.h>
+#include <sys/endian.h> /* XXX should be machine/endian.h? */
+
+#ifndef _SA_FAMILY_T_DEFINED_
+#define _SA_FAMILY_T_DEFINED_
+typedef __sa_family_t sa_family_t; /* sockaddr address family type */
+#endif
+
+
/*
* Protocols
*/
@@ -230,6 +240,12 @@ struct sockaddr_in {
};
/*
+ * Buffer lengths for strings containing printable IP addresses
+ */
+#define INET_ADDRSTRLEN 16
+
+#if __BSD_VISIBLE
+/*
* Structure used to describe IP options.
* Used to store options internally, to pass them to a process,
* or to restore options retrieved earlier.
@@ -329,11 +345,6 @@ struct ip_mreq {
#define IP_PORTRANGE_LOW 2 /* "low" - vouchsafe security */
/*
- * Buffer lengths for strings containing printable IP addresses
- */
-#define INET_ADDRSTRLEN 16
-
-/*
* Definitions for inet sysctl operations.
*
* Third level is protocol number.
@@ -726,15 +737,16 @@ struct ip_mreq {
NULL, \
&la_hold_total \
}
+#endif /* __BSD_VISIBLE */
/* INET6 stuff */
#define __KAME_NETINET_IN_H_INCLUDED_
#include <netinet6/in6.h>
#undef __KAME_NETINET_IN_H_INCLUDED_
-#ifndef _KERNEL
-#include <sys/cdefs.h>
+#if __BSD_VISIBLE
+#ifndef _KERNEL
__BEGIN_DECLS
int bindresvport(int, struct sockaddr_in *);
@@ -808,4 +820,5 @@ char *inet_ntoa(struct in_addr);
#define sintosa(sin) ((struct sockaddr *)(sin))
#define ifatoia(ifa) ((struct in_ifaddr *)(ifa))
#endif /* _KERNEL */
+#endif /* __BSD_VISIBLE */
#endif /* _NETINET_IN_H_ */
Index: sys/netinet6/in6.h
===================================================================
RCS file: /cvs/src/sys/netinet6/in6.h,v
retrieving revision 1.52
diff -u -p -r1.52 in6.h
--- sys/netinet6/in6.h 23 Sep 2010 04:45:15 -0000 1.52
+++ sys/netinet6/in6.h 21 Nov 2010 08:25:59 -0000
@@ -791,6 +791,13 @@ void in6_get_rand_ifid(struct ifnet *,
#define ifatoia6(ifa) ((struct in6_ifaddr *)(ifa))
#endif /* _KERNEL */
+#if __BSD_VISIBLE
+
+#ifndef _SOCKLEN_T_DEFINED_
+#define _SOCKLEN_T_DEFINED_
+typedef __socklen_t socklen_t;
+#endif
+
__BEGIN_DECLS
struct cmsghdr;
@@ -833,5 +840,7 @@ extern int inet6_rth_reverse(const void
extern int inet6_rth_segments(const void *);
extern struct in6_addr *inet6_rth_getaddr(const void *, int);
__END_DECLS
+
+#endif /* __BSD_VISIBLE */
#endif /* !_NETINET6_IN6_H_ */
Index: usr.sbin/sasyncd/sasyncd.h
===================================================================
RCS file: /cvs/src/usr.sbin/sasyncd/sasyncd.h,v
retrieving revision 1.15
diff -u -p -r1.15 sasyncd.h
--- usr.sbin/sasyncd/sasyncd.h 16 Jun 2010 17:39:05 -0000 1.15
+++ usr.sbin/sasyncd/sasyncd.h 21 Nov 2010 08:25:59 -0000
@@ -31,6 +31,7 @@
#include <sys/queue.h>
+#include <sys/socket.h>
enum RUNSTATE { INIT = 0, SLAVE, MASTER, FAIL };
#define CARPSTATES { "INIT", "SLAVE", "MASTER", "FAIL" }
Index: usr.sbin/bind/lib/isc/unix/include/isc/privsep.h
===================================================================
RCS file: /cvs/src/usr.sbin/bind/lib/isc/unix/include/isc/privsep.h,v
retrieving revision 1.2
diff -u -p -r1.2 privsep.h
--- usr.sbin/bind/lib/isc/unix/include/isc/privsep.h 19 Nov 2004 15:37:37 -0000 1.2
+++ usr.sbin/bind/lib/isc/unix/include/isc/privsep.h 21 Nov 2010 08:26:01 -0000
@@ -17,6 +17,8 @@
#ifndef _PRIVSEP_H_
#define _PRIVSEP_H_
+#include <sys/socket.h> /* for socklen_t */
+
enum cmd_types {
PRIV_BIND /* bind to a privileged port */
};
@@ -25,7 +27,6 @@ enum cmd_types {
int isc_priv_init(int);
int isc_drop_privs(const char *username, const char *dir);
-struct sockaddr;
int isc_priv_bind(int, struct sockaddr *, socklen_t);
/* File descriptor send/recv */