]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/isc-dhcp/includes/netinet/ip.h
This commit was generated by cvs2svn to compensate for changes in r53024,
[FreeBSD/FreeBSD.git] / contrib / isc-dhcp / includes / netinet / ip.h
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 #if BYTE_ORDER == LITTLE_ENDIAN
53         u_int8_t  ip_hl:4,              /* header length */
54                   ip_v:4;               /* version */
55 #endif
56 #if BYTE_ORDER == BIG_ENDIAN
57         u_int8_t  ip_v:4,               /* version */
58                   ip_hl:4;              /* header length */
59 #endif
60         u_int8_t  ip_tos;               /* type of service */
61         int16_t   ip_len;               /* total length */
62         u_int16_t ip_id;                /* identification */
63         int16_t   ip_off;               /* fragment offset field */
64 #define IP_DF 0x4000                    /* dont fragment flag */
65 #define IP_MF 0x2000                    /* more fragments flag */
66 #define IP_OFFMASK 0x1fff               /* mask for fragmenting bits */
67         u_int8_t  ip_ttl;               /* time to live */
68         u_int8_t  ip_p;                 /* protocol */
69         u_int16_t ip_sum;               /* checksum */
70         struct    in_addr ip_src, ip_dst; /* source and dest address */
71 };
72
73 #define IP_MAXPACKET    65535           /* maximum packet size */
74
75 /*
76  * Definitions for IP type of service (ip_tos)
77  */
78 #define IPTOS_LOWDELAY          0x10
79 #define IPTOS_THROUGHPUT        0x08
80 #define IPTOS_RELIABILITY       0x04
81 /*      IPTOS_LOWCOST           0x02 XXX */
82
83 /*
84  * Definitions for IP precedence (also in ip_tos) (hopefully unused)
85  */
86 #define IPTOS_PREC_NETCONTROL           0xe0
87 #define IPTOS_PREC_INTERNETCONTROL      0xc0
88 #define IPTOS_PREC_CRITIC_ECP           0xa0
89 #define IPTOS_PREC_FLASHOVERRIDE        0x80
90 #define IPTOS_PREC_FLASH                0x60
91 #define IPTOS_PREC_IMMEDIATE            0x40
92 #define IPTOS_PREC_PRIORITY             0x20
93 #define IPTOS_PREC_ROUTINE              0x00
94
95 /*
96  * Definitions for options.
97  */
98 #define IPOPT_COPIED(o)         ((o)&0x80)
99 #define IPOPT_CLASS(o)          ((o)&0x60)
100 #define IPOPT_NUMBER(o)         ((o)&0x1f)
101
102 #define IPOPT_CONTROL           0x00
103 #define IPOPT_RESERVED1         0x20
104 #define IPOPT_DEBMEAS           0x40
105 #define IPOPT_RESERVED2         0x60
106
107 #define IPOPT_EOL               0               /* end of option list */
108 #define IPOPT_NOP               1               /* no operation */
109
110 #define IPOPT_RR                7               /* record packet route */
111 #define IPOPT_TS                68              /* timestamp */
112 #define IPOPT_SECURITY          130             /* provide s,c,h,tcc */
113 #define IPOPT_LSRR              131             /* loose source route */
114 #define IPOPT_SATID             136             /* satnet id */
115 #define IPOPT_SSRR              137             /* strict source route */
116
117 /*
118  * Offsets to fields in options other than EOL and NOP.
119  */
120 #define IPOPT_OPTVAL            0               /* option ID */
121 #define IPOPT_OLEN              1               /* option length */
122 #define IPOPT_OFFSET            2               /* offset within option */
123 #define IPOPT_MINOFF            4               /* min value of above */
124
125 /*
126  * Time stamp option structure.
127  */
128 struct  ip_timestamp {
129         u_int8_t ipt_code;              /* IPOPT_TS */
130         u_int8_t ipt_len;               /* size of structure (variable) */
131         u_int8_t ipt_ptr;               /* index of current entry */
132 #if BYTE_ORDER == LITTLE_ENDIAN
133         u_int8_t ipt_flg:4,             /* flags, see below */
134                  ipt_oflw:4;            /* overflow counter */
135 #endif
136 #if BYTE_ORDER == BIG_ENDIAN
137         u_int8_t ipt_oflw:4,            /* overflow counter */
138                  ipt_flg:4;             /* flags, see below */
139 #endif
140         union ipt_timestamp {
141                  u_int32_t ipt_time[1];
142                  struct ipt_ta {
143                         struct in_addr ipt_addr;
144                         u_int32_t ipt_time;
145                  } ipt_ta[1];
146         } ipt_timestamp;
147 };
148
149 /* flag bits for ipt_flg */
150 #define IPOPT_TS_TSONLY         0               /* timestamps only */
151 #define IPOPT_TS_TSANDADDR      1               /* timestamps and addresses */
152 #define IPOPT_TS_PRESPEC        3               /* specified modules only */
153
154 /* bits for security (not byte swapped) */
155 #define IPOPT_SECUR_UNCLASS     0x0000
156 #define IPOPT_SECUR_CONFID      0xf135
157 #define IPOPT_SECUR_EFTO        0x789a
158 #define IPOPT_SECUR_MMMM        0xbc4d
159 #define IPOPT_SECUR_RESTR       0xaf13
160 #define IPOPT_SECUR_SECRET      0xd788
161 #define IPOPT_SECUR_TOPSECRET   0x6bc5
162
163 /*
164  * Internet implementation parameters.
165  */
166 #define MAXTTL          255             /* maximum time to live (seconds) */
167 #define IPDEFTTL        64              /* default ttl, from RFC 1340 */
168 #define IPFRAGTTL       60              /* time to live for frags, slowhz */
169 #define IPTTLDEC        1               /* subtracted when forwarding */
170
171 #define IP_MSS          576             /* default maximum segment size */