11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* $OpenBSD: ip.h,v 1.12 2006/04/27 02:19:32 tedu Exp $ */ 21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* $NetBSD: ip.h,v 1.9 1995/05/15 01:22:44 cgd Exp $ */ 31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (c) 1982, 1986, 1993 61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * The Regents of the University of California. All rights reserved. 71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Redistribution and use in source and binary forms, with or without 91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * modification, are permitted provided that the following conditions 101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * are met: 111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * notice, this list of conditions and the following disclaimer. 131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * documentation and/or other materials provided with the distribution. 161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 3. Neither the name of the University nor the names of its contributors 171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * may be used to endorse or promote products derived from this software 181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * without specific prior written permission. 191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * SUCH DAMAGE. 311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * @(#)ip.h 8.1 (Berkeley) 6/10/93 331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef _NETINET_IP_H_ 361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _NETINET_IP_H_ 371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/cdefs.h> 391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/types.h> 401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <endian.h> 411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <netinet/in.h> 421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <netinet/in_systm.h> 431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__BEGIN_DECLS 451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Definitions for internet protocol version 4. 481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Per RFC 791, September 1981. 491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPVERSION 4 511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Structure of an internet header, naked of options. 541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstruct ip { 561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if BYTE_ORDER == LITTLE_ENDIAN 571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project u_int32_t ip_hl:4, /* header length */ 581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project ip_v:4; /* version */ 591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif 601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if BYTE_ORDER == BIG_ENDIAN 611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project u_int32_t ip_v:4, /* version */ 621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project ip_hl:4; /* header length */ 631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif 641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project u_int8_t ip_tos; /* type of service */ 651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project u_int16_t ip_len; /* total length */ 661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project u_int16_t ip_id; /* identification */ 671dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project u_int16_t ip_off; /* fragment offset field */ 681dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IP_RF 0x8000 /* reserved fragment flag */ 691dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IP_DF 0x4000 /* dont fragment flag */ 701dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IP_MF 0x2000 /* more fragments flag */ 711dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ 721dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project u_int8_t ip_ttl; /* time to live */ 731dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project u_int8_t ip_p; /* protocol */ 741dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project u_int16_t ip_sum; /* checksum */ 751dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project struct in_addr ip_src, ip_dst; /* source and dest address */ 761dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}; 771dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 781dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IP_MAXPACKET 65535 /* maximum packet size */ 791dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 801dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 811dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Definitions for IP type of service (ip_tos) 821dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 831dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPTOS_LOWDELAY 0x10 841dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPTOS_THROUGHPUT 0x08 851dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPTOS_RELIABILITY 0x04 86f8d02d24edd23dfb5028881105828cbf15e59310JP Abgrall#define IPTOS_MINCOST 0x02 871dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if 1 881dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* ECN RFC3168 obsoletes RFC2481, and these will be deprecated soon. */ 891dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPTOS_CE 0x01 /* congestion experienced */ 901dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPTOS_ECT 0x02 /* ECN-capable transport */ 911dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif 921dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 931dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 941dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Definitions for IP precedence (also in ip_tos) (hopefully unused) 951dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 961dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPTOS_PREC_NETCONTROL 0xe0 971dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPTOS_PREC_INTERNETCONTROL 0xc0 981dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPTOS_PREC_CRITIC_ECP 0xa0 991dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPTOS_PREC_FLASHOVERRIDE 0x80 1001dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPTOS_PREC_FLASH 0x60 1011dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPTOS_PREC_IMMEDIATE 0x40 1021dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPTOS_PREC_PRIORITY 0x20 1031dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPTOS_PREC_ROUTINE 0x00 1041dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1051dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 1061dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ECN (Explicit Congestion Notification) codepoints in RFC3168 1071dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * mapped to the lower 2 bits of the TOS field. 1081dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 1091dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPTOS_ECN_NOTECT 0x00 /* not-ECT */ 1101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPTOS_ECN_ECT1 0x01 /* ECN-capable transport (1) */ 1111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPTOS_ECN_ECT0 0x02 /* ECN-capable transport (0) */ 1121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPTOS_ECN_CE 0x03 /* congestion experienced */ 1131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPTOS_ECN_MASK 0x03 /* ECN field mask */ 1141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 1161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Definitions for options. 1171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 1181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_COPIED(o) ((o)&0x80) 1191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_CLASS(o) ((o)&0x60) 1201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_NUMBER(o) ((o)&0x1f) 1211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_CONTROL 0x00 1231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_RESERVED1 0x20 1241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_DEBMEAS 0x40 1251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_RESERVED2 0x60 1261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_EOL 0 /* end of option list */ 1281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_NOP 1 /* no operation */ 1291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_RR 7 /* record packet route */ 1311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_TS 68 /* timestamp */ 1321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_SECURITY 130 /* provide s,c,h,tcc */ 1331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_LSRR 131 /* loose source route */ 1341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_SATID 136 /* satnet id */ 1351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_SSRR 137 /* strict source route */ 1361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 1381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Offsets to fields in options other than EOL and NOP. 1391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 1401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_OPTVAL 0 /* option ID */ 1411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_OLEN 1 /* option length */ 1421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_OFFSET 2 /* offset within option */ 1431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_MINOFF 4 /* min value of above */ 1441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 1461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Time stamp option structure. 1471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 1481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstruct ip_timestamp { 1491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project u_int8_t ipt_code; /* IPOPT_TS */ 1501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project u_int8_t ipt_len; /* size of structure (variable) */ 1511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project u_int8_t ipt_ptr; /* index of current entry */ 1521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if _BYTE_ORDER == _LITTLE_ENDIAN 1531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project u_int32_t ipt_flg:4, /* flags, see below */ 1541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project ipt_oflw:4; /* overflow counter */ 1551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif 1561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if _BYTE_ORDER == _BIG_ENDIAN 1571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project u_int32_t ipt_oflw:4, /* overflow counter */ 1581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project ipt_flg:4; /* flags, see below */ 1591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif 1601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project union ipt_timestamp { 1611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project n_time ipt_time[1]; 1621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project struct ipt_ta { 1631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project struct in_addr ipt_addr; 1641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project n_time ipt_time; 1651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project } ipt_ta[1]; 1661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project } ipt_timestamp; 1671dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}; 1681dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1691dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* flag bits for ipt_flg */ 1701dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_TS_TSONLY 0 /* timestamps only */ 1711dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */ 1721dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_TS_PRESPEC 3 /* specified modules only */ 1731dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1741dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* bits for security (not byte swapped) */ 1751dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_SECUR_UNCLASS 0x0000 1761dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_SECUR_CONFID 0xf135 1771dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_SECUR_EFTO 0x789a 1781dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_SECUR_MMMM 0xbc4d 1791dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_SECUR_RESTR 0xaf13 1801dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_SECUR_SECRET 0xd788 1811dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_SECUR_TOPSECRET 0x6bc5 1821dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1831dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 1841dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Internet implementation parameters. 1851dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 1861dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define MAXTTL 255 /* maximum time to live (seconds) */ 1871dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPDEFTTL 64 /* default ttl, from RFC 1340 */ 1881dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPFRAGTTL 60 /* time to live for frags, slowhz */ 1891dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPTTLDEC 1 /* subtracted when forwarding */ 1901dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1911dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IP_MSS 576 /* default maximum segment size */ 1921dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1931dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 1941dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * This is the real IPv4 pseudo header, used for computing the TCP and UDP 1951dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * checksums. For the Internet checksum, struct ipovly can be used instead. 1961dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * For stronger checksums, the real thing must be used. 1971dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 1981dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstruct ippseudo { 1991dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project struct in_addr ippseudo_src; /* source internet address */ 2001dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project struct in_addr ippseudo_dst; /* destination internet address */ 2011dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project u_int8_t ippseudo_pad; /* pad, must be zero */ 2021dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project u_int8_t ippseudo_p; /* protocol */ 2031dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project u_int16_t ippseudo_len; /* protocol length */ 2041dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}; 2051dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 2061dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* BIONIC addition: declarations matching the Linux kernel */ 2071dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* some programs expect these... */ 2081dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 2091dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_OPTVAL 0 2101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_OLEN 1 2111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_OFFSET 2 2121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_MINOFF 4 2131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define MAX_IPOPTLEN 40 2141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 2151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_COPY 0x80 2161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_CLASS_MASK 0x60 2171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_NUMBER_MASK 0x1f 2181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 2191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_CONTROL 0x00 2201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_RESERVED1 0x20 2211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_MEASUREMENT 0x40 2221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_RESERVED2 0x60 2231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 2241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_END (0 |IPOPT_CONTROL) 2251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_NOOP (1 |IPOPT_CONTROL) 2261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_SEC (2 |IPOPT_CONTROL|IPOPT_COPY) 2271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_TIMESTAMP (4 |IPOPT_MEASUREMENT) 2281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_SID (8 |IPOPT_CONTROL|IPOPT_COPY) 2291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define IPOPT_RA (20|IPOPT_CONTROL|IPOPT_COPY) 2301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 2311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstruct iphdr { 2321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if defined(__LITTLE_ENDIAN_BITFIELD) 2331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint8_t ihl :4, 2341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project version:4; 2351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#elif defined (__BIG_ENDIAN_BITFIELD) 2361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint8_t version:4, 2371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project ihl :4; 2381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#else 2391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#error "Please fix <asm/byteorder.h>" 2401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif 2411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint8_t tos; 2421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint16_t tot_len; 2431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint16_t id; 2441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint16_t frag_off; 2451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint8_t ttl; 2461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint8_t protocol; 2471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint16_t check; 2481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project int32_t saddr; 2491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project int32_t daddr; 2501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}; 2511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 2521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstruct ip_auth_hdr { 2531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint8_t nexthdr; 2541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint8_t hdrlen; 2551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint16_t reserved; 2561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint32_t spi; 2571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint32_t seq_no; 2581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint8_t auth_data[0]; 2591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}; 2601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 2611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstruct ip_esp_hdr { 2621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint32_t spi; 2631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint32_t seq_no; 2641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint8_t enc_data[0]; 2651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}; 2661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 2671dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstruct ip_comp_hdr { 2681dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint8_t nexthdr; 2691dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint8_t flags; 2701dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project uint16_t cpi; 2711dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}; 2721dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 2731dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__END_DECLS 2741dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 2751dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* _NETINET_IP_H_ */ 276