1 // Copyright (C) 2017 The Android Open Source Project
2 // SPDX-License-Identifier: BSD-2-Clause
3
4 #include <netinet/in.h>
5
6 #include "header_checks.h"
7
netinet_in_h()8 static void netinet_in_h() {
9 TYPE(in_port_t);
10 TYPE(in_addr_t);
11 TYPE(sa_family_t);
12 TYPE(uint8_t);
13 TYPE(uint32_t);
14
15 TYPE(struct in_addr);
16 STRUCT_MEMBER(struct in_addr, in_addr_t, s_addr);
17
18 TYPE(struct sockaddr_in);
19 STRUCT_MEMBER(struct sockaddr_in, sa_family_t, sin_family);
20 STRUCT_MEMBER(struct sockaddr_in, in_port_t, sin_port);
21 STRUCT_MEMBER(struct sockaddr_in, struct in_addr, sin_addr);
22
23 TYPE(struct in6_addr);
24 STRUCT_MEMBER_ARRAY(struct in6_addr, uint8_t/*[]*/, s6_addr);
25
26 TYPE(struct sockaddr_in6);
27 STRUCT_MEMBER(struct sockaddr_in6, sa_family_t, sin6_family);
28 STRUCT_MEMBER(struct sockaddr_in6, in_port_t, sin6_port);
29 STRUCT_MEMBER(struct sockaddr_in6, uint32_t, sin6_flowinfo);
30 STRUCT_MEMBER(struct sockaddr_in6, struct in6_addr, sin6_addr);
31 STRUCT_MEMBER(struct sockaddr_in6, uint32_t, sin6_scope_id);
32
33 struct in6_addr any_global = in6addr_any;
34 struct in6_addr any_macro = IN6ADDR_ANY_INIT;
35 struct in6_addr loop_global = in6addr_loopback;
36 struct in6_addr loop_macro = IN6ADDR_LOOPBACK_INIT;
37
38 TYPE(struct ipv6_mreq);
39 STRUCT_MEMBER(struct ipv6_mreq, struct in6_addr, ipv6mr_multiaddr);
40 #if defined(__BIONIC__) // Currently comes from uapi header.
41 STRUCT_MEMBER(struct ipv6_mreq, int, ipv6mr_interface);
42 #else
43 STRUCT_MEMBER(struct ipv6_mreq, unsigned, ipv6mr_interface);
44 #endif
45
46 MACRO(IPPROTO_IP);
47 MACRO(IPPROTO_IPV6);
48 MACRO(IPPROTO_ICMP);
49 MACRO(IPPROTO_RAW);
50 MACRO(IPPROTO_TCP);
51 MACRO(IPPROTO_UDP);
52
53 MACRO(INADDR_ANY);
54 MACRO(INADDR_BROADCAST);
55
56 MACRO_VALUE(INET_ADDRSTRLEN, 16);
57
58 FUNCTION(htonl, uint32_t (*f)(uint32_t));
59 FUNCTION(htons, uint16_t (*f)(uint16_t));
60 FUNCTION(ntohl, uint32_t (*f)(uint32_t));
61 FUNCTION(ntohs, uint16_t (*f)(uint16_t));
62
63 MACRO_VALUE(INET6_ADDRSTRLEN, 46);
64
65 MACRO(IPV6_JOIN_GROUP);
66 MACRO(IPV6_LEAVE_GROUP);
67 MACRO(IPV6_MULTICAST_HOPS);
68 MACRO(IPV6_MULTICAST_IF);
69 MACRO(IPV6_MULTICAST_LOOP);
70 MACRO(IPV6_UNICAST_HOPS);
71 MACRO(IPV6_V6ONLY);
72
73 #if !defined(IN6_IS_ADDR_UNSPECIFIED)
74 #error IN6_IS_ADDR_UNSPECIFIED
75 #endif
76 #if !defined(IN6_IS_ADDR_LOOPBACK)
77 #error IN6_IS_ADDR_LOOPBACK
78 #endif
79 #if !defined(IN6_IS_ADDR_MULTICAST)
80 #error IN6_IS_ADDR_MULTICAST
81 #endif
82 #if !defined(IN6_IS_ADDR_LINKLOCAL)
83 #error IN6_IS_ADDR_LINKLOCAL
84 #endif
85 #if !defined(IN6_IS_ADDR_SITELOCAL)
86 #error IN6_IS_ADDR_SITELOCAL
87 #endif
88 #if !defined(IN6_IS_ADDR_V4MAPPED)
89 #error IN6_IS_ADDR_V4MAPPED
90 #endif
91 #if !defined(IN6_IS_ADDR_V4COMPAT)
92 #error IN6_IS_ADDR_V4COMPAT
93 #endif
94 #if !defined(IN6_IS_ADDR_MC_NODELOCAL)
95 #error IN6_IS_ADDR_MC_NODELOCAL
96 #endif
97 #if !defined(IN6_IS_ADDR_MC_LINKLOCAL)
98 #error IN6_IS_ADDR_MC_LINKLOCAL
99 #endif
100 #if !defined(IN6_IS_ADDR_MC_SITELOCAL)
101 #error IN6_IS_ADDR_MC_SITELOCAL
102 #endif
103 #if !defined(IN6_IS_ADDR_MC_ORGLOCAL)
104 #error IN6_IS_ADDR_MC_ORGLOCAL
105 #endif
106 #if !defined(IN6_IS_ADDR_MC_GLOBAL)
107 #error IN6_IS_ADDR_MC_GLOBAL
108 #endif
109 }
110