mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	this is in preparation for multishot receive from io_uring, where it needs to have access to the original struct user_msghdr. functionally this should be a no-op. Acked-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Dylan Yudaken <dylany@fb.com> Link: https://lore.kernel.org/r/20220714110258.1336200-3-dylany@fb.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
		
			
				
	
	
		
			95 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0 */
 | 
						|
#ifndef NET_COMPAT_H
 | 
						|
#define NET_COMPAT_H
 | 
						|
 | 
						|
 | 
						|
struct sock;
 | 
						|
 | 
						|
#include <linux/compat.h>
 | 
						|
 | 
						|
struct compat_msghdr {
 | 
						|
	compat_uptr_t	msg_name;	/* void * */
 | 
						|
	compat_int_t	msg_namelen;
 | 
						|
	compat_uptr_t	msg_iov;	/* struct compat_iovec * */
 | 
						|
	compat_size_t	msg_iovlen;
 | 
						|
	compat_uptr_t	msg_control;	/* void * */
 | 
						|
	compat_size_t	msg_controllen;
 | 
						|
	compat_uint_t	msg_flags;
 | 
						|
};
 | 
						|
 | 
						|
struct compat_mmsghdr {
 | 
						|
	struct compat_msghdr msg_hdr;
 | 
						|
	compat_uint_t        msg_len;
 | 
						|
};
 | 
						|
 | 
						|
struct compat_cmsghdr {
 | 
						|
	compat_size_t	cmsg_len;
 | 
						|
	compat_int_t	cmsg_level;
 | 
						|
	compat_int_t	cmsg_type;
 | 
						|
};
 | 
						|
 | 
						|
struct compat_rtentry {
 | 
						|
	u32		rt_pad1;
 | 
						|
	struct sockaddr rt_dst;         /* target address               */
 | 
						|
	struct sockaddr rt_gateway;     /* gateway addr (RTF_GATEWAY)   */
 | 
						|
	struct sockaddr rt_genmask;     /* target network mask (IP)     */
 | 
						|
	unsigned short	rt_flags;
 | 
						|
	short		rt_pad2;
 | 
						|
	u32		rt_pad3;
 | 
						|
	unsigned char	rt_tos;
 | 
						|
	unsigned char	rt_class;
 | 
						|
	short		rt_pad4;
 | 
						|
	short		rt_metric;      /* +1 for binary compatibility! */
 | 
						|
	compat_uptr_t	rt_dev;         /* forcing the device at add    */
 | 
						|
	u32		rt_mtu;         /* per route MTU/Window         */
 | 
						|
	u32		rt_window;      /* Window clamping              */
 | 
						|
	unsigned short  rt_irtt;        /* Initial RTT                  */
 | 
						|
};
 | 
						|
 | 
						|
int __get_compat_msghdr(struct msghdr *kmsg, struct compat_msghdr *msg,
 | 
						|
			struct sockaddr __user **save_addr);
 | 
						|
int get_compat_msghdr(struct msghdr *, struct compat_msghdr __user *,
 | 
						|
		      struct sockaddr __user **, struct iovec **);
 | 
						|
int put_cmsg_compat(struct msghdr*, int, int, int, void *);
 | 
						|
 | 
						|
int cmsghdr_from_user_compat_to_kern(struct msghdr *, struct sock *,
 | 
						|
				     unsigned char *, int);
 | 
						|
 | 
						|
struct compat_group_req {
 | 
						|
	__u32				 gr_interface;
 | 
						|
	struct __kernel_sockaddr_storage gr_group
 | 
						|
		__aligned(4);
 | 
						|
} __packed;
 | 
						|
 | 
						|
struct compat_group_source_req {
 | 
						|
	__u32				 gsr_interface;
 | 
						|
	struct __kernel_sockaddr_storage gsr_group
 | 
						|
		__aligned(4);
 | 
						|
	struct __kernel_sockaddr_storage gsr_source
 | 
						|
		__aligned(4);
 | 
						|
} __packed;
 | 
						|
 | 
						|
struct compat_group_filter {
 | 
						|
	union {
 | 
						|
		struct {
 | 
						|
			__u32				 gf_interface_aux;
 | 
						|
			struct __kernel_sockaddr_storage gf_group_aux
 | 
						|
				__aligned(4);
 | 
						|
			__u32				 gf_fmode_aux;
 | 
						|
			__u32				 gf_numsrc_aux;
 | 
						|
			struct __kernel_sockaddr_storage gf_slist[1]
 | 
						|
				__aligned(4);
 | 
						|
		} __packed;
 | 
						|
		struct {
 | 
						|
			__u32				 gf_interface;
 | 
						|
			struct __kernel_sockaddr_storage gf_group
 | 
						|
				__aligned(4);
 | 
						|
			__u32				 gf_fmode;
 | 
						|
			__u32				 gf_numsrc;
 | 
						|
			struct __kernel_sockaddr_storage gf_slist_flex[]
 | 
						|
				__aligned(4);
 | 
						|
		} __packed;
 | 
						|
	};
 | 
						|
} __packed;
 | 
						|
 | 
						|
#endif /* NET_COMPAT_H */
 |