~xnox/ubuntu/trusty/gcc-arm-linux-androideabi/dima

« back to all changes in this revision

Viewing changes to android/bionic/libc/include/netinet/ip.h

  • Committer: Package Import Robot
  • Author(s): Dmitrijs Ledkovs
  • Date: 2013-07-05 10:12:24 UTC
  • Revision ID: package-import@ubuntu.com-20130705101224-6qo3e8jbz8p31aa1
Tags: upstream-0.20130705.1
ImportĀ upstreamĀ versionĀ 0.20130705.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
#define IPTOS_MINCOST           0x02
 
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_ */