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 2014 Garrett D'Amore <garrett@damore.org>
  30  *
  31  * Copyright 2002 Sun Microsystems, Inc.  All rights reserved.
  32  * Use is subject to license terms.
  33  * Copyright 2014 Gary Mills
  34  */
  35 
  36 #ifndef _SYS_TIUSER_H
  37 #define _SYS_TIUSER_H
  38 
  39 #include <sys/types.h>
  40 /*
  41  * The following include file has declarations needed by both the kernel
  42  * level transport providers and the user level library.
  43  */
  44 #include <sys/tpicommon.h>
  45 
  46 #ifdef  __cplusplus
  47 extern "C" {
  48 #endif
  49 
  50 
  51 /*
  52  * The following are the events returned by t_look
  53  */
  54 #define T_LISTEN        0x0001  /* connection indication received       */
  55 #define T_CONNECT       0x0002  /* connect confirmation received        */
  56 #define T_DATA          0x0004  /* normal data received                 */
  57 #define T_EXDATA        0x0008  /* expedited data received              */
  58 #define T_DISCONNECT    0x0010  /* disconnect received                  */
  59 #define T_UDERR         0x0040  /* data gram error indication           */
  60 #define T_ORDREL        0x0080  /* orderly release indication           */
  61 #define T_EVENTS        0x00ff  /* event mask                           */
  62 
  63 /*
  64  * Flags for data primitives.
  65  */
  66 #define T_MORE          0x001   /* more data            */
  67 #define T_EXPEDITED     0x002   /* expedited data       */
  68 
  69 
  70 /*
  71  * protocol specific service limits
  72  */
  73 
  74 struct t_info {
  75         t_scalar_t addr;        /* size of protocol address             */
  76         t_scalar_t options;     /* size of protocol options             */
  77         t_scalar_t tsdu;        /* size of max transport service data unit */
  78         t_scalar_t etsdu;       /* size of max expedited tsdu           */
  79         t_scalar_t connect;     /* max data for connection primitives   */
  80         t_scalar_t discon;      /* max data for disconnect primitives   */
  81         t_scalar_t servtype;    /* provider service type                */
  82 };
  83 
  84 /*
  85  * netbuf structure
  86  */
  87 
  88 struct netbuf {
  89         unsigned int    maxlen;
  90         unsigned int    len;
  91         char            *buf;
  92 };
  93 
  94 #ifdef _SYSCALL32
  95 struct netbuf32 {
  96         uint32_t        maxlen;
  97         uint32_t        len;
  98         caddr32_t       buf;
  99 };
 100 #endif /* _SYSCALL32 */
 101 
 102 /*
 103  * t_bind - format of the address and options arguments of bind
 104  */
 105 
 106 struct t_bind {
 107         struct netbuf   addr;
 108         unsigned int    qlen;
 109 };
 110 
 111 /*
 112  * options management
 113  */
 114 struct t_optmgmt {
 115         struct netbuf   opt;
 116         t_scalar_t      flags;
 117 };
 118 
 119 /*
 120  * disconnect structure
 121  */
 122 struct t_discon {
 123         struct netbuf   udata;          /* user data            */
 124         int             reason;         /* reason code          */
 125         int             sequence;       /* sequence number      */
 126 };
 127 
 128 /*
 129  * call structure
 130  */
 131 struct t_call {
 132         struct netbuf   addr;           /*  address             */
 133         struct netbuf   opt;            /* options              */
 134         struct netbuf   udata;          /* user data            */
 135         int             sequence;       /* sequence number      */
 136 };
 137 
 138 /*
 139  * data gram structure
 140  */
 141 struct t_unitdata {
 142         struct netbuf   addr;           /*  address             */
 143         struct netbuf   opt;            /* options              */
 144         struct netbuf   udata;          /* user data            */
 145 };
 146 
 147 /*
 148  * unitdata error
 149  */
 150 struct t_uderr {
 151         struct netbuf   addr;           /* address              */
 152         struct netbuf   opt;            /* options              */
 153         t_scalar_t      error;          /* error code           */
 154 };
 155 
 156 /*
 157  * The following are structure types used when dynamically
 158  * allocating the above structures via t_structalloc().
 159  */
 160 #define T_BIND          1               /* struct t_bind        */
 161 #define T_OPTMGMT       2               /* struct t_optmgmt     */
 162 #define T_CALL          3               /* struct t_call        */
 163 #define T_DIS           4               /* struct t_discon      */
 164 #define T_UNITDATA      5               /* struct t_unitdata    */
 165 #define T_UDERROR       6               /* struct t_uderr       */
 166 #define T_INFO          7               /* struct t_info        */
 167 
 168 /*
 169  * The following bits specify which fields of the above
 170  * structures should be allocated by t_structalloc().
 171  */
 172 #define T_ADDR  0x01                    /* address              */
 173 #define T_OPT   0x02                    /* options              */
 174 #define T_UDATA 0x04                    /* user data            */
 175 #define T_ALL   0x07                    /* all the above        */
 176 
 177 /*
 178  * the following are the states for the user
 179  */
 180 
 181 #define T_UNINIT        0               /* uninitialized                */
 182 #define T_UNBND         1               /* unbound                      */
 183 #define T_IDLE          2               /* idle                         */
 184 #define T_OUTCON        3               /* outgoing connection pending  */
 185 #define T_INCON         4               /* incoming connection pending  */
 186 #define T_DATAXFER      5               /* data transfer                */
 187 #define T_OUTREL        6               /* outgoing release pending     */
 188 #define T_INREL         7               /* incoming release pending     */
 189 #define T_BADSTATE      8               /* illegal state */
 190 
 191 /*
 192  * Flags for t_getname.
 193  */
 194 #define LOCALNAME       0
 195 #define REMOTENAME      1
 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 #ifdef  __cplusplus
 234 }
 235 #endif
 236 
 237 #endif  /* _SYS_TIUSER_H */