ip.h revision 2949f58a438f6fd85f66a8b7ed4708042cde4b37
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* @(#) $Header: /tcpdump/master/tcpdump/ip.h,v 1.11.2.1 2007/09/14 01:30:02 guy Exp $ (LBL) */ 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (c) 1982, 1986, 1993 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The Regents of the University of California. All rights reserved. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * modification, are permitted provided that the following conditions 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * are met: 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * notice, this list of conditions and the following disclaimer. 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * documentation and/or other materials provided with the distribution. 140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * 3. All advertising materials mentioning features or use of this software 15d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * must display the following acknowledgement: 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This product includes software developed by the University of 17424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * California, Berkeley and its contributors. 180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * 4. Neither the name of the University nor the names of its contributors 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * may be used to endorse or promote products derived from this software 20424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * without specific prior written permission. 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * SUCH DAMAGE. 330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @(#)ip.h 8.2 (Berkeley) 6/1/94 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)/* 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Definitions for internet protocol version 4. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Per RFC 791, September 1981. 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define IPVERSION 4 426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Structure of an internet header, naked of options. 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * We declare ip_len and ip_off to be short, rather than u_short 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * pragmatically since otherwise unsigned comparisons can result 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * against negative integers quite easily, and fail in subtle ways. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ip { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u_int8_t ip_vhl; /* header length, version */ 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IP_V(ip) (((ip)->ip_vhl & 0xf0) >> 4) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IP_HL(ip) ((ip)->ip_vhl & 0x0f) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u_int8_t ip_tos; /* type of service */ 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u_int16_t ip_len; /* total length */ 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u_int16_t ip_id; /* identification */ 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u_int16_t ip_off; /* fragment offset field */ 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IP_DF 0x4000 /* dont fragment flag */ 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IP_MF 0x2000 /* more fragments flag */ 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u_int8_t ip_ttl; /* time to live */ 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u_int8_t ip_p; /* protocol */ 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u_int16_t ip_sum; /* checksum */ 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct in_addr ip_src,ip_dst; /* source and dest address */ 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 67424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#define IP_MAXPACKET 65535 /* maximum packet size */ 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Definitions for IP type of service (ip_tos) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define IPTOS_LOWDELAY 0x10 73424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#define IPTOS_THROUGHPUT 0x08 74424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#define IPTOS_RELIABILITY 0x04 75424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 76424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)/* 77424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * Definitions for IP precedence (also in ip_tos) (hopefully unused) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define IPTOS_PREC_NETCONTROL 0xe0 80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define IPTOS_PREC_INTERNETCONTROL 0xc0 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPTOS_PREC_CRITIC_ECP 0xa0 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPTOS_PREC_FLASHOVERRIDE 0x80 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPTOS_PREC_FLASH 0x60 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPTOS_PREC_IMMEDIATE 0x40 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define IPTOS_PREC_PRIORITY 0x20 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPTOS_PREC_ROUTINE 0x00 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Definitions for options. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_COPIED(o) ((o)&0x80) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_CLASS(o) ((o)&0x60) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_NUMBER(o) ((o)&0x1f) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_CONTROL 0x00 96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#define IPOPT_RESERVED1 0x20 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_DEBMEAS 0x40 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_RESERVED2 0x60 99a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 100a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#define IPOPT_EOL 0 /* end of option list */ 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_NOP 1 /* no operation */ 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_RR 7 /* record packet route */ 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_TS 68 /* timestamp */ 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_RFC1393 82 /* traceroute RFC 1393 */ 106a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#define IPOPT_SECURITY 130 /* provide s,c,h,tcc */ 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_LSRR 131 /* loose source route */ 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_SATID 136 /* satnet id */ 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_SSRR 137 /* strict source route */ 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_RA 148 /* router-alert, rfc2113 */ 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Offsets to fields in options other than EOL and NOP. 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_OPTVAL 0 /* option ID */ 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_OLEN 1 /* option length */ 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_OFFSET 2 /* offset within option */ 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_MINOFF 4 /* min value of above */ 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Time stamp option structure. 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ip_timestamp { 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u_int8_t ipt_code; /* IPOPT_TS */ 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u_int8_t ipt_len; /* size of structure (variable) */ 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u_int8_t ipt_ptr; /* index of current entry */ 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u_int8_t ipt_oflwflg; /* flags, overflow counter */ 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPTS_OFLW(ip) (((ipt)->ipt_oflwflg & 0xf0) >> 4) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPTS_FLG(ip) ((ipt)->ipt_oflwflg & 0x0f) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) union ipt_timestamp { 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u_int32_t ipt_time[1]; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct ipt_ta { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct in_addr ipt_addr; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u_int32_t ipt_time; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } ipt_ta[1]; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } ipt_timestamp; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* flag bits for ipt_flg */ 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_TS_TSONLY 0 /* timestamps only */ 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */ 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_TS_PRESPEC 3 /* specified modules only */ 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* bits for security (not byte swapped) */ 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_SECUR_UNCLASS 0x0000 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_SECUR_CONFID 0xf135 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_SECUR_EFTO 0x789a 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_SECUR_MMMM 0xbc4d 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_SECUR_RESTR 0xaf13 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_SECUR_SECRET 0xd788 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPOPT_SECUR_TOPSECRET 0x6bc5 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Internet implementation parameters. 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAXTTL 255 /* maximum time to live (seconds) */ 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPDEFTTL 64 /* default ttl, from RFC 1340 */ 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPFRAGTTL 60 /* time to live for frags, slowhz */ 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPTTLDEC 1 /* subtracted when forwarding */ 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IP_MSS 576 /* default maximum segment size */ 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* in print-ip.c */ 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern u_int32_t ip_finddst(const struct ip *); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)