Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
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;   /* void * */
0012     compat_int_t    msg_namelen;
0013     compat_uptr_t   msg_iov;    /* struct compat_iovec * */
0014     compat_size_t   msg_iovlen;
0015     compat_uptr_t   msg_control;    /* void * */
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;         /* target address               */
0034     struct sockaddr rt_gateway;     /* gateway addr (RTF_GATEWAY)   */
0035     struct sockaddr rt_genmask;     /* target network mask (IP)     */
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;      /* +1 for binary compatibility! */
0043     compat_uptr_t   rt_dev;         /* forcing the device at add    */
0044     u32     rt_mtu;         /* per route MTU/Window         */
0045     u32     rt_window;      /* Window clamping              */
0046     unsigned short  rt_irtt;        /* Initial RTT                  */
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 /* NET_COMPAT_H */