xref: /openbmc/linux/include/net/compat.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1  /* SPDX-License-Identifier: GPL-2.0 */
2  #ifndef NET_COMPAT_H
3  #define NET_COMPAT_H
4  
5  
6  struct sock;
7  
8  #include <linux/compat.h>
9  
10  struct compat_msghdr {
11  	compat_uptr_t	msg_name;	/* void * */
12  	compat_int_t	msg_namelen;
13  	compat_uptr_t	msg_iov;	/* struct compat_iovec * */
14  	compat_size_t	msg_iovlen;
15  	compat_uptr_t	msg_control;	/* void * */
16  	compat_size_t	msg_controllen;
17  	compat_uint_t	msg_flags;
18  };
19  
20  struct compat_mmsghdr {
21  	struct compat_msghdr msg_hdr;
22  	compat_uint_t        msg_len;
23  };
24  
25  struct compat_cmsghdr {
26  	compat_size_t	cmsg_len;
27  	compat_int_t	cmsg_level;
28  	compat_int_t	cmsg_type;
29  };
30  
31  struct compat_rtentry {
32  	u32		rt_pad1;
33  	struct sockaddr rt_dst;         /* target address               */
34  	struct sockaddr rt_gateway;     /* gateway addr (RTF_GATEWAY)   */
35  	struct sockaddr rt_genmask;     /* target network mask (IP)     */
36  	unsigned short	rt_flags;
37  	short		rt_pad2;
38  	u32		rt_pad3;
39  	unsigned char	rt_tos;
40  	unsigned char	rt_class;
41  	short		rt_pad4;
42  	short		rt_metric;      /* +1 for binary compatibility! */
43  	compat_uptr_t	rt_dev;         /* forcing the device at add    */
44  	u32		rt_mtu;         /* per route MTU/Window         */
45  	u32		rt_window;      /* Window clamping              */
46  	unsigned short  rt_irtt;        /* Initial RTT                  */
47  };
48  
49  int __get_compat_msghdr(struct msghdr *kmsg, struct compat_msghdr *msg,
50  			struct sockaddr __user **save_addr);
51  int get_compat_msghdr(struct msghdr *, struct compat_msghdr __user *,
52  		      struct sockaddr __user **, struct iovec **);
53  int put_cmsg_compat(struct msghdr*, int, int, int, void *);
54  
55  int cmsghdr_from_user_compat_to_kern(struct msghdr *, struct sock *,
56  				     unsigned char *, int);
57  
58  struct compat_group_req {
59  	__u32				 gr_interface;
60  	struct __kernel_sockaddr_storage gr_group
61  		__aligned(4);
62  } __packed;
63  
64  struct compat_group_source_req {
65  	__u32				 gsr_interface;
66  	struct __kernel_sockaddr_storage gsr_group
67  		__aligned(4);
68  	struct __kernel_sockaddr_storage gsr_source
69  		__aligned(4);
70  } __packed;
71  
72  struct compat_group_filter {
73  	union {
74  		struct {
75  			__u32				 gf_interface_aux;
76  			struct __kernel_sockaddr_storage gf_group_aux
77  				__aligned(4);
78  			__u32				 gf_fmode_aux;
79  			__u32				 gf_numsrc_aux;
80  			struct __kernel_sockaddr_storage gf_slist[1]
81  				__aligned(4);
82  		} __packed;
83  		struct {
84  			__u32				 gf_interface;
85  			struct __kernel_sockaddr_storage gf_group
86  				__aligned(4);
87  			__u32				 gf_fmode;
88  			__u32				 gf_numsrc;
89  			struct __kernel_sockaddr_storage gf_slist_flex[]
90  				__aligned(4);
91  		} __packed;
92  	};
93  } __packed;
94  
95  #endif /* NET_COMPAT_H */
96