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