blob: fcab298bbbdf3f265f71d9b34bcdc09e66cb2e2f [file] [log] [blame]
Rich Felker0b44a032011-02-12 00:22:29 -05001#ifndef _NETINET_IN_H
2#define _NETINET_IN_H
3
Rich Felker3ed8c9f2011-11-10 20:40:06 -05004#ifdef __cplusplus
5extern "C" {
6#endif
7
Szabolcs Nagy119645b2013-01-11 01:54:53 +01008#include <features.h>
9
Rich Felker0b44a032011-02-12 00:22:29 -050010#define __NEED_in_addr_t
11#define __NEED_in_port_t
12#define __NEED_sa_family_t
13#define __NEED_struct_in_addr
14#define __NEED_uint8_t
15#define __NEED_uint16_t
16#define __NEED_uint32_t
17
18#include <bits/alltypes.h>
19
20struct sockaddr_in
21{
22 sa_family_t sin_family;
23 in_port_t sin_port;
24 struct in_addr sin_addr;
25 uint8_t sin_zero[8];
26};
27
28struct in6_addr
29{
30 union {
31 uint8_t __s6_addr[16];
Rich Felkerca2d3c62012-05-03 22:12:46 -040032 uint16_t __s6_addr16[8];
Rich Felker0b44a032011-02-12 00:22:29 -050033 uint32_t __s6_addr32[4];
34 } __in6_union;
35};
36#define s6_addr __in6_union.__s6_addr
Rich Felkerca2d3c62012-05-03 22:12:46 -040037#define s6_addr16 __in6_union.__s6_addr16
Rich Felker0b44a032011-02-12 00:22:29 -050038#define s6_addr32 __in6_union.__s6_addr32
39
40struct sockaddr_in6
41{
42 sa_family_t sin6_family;
43 in_port_t sin6_port;
44 uint32_t sin6_flowinfo;
45 struct in6_addr sin6_addr;
46 uint32_t sin6_scope_id;
47};
48
49struct ipv6_mreq
50{
51 struct in6_addr ipv6mr_multiaddr;
52 unsigned ipv6mr_interface;
53};
54
55#define INADDR_ANY ((in_addr_t) 0x00000000)
56#define INADDR_BROADCAST ((in_addr_t) 0xffffffff)
57#define INADDR_NONE ((in_addr_t) 0xffffffff)
58#define INADDR_LOOPBACK ((in_addr_t) 0x7f000001)
59
60#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }
61#define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } }
62
63extern const struct in6_addr in6addr_any, in6addr_loopback;
64
65#undef INET_ADDRSTRLEN
66#undef INET6_ADDRSTRLEN
67#define INET_ADDRSTRLEN 16
68#define INET6_ADDRSTRLEN 46
69
70uint32_t htonl(uint32_t);
71uint16_t htons(uint16_t);
72uint32_t ntohl(uint32_t);
73uint16_t ntohs(uint16_t);
74
75#define IPPROTO_IP 0
Rich Felkerb10d0232012-09-08 19:52:51 -040076#define IPPROTO_HOPOPTS 0
Rich Felker0b44a032011-02-12 00:22:29 -050077#define IPPROTO_ICMP 1
78#define IPPROTO_IGMP 2
79#define IPPROTO_IPIP 4
80#define IPPROTO_TCP 6
81#define IPPROTO_EGP 8
82#define IPPROTO_PUP 12
83#define IPPROTO_UDP 17
84#define IPPROTO_IDP 22
85#define IPPROTO_TP 29
Rich Felker5d893e52013-01-01 20:19:20 -050086#define IPPROTO_DCCP 33
Rich Felker0b44a032011-02-12 00:22:29 -050087#define IPPROTO_IPV6 41
88#define IPPROTO_ROUTING 43
89#define IPPROTO_FRAGMENT 44
90#define IPPROTO_RSVP 46
91#define IPPROTO_GRE 47
92#define IPPROTO_ESP 50
93#define IPPROTO_AH 51
94#define IPPROTO_ICMPV6 58
95#define IPPROTO_NONE 59
96#define IPPROTO_DSTOPTS 60
97#define IPPROTO_MTP 92
98#define IPPROTO_ENCAP 98
99#define IPPROTO_PIM 103
100#define IPPROTO_COMP 108
Rich Felker5d893e52013-01-01 20:19:20 -0500101#define IPPROTO_SCTP 132
102#define IPPROTO_UDPLITE 136
Rich Felker0b44a032011-02-12 00:22:29 -0500103#define IPPROTO_RAW 255
Rich Felkerf59cedb2012-09-08 19:43:34 -0400104#define IPPROTO_MAX 256
Rich Felker0b44a032011-02-12 00:22:29 -0500105
106#define IN6_IS_ADDR_UNSPECIFIED(a) \
107 (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && \
108 ((uint32_t *) (a))[2] == 0 && ((uint32_t *) (a))[3] == 0)
109
110#define IN6_IS_ADDR_LOOPBACK(a) \
111 (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && \
112 ((uint32_t *) (a))[2] == 0 && \
113 ((uint8_t *) (a))[12] == 0 && ((uint8_t *) (a))[13] == 0 && \
114 ((uint8_t *) (a))[14] == 0 && ((uint8_t *) (a))[15] == 1 )
115
116#define IN6_IS_ADDR_MULTICAST(a) (((uint8_t *) (a))[0] == 0xff)
117
118#define IN6_IS_ADDR_LINKLOCAL(a) \
119 ((((uint8_t *) (a))[0]) == 0xfe && (((uint8_t *) (a))[1] & 0xc0) == 0x80)
120
121#define IN6_IS_ADDR_SITELOCAL(a) \
122 ((((uint8_t *) (a))[0]) == 0xfe && (((uint8_t *) (a))[1] & 0xc0) == 0xc0)
123
124#define IN6_IS_ADDR_V4MAPPED(a) \
125 (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && \
126 ((uint8_t *) (a))[8] == 0 && ((uint8_t *) (a))[9] == 0 && \
127 ((uint8_t *) (a))[10] == 0xff && ((uint8_t *) (a))[11] == 0xff)
128
129#define IN6_IS_ADDR_V4COMPAT(a) \
130 (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && \
131 ((uint32_t *) (a))[2] == 0 && ((uint8_t *) (a))[15] > 1)
132
133#define IN6_IS_ADDR_MC_NODELOCAL(a) \
134 (IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0x1))
135
136#define IN6_IS_ADDR_MC_LINKLOCAL(a) \
137 (IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0x2))
138
139#define IN6_IS_ADDR_MC_SITELOCAL(a) \
140 (IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0x5))
141
142#define IN6_IS_ADDR_MC_ORGLOCAL(a) \
143 (IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0x8))
144
145#define IN6_IS_ADDR_MC_GLOBAL(a) \
146 (IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0xe))
147
Rich Felkerb47fdcd2012-05-11 11:05:41 -0400148#define __ARE_4_EQUAL(a,b) \
149 (!( 0[a]-0[b] | 1[a]-1[b] | 2[a]-2[b] | 3[a]-3[b] ))
150#define IN6_ARE_ADDR_EQUAL(a,b) \
151 __ARE_4_EQUAL((const uint32_t *)(a), (const uint32_t *)(b))
152
Rich Felker0b44a032011-02-12 00:22:29 -0500153#define IN_CLASSA(a) ((((in_addr_t)(a)) & 0x80000000) == 0)
154#define IN_CLASSA_NET 0xff000000
155#define IN_CLASSA_NSHIFT 24
156#define IN_CLASSA_HOST (0xffffffff & ~IN_CLASSA_NET)
157#define IN_CLASSA_MAX 128
158#define IN_CLASSB(a) ((((in_addr_t)(a)) & 0xc0000000) == 0x80000000)
159#define IN_CLASSB_NET 0xffff0000
160#define IN_CLASSB_NSHIFT 16
161#define IN_CLASSB_HOST (0xffffffff & ~IN_CLASSB_NET)
162#define IN_CLASSB_MAX 65536
163#define IN_CLASSC(a) ((((in_addr_t)(a)) & 0xe0000000) == 0xc0000000)
164#define IN_CLASSC_NET 0xffffff00
165#define IN_CLASSC_NSHIFT 8
166#define IN_CLASSC_HOST (0xffffffff & ~IN_CLASSC_NET)
167#define IN_CLASSD(a) ((((in_addr_t)(a)) & 0xf0000000) == 0xe0000000)
168#define IN_MULTICAST(a) IN_CLASSD(a)
169#define IN_EXPERIMENTAL(a) ((((in_addr_t)(a)) & 0xe0000000) == 0xe0000000)
170#define IN_BADCLASS(a) ((((in_addr_t)(a)) & 0xf0000000) == 0xf0000000)
Rich Felker0b44a032011-02-12 00:22:29 -0500171
Rich Felker2b55a612011-04-06 15:44:39 -0400172#define IN_LOOPBACKNET 127
173
Rich Felkerc8175662011-09-18 15:31:44 -0400174
175#define IP_TOS 1
176#define IP_TTL 2
177#define IP_HDRINCL 3
178#define IP_OPTIONS 4
179#define IP_ROUTER_ALERT 5
180#define IP_RECVOPTS 6
181#define IP_RETOPTS 7
182#define IP_PKTINFO 8
183#define IP_PKTOPTIONS 9
184#define IP_PMTUDISC 10
185#define IP_MTU_DISCOVER 10
186#define IP_RECVERR 11
187#define IP_RECVTTL 12
188#define IP_RECVTOS 13
189#define IP_MTU 14
190#define IP_FREEBIND 15
191#define IP_IPSEC_POLICY 16
192#define IP_XFRM_POLICY 17
193#define IP_PASSSEC 18
194#define IP_TRANSPARENT 19
195#define IP_ORIGDSTADDR 20
196#define IP_RECVORIGDSTADDR IP_ORIGDSTADDR
197#define IP_MINTTL 21
198#define IP_MULTICAST_IF 32
199#define IP_MULTICAST_TTL 33
200#define IP_MULTICAST_LOOP 34
201#define IP_ADD_MEMBERSHIP 35
202#define IP_DROP_MEMBERSHIP 36
203#define IP_UNBLOCK_SOURCE 37
204#define IP_BLOCK_SOURCE 38
205#define IP_ADD_SOURCE_MEMBERSHIP 39
206#define IP_DROP_SOURCE_MEMBERSHIP 40
207#define IP_MSFILTER 41
Szabolcs Nagy119645b2013-01-11 01:54:53 +0100208#define IP_MULTICAST_ALL 49
209#define IP_UNICAST_IF 50
210
211#ifdef _GNU_SOURCE
212#define MCAST_JOIN_GROUP 42
213#define MCAST_BLOCK_SOURCE 43
214#define MCAST_UNBLOCK_SOURCE 44
215#define MCAST_LEAVE_GROUP 45
216#define MCAST_JOIN_SOURCE_GROUP 46
217#define MCAST_LEAVE_SOURCE_GROUP 47
218#define MCAST_MSFILTER 48
219
220#define MCAST_EXCLUDE 0
221#define MCAST_INCLUDE 1
222#endif
Rich Felkerc8175662011-09-18 15:31:44 -0400223
224#define IP_RECVRETOPTS IP_RETOPTS
225
226#define IP_PMTUDISC_DONT 0
227#define IP_PMTUDISC_WANT 1
228#define IP_PMTUDISC_DO 2
229#define IP_PMTUDISC_PROBE 3
230
231#define SOL_IP 0
232
233#define IP_DEFAULT_MULTICAST_TTL 1
234#define IP_DEFAULT_MULTICAST_LOOP 1
235#define IP_MAX_MEMBERSHIPS 20
236
237struct ip_opts
238{
239 struct in_addr ip_dst;
240 char ip_opts[40];
241};
242
243struct ip_mreq
244{
245 struct in_addr imr_multiaddr;
246 struct in_addr imr_interface;
247};
248
249struct ip_mreqn
250{
251 struct in_addr imr_multiaddr;
252 struct in_addr imr_address;
253 int imr_ifindex;
254};
255
256struct in_pktinfo
257{
258 int ipi_ifindex;
259 struct in_addr ipi_spec_dst;
260 struct in_addr ipi_addr;
261};
262
263struct in6_pktinfo
264{
265 struct in6_addr ipi6_addr;
266 unsigned ipi6_ifindex;
267};
268
Rich Felkerfd9e01e2011-09-20 20:02:48 -0400269struct ip6_mtuinfo
Rich Felkerc8175662011-09-18 15:31:44 -0400270{
271 struct sockaddr_in6 ip6m_addr;
272 uint32_t ip6m_mtu;
273};
274
275#define IPV6_ADDRFORM 1
276#define IPV6_2292PKTINFO 2
277#define IPV6_2292HOPOPTS 3
278#define IPV6_2292DSTOPTS 4
279#define IPV6_2292RTHDR 5
280#define IPV6_2292PKTOPTIONS 6
281#define IPV6_CHECKSUM 7
282#define IPV6_2292HOPLIMIT 8
283#define SCM_SRCRT IPV6_RXSRCRT
284#define IPV6_NEXTHOP 9
285#define IPV6_AUTHHDR 10
286#define IPV6_UNICAST_HOPS 16
287#define IPV6_MULTICAST_IF 17
288#define IPV6_MULTICAST_HOPS 18
289#define IPV6_MULTICAST_LOOP 19
290#define IPV6_JOIN_GROUP 20
291#define IPV6_LEAVE_GROUP 21
292#define IPV6_ROUTER_ALERT 22
293#define IPV6_MTU_DISCOVER 23
294#define IPV6_MTU 24
295#define IPV6_RECVERR 25
296#define IPV6_V6ONLY 26
297#define IPV6_JOIN_ANYCAST 27
298#define IPV6_LEAVE_ANYCAST 28
299#define IPV6_IPSEC_POLICY 34
300#define IPV6_XFRM_POLICY 35
301
302#define IPV6_RECVPKTINFO 49
303#define IPV6_PKTINFO 50
304#define IPV6_RECVHOPLIMIT 51
305#define IPV6_HOPLIMIT 52
306#define IPV6_RECVHOPOPTS 53
307#define IPV6_HOPOPTS 54
308#define IPV6_RTHDRDSTOPTS 55
309#define IPV6_RECVRTHDR 56
310#define IPV6_RTHDR 57
311#define IPV6_RECVDSTOPTS 58
312#define IPV6_DSTOPTS 59
313
314#define IPV6_RECVTCLASS 66
315#define IPV6_TCLASS 67
316
317#define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP
318#define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP
319#define IPV6_RXHOPOPTS IPV6_HOPOPTS
320#define IPV6_RXDSTOPTS IPV6_DSTOPTS
321
322
323#define IPV6_PMTUDISC_DONT 0
324#define IPV6_PMTUDISC_WANT 1
325#define IPV6_PMTUDISC_DO 2
326#define IPV6_PMTUDISC_PROBE 3
327
328#define SOL_IPV6 41
329#define SOL_ICMPV6 58
330
331#define IPV6_RTHDR_LOOSE 0
332#define IPV6_RTHDR_STRICT 1
333
334#define IPV6_RTHDR_TYPE_0 0
335
Rich Felker3ed8c9f2011-11-10 20:40:06 -0500336#ifdef __cplusplus
337}
338#endif
339
Rich Felker0b44a032011-02-12 00:22:29 -0500340#endif