4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Copyright (c) 1982, 1986, 1993
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * The Regents of the University of California. All rights reserved.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Portions copyright (c) 1999, 2000
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Intel Corporation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * All rights reserved.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Redistribution and use in source and binary forms, with or without
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * modification, are permitted provided that the following conditions
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * are met:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * 1. Redistributions of source code must retain the above copyright
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * notice, this list of conditions and the following disclaimer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * 2. Redistributions in binary form must reproduce the above copyright
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * notice, this list of conditions and the following disclaimer in the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * documentation and/or other materials provided with the distribution.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * 3. All advertising materials mentioning features or use of this software
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * must display the following acknowledgement:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * This product includes software developed by the University of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * California, Berkeley, Intel Corporation, and its contributors.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * 4. Neither the name of University, Intel Corporation, or their respective
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * contributors may be used to endorse or promote products derived from
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * this software without specific prior written permission.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * THIS SOFTWARE IS PROVIDED BY THE REGENTS, INTEL CORPORATION AND
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * @(#)ip.h 8.2 (Berkeley) 6/1/94
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * $Id: ip.h,v 1.1.1.1 2006/05/30 06:12:48 hhzhou Exp $
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef _NETINET_IP_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define _NETINET_IP_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef _ORG_FREEBSD_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define _IP_VHL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Definitions for internet protocol version 4.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Per RFC 791, September 1981.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPVERSION 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Structure of an internet header, naked of options.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct ip {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef _IP_VHL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync u_char ip_vhl; /* version << 4 | header length >> 2 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#if BYTE_ORDER == LITTLE_ENDIAN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync u_int ip_hl:4, /* header length */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ip_v:4; /* version */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#if BYTE_ORDER == BIG_ENDIAN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync u_int ip_v:4, /* version */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ip_hl:4; /* header length */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif /* not _IP_VHL */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync u_char ip_tos; /* type of service */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync u_short ip_len; /* total length */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync u_short ip_id; /* identification */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync u_short ip_off; /* fragment offset field */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IP_RF 0x8000 /* reserved fragment flag */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IP_DF 0x4000 /* dont fragment flag */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IP_MF 0x2000 /* more fragments flag */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync u_char ip_ttl; /* time to live */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync u_char ip_p; /* protocol */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync u_short ip_sum; /* checksum */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync struct in_addr ip_src,ip_dst; /* source and dest address */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef _IP_VHL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IP_MAKE_VHL(v, hl) ((v) << 4 | (hl))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IP_VHL_HL(vhl) ((vhl) & 0x0f)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IP_VHL_V(vhl) ((vhl) >> 4)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IP_VHL_BORING 0x45
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IP_MAXPACKET 65535 /* maximum packet size */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Definitions for IP type of service (ip_tos)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPTOS_LOWDELAY 0x10
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPTOS_THROUGHPUT 0x08
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPTOS_RELIABILITY 0x04
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPTOS_MINCOST 0x02
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Definitions for IP precedence (also in ip_tos) (hopefully unused)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPTOS_PREC_NETCONTROL 0xe0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPTOS_PREC_INTERNETCONTROL 0xc0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPTOS_PREC_CRITIC_ECP 0xa0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPTOS_PREC_FLASHOVERRIDE 0x80
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPTOS_PREC_FLASH 0x60
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPTOS_PREC_IMMEDIATE 0x40
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPTOS_PREC_PRIORITY 0x20
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPTOS_PREC_ROUTINE 0x00
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Definitions for options.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_COPIED(o) ((o)&0x80)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_CLASS(o) ((o)&0x60)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_NUMBER(o) ((o)&0x1f)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_CONTROL 0x00
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_RESERVED1 0x20
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_DEBMEAS 0x40
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_RESERVED2 0x60
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_EOL 0 /* end of option list */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_NOP 1 /* no operation */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_RR 7 /* record packet route */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_TS 68 /* timestamp */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_SECURITY 130 /* provide s,c,h,tcc */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_LSRR 131 /* loose source route */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_SATID 136 /* satnet id */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_SSRR 137 /* strict source route */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_RA 148 /* router alert */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Offsets to fields in options other than EOL and NOP.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_OPTVAL 0 /* option ID */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_OLEN 1 /* option length */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_OFFSET 2 /* offset within option */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_MINOFF 4 /* min value of above */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Time stamp option structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct ip_timestamp {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync u_char ipt_code; /* IPOPT_TS */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync u_char ipt_len; /* size of structure (variable) */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync u_char ipt_ptr; /* index of current entry */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#if BYTE_ORDER == LITTLE_ENDIAN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync u_int ipt_flg:4, /* flags, see below */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ipt_oflw:4; /* overflow counter */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#if BYTE_ORDER == BIG_ENDIAN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync u_int ipt_oflw:4, /* overflow counter */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ipt_flg:4; /* flags, see below */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync union ipt_timestamp {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync n_long ipt_time[1];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync struct ipt_ta {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync struct in_addr ipt_addr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync n_long ipt_time;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } ipt_ta[1];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } ipt_timestamp;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* flag bits for ipt_flg */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_TS_TSONLY 0 /* timestamps only */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_TS_PRESPEC 3 /* specified modules only */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* bits for security (not byte swapped) */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_SECUR_UNCLASS 0x0000
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_SECUR_CONFID 0xf135
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_SECUR_EFTO 0x789a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_SECUR_MMMM 0xbc4d
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_SECUR_RESTR 0xaf13
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_SECUR_SECRET 0xd788
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPOPT_SECUR_TOPSECRET 0x6bc5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Internet implementation parameters.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MAXTTL 255 /* maximum time to live (seconds) */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPDEFTTL 64 /* default ttl, from RFC 1340 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPFRAGTTL 60 /* time to live for frags, slowhz */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IPTTLDEC 1 /* subtracted when forwarding */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IP_MSS 576 /* default maximum segment size */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif