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 /*
23 * Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T
24 * All Rights Reserved
25 *
26 */
27
28 /*
29 * Copyright 2002 Sun Microsystems, Inc. All rights reserved.
30 * Use is subject to license terms.
31 * Copyright 2014 Gary Mills
32 */
33
34 #ifndef _SYS_TIUSER_H
35 #define _SYS_TIUSER_H
36
37 #include <sys/types.h>
38 /*
39 * The following include file has declarations needed by both the kernel
40 * level transport providers and the user level library.
41 */
42 #include <sys/tpicommon.h>
43
44 #ifdef __cplusplus
45 extern "C" {
46 #endif
47
48
49 /*
50 * The following are the events returned by t_look
51 */
52 #define T_LISTEN 0x0001 /* connection indication received */
53 #define T_CONNECT 0x0002 /* connect confirmation received */
54 #define T_DATA 0x0004 /* normal data received */
55 #define T_EXDATA 0x0008 /* expedited data received */
56 #define T_DISCONNECT 0x0010 /* disconnect received */
57 #define T_UDERR 0x0040 /* data gram error indication */
58 #define T_ORDREL 0x0080 /* orderly release indication */
59 #define T_EVENTS 0x00ff /* event mask */
60
61 /*
62 * Flags for data primitives.
63 */
64 #define T_MORE 0x001 /* more data */
65 #define T_EXPEDITED 0x002 /* expedited data */
66
67
68 /*
69 * protocol specific service limits
70 */
71
72 struct t_info {
73 t_scalar_t addr; /* size of protocol address */
74 t_scalar_t options; /* size of protocol options */
75 t_scalar_t tsdu; /* size of max transport service data unit */
76 t_scalar_t etsdu; /* size of max expedited tsdu */
77 t_scalar_t connect; /* max data for connection primitives */
78 t_scalar_t discon; /* max data for disconnect primitives */
79 t_scalar_t servtype; /* provider service type */
80 };
81
82 /*
83 * netbuf structure
84 */
85
86 struct netbuf {
87 unsigned int maxlen;
88 unsigned int len;
89 char *buf;
90 };
91
92 #ifdef _SYSCALL32
93 struct netbuf32 {
94 uint32_t maxlen;
95 uint32_t len;
96 caddr32_t buf;
97 };
98 #endif /* _SYSCALL32 */
99
100 /*
101 * t_bind - format of the address and options arguments of bind
102 */
103
104 struct t_bind {
105 struct netbuf addr;
106 unsigned int qlen;
107 };
108
109 /*
110 * options management
111 */
112 struct t_optmgmt {
113 struct netbuf opt;
114 t_scalar_t flags;
115 };
116
117 /*
118 * disconnect structure
119 */
120 struct t_discon {
121 struct netbuf udata; /* user data */
122 int reason; /* reason code */
123 int sequence; /* sequence number */
124 };
125
126 /*
127 * call structure
128 */
129 struct t_call {
130 struct netbuf addr; /* address */
131 struct netbuf opt; /* options */
132 struct netbuf udata; /* user data */
133 int sequence; /* sequence number */
134 };
135
136 /*
137 * data gram structure
138 */
139 struct t_unitdata {
140 struct netbuf addr; /* address */
141 struct netbuf opt; /* options */
142 struct netbuf udata; /* user data */
143 };
144
145 /*
146 * unitdata error
147 */
148 struct t_uderr {
149 struct netbuf addr; /* address */
150 struct netbuf opt; /* options */
151 t_scalar_t error; /* error code */
152 };
153
154 /*
155 * The following are structure types used when dynamically
156 * allocating the above structures via t_structalloc().
157 */
158 #define T_BIND 1 /* struct t_bind */
159 #define T_OPTMGMT 2 /* struct t_optmgmt */
160 #define T_CALL 3 /* struct t_call */
161 #define T_DIS 4 /* struct t_discon */
162 #define T_UNITDATA 5 /* struct t_unitdata */
163 #define T_UDERROR 6 /* struct t_uderr */
164 #define T_INFO 7 /* struct t_info */
165
166 /*
167 * The following bits specify which fields of the above
168 * structures should be allocated by t_structalloc().
169 */
170 #define T_ADDR 0x01 /* address */
171 #define T_OPT 0x02 /* options */
172 #define T_UDATA 0x04 /* user data */
173 #define T_ALL 0x07 /* all the above */
174
175 /*
176 * the following are the states for the user
177 */
178
179 #define T_UNINIT 0 /* uninitialized */
180 #define T_UNBND 1 /* unbound */
181 #define T_IDLE 2 /* idle */
182 #define T_OUTCON 3 /* outgoing connection pending */
183 #define T_INCON 4 /* incoming connection pending */
184 #define T_DATAXFER 5 /* data transfer */
185 #define T_OUTREL 6 /* outgoing release pending */
186 #define T_INREL 7 /* incoming release pending */
187 #define T_BADSTATE 8 /* illegal state */
188
189 /*
190 * Flags for t_getname.
191 */
192 #define LOCALNAME 0
193 #define REMOTENAME 1
194
195 #if defined(__STDC__)
196
197 extern int t_accept(int fildes, int resfd, struct t_call *call);
198 extern char *t_alloc(int fildes, int struct_type, int fields);
199 extern int t_bind(int fildes, struct t_bind *req, struct t_bind *ret);
200 extern int t_close(int fildes);
201 extern int t_connect(int fildes, struct t_call *sndcall,
202 struct t_call *rcvcall);
203 extern void t_error(const char *errmsg);
204 extern int t_free(char *ptr, int struct_type);
205 extern int t_getinfo(int fildes, struct t_info *info);
206 extern int t_getname(int fildes, struct netbuf *name, int type);
207 extern int t_getstate(int fildes);
208 extern int t_listen(int fildes, struct t_call *call);
209 extern int t_look(int fildes);
210 extern int t_open(const char *path, int oflag, struct t_info *info);
211 extern int t_optmgmt(int fildes, struct t_optmgmt *req,
212 struct t_optmgmt *ret);
213 extern int t_rcv(int fildes, char *buf, unsigned nbytes, int *flags);
214 extern int t_rcvconnect(int fildes, struct t_call *call);
215 extern int t_rcvdis(int fildes, struct t_discon *discon);
216 extern int t_rcvrel(int fildes);
217 extern int t_rcvudata(int fildes, struct t_unitdata *unitdata, int *flags);
218 extern int t_rcvuderr(int fildes, struct t_uderr *uderr);
219 extern int t_snd(int fildes, char *buf, unsigned nbytes, int flags);
220 extern int t_snddis(int fildes, struct t_call *call);
221 extern int t_sndrel(int fildes);
222 extern int t_sndudata(int fildes, struct t_unitdata *unitdata);
223 extern char *t_strerror(int errnum);
224 extern int t_sync(int fildes);
225 extern int t_unbind(int fildes);
226
227 /*
228 * N.B.: this interface is deprecated. Use t_strerror() instead.
229 */
230 extern char *t_errlist[];
231 extern int t_nerr;
232
233 #endif /* __STDC__ */
234
235 #ifdef __cplusplus
236 }
237 #endif
238
239 #endif /* _SYS_TIUSER_H */