File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / dhcp / includes / netinet / ip.h
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 22:30:18 2012 UTC (12 years, 4 months ago) by misho
CVS tags: MAIN, HEAD
Initial revision

    1: /*	$NetBSD: ip.h,v 1.9 1995/05/15 01:22:44 cgd Exp $	*/
    2: 
    3: /*
    4:  * Copyright (c) 1982, 1986, 1993
    5:  *	The Regents of the University of California.  All rights reserved.
    6:  *
    7:  * Redistribution and use in source and binary forms, with or without
    8:  * modification, are permitted provided that the following conditions
    9:  * are met:
   10:  * 1. Redistributions of source code must retain the above copyright
   11:  *    notice, this list of conditions and the following disclaimer.
   12:  * 2. Redistributions in binary form must reproduce the above copyright
   13:  *    notice, this list of conditions and the following disclaimer in the
   14:  *    documentation and/or other materials provided with the distribution.
   15:  * 3. All advertising materials mentioning features or use of this software
   16:  *    must display the following acknowledgement:
   17:  *	This product includes software developed by the University of
   18:  *	California, Berkeley and its contributors.
   19:  * 4. Neither the name of the University nor the names of its contributors
   20:  *    may be used to endorse or promote products derived from this software
   21:  *    without specific prior written permission.
   22:  *
   23:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   24:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   25:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   26:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   27:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   28:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   29:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   30:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   31:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   32:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   33:  * SUCH DAMAGE.
   34:  *
   35:  *	@(#)ip.h	8.1 (Berkeley) 6/10/93
   36:  */
   37: 
   38: /*
   39:  * Definitions for internet protocol version 4.
   40:  * Per RFC 791, September 1981.
   41:  */
   42: #define	IPVERSION	4
   43: 
   44: /*
   45:  * Structure of an internet header, naked of options.
   46:  *
   47:  * We declare ip_len and ip_off to be short, rather than u_short
   48:  * pragmatically since otherwise unsigned comparisons can result
   49:  * against negative integers quite easily, and fail in subtle ways.
   50:  */
   51: struct ip {
   52: 	u_int8_t  ip_fvhl;		/* header length, version */
   53: 	u_int8_t  ip_tos;		/* type of service */
   54: 	int16_t	  ip_len;		/* total length */
   55: 	u_int16_t ip_id;		/* identification */
   56: 	int16_t	  ip_off;		/* fragment offset field */
   57: #define	IP_DF 0x4000			/* dont fragment flag */
   58: #define	IP_MF 0x2000			/* more fragments flag */
   59: #define	IP_OFFMASK 0x1fff		/* mask for fragmenting bits */
   60: 	u_int8_t  ip_ttl;		/* time to live */
   61: 	u_int8_t  ip_p;			/* protocol */
   62: 	u_int16_t ip_sum;		/* checksum */
   63: 	struct	  in_addr ip_src, ip_dst; /* source and dest address */
   64: };
   65: 
   66: #define IP_V(iph)	((iph)->ip_fvhl >> 4)
   67: #define IP_HL(iph)	(((iph)->ip_fvhl & 0x0F) << 2)
   68: #define IP_V_SET(iph,x)	((iph)->ip_fvhl = ((iph)->ip_fvhl & 0x0F) | ((x) << 4))
   69: #define IP_HL_SET(iph,x) ((iph)->ip_fvhl = \
   70: 			  ((iph)->ip_fvhl & 0xF0) | (((x) >> 2) & 0x0F))
   71: 
   72: #define	IP_MAXPACKET	65535		/* maximum packet size */
   73: 
   74: /*
   75:  * Definitions for IP type of service (ip_tos)
   76:  */
   77: #define	IPTOS_LOWDELAY		0x10
   78: #define	IPTOS_THROUGHPUT	0x08
   79: #define	IPTOS_RELIABILITY	0x04
   80: /*	IPTOS_LOWCOST		0x02 XXX */
   81: 
   82: /*
   83:  * Definitions for IP precedence (also in ip_tos) (hopefully unused)
   84:  */
   85: #define	IPTOS_PREC_NETCONTROL		0xe0
   86: #define	IPTOS_PREC_INTERNETCONTROL	0xc0
   87: #define	IPTOS_PREC_CRITIC_ECP		0xa0
   88: #define	IPTOS_PREC_FLASHOVERRIDE	0x80
   89: #define	IPTOS_PREC_FLASH		0x60
   90: #define	IPTOS_PREC_IMMEDIATE		0x40
   91: #define	IPTOS_PREC_PRIORITY		0x20
   92: #define	IPTOS_PREC_ROUTINE		0x00
   93: 
   94: /*
   95:  * Definitions for options.
   96:  */
   97: #define	IPOPT_COPIED(o)		((o)&0x80)
   98: #define	IPOPT_CLASS(o)		((o)&0x60)
   99: #define	IPOPT_NUMBER(o)		((o)&0x1f)
  100: 
  101: #define	IPOPT_CONTROL		0x00
  102: #define	IPOPT_RESERVED1		0x20
  103: #define	IPOPT_DEBMEAS		0x40
  104: #define	IPOPT_RESERVED2		0x60
  105: 
  106: #define	IPOPT_EOL		0		/* end of option list */
  107: #define	IPOPT_NOP		1		/* no operation */
  108: 
  109: #define	IPOPT_RR		7		/* record packet route */
  110: #define	IPOPT_TS		68		/* timestamp */
  111: #define	IPOPT_SECURITY		130		/* provide s,c,h,tcc */
  112: #define	IPOPT_LSRR		131		/* loose source route */
  113: #define	IPOPT_SATID		136		/* satnet id */
  114: #define	IPOPT_SSRR		137		/* strict source route */
  115: 
  116: /*
  117:  * Offsets to fields in options other than EOL and NOP.
  118:  */
  119: #define	IPOPT_OPTVAL		0		/* option ID */
  120: #define	IPOPT_OLEN		1		/* option length */
  121: #define	IPOPT_OFFSET		2		/* offset within option */
  122: #define	IPOPT_MINOFF		4		/* min value of above */
  123: 
  124: /*
  125:  * Time stamp option structure.
  126:  */
  127: struct	ip_timestamp {
  128: 	u_int8_t ipt_code;		/* IPOPT_TS */
  129: 	u_int8_t ipt_len;		/* size of structure (variable) */
  130: 	u_int8_t ipt_ptr;		/* index of current entry */
  131: 	u_int8_t ipt_flg_oflw;		/* flags, see below, overflow counter */
  132: 	union ipt_timestamp {
  133: 		 u_int32_t ipt_time[1];
  134: 		 struct	ipt_ta {
  135: 			struct in_addr ipt_addr;
  136: 			u_int32_t ipt_time;
  137: 		 } ipt_ta[1];
  138: 	} ipt_timestamp;
  139: };
  140: 
  141: /* flag bits for ipt_flg */
  142: #define	IPOPT_TS_TSONLY		0		/* timestamps only */
  143: #define	IPOPT_TS_TSANDADDR	1		/* timestamps and addresses */
  144: #define	IPOPT_TS_PRESPEC	3		/* specified modules only */
  145: 
  146: /* bits for security (not byte swapped) */
  147: #define	IPOPT_SECUR_UNCLASS	0x0000
  148: #define	IPOPT_SECUR_CONFID	0xf135
  149: #define	IPOPT_SECUR_EFTO	0x789a
  150: #define	IPOPT_SECUR_MMMM	0xbc4d
  151: #define	IPOPT_SECUR_RESTR	0xaf13
  152: #define	IPOPT_SECUR_SECRET	0xd788
  153: #define	IPOPT_SECUR_TOPSECRET	0x6bc5
  154: 
  155: /*
  156:  * Internet implementation parameters.
  157:  */
  158: #define	MAXTTL		255		/* maximum time to live (seconds) */
  159: #define	IPDEFTTL	64		/* default ttl, from RFC 1340 */
  160: #define	IPFRAGTTL	60		/* time to live for frags, slowhz */
  161: #define	IPTTLDEC	1		/* subtracted when forwarding */
  162: 
  163: #define	IP_MSS		576		/* default maximum segment size */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>