xref: /illumos-gate/usr/src/uts/common/sys/xti_inet.h (revision 45ede40b2394db7967e59f19288fae9b62efd4aa)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*	Copyright (c) 1996-1998 Sun Microsystems, Inc.	*/
23 /*	  All Rights Reserved	*/
24 
25 /*
26  * This is a private header file. Applications should not directly include
27  * this file. Instead they should include <xti_inet.h>
28  */
29 
30 #ifndef _SYS_XTI_INET_H
31 #define	_SYS_XTI_INET_H
32 
33 #include <sys/types.h>
34 
35 #ifdef	__cplusplus
36 extern "C" {
37 #endif
38 
39 /*
40  * This is a private header file. Applications should not directly include
41  * this file. Instead they should include <xti_inet.h>
42  */
43 
44 #if !defined(_XPG5)
45 
46 /*
47  * INTERNET SPECIFIC ENVIRONMENT
48  *
49  * Note:
50  * Unfortunately, XTI specification test assertions require exposing in
51  * headers options that are not implemented. They also require exposing
52  * Internet and OSI related options as part of inclusion of <xti.h>
53  *
54  * Also XTI specification intrudes on <netinet/in.h> TCP_ and IP_ namespaces
55  * and sometimes redefines the semantics or types of some options with a
56  * different history in that namespace. The name and binary value are exposed
57  * but option semantics may be different from what is in XTI spec and we defer
58  * to the <netinet/in.h> precedent.
59  *
60  * New applications should not use these constants. These are meant
61  * for compatibility with older applications.
62  */
63 
64 /*
65  * TCP level
66  */
67 #define	INET_TCP	6 /* must be same as IPPROTO_TCP in <netinet/in.h> */
68 
69 /*
70  * TCP level options
71  */
72 #ifndef TCP_NODELAY
73 #define	TCP_NODELAY	0x1	/* must be same as <netinet/tcp.h> */
74 #endif
75 
76 #ifndef TCP_MAXSEG
77 #define	TCP_MAXSEG	0x2	/* must be same as <netinet/tcp.h> */
78 #endif
79 
80 #ifndef TCP_KEEPALIVE
81 #define	TCP_KEEPALIVE	0x8	/* must be same as <netinet/tcp.h> */
82 #endif
83 
84 #endif /* !defined(_XPG5) */
85 
86 /*
87  * New applications must not use the constants defined above. Instead
88  * they must use the constants with the T_ prefix defined below. The
89  * constants without the T_ prefix are meant for compatibility with
90  * older applications.
91  */
92 
93 /*
94  * TCP level
95  */
96 #define	T_INET_TCP	6
97 
98 #define	T_TCP_NODELAY	0x1	/* Don't delay packets to coalesce */
99 #define	T_TCP_MAXSEG	0x2	/* Get maximum segment size */
100 #define	T_TCP_KEEPALIVE	0x8	/* check, if connections are alive */
101 
102 /*
103  * Structure used with TCP_KEEPALIVE option.
104  */
105 struct t_kpalive {
106 	t_scalar_t	kp_onoff;	/* option on/off */
107 	t_scalar_t	kp_timeout;	/* timeout in minutes */
108 };
109 
110 
111 #if !defined(_XPG5)
112 
113 /*
114  * New applications must not use the constants defined below. Instead they
115  * must use the corresponding T_prefix constants. The constants without the
116  * T_ prefix are supported for legacy applications.
117  */
118 
119 #define	T_GARBAGE		0x02 /* send garbage byte */
120 
121 /*
122  * UDP level
123  */
124 #define	INET_UDP	17 /* must be same as IPPROTO_UDP in <netinet/in.h> */
125 
126 
127 /*
128  * UDP level Options
129  */
130 
131 #ifndef UDP_CHECKSUM
132 #define	UDP_CHECKSUM	0x0600	/* must be same as in <netinet/udp.h> */
133 #endif
134 
135 /*
136  * IP level
137  */
138 #define	INET_IP	0	/* must be same as IPPROTO_IP in <netinet/in.h> */
139 
140 /*
141  * IP level Options
142  */
143 
144 #ifndef IP_OPTIONS
145 #define	IP_OPTIONS	0x1	/* must be same as <netinet/in.h> */
146 #endif
147 
148 #ifndef IP_TOS
149 #define	IP_TOS		0x3	/* must be same as <netinet/in.h> */
150 #endif
151 
152 #ifndef IP_TTL
153 #define	IP_TTL		0x4	/* must be same as <netinet/in.h> */
154 #endif
155 
156 /*
157  * following also added to <netinet/in.h> and be in sync to keep namespace
158  * sane
159  */
160 
161 #ifndef IP_REUSEADDR
162 #define	IP_REUSEADDR	0x104	/* allow local address reuse */
163 #endif
164 
165 #ifndef IP_DONTROUTE
166 #define	IP_DONTROUTE	0x105	/* just use interface addresses */
167 #endif
168 
169 #ifndef IP_BROADCAST
170 #define	IP_BROADCAST	0x106	/* permit sending of broadcast msgs */
171 #endif
172 
173 #endif /* !defined(_XPG5) */
174 
175 /*
176  * New applications should use the T_ prefix constants below
177  */
178 
179 /*
180  * UDP level
181  */
182 #define	T_INET_UDP	17
183 
184 /*
185  * UDP level Options
186  */
187 #define	T_UDP_CHECKSUM	0x0600	/* Checksum computation */
188 
189 /*
190  * IP level
191  */
192 #define	T_INET_IP	0
193 
194 /*
195  * IP level Options
196  */
197 #define	T_IP_TTL	0x4	/* IP per packet time to live */
198 #define	T_IP_REUSEADDR	0x104	/* allow local address reuse */
199 #define	T_IP_DONTROUTE	0x105	/* just use interface addresses */
200 #define	T_IP_BROADCAST	0x106	/* permit sending of broadcast msgs */
201 #define	T_IP_OPTIONS	0x107	/* IP per-packet options */
202 #define	T_IP_TOS	0x108	/* IP per packet type of service */
203 
204 /*
205  * IP_TOS precedence level
206  */
207 #define	T_ROUTINE			0
208 #define	T_PRIORITY			1
209 #define	T_IMMEDIATE			2
210 #define	T_FLASH				3
211 #define	T_OVERRIDEFLASH			4
212 #define	T_CRITIC_ECP			5
213 #define	T_INETCONTROL			6
214 #define	T_NETCONTROL			7
215 
216 
217 /*
218  * IP_TOS type of service
219  */
220 #define	T_NOTOS		0
221 #define	T_LDELAY	(1<<4)
222 #define	T_HITHRPT	(1<<3)
223 #define	T_HIREL		(1<<2)
224 #define	T_LOCOST	(1<<1)
225 
226 #define	SET_TOS(prec, tos)	((0x7 & (prec)) << 5 | (0x1e & (tos)))
227 
228 #ifdef	__cplusplus
229 }
230 #endif
231 
232 #endif	/* _SYS_XTI_INET_H */
233