summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/netinet/ip.h
blob: f3aea0240d724582e7edd00e9b15e383f421f44c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
/*
 * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

/*
 * Copyright (c) 1982, 1986 Regents of the University of California.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms are permitted
 * provided that this notice is preserved and that due credit is given
 * to the University of California at Berkeley. The name of the University
 * may not be used to endorse or promote products derived from this
 * software without specific prior written permission. This software
 * is provided ``as is'' without express or implied warranty.
 */

/*
 * Definitions for internet protocol version 4.
 * Per RFC 791, September 1981.
 */

#ifndef	_NETINET_IP_H
#define	_NETINET_IP_H

#pragma ident	"%Z%%M%	%I%	%E% SMI"
/* ip.h 1.13 88/08/19 SMI; from UCB 7.6.1.1 3/15/88	*/

#include <sys/isa_defs.h>

#ifdef	__cplusplus
extern "C" {
#endif

#define	IPVERSION	4

/*
 * Structure of an internet header, naked of options.
 */
struct ip {
#ifdef _BIT_FIELDS_LTOH
	uchar_t	ip_hl:4,		/* header length */
		ip_v:4;			/* version */
#else
	uchar_t	ip_v:4,			/* version */
		ip_hl:4;		/* header length */
#endif
	uchar_t	ip_tos;			/* type of service */
	ushort_t ip_len;		/* total length */
	ushort_t ip_id;			/* identification */
	ushort_t ip_off;		/* fragment offset field */
#define	IP_DF 0x4000			/* dont fragment flag */
#define	IP_MF 0x2000			/* more fragments flag */
	uchar_t	ip_ttl;			/* time to live */
	uchar_t	ip_p;			/* protocol */
	ushort_t ip_sum;		/* checksum */
	struct	in_addr ip_src, ip_dst;	/* source and dest address */
};

#define	IP_MAXPACKET	65535		/* maximum packet size */

/*
 * Definitions for IP type of service (ip_tos)
 */
#define	IPTOS_LOWDELAY		0x10
#define	IPTOS_THROUGHPUT	0x08
#define	IPTOS_RELIABILITY	0x04
#define	IPTOS_ECT		0x02	/* ECN-Capable Transport flag */
#define	IPTOS_CE		0x01	/* ECN-Congestion Experienced flag */

/*
 * Definitions for IP precedence (also in ip_tos) (hopefully unused)
 */
#define	IPTOS_PREC_NETCONTROL		0xe0
#define	IPTOS_PREC_INTERNETCONTROL	0xc0
#define	IPTOS_PREC_CRITIC_ECP		0xa0
#define	IPTOS_PREC_FLASHOVERRIDE	0x80
#define	IPTOS_PREC_FLASH		0x60
#define	IPTOS_PREC_IMMEDIATE		0x40
#define	IPTOS_PREC_PRIORITY		0x20
#define	IPTOS_PREC_ROUTINE		0x00

/*
 * Definitions for options.
 */

/* Bits in the option value */
#define	IPOPT_COPY		0x80

#define	IPOPT_COPIED(o)		((o)&0x80)
#define	IPOPT_CLASS(o)		((o)&0x60)
#define	IPOPT_NUMBER(o)		((o)&0x1f)

#define	IPOPT_CONTROL		0x00
#define	IPOPT_RESERVED1		0x20
#define	IPOPT_DEBMEAS		0x40
#define	IPOPT_RESERVED2		0x60

#define	IPOPT_EOL		0x00		/* end of option list */
#define	IPOPT_NOP		0x01		/* no operation */

#define	IPOPT_RR		0x07		/* record packet route */
#define	IPOPT_RTRALERT		0x14		/* router alert */
#define	IPOPT_TS		0x44		/* timestamp */
#define	IPOPT_SECURITY		0x82		/* provide s,c,h,tcc */
#define	IPOPT_LSRR		0x83		/* loose source route */
#define	IPOPT_EXTSEC		0x85
#define	IPOPT_COMSEC		0x86
#define	IPOPT_SATID		0x88		/* satnet id */
#define	IPOPT_SSRR		0x89		/* strict source route */
#define	IPOPT_RA		0x94
#define	IPOPT_SDMDD		0x95

/*
 * Offsets to fields in options other than EOL and NOP.
 */
#define	IPOPT_OPTVAL		0		/* option ID */
#define	IPOPT_OLEN		1		/* option length */
#define	IPOPT_OFFSET		2		/* offset within option */
#define	IPOPT_POS_OV_FLG	3
#define	IPOPT_MINOFF		4		/* min value of IPOPT_OFFSET */


/* Minimum for src and record route options */
#define	IPOPT_MINOFF_SR		IPOPT_MINOFF

/*
 * Time stamp option structure.
 */
struct	ip_timestamp {
	uchar_t	ipt_code;		/* IPOPT_TS */
	uchar_t	ipt_len;		/* size of structure (variable) */
	uchar_t	ipt_ptr;		/* index of current entry */
#ifdef _BIT_FIELDS_LTOH
	uchar_t	ipt_flg:4,		/* flags, see below */
		ipt_oflw:4;		/* overflow counter */
#else
	uchar_t	ipt_oflw:4,		/* overflow counter */
		ipt_flg:4;		/* flags, see below */
#endif
	union ipt_timestamp {
		uint32_t	ipt_time[1];
		struct	ipt_ta {
			struct in_addr	ipt_addr;
			uint32_t	ipt_time;
		} ipt_ta[1];
	} ipt_timestamp;
};

/* flag bits for ipt_flg */
#define	IPOPT_TS_TSONLY		0		/* timestamps only */
#define	IPOPT_TS_TSANDADDR	1		/* timestamps and addresses */
#define	IPOPT_TS_PRESPEC	2		/* specified modules only */
#define	IPOPT_TS_PRESPEC_RFC791	3

/* Minimum for timestamp option */
#define	IPOPT_MINOFF_IT		5
#define	IPOPT_MINLEN_IT		5

#define	IPOPT_TS_TIMELEN	4	/* Timestamp size */

/* bits for security (not byte swapped) */
#define	IPOPT_SECUR_UNCLASS	0x0000
#define	IPOPT_SECUR_CONFID	0xf135
#define	IPOPT_SECUR_EFTO	0x789a
#define	IPOPT_SECUR_MMMM	0xbc4d
#define	IPOPT_SECUR_RESTR	0xaf13
#define	IPOPT_SECUR_SECRET	0xd788
#define	IPOPT_SECUR_TOPSECRET	0x6bc5

/*
 * Internet implementation parameters.
 */
#define	MAXTTL		255		/* maximum time to live (seconds) */
#define	IPFRAGTTL	60		/* time to live for frags, slowhz */
#define	IPTTLDEC	1		/* subtracted when forwarding */

#define	IP_MSS		576		/* default maximum segment size */

#ifdef	__cplusplus
}
#endif

#endif	/* _NETINET_IP_H */