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 2014 Garrett D'Amore <garrett@damore.org> 24 */ 25 /* Copyright (c) 1996 Sun Microsystems, Inc. */ 26 /* All Rights Reserved */ 27 /* 28 * Copyright 2017 Nexenta Systems, Inc. All rights reserved. 29 */ 30 31 #ifndef _XTI_H 32 #define _XTI_H 33 34 #include <sys/types.h> 35 36 /* 37 * The following include file has declarations needed by both the kernel 38 * level transport providers and the user level library. This file includes 39 * it to expose its namespaces to XTI user level interface. 40 */ 41 #include <sys/tpicommon.h> 42 43 /* 44 * Include XTI interface level options management declarations 45 */ 46 #include <sys/xti_xtiopt.h> 47 48 #if !defined(_XPG5) 49 50 /* 51 * Include declarations related to OSI transport and management data 52 * structures, and the Internet Protocol Suite. 53 * Note: The older Unix95/XNS4 XTI spec required these to be 54 * exposed through the generic interface header. 55 */ 56 #include <sys/xti_osi.h> 57 #include <sys/xti_inet.h> 58 59 #endif /* !defined(_XPG5) */ 60 61 #ifdef __cplusplus 62 extern "C" { 63 #endif 64 65 /* 66 * The following t_errno error codes are included in the namespace by 67 * inclusion of <sys/tpicommon.h> above. The english language error strings 68 * associated with the error values are reproduced here for easy reference. 69 * 70 * Error Value Error message string 71 * ---- ----- -------------------- 72 * TBADADDR 1 Incorrect address format 73 * TBADOPT 2 Incorrect options format 74 * TACCES 3 Illegal permissions 75 * TBADF 4 Illegal file descriptor 76 * TNOADDR 5 Couldn't allocate address 77 * TOUTSTATE 6 Routine will place interface out of state 78 * TBADSEQ 7 Illegal called/calling sequence number 79 * TSYSERR 8 System error 80 * TLOOK 9 An event requires attention 81 * TBADDATA 10 Illegal amount of data 82 * TBUFOVFLW 11 Buffer not large enough 83 * TFLOW 12 Can't send message - (blocked) 84 * TNODATA 13 No message currently available 85 * TNODIS 14 Disconnect message not found 86 * TNOUDERR 15 Unitdata error message not found 87 * TBADFLAG 16 Incorrect flags specified 88 * TNOREL 17 Orderly release message not found 89 * TNOTSUPPORT 18 Primitive not supported by provider 90 * TSTATECHNG 19 State is in process of changing 91 * TNOSTRUCTYPE 20 Unsupported structure type requested 92 * TBADNAME 21 Invalid transport provider name 93 * TBADQLEN 22 Listener queue length limit is zero 94 * TADDRBUSY 23 Transport address is in use 95 * TINDOUT 24 Outstanding connection indications 96 * TPROVMISMATCH 25 Listener-acceptor transport provider mismatch 97 * TRESQLEN 26 Connection acceptor has listen queue length 98 * limit greater than zero 99 * TRESADDR 27 Connection acceptor-listener addresses not 100 * same but required by transport 101 * TQFULL 28 Incoming connection queue is full 102 * TPROTO 29 Protocol error on transport primitive 103 * 104 */ 105 106 /* 107 * The following are the events returned by t_look 108 */ 109 #define T_LISTEN 0x0001 /* connection indication received */ 110 #define T_CONNECT 0x0002 /* connect confirmation received */ 111 #define T_DATA 0x0004 /* normal data received */ 112 #define T_EXDATA 0x0008 /* expedited data received */ 113 #define T_DISCONNECT 0x0010 /* disconnect received */ 114 #define T_UDERR 0x0040 /* data gram error indication */ 115 #define T_ORDREL 0x0080 /* orderly release indication */ 116 #define T_GODATA 0x0100 /* sending normal data is again possible */ 117 #define T_GOEXDATA 0x0200 /* sending expedited data is again possible */ 118 119 /* 120 * Flags for data primitives 121 */ 122 #define T_MORE 0x001 /* more data */ 123 #define T_EXPEDITED 0x002 /* expedited data */ 124 #define T_PUSH 0x004 /* send data immediately */ 125 126 /* 127 * XTI error return 128 */ 129 #if defined(_REENTRANT) || defined(_TS_ERRNO) 130 extern int *__t_errno(); 131 #define t_errno (*(__t_errno())) 132 #else 133 #error "extern int t_errno?" 134 #endif /* defined(_REENTRANT) || defined(_TS_ERRNO) */ 135 136 137 /* 138 * The following are for t_sysconf() 139 */ 140 #ifndef T_IOV_MAX 141 #define T_IOV_MAX 16 /* Maximum number of scatter/gather buffers */ 142 #endif /* Should be <= IOV_MAX */ 143 144 #ifndef _SC_T_IOV_MAX 145 #define _SC_T_IOV_MAX 79 /* Should be same in <unistd.h> for use by */ 146 #endif /* sysconf() */ 147 148 struct t_iovec { 149 void *iov_base; 150 size_t iov_len; 151 }; 152 153 /* 154 * Translate source level interface to binary entry point names. 155 * 156 * Note: This is done to maintain co-existence of TLI and XTI 157 * interfaces which have identical names for most functions but 158 * different semantics. The XTI names are moved to the different 159 * prefix space in the ABI. The #ifdef is required to make use of 160 * of the compiler feature to allow redefinition of external names 161 * where available. Otherwise a simple #define is used when this 162 * header is used with other compilers. 163 * The use of #define also has the effect of renaming all names (not 164 * just function names) to the new name. The TLI function names 165 * (e.g. t_bind) can have identical names for structure names 166 * (e.g struct t_bind). Therefore, this redefinition of names needs 167 * to be before all structure and function name declarations in the header. 168 */ 169 170 #ifdef __PRAGMA_REDEFINE_EXTNAME 171 172 #if defined(_XOPEN_SOURCE) && !defined(_XPG5) 173 #pragma redefine_extname t_accept _xti_accept 174 #else 175 #pragma redefine_extname t_accept _xti_xns5_accept 176 #endif 177 #pragma redefine_extname t_alloc _xti_alloc 178 #pragma redefine_extname t_bind _xti_bind 179 #pragma redefine_extname t_close _xti_close 180 #pragma redefine_extname t_connect _xti_connect 181 #pragma redefine_extname t_error _xti_error 182 #pragma redefine_extname t_free _xti_free 183 #pragma redefine_extname t_getinfo _xti_getinfo 184 #pragma redefine_extname t_getstate _xti_getstate 185 #pragma redefine_extname t_getprotaddr _xti_getprotaddr 186 #pragma redefine_extname t_listen _xti_listen 187 #pragma redefine_extname t_look _xti_look 188 #pragma redefine_extname t_open _xti_open 189 #pragma redefine_extname t_optmgmt _xti_optmgmt 190 #pragma redefine_extname t_rcv _xti_rcv 191 #pragma redefine_extname t_rcvconnect _xti_rcvconnect 192 #pragma redefine_extname t_rcvdis _xti_rcvdis 193 #pragma redefine_extname t_rcvrel _xti_rcvrel 194 #pragma redefine_extname t_rcvreldata _xti_rcvreldata 195 #pragma redefine_extname t_rcvudata _xti_rcvudata 196 #pragma redefine_extname t_rcvuderr _xti_rcvuderr 197 #pragma redefine_extname t_rcvv _xti_rcvv 198 #pragma redefine_extname t_rcvvudata _xti_rcvvudata 199 #if defined(_XOPEN_SOURCE) && !defined(_XPG5) 200 #pragma redefine_extname t_snd _xti_snd 201 #else 202 #pragma redefine_extname t_snd _xti_xns5_snd 203 #endif 204 #pragma redefine_extname t_snddis _xti_snddis 205 #pragma redefine_extname t_sndrel _xti_sndrel 206 #pragma redefine_extname t_sndreldata _xti_sndreldata 207 #pragma redefine_extname t_sndudata _xti_sndudata 208 #pragma redefine_extname t_sndv _xti_sndv 209 #pragma redefine_extname t_sndvudata _xti_sndvudata 210 #pragma redefine_extname t_strerror _xti_strerror 211 #pragma redefine_extname t_sync _xti_sync 212 #pragma redefine_extname t_sysconf _xti_sysconf 213 #pragma redefine_extname t_unbind _xti_unbind 214 215 #else /* __PRAGMA_REDEFINE_EXTNAME */ 216 217 #if defined(_XOPEN_SOURCE) && !defined(_XPG5) 218 #define t_accept _xti_accept 219 #else 220 #define t_accept _xti_xns5_accept 221 #endif 222 #define t_alloc _xti_alloc 223 #define t_bind(a,b,c) _xti_bind(a,b,c) 224 #define t_close _xti_close 225 #define t_connect _xti_connect 226 #define t_error _xti_error 227 #define t_free _xti_free 228 #define t_getinfo _xti_getinfo 229 #define t_getstate _xti_getstate 230 #define t_getprotaddr _xti_getprotaddr 231 #define t_listen _xti_listen 232 #define t_look _xti_look 233 #define t_open _xti_open 234 #define t_optmgmt(a,b,c) _xti_optmgmt(a,b,c) 235 #define t_rcv _xti_rcv 236 #define t_rcvconnect _xti_rcvconnect 237 #define t_rcvdis _xti_rcvdis 238 #define t_rcvrel _xti_rcvrel 239 #define t_rcvreldata _xti_rcvreldata 240 #define t_rcvudata _xti_rcvudata 241 #define t_rcvuderr _xti_rcvuderr 242 #define t_rcvv _xti_rcvv 243 #define t_rcvvudata _xti_rcvvudata 244 #if defined(_XOPEN_SOURCE) && !defined(_XPG5) 245 #define t_snd _xti_snd 246 #else 247 #define t_snd _xti_xns5_snd 248 #endif 249 #define t_snddis _xti_snddis 250 #define t_sndrel _xti_sndrel 251 #define t_sndreldata _xti_sndreldata 252 #define t_sndudata _xti_sndudata 253 #define t_sndv _xti_sndv 254 #define t_sndvudata _xti_sndvudata 255 #define t_strerror _xti_strerror 256 #define t_sync _xti_sync 257 #define t_sysconf _xti_sysconf 258 #define t_unbind _xti_unbind 259 260 #endif /* __PRAGMA_REDEFINE_EXTNAME */ 261 262 /* 263 * All the rest of the standard xti.h removed because the structs: 264 * netbuf, t_info, t_opthdr, t_optmgmt, t_bind, t_call, ... 265 * all conflict with definitions in tiuser.h which we need 266 * for the (simulated) kernel interfaces in fake_ktli.c. 267 * 268 * The XTI library functions below would normally be defined by 269 * including tiuser.h after the defines above, which we can't. 270 */ 271 272 int _xti_accept(int, int, struct t_call *); 273 int _xti_xns5_accept(int, int, struct t_call *); 274 char *_xti_alloc(int, int, int); 275 int _xti_bind(int, struct t_bind *, struct t_bind *); 276 int _xti_close(int); 277 int _xti_connect(int, struct t_call *, struct t_call *); 278 int _xti_error(char *); 279 int _xti_free(char *, int); 280 int _xti_getinfo(int, struct t_info *); 281 int _xti_getprotaddr(int, struct t_bind *, struct t_bind *); 282 int _xti_getstate(int); 283 int _xti_listen(int, struct t_call *); 284 int _xti_look(int); 285 int _xti_open(char *, int, struct t_info *); 286 int _xti_optmgmt(int, struct t_optmgmt *, struct t_optmgmt *); 287 int _xti_rcv(int, char *, unsigned int, int *); 288 int _xti_rcvconnect(int, struct t_call *); 289 int _xti_rcvdis(int, struct t_discon *); 290 int _xti_rcvrel(int); 291 int _xti_rcvreldata(int, struct t_discon *); 292 int _xti_rcvudata(int, struct t_unitdata *, int *); 293 int _xti_rcvuderr(int, struct t_uderr *); 294 int _xti_rcvv(int, struct t_iovec *, unsigned int, int *); 295 int _xti_rcvvudata(int, struct t_unitdata *, struct t_iovec *, 296 unsigned int, int *); 297 int _xti_snd(int, char *, unsigned int, int); 298 int _xti_xns5_snd(int, char *, unsigned int, int); 299 int _xti_snddis(int, struct t_call *); 300 int _xti_sndrel(int); 301 int _xti_sndreldata(int, struct t_discon *); 302 int _xti_sndudata(int, struct t_unitdata *); 303 int _xti_sndv(int, const struct t_iovec *, unsigned int, int); 304 int _xti_sndvudata(int, struct t_unitdata *, struct t_iovec *, unsigned int); 305 char *_xti_strerror(int); 306 int _xti_sync(int); 307 int _xti_sysconf(int); 308 int _xti_unbind(int); 309 310 #ifdef __cplusplus 311 } 312 #endif 313 314 #endif /* _XTI_H */ 315