#ifndef _XTI_H
#define _XTI_H
#include <sys/types.h>
#include <sys/tpicommon.h>
#include <sys/xti_xtiopt.h>
#if !defined(_XPG5)
#include <sys/xti_osi.h>
#include <sys/xti_inet.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
#define T_LISTEN 0x0001
#define T_CONNECT 0x0002
#define T_DATA 0x0004
#define T_EXDATA 0x0008
#define T_DISCONNECT 0x0010
#define T_UDERR 0x0040
#define T_ORDREL 0x0080
#define T_GODATA 0x0100
#define T_GOEXDATA 0x0200
#define T_MORE 0x001
#define T_EXPEDITED 0x002
#define T_PUSH 0x004
#if defined(_REENTRANT) || defined(_TS_ERRNO)
extern int *__t_errno();
#define t_errno (*(__t_errno()))
#else
extern int t_errno;
#endif
#ifndef T_IOV_MAX
#define T_IOV_MAX 16
#endif
#ifndef _SC_T_IOV_MAX
#define _SC_T_IOV_MAX 79
#endif
struct t_iovec {
void *iov_base;
size_t iov_len;
};
#ifdef __PRAGMA_REDEFINE_EXTNAME
#if defined(_XOPEN_SOURCE) && !defined(_XPG5)
#pragma redefine_extname t_accept _xti_accept
#else
#pragma redefine_extname t_accept _xti_xns5_accept
#endif
#pragma redefine_extname t_alloc _xti_alloc
#pragma redefine_extname t_bind _xti_bind
#pragma redefine_extname t_close _xti_close
#pragma redefine_extname t_connect _xti_connect
#pragma redefine_extname t_error _xti_error
#pragma redefine_extname t_free _xti_free
#pragma redefine_extname t_getinfo _xti_getinfo
#pragma redefine_extname t_getstate _xti_getstate
#pragma redefine_extname t_getprotaddr _xti_getprotaddr
#pragma redefine_extname t_listen _xti_listen
#pragma redefine_extname t_look _xti_look
#pragma redefine_extname t_open _xti_open
#pragma redefine_extname t_optmgmt _xti_optmgmt
#pragma redefine_extname t_rcv _xti_rcv
#pragma redefine_extname t_rcvconnect _xti_rcvconnect
#pragma redefine_extname t_rcvdis _xti_rcvdis
#pragma redefine_extname t_rcvrel _xti_rcvrel
#pragma redefine_extname t_rcvreldata _xti_rcvreldata
#pragma redefine_extname t_rcvudata _xti_rcvudata
#pragma redefine_extname t_rcvuderr _xti_rcvuderr
#pragma redefine_extname t_rcvv _xti_rcvv
#pragma redefine_extname t_rcvvudata _xti_rcvvudata
#if defined(_XOPEN_SOURCE) && !defined(_XPG5)
#pragma redefine_extname t_snd _xti_snd
#else
#pragma redefine_extname t_snd _xti_xns5_snd
#endif
#pragma redefine_extname t_snddis _xti_snddis
#pragma redefine_extname t_sndrel _xti_sndrel
#pragma redefine_extname t_sndreldata _xti_sndreldata
#pragma redefine_extname t_sndudata _xti_sndudata
#pragma redefine_extname t_sndv _xti_sndv
#pragma redefine_extname t_sndvudata _xti_sndvudata
#pragma redefine_extname t_strerror _xti_strerror
#pragma redefine_extname t_sync _xti_sync
#pragma redefine_extname t_sysconf _xti_sysconf
#pragma redefine_extname t_unbind _xti_unbind
#else
#if defined(_XOPEN_SOURCE) && !defined(_XPG5)
#define t_accept _xti_accept
#else
#define t_accept _xti_xns5_accept
#endif
#define t_alloc _xti_alloc
#define t_bind _xti_bind
#define t_close _xti_close
#define t_connect _xti_connect
#define t_error _xti_error
#define t_free _xti_free
#define t_getinfo _xti_getinfo
#define t_getstate _xti_getstate
#define t_getprotaddr _xti_getprotaddr
#define t_listen _xti_listen
#define t_look _xti_look
#define t_open _xti_open
#define t_optmgmt _xti_optmgmt
#define t_rcv _xti_rcv
#define t_rcvconnect _xti_rcvconnect
#define t_rcvdis _xti_rcvdis
#define t_rcvrel _xti_rcvrel
#define t_rcvreldata _xti_rcvreldata
#define t_rcvudata _xti_rcvudata
#define t_rcvuderr _xti_rcvuderr
#define t_rcvv _xti_rcvv
#define t_rcvvudata _xti_rcvvudata
#if defined(_XOPEN_SOURCE) && !defined(_XPG5)
#define t_snd _xti_snd
#else
#define t_snd _xti_xns5_snd
#endif
#define t_snddis _xti_snddis
#define t_sndrel _xti_sndrel
#define t_sndreldata _xti_sndreldata
#define t_sndudata _xti_sndudata
#define t_sndv _xti_sndv
#define t_sndvudata _xti_sndvudata
#define t_strerror _xti_strerror
#define t_sync _xti_sync
#define t_sysconf _xti_sysconf
#define t_unbind _xti_unbind
#endif
struct t_info {
t_scalar_t addr;
t_scalar_t options;
t_scalar_t tsdu;
t_scalar_t etsdu;
t_scalar_t connect;
t_scalar_t discon;
t_scalar_t servtype;
t_scalar_t flags;
};
#define T_SENDZERO 0x001
#define T_ORDRELDATA 0x002
struct netbuf {
unsigned int maxlen;
unsigned int len;
#if defined(_XPG5)
void *buf;
#else
char *buf;
#endif
};
struct t_opthdr {
t_uscalar_t len;
t_uscalar_t level;
t_uscalar_t name;
t_uscalar_t status;
};
struct t_bind {
struct netbuf addr;
unsigned int qlen;
};
struct t_optmgmt {
struct netbuf opt;
t_scalar_t flags;
};
struct t_discon {
struct netbuf udata;
int reason;
int sequence;
};
struct t_call {
struct netbuf addr;
struct netbuf opt;
struct netbuf udata;
int sequence;
};
struct t_unitdata {
struct netbuf addr;
struct netbuf opt;
struct netbuf udata;
};
struct t_uderr {
struct netbuf addr;
struct netbuf opt;
t_scalar_t error;
};
#define T_BIND 1
#define T_OPTMGMT 2
#define T_CALL 3
#define T_DIS 4
#define T_UNITDATA 5
#define T_UDERROR 6
#define T_INFO 7
#define T_ADDR 0x01
#define T_OPT 0x02
#define T_UDATA 0x04
#define T_ALL 0xffff
#define T_UNINIT 0
#define T_UNBND 1
#define T_IDLE 2
#define T_OUTCON 3
#define T_INCON 4
#define T_DATAXFER 5
#define T_OUTREL 6
#define T_INREL 7
#define T_UNUSED -1
#define T_NULL 0
#define T_ABSREQ 0x8000
#define _T_OPT_HALIGN_SZ (sizeof (t_scalar_t))
#define _T_OPT_DALIGN_SZ (sizeof (int32_t))
#define _T_OPTHDR_SZ (sizeof (struct t_opthdr))
#define _T_OPT_ALIGN(x, asize) \
(((uintptr_t)(x) + ((asize) - 1L)) & ~((asize) - 1L))
#define _T_OPTHDR_ALIGN(x) \
(_T_OPT_ALIGN((x), _T_OPT_HALIGN_SZ))
#define _T_OPTDATA_ALIGN(x) \
(_T_OPT_ALIGN((x), _T_OPT_DALIGN_SZ))
#define T_OPT_FIRSTHDR(nbp) \
((nbp)->len >= _T_OPTHDR_SZ ? (struct t_opthdr *)(nbp)->buf : \
(struct t_opthdr *)0)
#define T_OPT_DATA(tohp) \
((unsigned char *)_T_OPTDATA_ALIGN((char *)(tohp) + _T_OPTHDR_SZ))
#define _T_NEXTHDR(pbuf, buflen, popt) \
(((char *)_T_OPTHDR_ALIGN((char *)(popt) + (popt)->len) + \
_T_OPTHDR_SZ <= ((char *)(pbuf) + (buflen))) ? \
(struct t_opthdr *)((char *)_T_OPTHDR_ALIGN((char *)(popt) + \
(popt)->len)) : (struct t_opthdr *)0)
#define T_OPT_NEXTHDR(nbp, tohp) (_T_NEXTHDR((nbp)->buf, (nbp)->len, (tohp)))
#if !defined(_XPG5)
#define T_ALIGN(p) (((uintptr_t)(p) + (sizeof (t_scalar_t) - 1))\
& ~(sizeof (t_scalar_t) - 1))
#define OPT_NEXTHDR(pbuf, buflen, popt) (_T_NEXTHDR((pbuf), (buflen), (popt)))
#endif
#if defined(_XOPEN_SOURCE) && !defined(_XPG5)
extern int t_accept(int, int, struct t_call *);
extern char *t_alloc(int, int, int);
extern int t_bind(int, struct t_bind *, struct t_bind *);
extern int t_connect(int, struct t_call *, struct t_call *);
extern int t_error(char *);
extern int t_free(char *, int);
extern int t_open(char *, int, struct t_info *);
extern int t_optmgmt(int, struct t_optmgmt *, struct t_optmgmt *);
extern int t_rcv(int, char *, unsigned int, int *);
extern int t_snd(int, char *, unsigned int, int);
extern int t_snddis(int, struct t_call *);
extern int t_sndudata(int, struct t_unitdata *);
extern char *t_strerror(int);
#else
extern int t_accept(int, int, const struct t_call *);
extern void *t_alloc(int, int, int);
extern int t_bind(int, const struct t_bind *, struct t_bind *);
extern int t_connect(int, const struct t_call *, struct t_call *);
extern int t_error(const char *);
extern int t_free(void *, int);
extern int t_open(const char *, int, struct t_info *);
extern int t_optmgmt(int, const struct t_optmgmt *, struct t_optmgmt *);
extern int t_rcv(int, void *, unsigned int, int *);
extern int t_snd(int, void *, unsigned int, int);
extern int t_snddis(int, const struct t_call *);
extern int t_sndudata(int, const struct t_unitdata *);
extern const char *t_strerror(int);
#endif
extern int t_close(int);
extern int t_getinfo(int, struct t_info *);
extern int t_getstate(int);
extern int t_getprotaddr(int, struct t_bind *, struct t_bind *);
extern int t_listen(int, struct t_call *);
extern int t_look(int);
extern int t_rcvconnect(int, struct t_call *);
extern int t_rcvdis(int, struct t_discon *);
extern int t_rcvrel(int);
extern int t_rcvreldata(int, struct t_discon *);
extern int t_rcvudata(int, struct t_unitdata *, int *);
extern int t_rcvuderr(int, struct t_uderr *);
extern int t_rcvv(int, struct t_iovec *, unsigned int, int *);
extern int t_rcvvudata(int, struct t_unitdata *, struct t_iovec *,
unsigned int, int *);
extern int t_sndrel(int);
extern int t_sndreldata(int, struct t_discon *);
extern int t_sndv(int, const struct t_iovec *, unsigned int, int);
extern int t_sndvudata(int, struct t_unitdata *, struct t_iovec *,
unsigned int);
extern int t_sync(int);
extern int t_sysconf(int);
extern int t_unbind(int);
#ifdef __cplusplus
}
#endif
#endif