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
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2003 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_TPICOMMON_H
#define _SYS_TPICOMMON_H
#pragma ident "%Z%%M% %I% %E% SMI"
#include <sys/feature_tests.h>
#ifdef __cplusplus
extern "C" {
#endif
/*
* WARNING: This header should not ever be included directly by application
* programs. It exists so that common definitions can be included by other
* system header files which define a documented interface. The interfaces
* that share and expose the definitions in this file are:
*
* (1) TLI interface <tiuser.h> (which includes <sys/tiuser.h> which
* includes this file)
* (2) XTI interface <xti.h>
* (3) Kernel Streams TPI message based inteface <sys/tihdr.h>
*/
/*
* The following are "t_errno" error codes needed by both the kernel
* level transport providers and the user level interfaces.
*/
#define TBADADDR 1 /* Incorrect address format */
#define TBADOPT 2 /* Incorrect options format */
#define TACCES 3 /* Illegal permissions */
#define TBADF 4 /* Illegal file descriptor */
#define TNOADDR 5 /* Couldn't allocate address */
#define TOUTSTATE 6 /* Routine will place interface out of state */
#define TBADSEQ 7 /* Illegal called/calling sequence number */
#define TSYSERR 8 /* System error */
#define TLOOK 9 /* An event requires attention */
#define TBADDATA 10 /* Illegal amount of data */
#define TBUFOVFLW 11 /* Buffer not large enough */
#define TFLOW 12 /* Can't send message - (blocked) */
#define TNODATA 13 /* No message currently available */
#define TNODIS 14 /* Disconnect message not found */
#define TNOUDERR 15 /* Unitdata error message not found */
#define TBADFLAG 16 /* Incorrect flags specified */
#define TNOREL 17 /* Orderly release message not found */
#define TNOTSUPPORT 18 /* Primitive not supported by provider */
#define TSTATECHNG 19 /* State is in process of changing */
/*
* Following new error codes added to namespace with introduction of XTI
*/
#define TNOSTRUCTYPE 20 /* Unsupported structure type requested */
#define TBADNAME 21 /* Invalid transport provider name */
#define TBADQLEN 22 /* Listener queue length limit is zero */
#define TADDRBUSY 23 /* Transport address is in use */
#define TINDOUT 24 /* Outstanding connection indications */
#define TPROVMISMATCH 25
/* Listener-acceptor transport provider mismatch */
#define TRESQLEN 26
/* Connection acceptor has listen queue length limit greater than zero */
#define TRESADDR 27
/* Connection acceptor-listener addresses not same but required by transport */
#define TQFULL 28 /* Incoming connection queue is full */
#define TPROTO 29 /* Protocol error on transport primitive */
/*
* Service type defines - used with T_info_ack
*/
#define T_COTS 1 /* connection oriented transport service */
#define T_COTS_ORD 2 /* connection oriented w/ orderly release */
#define T_CLTS 3 /* connectionless transport service */
/*
* NOT FOR PUBLIC USE, Solaris internal only.
* This value of nc_semantics is strictly for use of Remote Direct
* Memory Access provider interfaces in Solaris only and not for
* general use. Do not use this value for general purpose user or
* kernel programming. If used the behavior is undefined.
* This is a PRIVATE interface to be used by Solaris kRPC only.
*/
#define T_RDMA 4 /* rdma transport service */
/*
* The following are the flag definitions needed by the
* user level library routines.
*/
/*
* flags for option management request primitives
* Note:
* - This namespace is distinct from the namespace for data
* primitives.
* - Flags T_NEGOTIATE, T_CHECK, T_DEFAULT, T_CURRENT
* are associated with an option request
* - Flags T_SUCCESS, T_FAILURE, T_PARTSUCCESS, T_READONLY,
* T_NOTSUPPORT are associated with results of option request.
*/
#define T_NEGOTIATE 0x004 /* set opts request */
#define T_CHECK 0x008 /* check opts request */
#define T_DEFAULT 0x010 /* get default opts request */
#define T_SUCCESS 0x020 /* successful result */
#define T_FAILURE 0x040 /* failure result */
#define T_CURRENT 0x080 /* get current options request */
#define T_PARTSUCCESS 0x100 /* partial success result */
#define T_READONLY 0x200 /* read-only result */
#define T_NOTSUPPORT 0x400 /* not supported result */
/*
* General purpose defines - used in multiple options context.
* They (T_YES and T_NO) need to be bitwise distinct from T_GARBAGE
* used with TCP level options by XTI for historical XTI specification
* reasons.
* (T_GARBAGE declared in <sys/xti_inet.h> included by <xti.h>).
*/
#define T_YES 1
#define T_NO 0
/*
* Values used with struct T_info_ack fields
*/
#define T_INFINITE -1
#define T_INVALID -2
/*
* Constants used with option management "name" or "value" fields.
*/
/*
* XTI defined value reserved for stating 'unspecified' value used
* in some option namespaces.
*/
#define T_UNSPEC (~0-2) /* applicable to ulong_t, long, char */
/*
* XTI inspired option management defined an option name T_ALLOPT
* to imply all options of a certain level.
* No option name (for any level) should be defined with constant value of
* T_ALLOPT (0).
*/
#define T_ALLOPT 0 /* all options at any level */
/*
* An option specification consists of an opthdr, followed by the value of
* the option. An options buffer contains one or more options. The len
* field of opthdr specifies the length of the option value in bytes. This
* length must be a multiple of sizeof (t_scalar_t) (use OPTLEN macro).
* This is an antique definition which is used (unofficially) by TLI but
* superceded in XTI.
*/
/*
* The opthdr types are now t_uscalar_t - inspired by XTI
*/
#if !defined(_XPG4_2) || defined(__EXTENSIONS__)
struct opthdr {
t_uscalar_t level; /* protocol level affected */
t_uscalar_t name; /* option to modify */
t_uscalar_t len; /* length of option value */
};
#define OPTLEN(x) ((((x) + sizeof (t_uscalar_t) - 1) / \
sizeof (t_uscalar_t)) * sizeof (t_uscalar_t))
#define OPTVAL(opt) ((char *)(opt + 1))
#endif /* !defined(_XPG4_2) || defined(__EXTENSIONS__) */
#ifdef __cplusplus
}
#endif
#endif /* _SYS_TPICOMMON_H */
|