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 */