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
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
|
/*
* 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 (c) 1984, 1986, 1987, 1988, 1989 AT&T
* All Rights Reserved
*
*/
/*
* Copyright 2014 Garrett D'Amore <garrett@damore.org>
*
* Copyright 2002 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
* Copyright 2014 Gary Mills
*/
#ifndef _SYS_TIUSER_H
#define _SYS_TIUSER_H
#include <sys/types.h>
/*
* The following include file has declarations needed by both the kernel
* level transport providers and the user level library.
*/
#include <sys/tpicommon.h>
#ifdef __cplusplus
extern "C" {
#endif
/*
* The following are the events returned by t_look
*/
#define T_LISTEN 0x0001 /* connection indication received */
#define T_CONNECT 0x0002 /* connect confirmation received */
#define T_DATA 0x0004 /* normal data received */
#define T_EXDATA 0x0008 /* expedited data received */
#define T_DISCONNECT 0x0010 /* disconnect received */
#define T_UDERR 0x0040 /* data gram error indication */
#define T_ORDREL 0x0080 /* orderly release indication */
#define T_EVENTS 0x00ff /* event mask */
/*
* Flags for data primitives.
*/
#define T_MORE 0x001 /* more data */
#define T_EXPEDITED 0x002 /* expedited data */
/*
* protocol specific service limits
*/
struct t_info {
t_scalar_t addr; /* size of protocol address */
t_scalar_t options; /* size of protocol options */
t_scalar_t tsdu; /* size of max transport service data unit */
t_scalar_t etsdu; /* size of max expedited tsdu */
t_scalar_t connect; /* max data for connection primitives */
t_scalar_t discon; /* max data for disconnect primitives */
t_scalar_t servtype; /* provider service type */
};
/*
* netbuf structure
*/
struct netbuf {
unsigned int maxlen;
unsigned int len;
char *buf;
};
#ifdef _SYSCALL32
struct netbuf32 {
uint32_t maxlen;
uint32_t len;
caddr32_t buf;
};
#endif /* _SYSCALL32 */
/*
* t_bind - format of the address and options arguments of bind
*/
struct t_bind {
struct netbuf addr;
unsigned int qlen;
};
/*
* options management
*/
struct t_optmgmt {
struct netbuf opt;
t_scalar_t flags;
};
/*
* disconnect structure
*/
struct t_discon {
struct netbuf udata; /* user data */
int reason; /* reason code */
int sequence; /* sequence number */
};
/*
* call structure
*/
struct t_call {
struct netbuf addr; /* address */
struct netbuf opt; /* options */
struct netbuf udata; /* user data */
int sequence; /* sequence number */
};
/*
* data gram structure
*/
struct t_unitdata {
struct netbuf addr; /* address */
struct netbuf opt; /* options */
struct netbuf udata; /* user data */
};
/*
* unitdata error
*/
struct t_uderr {
struct netbuf addr; /* address */
struct netbuf opt; /* options */
t_scalar_t error; /* error code */
};
/*
* The following are structure types used when dynamically
* allocating the above structures via t_structalloc().
*/
#define T_BIND 1 /* struct t_bind */
#define T_OPTMGMT 2 /* struct t_optmgmt */
#define T_CALL 3 /* struct t_call */
#define T_DIS 4 /* struct t_discon */
#define T_UNITDATA 5 /* struct t_unitdata */
#define T_UDERROR 6 /* struct t_uderr */
#define T_INFO 7 /* struct t_info */
/*
* The following bits specify which fields of the above
* structures should be allocated by t_structalloc().
*/
#define T_ADDR 0x01 /* address */
#define T_OPT 0x02 /* options */
#define T_UDATA 0x04 /* user data */
#define T_ALL 0x07 /* all the above */
/*
* the following are the states for the user
*/
#define T_UNINIT 0 /* uninitialized */
#define T_UNBND 1 /* unbound */
#define T_IDLE 2 /* idle */
#define T_OUTCON 3 /* outgoing connection pending */
#define T_INCON 4 /* incoming connection pending */
#define T_DATAXFER 5 /* data transfer */
#define T_OUTREL 6 /* outgoing release pending */
#define T_INREL 7 /* incoming release pending */
#define T_BADSTATE 8 /* illegal state */
/*
* Flags for t_getname.
*/
#define LOCALNAME 0
#define REMOTENAME 1
extern int t_accept(int fildes, int resfd, struct t_call *call);
extern char *t_alloc(int fildes, int struct_type, int fields);
extern int t_bind(int fildes, struct t_bind *req, struct t_bind *ret);
extern int t_close(int fildes);
extern int t_connect(int fildes, struct t_call *sndcall,
struct t_call *rcvcall);
extern void t_error(const char *errmsg);
extern int t_free(char *ptr, int struct_type);
extern int t_getinfo(int fildes, struct t_info *info);
extern int t_getname(int fildes, struct netbuf *name, int type);
extern int t_getstate(int fildes);
extern int t_listen(int fildes, struct t_call *call);
extern int t_look(int fildes);
extern int t_open(const char *path, int oflag, struct t_info *info);
extern int t_optmgmt(int fildes, struct t_optmgmt *req,
struct t_optmgmt *ret);
extern int t_rcv(int fildes, char *buf, unsigned nbytes, int *flags);
extern int t_rcvconnect(int fildes, struct t_call *call);
extern int t_rcvdis(int fildes, struct t_discon *discon);
extern int t_rcvrel(int fildes);
extern int t_rcvudata(int fildes, struct t_unitdata *unitdata, int *flags);
extern int t_rcvuderr(int fildes, struct t_uderr *uderr);
extern int t_snd(int fildes, char *buf, unsigned nbytes, int flags);
extern int t_snddis(int fildes, struct t_call *call);
extern int t_sndrel(int fildes);
extern int t_sndudata(int fildes, struct t_unitdata *unitdata);
extern char *t_strerror(int errnum);
extern int t_sync(int fildes);
extern int t_unbind(int fildes);
/*
* N.B.: this interface is deprecated. Use t_strerror() instead.
*/
extern char *t_errlist[];
extern int t_nerr;
#ifdef __cplusplus
}
#endif
#endif /* _SYS_TIUSER_H */
|