OSDN Git Service

Check in released NDK version r4.
[android-x86/prebuilt.git] / ndk / android-ndk-r4 / linux / platforms / android-8 / arch-x86 / usr / include / netinet / ip.h
1 /*      $OpenBSD: ip.h,v 1.12 2006/04/27 02:19:32 tedu Exp $    */
2 /*      $NetBSD: ip.h,v 1.9 1995/05/15 01:22:44 cgd Exp $       */
3
4 /*
5  * Copyright (c) 1982, 1986, 1993
6  *      The Regents of the University of California.  All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 3. Neither the name of the University nor the names of its contributors
17  *    may be used to endorse or promote products derived from this software
18  *    without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30  * SUCH DAMAGE.
31  *
32  *      @(#)ip.h        8.1 (Berkeley) 6/10/93
33  */
34
35 #ifndef _NETINET_IP_H_
36 #define _NETINET_IP_H_
37
38 #include <sys/cdefs.h>
39 #include <sys/types.h>
40 #include <endian.h>
41 #include <netinet/in.h>
42 #include <netinet/in_systm.h>
43
44 __BEGIN_DECLS
45
46 /*
47  * Definitions for internet protocol version 4.
48  * Per RFC 791, September 1981.
49  */
50 #define IPVERSION       4
51
52 /*
53  * Structure of an internet header, naked of options.
54  */
55 struct ip {
56 #if BYTE_ORDER == LITTLE_ENDIAN
57         u_int32_t ip_hl:4,              /* header length */
58                   ip_v:4;               /* version */
59 #endif
60 #if BYTE_ORDER == BIG_ENDIAN
61         u_int32_t ip_v:4,               /* version */
62                   ip_hl:4;              /* header length */
63 #endif
64         u_int8_t  ip_tos;               /* type of service */
65         u_int16_t ip_len;               /* total length */
66         u_int16_t ip_id;                /* identification */
67         u_int16_t ip_off;               /* fragment offset field */
68 #define IP_RF 0x8000                    /* reserved fragment flag */
69 #define IP_DF 0x4000                    /* dont fragment flag */
70 #define IP_MF 0x2000                    /* more fragments flag */
71 #define IP_OFFMASK 0x1fff               /* mask for fragmenting bits */
72         u_int8_t  ip_ttl;               /* time to live */
73         u_int8_t  ip_p;                 /* protocol */
74         u_int16_t ip_sum;               /* checksum */
75         struct    in_addr ip_src, ip_dst; /* source and dest address */
76 };
77
78 #define IP_MAXPACKET    65535           /* maximum packet size */
79
80 /*
81  * Definitions for IP type of service (ip_tos)
82  */
83 #define IPTOS_LOWDELAY          0x10
84 #define IPTOS_THROUGHPUT        0x08
85 #define IPTOS_RELIABILITY       0x04
86 /*      IPTOS_LOWCOST           0x02 XXX */
87 #if 1
88 /* ECN RFC3168 obsoletes RFC2481, and these will be deprecated soon. */
89 #define IPTOS_CE                0x01    /* congestion experienced */
90 #define IPTOS_ECT               0x02    /* ECN-capable transport */
91 #endif
92
93 /*
94  * Definitions for IP precedence (also in ip_tos) (hopefully unused)
95  */
96 #define IPTOS_PREC_NETCONTROL           0xe0
97 #define IPTOS_PREC_INTERNETCONTROL      0xc0
98 #define IPTOS_PREC_CRITIC_ECP           0xa0
99 #define IPTOS_PREC_FLASHOVERRIDE        0x80
100 #define IPTOS_PREC_FLASH                0x60
101 #define IPTOS_PREC_IMMEDIATE            0x40
102 #define IPTOS_PREC_PRIORITY             0x20
103 #define IPTOS_PREC_ROUTINE              0x00
104
105 /*
106  * ECN (Explicit Congestion Notification) codepoints in RFC3168
107  * mapped to the lower 2 bits of the TOS field.
108  */
109 #define IPTOS_ECN_NOTECT        0x00    /* not-ECT */
110 #define IPTOS_ECN_ECT1          0x01    /* ECN-capable transport (1) */
111 #define IPTOS_ECN_ECT0          0x02    /* ECN-capable transport (0) */
112 #define IPTOS_ECN_CE            0x03    /* congestion experienced */
113 #define IPTOS_ECN_MASK          0x03    /* ECN field mask */
114
115 /*
116  * Definitions for options.
117  */
118 #define IPOPT_COPIED(o)         ((o)&0x80)
119 #define IPOPT_CLASS(o)          ((o)&0x60)
120 #define IPOPT_NUMBER(o)         ((o)&0x1f)
121
122 #define IPOPT_CONTROL           0x00
123 #define IPOPT_RESERVED1         0x20
124 #define IPOPT_DEBMEAS           0x40
125 #define IPOPT_RESERVED2         0x60
126
127 #define IPOPT_EOL               0               /* end of option list */
128 #define IPOPT_NOP               1               /* no operation */
129
130 #define IPOPT_RR                7               /* record packet route */
131 #define IPOPT_TS                68              /* timestamp */
132 #define IPOPT_SECURITY          130             /* provide s,c,h,tcc */
133 #define IPOPT_LSRR              131             /* loose source route */
134 #define IPOPT_SATID             136             /* satnet id */
135 #define IPOPT_SSRR              137             /* strict source route */
136
137 /*
138  * Offsets to fields in options other than EOL and NOP.
139  */
140 #define IPOPT_OPTVAL            0               /* option ID */
141 #define IPOPT_OLEN              1               /* option length */
142 #define IPOPT_OFFSET            2               /* offset within option */
143 #define IPOPT_MINOFF            4               /* min value of above */
144
145 /*
146  * Time stamp option structure.
147  */
148 struct  ip_timestamp {
149         u_int8_t ipt_code;              /* IPOPT_TS */
150         u_int8_t ipt_len;               /* size of structure (variable) */
151         u_int8_t ipt_ptr;               /* index of current entry */
152 #if _BYTE_ORDER == _LITTLE_ENDIAN
153         u_int32_t ipt_flg:4,            /* flags, see below */
154                   ipt_oflw:4;           /* overflow counter */
155 #endif
156 #if _BYTE_ORDER == _BIG_ENDIAN
157         u_int32_t ipt_oflw:4,           /* overflow counter */
158                   ipt_flg:4;            /* flags, see below */
159 #endif
160         union ipt_timestamp {
161         n_time  ipt_time[1];
162         struct  ipt_ta {
163                 struct in_addr ipt_addr;
164                 n_time ipt_time;
165         } ipt_ta[1];
166         } ipt_timestamp;
167 };
168
169 /* flag bits for ipt_flg */
170 #define IPOPT_TS_TSONLY         0               /* timestamps only */
171 #define IPOPT_TS_TSANDADDR      1               /* timestamps and addresses */
172 #define IPOPT_TS_PRESPEC        3               /* specified modules only */
173
174 /* bits for security (not byte swapped) */
175 #define IPOPT_SECUR_UNCLASS     0x0000
176 #define IPOPT_SECUR_CONFID      0xf135
177 #define IPOPT_SECUR_EFTO        0x789a
178 #define IPOPT_SECUR_MMMM        0xbc4d
179 #define IPOPT_SECUR_RESTR       0xaf13
180 #define IPOPT_SECUR_SECRET      0xd788
181 #define IPOPT_SECUR_TOPSECRET   0x6bc5
182
183 /*
184  * Internet implementation parameters.
185  */
186 #define MAXTTL          255             /* maximum time to live (seconds) */
187 #define IPDEFTTL        64              /* default ttl, from RFC 1340 */
188 #define IPFRAGTTL       60              /* time to live for frags, slowhz */
189 #define IPTTLDEC        1               /* subtracted when forwarding */
190
191 #define IP_MSS          576             /* default maximum segment size */
192
193 /*
194  * This is the real IPv4 pseudo header, used for computing the TCP and UDP
195  * checksums. For the Internet checksum, struct ipovly can be used instead.
196  * For stronger checksums, the real thing must be used.
197  */
198 struct ippseudo {
199         struct    in_addr ippseudo_src; /* source internet address */
200         struct    in_addr ippseudo_dst; /* destination internet address */
201         u_int8_t  ippseudo_pad;         /* pad, must be zero */
202         u_int8_t  ippseudo_p;           /* protocol */
203         u_int16_t ippseudo_len;         /* protocol length */
204 };
205
206 /* BIONIC addition: declarations matching the Linux kernel */
207 /*                  some programs expect these...          */
208
209 #define IPOPT_OPTVAL 0
210 #define IPOPT_OLEN   1
211 #define IPOPT_OFFSET 2
212 #define IPOPT_MINOFF 4
213 #define MAX_IPOPTLEN 40
214
215 #define IPOPT_COPY              0x80
216 #define IPOPT_CLASS_MASK        0x60
217 #define IPOPT_NUMBER_MASK       0x1f
218
219 #define IPOPT_CONTROL           0x00
220 #define IPOPT_RESERVED1         0x20
221 #define IPOPT_MEASUREMENT       0x40
222 #define IPOPT_RESERVED2         0x60
223
224 #define IPOPT_END       (0 |IPOPT_CONTROL)
225 #define IPOPT_NOOP      (1 |IPOPT_CONTROL)
226 #define IPOPT_SEC       (2 |IPOPT_CONTROL|IPOPT_COPY)
227 #define IPOPT_TIMESTAMP (4 |IPOPT_MEASUREMENT)
228 #define IPOPT_SID       (8 |IPOPT_CONTROL|IPOPT_COPY)
229 #define IPOPT_RA        (20|IPOPT_CONTROL|IPOPT_COPY)
230
231 struct iphdr {
232 #if defined(__LITTLE_ENDIAN_BITFIELD)
233         uint8_t  ihl    :4,
234                  version:4;
235 #elif defined (__BIG_ENDIAN_BITFIELD)
236         uint8_t  version:4,
237                  ihl    :4;
238 #else
239 #error  "Please fix <asm/byteorder.h>"
240 #endif
241         uint8_t   tos;
242         uint16_t  tot_len;
243         uint16_t  id;
244         uint16_t  frag_off;
245         uint8_t   ttl;
246         uint8_t   protocol;
247         uint16_t  check;
248         int32_t   saddr;
249         int32_t   daddr;
250 };
251
252 struct ip_auth_hdr {
253         uint8_t  nexthdr;
254         uint8_t  hdrlen;
255         uint16_t reserved;
256         uint32_t spi;
257         uint32_t seq_no;
258         uint8_t  auth_data[0];
259 };
260
261 struct ip_esp_hdr {
262         uint32_t spi;
263         uint32_t seq_no;
264         uint8_t  enc_data[0];
265 };
266
267 struct ip_comp_hdr {
268         uint8_t  nexthdr;
269         uint8_t  flags;
270         uint16_t cpi;
271 };
272
273 __END_DECLS
274
275 #endif /* _NETINET_IP_H_ */