Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/netinet/ip.h
39475 views
1
/*-
2
* SPDX-License-Identifier: BSD-3-Clause
3
*
4
* Copyright (c) 1982, 1986, 1993
5
* The Regents of the University of California.
6
* All rights reserved.
7
*
8
* Redistribution and use in source and binary forms, with or without
9
* modification, are permitted provided that the following conditions
10
* are met:
11
* 1. Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
13
* 2. Redistributions in binary form must reproduce the above copyright
14
* notice, this list of conditions and the following disclaimer in the
15
* documentation and/or other materials provided with the distribution.
16
* 3. Neither the name of the University nor the names of its contributors
17
* may be used to endorse or promote products derived from this software
18
* without specific prior written permission.
19
*
20
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30
* SUCH DAMAGE.
31
*/
32
33
#ifndef _NETINET_IP_H_
34
#define _NETINET_IP_H_
35
36
#include <sys/types.h>
37
#include <netinet/in.h>
38
39
/*
40
* Definitions for internet protocol version 4.
41
*
42
* Per RFC 791, September 1981.
43
*/
44
#define IPVERSION 4
45
46
/*
47
* Structure of an internet header, naked of options.
48
*/
49
struct ip {
50
#if BYTE_ORDER == LITTLE_ENDIAN
51
u_char ip_hl:4, /* header length */
52
ip_v:4; /* version */
53
#endif
54
#if BYTE_ORDER == BIG_ENDIAN
55
u_char ip_v:4, /* version */
56
ip_hl:4; /* header length */
57
#endif
58
u_char ip_tos; /* type of service */
59
u_short ip_len; /* total length */
60
u_short ip_id; /* identification */
61
u_short ip_off; /* fragment offset field */
62
#define IP_RF 0x8000 /* reserved fragment flag */
63
#define IP_DF 0x4000 /* dont fragment flag */
64
#define IP_MF 0x2000 /* more fragments flag */
65
#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
66
u_char ip_ttl; /* time to live */
67
u_char ip_p; /* protocol */
68
u_short ip_sum; /* checksum */
69
struct in_addr ip_src,ip_dst; /* source and dest address */
70
} __packed;
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
#define IPTOS_MINCOST IPTOS_DSCP_CS0
81
82
/*
83
* Definitions for IP precedence (also in ip_tos) (deprecated).
84
*/
85
#define IPTOS_PREC_NETCONTROL IPTOS_DSCP_CS7
86
#define IPTOS_PREC_INTERNETCONTROL IPTOS_DSCP_CS6
87
#define IPTOS_PREC_CRITIC_ECP IPTOS_DSCP_CS5
88
#define IPTOS_PREC_FLASHOVERRIDE IPTOS_DSCP_CS4
89
#define IPTOS_PREC_FLASH IPTOS_DSCP_CS3
90
#define IPTOS_PREC_IMMEDIATE IPTOS_DSCP_CS2
91
#define IPTOS_PREC_PRIORITY IPTOS_DSCP_CS1
92
#define IPTOS_PREC_ROUTINE IPTOS_DSCP_CS0
93
94
/*
95
* Offset of Diffserv decimal value to convert it to tos value .
96
*/
97
#define IPTOS_DSCP_OFFSET 2
98
99
/*
100
* Definitions for DiffServ Codepoints as per RFC2474 and RFC5865.
101
*/
102
#define IPTOS_DSCP_CS0 0x00
103
#define IPTOS_DSCP_CS1 0x20
104
#define IPTOS_DSCP_AF11 0x28
105
#define IPTOS_DSCP_AF12 0x30
106
#define IPTOS_DSCP_AF13 0x38
107
#define IPTOS_DSCP_CS2 0x40
108
#define IPTOS_DSCP_AF21 0x48
109
#define IPTOS_DSCP_AF22 0x50
110
#define IPTOS_DSCP_AF23 0x58
111
#define IPTOS_DSCP_CS3 0x60
112
#define IPTOS_DSCP_AF31 0x68
113
#define IPTOS_DSCP_AF32 0x70
114
#define IPTOS_DSCP_AF33 0x78
115
#define IPTOS_DSCP_CS4 0x80
116
#define IPTOS_DSCP_AF41 0x88
117
#define IPTOS_DSCP_AF42 0x90
118
#define IPTOS_DSCP_AF43 0x98
119
#define IPTOS_DSCP_CS5 0xa0
120
#define IPTOS_DSCP_VA 0xb0
121
#define IPTOS_DSCP_EF 0xb8
122
#define IPTOS_DSCP_CS6 0xc0
123
#define IPTOS_DSCP_CS7 0xe0
124
125
/*
126
* ECN (Explicit Congestion Notification) codepoints in RFC3168 mapped to the
127
* lower 2 bits of the TOS field.
128
*/
129
#define IPTOS_ECN_NOTECT 0x00 /* not-ECT */
130
#define IPTOS_ECN_ECT1 0x01 /* ECN-capable transport (1) */
131
#define IPTOS_ECN_ECT0 0x02 /* ECN-capable transport (0) */
132
#define IPTOS_ECN_CE 0x03 /* congestion experienced */
133
#define IPTOS_ECN_MASK 0x03 /* ECN field mask */
134
135
/*
136
* Definitions for options.
137
*/
138
#define IPOPT_COPIED(o) ((o)&0x80)
139
#define IPOPT_CLASS(o) ((o)&0x60)
140
#define IPOPT_NUMBER(o) ((o)&0x1f)
141
142
#define IPOPT_CONTROL 0x00
143
#define IPOPT_RESERVED1 0x20
144
#define IPOPT_DEBMEAS 0x40
145
#define IPOPT_RESERVED2 0x60
146
147
#define IPOPT_EOL 0 /* end of option list */
148
#define IPOPT_NOP 1 /* no operation */
149
150
#define IPOPT_RR 7 /* record packet route */
151
#define IPOPT_TS 68 /* timestamp */
152
#define IPOPT_SECURITY 130 /* provide s,c,h,tcc */
153
#define IPOPT_LSRR 131 /* loose source route */
154
#define IPOPT_ESO 133 /* extended security */
155
#define IPOPT_CIPSO 134 /* commercial security */
156
#define IPOPT_SATID 136 /* satnet id */
157
#define IPOPT_SSRR 137 /* strict source route */
158
#define IPOPT_RA 148 /* router alert */
159
160
/*
161
* Offsets to fields in options other than EOL and NOP.
162
*/
163
#define IPOPT_OPTVAL 0 /* option ID */
164
#define IPOPT_OLEN 1 /* option length */
165
#define IPOPT_OFFSET 2 /* offset within option */
166
#define IPOPT_MINOFF 4 /* min value of above */
167
168
/*
169
* Time stamp option structure.
170
*/
171
struct ip_timestamp {
172
u_char ipt_code; /* IPOPT_TS */
173
u_char ipt_len; /* size of structure (variable) */
174
u_char ipt_ptr; /* index of current entry */
175
#if BYTE_ORDER == LITTLE_ENDIAN
176
u_char ipt_flg:4, /* flags, see below */
177
ipt_oflw:4; /* overflow counter */
178
#endif
179
#if BYTE_ORDER == BIG_ENDIAN
180
u_char ipt_oflw:4, /* overflow counter */
181
ipt_flg:4; /* flags, see below */
182
#endif
183
union ipt_timestamp {
184
uint32_t ipt_time[1]; /* network format */
185
struct ipt_ta {
186
struct in_addr ipt_addr;
187
uint32_t ipt_time; /* network format */
188
} ipt_ta[1];
189
} ipt_timestamp;
190
} __packed;
191
192
/* Flag bits for ipt_flg. */
193
#define IPOPT_TS_TSONLY 0 /* timestamps only */
194
#define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */
195
#define IPOPT_TS_PRESPEC 3 /* specified modules only */
196
197
/* Bits for security (not byte swapped). */
198
#define IPOPT_SECUR_UNCLASS 0x0000
199
#define IPOPT_SECUR_CONFID 0xf135
200
#define IPOPT_SECUR_EFTO 0x789a
201
#define IPOPT_SECUR_MMMM 0xbc4d
202
#define IPOPT_SECUR_RESTR 0xaf13
203
#define IPOPT_SECUR_SECRET 0xd788
204
#define IPOPT_SECUR_TOPSECRET 0x6bc5
205
206
/*
207
* Internet implementation parameters.
208
*/
209
#define MAXTTL 255 /* maximum time to live (seconds) */
210
#define IPDEFTTL 64 /* default ttl, from RFC 1340 */
211
#define IPTTLDEC 1 /* subtracted when forwarding */
212
#define IP_MSS 576 /* default maximum segment size */
213
214
/*
215
* This is the real IPv4 pseudo header, used for computing the TCP and UDP
216
* checksums. For the Internet checksum, struct ipovly can be used instead.
217
* For stronger checksums, the real thing must be used.
218
*/
219
struct ippseudo {
220
struct in_addr ippseudo_src; /* source internet address */
221
struct in_addr ippseudo_dst; /* destination internet address */
222
u_char ippseudo_pad; /* pad, must be zero */
223
u_char ippseudo_p; /* protocol */
224
u_short ippseudo_len; /* protocol length */
225
};
226
#endif
227
228