153f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* @(#) $Header: /tcpdump/master/tcpdump/ip.h,v 1.12 2007-09-14 01:29:28 guy Exp $ (LBL) */ 22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (c) 1982, 1986, 1993 42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * The Regents of the University of California. All rights reserved. 52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Redistribution and use in source and binary forms, with or without 72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * modification, are permitted provided that the following conditions 82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * are met: 92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * notice, this list of conditions and the following disclaimer. 112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * documentation and/or other materials provided with the distribution. 142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 3. All advertising materials mentioning features or use of this software 152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * must display the following acknowledgement: 162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * This product includes software developed by the University of 172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * California, Berkeley and its contributors. 182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 4. Neither the name of the University nor the names of its contributors 192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * may be used to endorse or promote products derived from this software 202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * without specific prior written permission. 212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * SUCH DAMAGE. 332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * @(#)ip.h 8.2 (Berkeley) 6/1/94 352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Definitions for internet protocol version 4. 392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Per RFC 791, September 1981. 402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPVERSION 4 422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Structure of an internet header, naked of options. 452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * We declare ip_len and ip_off to be short, rather than u_short 472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * pragmatically since otherwise unsigned comparisons can result 482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * against negative integers quite easily, and fail in subtle ways. 492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ip { 512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t ip_vhl; /* header length, version */ 522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IP_V(ip) (((ip)->ip_vhl & 0xf0) >> 4) 532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IP_HL(ip) ((ip)->ip_vhl & 0x0f) 542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t ip_tos; /* type of service */ 552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int16_t ip_len; /* total length */ 562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int16_t ip_id; /* identification */ 572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int16_t ip_off; /* fragment offset field */ 582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IP_DF 0x4000 /* dont fragment flag */ 592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IP_MF 0x2000 /* more fragments flag */ 602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ 612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t ip_ttl; /* time to live */ 622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t ip_p; /* protocol */ 632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int16_t ip_sum; /* checksum */ 642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct in_addr ip_src,ip_dst; /* source and dest address */ 6553f17a9db278d33517d9888dd77848f554522a38JP Abgrall} UNALIGNED; 662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IP_MAXPACKET 65535 /* maximum packet size */ 682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Definitions for IP type of service (ip_tos) 712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPTOS_LOWDELAY 0x10 732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPTOS_THROUGHPUT 0x08 742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPTOS_RELIABILITY 0x04 752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Definitions for IP precedence (also in ip_tos) (hopefully unused) 782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPTOS_PREC_NETCONTROL 0xe0 802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPTOS_PREC_INTERNETCONTROL 0xc0 812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPTOS_PREC_CRITIC_ECP 0xa0 822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPTOS_PREC_FLASHOVERRIDE 0x80 832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPTOS_PREC_FLASH 0x60 842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPTOS_PREC_IMMEDIATE 0x40 852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPTOS_PREC_PRIORITY 0x20 862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPTOS_PREC_ROUTINE 0x00 872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Definitions for options. 902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_COPIED(o) ((o)&0x80) 922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_CLASS(o) ((o)&0x60) 932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_NUMBER(o) ((o)&0x1f) 942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_CONTROL 0x00 962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_RESERVED1 0x20 972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_DEBMEAS 0x40 982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_RESERVED2 0x60 992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_EOL 0 /* end of option list */ 1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_NOP 1 /* no operation */ 1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_RR 7 /* record packet route */ 1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_TS 68 /* timestamp */ 1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_RFC1393 82 /* traceroute RFC 1393 */ 1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_SECURITY 130 /* provide s,c,h,tcc */ 1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_LSRR 131 /* loose source route */ 1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_SATID 136 /* satnet id */ 1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_SSRR 137 /* strict source route */ 1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_RA 148 /* router-alert, rfc2113 */ 1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Offsets to fields in options other than EOL and NOP. 1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_OPTVAL 0 /* option ID */ 1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_OLEN 1 /* option length */ 1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_OFFSET 2 /* offset within option */ 1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_MINOFF 4 /* min value of above */ 1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Time stamp option structure. 1222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 1232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ip_timestamp { 1242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t ipt_code; /* IPOPT_TS */ 1252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t ipt_len; /* size of structure (variable) */ 1262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t ipt_ptr; /* index of current entry */ 1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t ipt_oflwflg; /* flags, overflow counter */ 1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPTS_OFLW(ip) (((ipt)->ipt_oflwflg & 0xf0) >> 4) 1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPTS_FLG(ip) ((ipt)->ipt_oflwflg & 0x0f) 1302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project union ipt_timestamp { 1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t ipt_time[1]; 1322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct ipt_ta { 1332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct in_addr ipt_addr; 1342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t ipt_time; 1352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } ipt_ta[1]; 1362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } ipt_timestamp; 13753f17a9db278d33517d9888dd77848f554522a38JP Abgrall} UNALIGNED; 1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* flag bits for ipt_flg */ 1402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_TS_TSONLY 0 /* timestamps only */ 1412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */ 1422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_TS_PRESPEC 3 /* specified modules only */ 1432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* bits for security (not byte swapped) */ 1452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_SECUR_UNCLASS 0x0000 1462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_SECUR_CONFID 0xf135 1472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_SECUR_EFTO 0x789a 1482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_SECUR_MMMM 0xbc4d 1492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_SECUR_RESTR 0xaf13 1502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_SECUR_SECRET 0xd788 1512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPOPT_SECUR_TOPSECRET 0x6bc5 1522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 1542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Internet implementation parameters. 1552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 1562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define MAXTTL 255 /* maximum time to live (seconds) */ 1572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPDEFTTL 64 /* default ttl, from RFC 1340 */ 1582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPFRAGTTL 60 /* time to live for frags, slowhz */ 1592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPTTLDEC 1 /* subtracted when forwarding */ 1602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IP_MSS 576 /* default maximum segment size */ 1622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* in print-ip.c */ 16453f17a9db278d33517d9888dd77848f554522a38JP Abgrallextern int nextproto4_cksum(const struct ip *, const u_int8_t *, u_int, u_int); 165