in.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /*
  2. * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <Kernel/API/POSIX/sys/socket.h>
  8. #include <Kernel/API/POSIX/sys/types.h>
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. typedef uint32_t in_addr_t;
  13. #define INADDR_ANY ((in_addr_t)0)
  14. #define INADDR_NONE ((in_addr_t)-1)
  15. #define INADDR_LOOPBACK 0x7f000001
  16. #define INADDR_BROADCAST 0xffffffff
  17. #define IN_CLASSA_NET 0xff000000
  18. #define IN_CLASSB_NET 0xffff0000
  19. #define IN_CLASSC_NET 0xffffff00
  20. #define IN_LOOPBACKNET 127
  21. #define IP_TOS 1
  22. #define IP_TTL 2
  23. #define IP_MULTICAST_LOOP 3
  24. #define IP_ADD_MEMBERSHIP 4
  25. #define IP_DROP_MEMBERSHIP 5
  26. #define IP_MULTICAST_IF 6
  27. #define IP_MULTICAST_TTL 7
  28. #define IP_BLOCK_SOURCE 8
  29. #define IP_UNBLOCK_SOURCE 9
  30. #define IP_OPTIONS 10
  31. #define IPTOS_LOWDELAY 16
  32. #define IPTOS_THROUGHPUT 8
  33. #define IPTOS_RELIABILITY 4
  34. /* Make sure these don't overlap with any other IPv4 and IPv6 options */
  35. #define MCAST_JOIN_SOURCE_GROUP 100
  36. #define MCAST_LEAVE_SOURCE_GROUP 101
  37. #define IPPORT_RESERVED 1024
  38. #define IPPORT_USERRESERVED 5000
  39. typedef uint16_t in_port_t;
  40. struct in_addr {
  41. uint32_t s_addr;
  42. };
  43. struct sockaddr_in {
  44. sa_family_t sin_family;
  45. in_port_t sin_port;
  46. struct in_addr sin_addr;
  47. char sin_zero[8];
  48. };
  49. struct ip_mreq {
  50. struct in_addr imr_multiaddr;
  51. struct in_addr imr_interface;
  52. };
  53. struct group_source_req {
  54. uint32_t gsr_interface;
  55. struct sockaddr_storage gsr_group;
  56. struct sockaddr_storage gsr_source;
  57. };
  58. struct ip_mreq_source {
  59. struct in_addr imr_multiaddr;
  60. struct in_addr imr_sourceaddr;
  61. struct in_addr imr_interface;
  62. };
  63. #define IPV6_UNICAST_HOPS 1
  64. #define IPV6_MULTICAST_HOPS 2
  65. #define IPV6_MULTICAST_LOOP 3
  66. #define IPV6_MULTICAST_IF 4
  67. #define IPV6_ADD_MEMBERSHIP 5
  68. #define IPV6_DROP_MEMBERSHIP 6
  69. #define IP_ADD_SOURCE_MEMBERSHIP 7
  70. #define IP_DROP_SOURCE_MEMBERSHIP 8
  71. #define IPV6_V6ONLY 9
  72. #define IPV6_JOIN_GROUP 5
  73. #define IPV6_LEAVE_GROUP 6
  74. #define IPV6_RECVPKTINFO 10
  75. #define IPV6_PKTINFO 11
  76. #define IPV6_RECVHOPLIMIT 12
  77. #define IPV6_HOPLIMIT 13
  78. struct in6_addr {
  79. union {
  80. uint8_t s6_addr[16];
  81. uint32_t s6_addr32[4];
  82. };
  83. };
  84. struct in6_pktinfo {
  85. struct in6_addr ipi6_addr;
  86. uint32_t ipi6_ifindex;
  87. };
  88. /* clang-format off */
  89. #define IN6ADDR_ANY_INIT { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } }
  90. #define IN6ADDR_LOOPBACK_INIT { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 } } }
  91. /* clang-format on */
  92. extern const struct in6_addr in6addr_any;
  93. extern const struct in6_addr in6addr_loopback;
  94. struct sockaddr_in6 {
  95. sa_family_t sin6_family; // AF_INET6.
  96. in_port_t sin6_port; // Port number.
  97. uint32_t sin6_flowinfo; // IPv6 traffic class and flow information.
  98. struct in6_addr sin6_addr; // IPv6 address.
  99. uint32_t sin6_scope_id; // Set of interfaces for a scop
  100. };
  101. struct ipv6_mreq {
  102. struct in6_addr ipv6mr_multiaddr;
  103. uint32_t ipv6mr_interface;
  104. };
  105. #ifdef __cplusplus
  106. }
  107. #endif