Subversion Repositories SvarDOS

Rev

Rev 207 | Details | Compare with Previous | Last modification | View Log | RSS feed

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