blob: 6e0be1c64b8358211de9c5706b1fc5a4adb7ca02 [file] [log] [blame]
Elliott Hughes21b56eb2017-10-20 17:57:17 -07001/*
2 * Copyright (C) 2017 The Android Open Source Project
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in
12 * the documentation and/or other materials provided with the
13 * distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 */
28
29#include <netinet/in.h>
30
31#include "header_checks.h"
32
33static void netinet_in_h() {
34 TYPE(in_port_t);
35 TYPE(in_addr_t);
36 TYPE(sa_family_t);
37 TYPE(uint8_t);
38 TYPE(uint32_t);
39
40 TYPE(struct in_addr);
41 STRUCT_MEMBER(struct in_addr, in_addr_t, s_addr);
42
43 TYPE(struct sockaddr_in);
44 STRUCT_MEMBER(struct sockaddr_in, sa_family_t, sin_family);
45 STRUCT_MEMBER(struct sockaddr_in, in_port_t, sin_port);
46 STRUCT_MEMBER(struct sockaddr_in, struct in_addr, sin_addr);
47
48 TYPE(struct in6_addr);
49 STRUCT_MEMBER_ARRAY(struct in6_addr, uint8_t/*[]*/, s6_addr);
50
51 TYPE(struct sockaddr_in6);
52 STRUCT_MEMBER(struct sockaddr_in6, sa_family_t, sin6_family);
53 STRUCT_MEMBER(struct sockaddr_in6, in_port_t, sin6_port);
54 STRUCT_MEMBER(struct sockaddr_in6, uint32_t, sin6_flowinfo);
55 STRUCT_MEMBER(struct sockaddr_in6, struct in6_addr, sin6_addr);
56 STRUCT_MEMBER(struct sockaddr_in6, uint32_t, sin6_scope_id);
57
58 struct in6_addr any_global = in6addr_any;
59 struct in6_addr any_macro = IN6ADDR_ANY_INIT;
60 struct in6_addr loop_global = in6addr_loopback;
61 struct in6_addr loop_macro = IN6ADDR_LOOPBACK_INIT;
62
63 TYPE(struct ipv6_mreq);
64 STRUCT_MEMBER(struct ipv6_mreq, struct in6_addr, ipv6mr_multiaddr);
65#if defined(__BIONIC__)
66 STRUCT_MEMBER(struct ipv6_mreq, int, ipv6mr_interface);
67#else
68 STRUCT_MEMBER(struct ipv6_mreq, unsigned, ipv6mr_interface);
69#endif
70
71 MACRO(IPPROTO_IP);
72 MACRO(IPPROTO_IPV6);
73 MACRO(IPPROTO_ICMP);
74 MACRO(IPPROTO_RAW);
75 MACRO(IPPROTO_TCP);
76 MACRO(IPPROTO_UDP);
77
78 MACRO(INADDR_ANY);
79 MACRO(INADDR_BROADCAST);
80
81 MACRO_VALUE(INET_ADDRSTRLEN, 16);
82
83 FUNCTION(htonl, uint32_t (*f)(uint32_t));
84 FUNCTION(htons, uint16_t (*f)(uint16_t));
85 FUNCTION(ntohl, uint32_t (*f)(uint32_t));
86 FUNCTION(ntohs, uint16_t (*f)(uint16_t));
87
88 MACRO_VALUE(INET6_ADDRSTRLEN, 46);
89
90 MACRO(IPV6_JOIN_GROUP);
91 MACRO(IPV6_LEAVE_GROUP);
92 MACRO(IPV6_MULTICAST_HOPS);
93 MACRO(IPV6_MULTICAST_IF);
94 MACRO(IPV6_MULTICAST_LOOP);
95 MACRO(IPV6_UNICAST_HOPS);
96 MACRO(IPV6_V6ONLY);
97
98#if !defined(IN6_IS_ADDR_UNSPECIFIED)
99#error IN6_IS_ADDR_UNSPECIFIED
100#endif
101#if !defined(IN6_IS_ADDR_LOOPBACK)
102#error IN6_IS_ADDR_LOOPBACK
103#endif
104#if !defined(IN6_IS_ADDR_MULTICAST)
105#error IN6_IS_ADDR_MULTICAST
106#endif
107#if !defined(IN6_IS_ADDR_LINKLOCAL)
108#error IN6_IS_ADDR_LINKLOCAL
109#endif
110#if !defined(IN6_IS_ADDR_SITELOCAL)
111#error IN6_IS_ADDR_SITELOCAL
112#endif
113#if !defined(IN6_IS_ADDR_V4MAPPED)
114#error IN6_IS_ADDR_V4MAPPED
115#endif
116#if !defined(IN6_IS_ADDR_V4COMPAT)
117#error IN6_IS_ADDR_V4COMPAT
118#endif
119#if !defined(IN6_IS_ADDR_MC_NODELOCAL)
120#error IN6_IS_ADDR_MC_NODELOCAL
121#endif
122#if !defined(IN6_IS_ADDR_MC_LINKLOCAL)
123#error IN6_IS_ADDR_MC_LINKLOCAL
124#endif
125#if !defined(IN6_IS_ADDR_MC_SITELOCAL)
126#error IN6_IS_ADDR_MC_SITELOCAL
127#endif
128#if !defined(IN6_IS_ADDR_MC_ORGLOCAL)
129#error IN6_IS_ADDR_MC_ORGLOCAL
130#endif
131#if !defined(IN6_IS_ADDR_MC_GLOBAL)
132#error IN6_IS_ADDR_MC_GLOBAL
133#endif
134}