compat.h 2.5 KB

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