162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef NET_COMPAT_H 362306a36Sopenharmony_ci#define NET_COMPAT_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci 662306a36Sopenharmony_cistruct sock; 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include <linux/compat.h> 962306a36Sopenharmony_ci 1062306a36Sopenharmony_cistruct compat_msghdr { 1162306a36Sopenharmony_ci compat_uptr_t msg_name; /* void * */ 1262306a36Sopenharmony_ci compat_int_t msg_namelen; 1362306a36Sopenharmony_ci compat_uptr_t msg_iov; /* struct compat_iovec * */ 1462306a36Sopenharmony_ci compat_size_t msg_iovlen; 1562306a36Sopenharmony_ci compat_uptr_t msg_control; /* void * */ 1662306a36Sopenharmony_ci compat_size_t msg_controllen; 1762306a36Sopenharmony_ci compat_uint_t msg_flags; 1862306a36Sopenharmony_ci}; 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_cistruct compat_mmsghdr { 2162306a36Sopenharmony_ci struct compat_msghdr msg_hdr; 2262306a36Sopenharmony_ci compat_uint_t msg_len; 2362306a36Sopenharmony_ci}; 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_cistruct compat_cmsghdr { 2662306a36Sopenharmony_ci compat_size_t cmsg_len; 2762306a36Sopenharmony_ci compat_int_t cmsg_level; 2862306a36Sopenharmony_ci compat_int_t cmsg_type; 2962306a36Sopenharmony_ci}; 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_cistruct compat_rtentry { 3262306a36Sopenharmony_ci u32 rt_pad1; 3362306a36Sopenharmony_ci struct sockaddr rt_dst; /* target address */ 3462306a36Sopenharmony_ci struct sockaddr rt_gateway; /* gateway addr (RTF_GATEWAY) */ 3562306a36Sopenharmony_ci struct sockaddr rt_genmask; /* target network mask (IP) */ 3662306a36Sopenharmony_ci unsigned short rt_flags; 3762306a36Sopenharmony_ci short rt_pad2; 3862306a36Sopenharmony_ci u32 rt_pad3; 3962306a36Sopenharmony_ci unsigned char rt_tos; 4062306a36Sopenharmony_ci unsigned char rt_class; 4162306a36Sopenharmony_ci short rt_pad4; 4262306a36Sopenharmony_ci short rt_metric; /* +1 for binary compatibility! */ 4362306a36Sopenharmony_ci compat_uptr_t rt_dev; /* forcing the device at add */ 4462306a36Sopenharmony_ci u32 rt_mtu; /* per route MTU/Window */ 4562306a36Sopenharmony_ci u32 rt_window; /* Window clamping */ 4662306a36Sopenharmony_ci unsigned short rt_irtt; /* Initial RTT */ 4762306a36Sopenharmony_ci}; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ciint __get_compat_msghdr(struct msghdr *kmsg, struct compat_msghdr *msg, 5062306a36Sopenharmony_ci struct sockaddr __user **save_addr); 5162306a36Sopenharmony_ciint get_compat_msghdr(struct msghdr *, struct compat_msghdr __user *, 5262306a36Sopenharmony_ci struct sockaddr __user **, struct iovec **); 5362306a36Sopenharmony_ciint put_cmsg_compat(struct msghdr*, int, int, int, void *); 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ciint cmsghdr_from_user_compat_to_kern(struct msghdr *, struct sock *, 5662306a36Sopenharmony_ci unsigned char *, int); 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_cistruct compat_group_req { 5962306a36Sopenharmony_ci __u32 gr_interface; 6062306a36Sopenharmony_ci struct __kernel_sockaddr_storage gr_group 6162306a36Sopenharmony_ci __aligned(4); 6262306a36Sopenharmony_ci} __packed; 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_cistruct compat_group_source_req { 6562306a36Sopenharmony_ci __u32 gsr_interface; 6662306a36Sopenharmony_ci struct __kernel_sockaddr_storage gsr_group 6762306a36Sopenharmony_ci __aligned(4); 6862306a36Sopenharmony_ci struct __kernel_sockaddr_storage gsr_source 6962306a36Sopenharmony_ci __aligned(4); 7062306a36Sopenharmony_ci} __packed; 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_cistruct compat_group_filter { 7362306a36Sopenharmony_ci union { 7462306a36Sopenharmony_ci struct { 7562306a36Sopenharmony_ci __u32 gf_interface_aux; 7662306a36Sopenharmony_ci struct __kernel_sockaddr_storage gf_group_aux 7762306a36Sopenharmony_ci __aligned(4); 7862306a36Sopenharmony_ci __u32 gf_fmode_aux; 7962306a36Sopenharmony_ci __u32 gf_numsrc_aux; 8062306a36Sopenharmony_ci struct __kernel_sockaddr_storage gf_slist[1] 8162306a36Sopenharmony_ci __aligned(4); 8262306a36Sopenharmony_ci } __packed; 8362306a36Sopenharmony_ci struct { 8462306a36Sopenharmony_ci __u32 gf_interface; 8562306a36Sopenharmony_ci struct __kernel_sockaddr_storage gf_group 8662306a36Sopenharmony_ci __aligned(4); 8762306a36Sopenharmony_ci __u32 gf_fmode; 8862306a36Sopenharmony_ci __u32 gf_numsrc; 8962306a36Sopenharmony_ci struct __kernel_sockaddr_storage gf_slist_flex[] 9062306a36Sopenharmony_ci __aligned(4); 9162306a36Sopenharmony_ci } __packed; 9262306a36Sopenharmony_ci }; 9362306a36Sopenharmony_ci} __packed; 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci#endif /* NET_COMPAT_H */ 96