diff options
Diffstat (limited to 'include/linux/socket.h')
| -rw-r--r-- | include/linux/socket.h | 80 | 
1 files changed, 35 insertions, 45 deletions
diff --git a/include/linux/socket.h b/include/linux/socket.h index 86b652fabf6..ec538fc287a 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h @@ -1,28 +1,13 @@  #ifndef _LINUX_SOCKET_H  #define _LINUX_SOCKET_H -/* - * Desired design of maximum size and alignment (see RFC2553) - */ -#define _K_SS_MAXSIZE	128	/* Implementation specific max size */ -#define _K_SS_ALIGNSIZE	(__alignof__ (struct sockaddr *)) -				/* Implementation specific desired alignment */ - -struct __kernel_sockaddr_storage { -	unsigned short	ss_family;		/* address family */ -	/* Following field(s) are implementation specific */ -	char		__data[_K_SS_MAXSIZE - sizeof(unsigned short)]; -				/* space to achieve desired size, */ -				/* _SS_MAXSIZE value minus size of ss_family */ -} __attribute__ ((aligned(_K_SS_ALIGNSIZE)));	/* force desired alignment */ - -#ifdef __KERNEL__  #include <asm/socket.h>			/* arch-dependent defines	*/  #include <linux/sockios.h>		/* the SIOCxxx I/O controls	*/  #include <linux/uio.h>			/* iovec support		*/  #include <linux/types.h>		/* pid_t			*/  #include <linux/compiler.h>		/* __user			*/ +#include <uapi/linux/socket.h>  struct pid;  struct cred; @@ -30,14 +15,12 @@ struct cred;  #define __sockaddr_check_size(size)	\  	BUILD_BUG_ON(((size) > sizeof(struct __kernel_sockaddr_storage))) -#ifdef __KERNEL__ -# ifdef CONFIG_PROC_FS +#ifdef CONFIG_PROC_FS  struct seq_file;  extern void socket_seq_show(struct seq_file *seq); -# endif -#endif /* __KERNEL__ */ +#endif -typedef unsigned short	sa_family_t; +typedef __kernel_sa_family_t	sa_family_t;  /*   *	1003.1g requires sa_family_t and that sa_data is char. @@ -62,19 +45,19 @@ struct linger {   */  struct msghdr { -	void	*	msg_name;	/* Socket name			*/ -	int		msg_namelen;	/* Length of name		*/ -	struct iovec *	msg_iov;	/* Data blocks			*/ -	__kernel_size_t	msg_iovlen;	/* Number of blocks		*/ -	void 	*	msg_control;	/* Per protocol magic (eg BSD file descriptor passing) */ -	__kernel_size_t	msg_controllen;	/* Length of cmsg list */ -	unsigned	msg_flags; +	void		*msg_name;	/* ptr to socket address structure */ +	int		msg_namelen;	/* size of socket address structure */ +	struct iovec	*msg_iov;	/* scatter/gather array */ +	__kernel_size_t	msg_iovlen;	/* # elements in msg_iov */ +	void		*msg_control;	/* ancillary data */ +	__kernel_size_t	msg_controllen;	/* ancillary data buffer length */ +	unsigned int	msg_flags;	/* flags on received message */  };  /* For recvmmsg/sendmmsg */  struct mmsghdr {  	struct msghdr   msg_hdr; -	unsigned        msg_len; +	unsigned int        msg_len;  };  /* @@ -90,7 +73,7 @@ struct cmsghdr {  };  /* - *	Ancilliary data object information MACROS + *	Ancillary data object information MACROS   *	Table 5-14 of POSIX 1003.1g   */ @@ -184,6 +167,7 @@ struct ucred {  #define AF_PPPOX	24	/* PPPoX sockets		*/  #define AF_WANPIPE	25	/* Wanpipe API Sockets */  #define AF_LLC		26	/* Linux LLC			*/ +#define AF_IB		27	/* Native InfiniBand address	*/  #define AF_CAN		29	/* Controller Area Network      */  #define AF_TIPC		30	/* TIPC sockets			*/  #define AF_BLUETOOTH	31	/* Bluetooth sockets 		*/ @@ -193,7 +177,10 @@ struct ucred {  #define AF_PHONET	35	/* Phonet sockets		*/  #define AF_IEEE802154	36	/* IEEE802154 sockets		*/  #define AF_CAIF		37	/* CAIF sockets			*/ -#define AF_MAX		38	/* For now.. */ +#define AF_ALG		38	/* Algorithm sockets		*/ +#define AF_NFC		39	/* NFC sockets			*/ +#define AF_VSOCK	40	/* vSockets			*/ +#define AF_MAX		41	/* For now.. */  /* Protocol families, same as address families. */  #define PF_UNSPEC	AF_UNSPEC @@ -225,6 +212,7 @@ struct ucred {  #define PF_PPPOX	AF_PPPOX  #define PF_WANPIPE	AF_WANPIPE  #define PF_LLC		AF_LLC +#define PF_IB		AF_IB  #define PF_CAN		AF_CAN  #define PF_TIPC		AF_TIPC  #define PF_BLUETOOTH	AF_BLUETOOTH @@ -234,6 +222,9 @@ struct ucred {  #define PF_PHONET	AF_PHONET  #define PF_IEEE802154	AF_IEEE802154  #define PF_CAIF		AF_CAIF +#define PF_ALG		AF_ALG +#define PF_NFC		AF_NFC +#define PF_VSOCK	AF_VSOCK  #define PF_MAX		AF_MAX  /* Maximum queue length specifiable by listen.  */ @@ -261,9 +252,10 @@ struct ucred {  #define MSG_NOSIGNAL	0x4000	/* Do not generate SIGPIPE */  #define MSG_MORE	0x8000	/* Sender will send more */  #define MSG_WAITFORONE	0x10000	/* recvmmsg(): block until 1+ packets avail */ - +#define MSG_SENDPAGE_NOTLAST 0x20000 /* sendpage() internal : not the last page */  #define MSG_EOF         MSG_FIN +#define MSG_FASTOPEN	0x20000000	/* Send data in TCP SYN */  #define MSG_CMSG_CLOEXEC 0x40000000	/* Set close_on_exit for file  					   descriptor received through  					   SCM_RIGHTS */ @@ -307,32 +299,30 @@ struct ucred {  #define SOL_RDS		276  #define SOL_IUCV	277  #define SOL_CAIF	278 +#define SOL_ALG		279 +#define SOL_NFC		280  /* IPX options */  #define IPX_TYPE	1 -#ifdef __KERNEL__ -extern void cred_to_ucred(struct pid *pid, const struct cred *cred, struct ucred *ucred); - -extern int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len); -extern int memcpy_fromiovecend(unsigned char *kdata, const struct iovec *iov, -			       int offset, int len);  extern int csum_partial_copy_fromiovecend(unsigned char *kdata,   					  struct iovec *iov,   					  int offset,   					  unsigned int len, __wsum *csump); +extern unsigned long iov_pages(const struct iovec *iov, int offset, +			       unsigned long nr_segs); -extern int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr *address, int mode); -extern int memcpy_toiovec(struct iovec *v, unsigned char *kdata, int len); -extern int memcpy_toiovecend(const struct iovec *v, unsigned char *kdata, -			     int offset, int len); -extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr *kaddr); +extern int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr_storage *address, int mode); +extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr_storage *kaddr);  extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data);  struct timespec; +/* The __sys_...msg variants allow MSG_CMSG_COMPAT */ +extern long __sys_recvmsg(int fd, struct msghdr __user *msg, unsigned flags); +extern long __sys_sendmsg(int fd, struct msghdr __user *msg, unsigned flags);  extern int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen,  			  unsigned int flags, struct timespec *timeout); -#endif -#endif /* not kernel and not glibc */ +extern int __sys_sendmmsg(int fd, struct mmsghdr __user *mmsg, +			  unsigned int vlen, unsigned int flags);  #endif /* _LINUX_SOCKET_H */  | 
