xref: /linux/include/net/compat.h (revision 01b944fe1cd4e21a2a9ed51adbdbafe2d5e905ba)
11da177e4SLinus Torvalds #ifndef NET_COMPAT_H
21da177e4SLinus Torvalds #define NET_COMPAT_H
31da177e4SLinus Torvalds 
41da177e4SLinus Torvalds 
529f767a2SAndrew Morton struct sock;
629f767a2SAndrew Morton 
71da177e4SLinus Torvalds #if defined(CONFIG_COMPAT)
81da177e4SLinus Torvalds 
91da177e4SLinus Torvalds #include <linux/compat.h>
101da177e4SLinus Torvalds 
111da177e4SLinus Torvalds struct compat_msghdr {
121da177e4SLinus Torvalds 	compat_uptr_t	msg_name;	/* void * */
131da177e4SLinus Torvalds 	compat_int_t	msg_namelen;
141da177e4SLinus Torvalds 	compat_uptr_t	msg_iov;	/* struct compat_iovec * */
151da177e4SLinus Torvalds 	compat_size_t	msg_iovlen;
161da177e4SLinus Torvalds 	compat_uptr_t	msg_control;	/* void * */
171da177e4SLinus Torvalds 	compat_size_t	msg_controllen;
181da177e4SLinus Torvalds 	compat_uint_t	msg_flags;
191da177e4SLinus Torvalds };
201da177e4SLinus Torvalds 
21a2e27255SArnaldo Carvalho de Melo struct compat_mmsghdr {
22a2e27255SArnaldo Carvalho de Melo 	struct compat_msghdr msg_hdr;
23a2e27255SArnaldo Carvalho de Melo 	compat_uint_t        msg_len;
24a2e27255SArnaldo Carvalho de Melo };
25a2e27255SArnaldo Carvalho de Melo 
261da177e4SLinus Torvalds struct compat_cmsghdr {
271da177e4SLinus Torvalds 	compat_size_t	cmsg_len;
281da177e4SLinus Torvalds 	compat_int_t	cmsg_level;
291da177e4SLinus Torvalds 	compat_int_t	cmsg_type;
301da177e4SLinus Torvalds };
311da177e4SLinus Torvalds 
32e8d895a4SJoe Perches int compat_sock_get_timestamp(struct sock *, struct timeval __user *);
33e8d895a4SJoe Perches int compat_sock_get_timestampns(struct sock *, struct timespec __user *);
34f0ac2614SShaun Pereira 
351da177e4SLinus Torvalds #else /* defined(CONFIG_COMPAT) */
3674887977SArnaldo Carvalho de Melo /*
3774887977SArnaldo Carvalho de Melo  * To avoid compiler warnings:
3874887977SArnaldo Carvalho de Melo  */
3974887977SArnaldo Carvalho de Melo #define compat_msghdr	msghdr
4074887977SArnaldo Carvalho de Melo #define compat_mmsghdr	mmsghdr
411da177e4SLinus Torvalds #endif /* defined(CONFIG_COMPAT) */
421da177e4SLinus Torvalds 
43da184284SAl Viro int get_compat_msghdr(struct msghdr *, struct compat_msghdr __user *,
4408adb7daSAl Viro 		      struct sockaddr __user **, struct iovec **);
45e8d895a4SJoe Perches asmlinkage long compat_sys_sendmsg(int, struct compat_msghdr __user *,
46e8d895a4SJoe Perches 				   unsigned int);
47e8d895a4SJoe Perches asmlinkage long compat_sys_sendmmsg(int, struct compat_mmsghdr __user *,
4895c96174SEric Dumazet 				    unsigned int, unsigned int);
49e8d895a4SJoe Perches asmlinkage long compat_sys_recvmsg(int, struct compat_msghdr __user *,
50e8d895a4SJoe Perches 				   unsigned int);
51e8d895a4SJoe Perches asmlinkage long compat_sys_recvmmsg(int, struct compat_mmsghdr __user *,
5295c96174SEric Dumazet 				    unsigned int, unsigned int,
5360c2ffd3SHeiko Carstens 				    struct compat_timespec __user *);
54e8d895a4SJoe Perches asmlinkage long compat_sys_getsockopt(int, int, int, char __user *,
55e8d895a4SJoe Perches 				      int __user *);
56e8d895a4SJoe Perches int put_cmsg_compat(struct msghdr*, int, int, int, void *);
57e50ef933SDavid S. Miller 
58e8d895a4SJoe Perches int cmsghdr_from_user_compat_to_kern(struct msghdr *, struct sock *,
59e8d895a4SJoe Perches 				     unsigned char *, int);
601da177e4SLinus Torvalds 
61e8d895a4SJoe Perches int compat_mc_setsockopt(struct sock *, int, int, char __user *, unsigned int,
62e8d895a4SJoe Perches 			 int (*)(struct sock *, int, int, char __user *,
63e8d895a4SJoe Perches 				 unsigned int));
64e8d895a4SJoe Perches int compat_mc_getsockopt(struct sock *, int, int, char __user *, int __user *,
65e8d895a4SJoe Perches 			 int (*)(struct sock *, int, int, char __user *,
6642908c69SDavid L Stevens 				 int __user *));
67dae50295SDavid L Stevens 
681da177e4SLinus Torvalds #endif /* NET_COMPAT_H */
69