0001
0002 #ifndef NET_COMPAT_H
0003 #define NET_COMPAT_H
0004
0005
0006 struct sock;
0007
0008 #include <linux/compat.h>
0009
0010 struct compat_msghdr {
0011 compat_uptr_t msg_name;
0012 compat_int_t msg_namelen;
0013 compat_uptr_t msg_iov;
0014 compat_size_t msg_iovlen;
0015 compat_uptr_t msg_control;
0016 compat_size_t msg_controllen;
0017 compat_uint_t msg_flags;
0018 };
0019
0020 struct compat_mmsghdr {
0021 struct compat_msghdr msg_hdr;
0022 compat_uint_t msg_len;
0023 };
0024
0025 struct compat_cmsghdr {
0026 compat_size_t cmsg_len;
0027 compat_int_t cmsg_level;
0028 compat_int_t cmsg_type;
0029 };
0030
0031 struct compat_rtentry {
0032 u32 rt_pad1;
0033 struct sockaddr rt_dst;
0034 struct sockaddr rt_gateway;
0035 struct sockaddr rt_genmask;
0036 unsigned short rt_flags;
0037 short rt_pad2;
0038 u32 rt_pad3;
0039 unsigned char rt_tos;
0040 unsigned char rt_class;
0041 short rt_pad4;
0042 short rt_metric;
0043 compat_uptr_t rt_dev;
0044 u32 rt_mtu;
0045 u32 rt_window;
0046 unsigned short rt_irtt;
0047 };
0048
0049 int __get_compat_msghdr(struct msghdr *kmsg, struct compat_msghdr *msg,
0050 struct sockaddr __user **save_addr);
0051 int get_compat_msghdr(struct msghdr *, struct compat_msghdr __user *,
0052 struct sockaddr __user **, struct iovec **);
0053 int put_cmsg_compat(struct msghdr*, int, int, int, void *);
0054
0055 int cmsghdr_from_user_compat_to_kern(struct msghdr *, struct sock *,
0056 unsigned char *, int);
0057
0058 struct compat_group_req {
0059 __u32 gr_interface;
0060 struct __kernel_sockaddr_storage gr_group
0061 __aligned(4);
0062 } __packed;
0063
0064 struct compat_group_source_req {
0065 __u32 gsr_interface;
0066 struct __kernel_sockaddr_storage gsr_group
0067 __aligned(4);
0068 struct __kernel_sockaddr_storage gsr_source
0069 __aligned(4);
0070 } __packed;
0071
0072 struct compat_group_filter {
0073 union {
0074 struct {
0075 __u32 gf_interface_aux;
0076 struct __kernel_sockaddr_storage gf_group_aux
0077 __aligned(4);
0078 __u32 gf_fmode_aux;
0079 __u32 gf_numsrc_aux;
0080 struct __kernel_sockaddr_storage gf_slist[1]
0081 __aligned(4);
0082 } __packed;
0083 struct {
0084 __u32 gf_interface;
0085 struct __kernel_sockaddr_storage gf_group
0086 __aligned(4);
0087 __u32 gf_fmode;
0088 __u32 gf_numsrc;
0089 struct __kernel_sockaddr_storage gf_slist_flex[]
0090 __aligned(4);
0091 } __packed;
0092 };
0093 } __packed;
0094
0095 #endif