OpenSS7 SS7 for the Common Man |
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |
||||||||||||||||||||||||||
Home | Overview | Status | News | Documentation | Resources | About | |||||||||||||||||||||
File /code/strss7/include/sys/xti.h#ifndef _SYS_XTI_H #define _SYS_XTI_H #ident "@(#) $Name: $($Revision: 0.8.2.1 $) Copyright (c) 1997-2002 OpenSS7 Corporation." typedef long t_scalar_t; typedef unsigned long t_uscalar_t; /* * The following are the error codes needed by both the kernel * level transport providers and the user level library. */ #define TBADADDR 1 /* incorrect addr format */ #define TBADOPT 2 /* incorrect option format */ #define TACCES 3 /* incorrect permissions */ #define TBADF 4 /* illegal transport fd */ #define TNOADDR 5 /* couldn't allocate addr */ #define TOUTSTATE 6 /* out of state */ #define TBADSEQ 7 /* bad call sequence number */ #define TSYSERR 8 /* system error */ #define TLOOK 9 /* event requires attention */ #define TBADDATA 10 /* illegal amount of data */ #define TBUFOVFLW 11 /* buffer not large enough */ #define TFLOW 12 /* flow control */ #define TNODATA 13 /* no data */ #define TNODIS 14 /* discon_ind not found on queue */ #define TNOUDERR 15 /* unitdata error not found */ #define TBADFLAG 16 /* bad flags */ #define TNOREL 17 /* no ord rel found on queue */ #define TNOTSUPPORT 18 /* primitive/action not supported */ #define TSTATECHNG 19 /* state is in process of changing */ #define TNOSTRUCTYPE 20 /* unsupported struct-type requested */ #define TBADNAME 21 /* invalid transport provider name */ #define TBADQLEN 22 /* qlen is zero */ #define TADDRBUSY 23 /* address in use */ #define TINDOUT 24 /* outstanding connection indications */ #define TPROVMISMATCH 25 /* transport provider mismatch */ #define TRESQLEN 26 /* resfd specified to accept w/qlen >0 */ #define TRESADDR 27 /* resfd not bound to same addr as fd */ #define TQFULL 28 /* incoming connection queue full */ #define TPROTO 29 /* XTI protocol error */ /* * The following are the events returned. */ #define T_LISTEN 0x0001 /* connection indication received */ #define T_CONNECT 0x0002 /* connection confirmation received */ #define T_DATA 0x0004 /* normal data received */ #define T_EXDATA 0x0008 /* expedited data received */ #define T_DISCONNECT 0x0010 /* disconnection received */ #define T_UDERR 0x0040 /* datagram error indication */ #define T_ORDREL 0x0080 /* orderly release indication */ #define T_GODATA 0x0100 /* sending normal data is again possible */ #define T_GOEXDATA 0x0200 /* sending expedited data is again possible */ /* * The following are the flag definitions needed by the * user level library routines. */ #define T_MORE 0x001 /* more data */ #define T_EXPEDITED 0x002 /* expedited data */ #define T_PUSH 0x004 /* send data immediately */ #define T_NEGOTIATE 0x004 /* set opts */ #define T_CHECK 0x008 /* check opts */ #define T_DEFAULT 0x010 /* get default opts */ #define T_SUCCESS 0x020 /* successful */ #define T_FAILURE 0x040 /* failure */ #define T_CURRENT 0x080 /* get current options */ #define T_PARTSUCCESS 0x100 /* partial success */ #define T_READONLY 0x200 /* read-only */ #define T_NOTSUPPORT 0x400 /* not supported */ /* * XTI error return. */ extern int t_errno; /* t_errno is a modifiable lvalue of type int */ /* The above definition is typical of a single-threaded environment. */ /* In a multi-threading environment a typical definition of t_errno is:*/ /* extern int *_t_errno(void); */ /* #define t_errno (*(_t_errno())) */ /* * iov maximum */ #define T_IOV_MAX 16 /* maximum number of scatter/gather buffers */ /* value is not mandatory. */ /* Value must be at least 16. */ struct t_iovec { void *iov_base; size_t iov_len; }; /* * Protocol-specific service limits. */ struct t_info { t_scalar_t addr; /* max size of the transport protocol address */ t_scalar_t options; /* max number of bytes of protocol-specific options */ t_scalar_t tsdu; /* max size of a transport service data unit */ t_scalar_t etsdu; /* max size of expedited transport service data unit */ t_scalar_t connect; /* max amount of data allowed on connection establishment functions */ t_scalar_t discon; /* max data allowed on t_snddis, t_rcvdis, t_sndreldata and t_rcvreldata functions */ t_scalar_t servtype; /* service type supported by transport provider */ t_scalar_t flags; /* other info about the transport provider */ }; /* * Service type defines. */ #define T_COTS 1 /* connection-mode transport service */ #define T_COTS_ORD 2 /* connection-mode with orderly release */ #define T_CLTS 3 /* connectionless-mode transport service */ /* * Flags defines (other info about the transport provider). */ #define T_SENDZERO 0x001 /* supports 0-length TSDUs */ #define T_ORDRELDATA 0x002 /* supports orderly release data */ /* * netbuf structure. */ struct netbuf { unsigned int maxlen; unsigned int len; void *buf; }; /* * t_opthdr structure */ struct t_opthdr { t_uscalar_t len; /* total length of option; that is, sizeof (struct t_opthdr) + length of option value in bytes */ t_uscalar_t level; /* protocol affected */ t_uscalar_t name; /* option name */ t_uscalar_t status; /* status value */ /* implementation may add padding here */ }; /* * t_bind - format of the address arguments of bind. */ struct t_bind { struct netbuf addr; unsigned int qlen; }; /* * Options management structure. */ struct t_optmgmt { struct netbuf opt; t_scalar_t flags; }; /* * Disconnection 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 */ }; /* * Datagram structure. */ struct t_unitdata { struct netbuf addr; /* address */ struct netbuf opt; /* options */ struct netbuf udata; /* user data */ }; /* * Unitdata error structure. */ struct t_uderr { struct netbuf addr; /* address */ struct netbuf opt; /* options */ t_scalar_t error; /* error code */ }; /* * XTI LIBRARY FUNCTIONS */ /* XTI Library Function: t_accept - accept a connection request */ extern int t_accept(int, int, const struct t_call *); /* XTI Library Function: t_alloc - allocate a library structure */ extern void *t_alloc(int, int, int); /* XTI Library Function: t_bind - bind an address to a transport endpoint */ extern int t_bind(int, const struct t_bind *, struct t_bind *); /* XTI Library Function: t_close - close a transport endpoint */ extern int t_close(int); /* XTI Library Function: t_connect - establish a connection */ extern int t_connect(int, const struct t_call *, struct t_call *); /* XTI Library Function: t_error - produce error message */ extern int t_error(const char *); /* XTI Library Function: t_free - free a library structure */ extern int t_free(void *, int); /* XTI Library Function: t_getinfo - get protocol-specific service information */ extern int t_getinfo(int, struct t_info *); /* XTI Library Function: t_getprotaddr - get protocol addresses */ extern int t_getprotaddr(int, struct t_bind *, struct t_bind *); /* XTI Library Function: t_getstate - get the current state */ extern int t_getstate(int); /* XTI Library Function: t_listen - listen for a connection indication */ extern int t_listen(int, struct t_call *); /* XTI Library Function: t_look - look at current event on a transport endpoint */ extern int t_look(int); /* XTI Library Function: t_open - establish a transport endpoint */ extern int t_open(const char *, int, struct t_info *); /* XTI Library Function: t_optmgmt - manage options for a transport endpoint */ extern int t_optmgmt(int, const struct t_optmgmt *, struct t_optmgmt *); /* XTI Library Function: t_rcv - receive data or expedited data on a connection */ extern int t_rcv(int, void *, unsigned int, int *); /* XTI Library Function: t_rcvconnect - receive the confirmation from a * connection request */ extern int t_rcvconnect(int, struct t_call *); /* XTI Library Function: t_rcvdis - retrieve information from disconnect */ extern int t_rcvdis(int, struct t_discon *); /* XTI Library Function: t_rcvrel - acknowledge receipt of an orderly release * indication */ extern int t_rcvrel(int); /* XTI Library Function: t_rcvreldata - receive an orderly release indication * or confirmation containing user data */ extern int t_rcvreldata(int, struct t_discon *); /* XTI Library Function: t_rcvudata - receive a data unit */ extern int t_rcvudata(int, struct t_unitdata *, int *); /* XTI Library Function: t_rcvuderr - receive a unit data error indication */ extern int t_rcvuderr(int, struct t_uderr *); /* XTI Library Function: t_rcvv - receive data or expedited data sent over a * connection and put the data into one or more noncontiguous buffers*/ extern int t_rcvv(int, struct t_iovec *, unsigned int, int *); /* XTI Library Function: t_rcvvudata - receive a data unit into one or more * noncontiguous buffers*/ extern int t_rcvvudata(int, struct t_unitdata *, struct t_iovec *, unsigned int, int *); /* XTI Library Function: t_snd - send data or expedited data over a connection */ extern int t_snd(int, void *, unsigned int, int); /* XTI Library Function: t_snddis - send user-initiated disconnect request */ extern int t_snddis(int, const struct t_call *); /* XTI Library Function: t_sndrel - initiate an orderly release */ extern int t_sndrel(int); /* XTI Library Function: t_sndreldata - initiate or respond to an orderly * release with user data */ extern int t_sndreldata(int, struct t_discon *); /* XTI Library Function: t_sndudata - send a data unit */ extern int t_sndudata(int, const struct t_unitdata *); /* XTI Library Function: t_sndv - send data or expedited data, from one or * more noncontiguous buffers, on a connection*/ extern int t_sndv(int, const struct t_iovec *, unsigned int, int); /* XTI Library Function: t_sndvudata - send a data unit from one or more * non-contiguous buffers*/ extern int t_sndvudata(int, struct t_unitdata *, struct t_iovec *, unsigned int); /* XTI Library Function: t_strerror - generate error message string */ extern const char *t_strerror(int); /* XTI Library Function: t_sync - synchronise transport library */ extern int t_sync(int); /* XTI Library Function: t_sysconf - get configurable XTI variables */ extern int t_sysconf(int); /* XTI Library Function: t_unbind - disable a transport endpoint */ extern int t_unbind(int); /* * The following are structure types used when dynamically * allocating the above structures via t_alloc(). */ #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_alloc(). */ #define T_ADDR 0x0001 /* address */ #define T_OPT 0x0002 /* options */ #define T_UDATA 0x0004 /* user data */ #define T_ALL 0xffff /* all the above fields supported */ /* * The following are the states for the user. */ #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 */ /* * General purpose defines. */ #define T_YES 1 #define T_NO 0 #define T_NULL 0 #define T_ABSREQ 0x8000 #define T_INFINITE (-1) #define T_INVALID (-2) /* * Definitions for t_sysconf */ #define _SC_T_IOV_MAX 1 /* * General definitions for option management */ #define T_UNSPEC (~0 - 2) /* applicable to u_long, t_scalar_t, char .. */ #define T_ALLOPT 0 /* * The following T_OPT_FIRSTHDR, T_OPT_NEXTHDR and T_OPT_DATA macros have the * semantics required by the standard. They are used to store and read * multiple variable length objects delimited by a 'header' descriptor and the * variable length value content while allowing aligned access to each in an * arbitrary memory buffer. * * The required minimum alignment (based on types used internally in the * specification for header and data alignment is "sizeof(t_uscalar_t)" * * The definitions shown for macro bodies are examples only and other forms * are not only possible but are specifically permitted. * * The examples shown assume that the implementation chooses to align the * header and data parts at the required minimum of "sizeof(t_uscalar_t). * Stricter alignment is permitted by an implementation. * * Helper macros starting with "_T" prefix are used below. These are not a * requirement of the specification and only used for constructing example * macro body definitions. */ /* * Helper macro * _T_USCALAR_ALIGN - macro aligns to "sizeof (t_uscalar_t) boundary */ #define _T_USCALAR_ALIGN(p) \ (((uintptr_t)(p) + (sizeof (t_scalar_t)-1)) & ~(sizeof (t_scalar_t)-1)) /* * struct t_opthdr *T_OPT_FIRSTHDR(struct netbuf *nbp): * Get aligned start of first option header * * This implementation assumes option buffers are allocated by t_alloc() and * hence aligned to start any sized object (including option header) is * guaranteed. */ #define T_OPT_FIRSTHDR(nbp) \ ((((char *)(nbp)->buf + sizeof (struct t_opthdr)) <= \ (char *)(nbp)->buf + (nbp)->len) ? \ (struct t_opthdr *)(nbp)->buf : (struct t_opthdr *)0) /* * unsigned char *T_OPT_DATA(struct t_opthdr *tohp): * Get aligned start of data part after option header * * This implementation assumes "sizeof (t_uscalar_t)" as the alignment size * for its option data and option header with no padding in "struct t_opthdr" * definition. */ #define T_OPT_DATA(tohp) \ ((unsigned char *)(tohp) + sizeof (struct t_opthdr)) /* * struct t_opthdr *_T_NEXTHDR(char *pbuf, unsigned int buflen, struct t_opthdr *popt): * * Helper macro for defining T_OPT_NEXTHDR macro. This implementation assumes * "sizeof (t_uscalar_t)" as the alignment for its option data and option * header. Also it assumes "struct t_opthdr" definitions contain no padding. */ #define _T_NEXTHDR(pbuf, buflen, popt) \ (((char *)(popt) + _T_USCALAR_ALIGN((popt)->len) + \ sizeof (struct t_opthdr) <= \ ((char *)(pbuf) + (buflen))) ? \ (struct t_opthdr *)((char *)(popt) + \ _T_USCALAR_ALIGN((popt)->len) : \ (struct t_opthdr *)0)) /* * struct t_opthdr *T_OPT_NEXTHDR(struct netbuf *nbp, \ * struct t_opthdr *tohp): * Skip to next option header * This implementation assumes "sizeof (t_uscalar_t)" as the alignment size * for its option data and option header. */ #define T_OPT_NEXTHDR(nbp, tohp) _T_NEXTHDR((nbp)->buf, \ (nbp)->len, (tohp)) /* OPTIONS ON XTI LEVEL */ /* * XTI Level */ #define XTI_GENERIC 0xffff /* * XTI-level Options */ #define XTI_DEBUG 0x0001 /* enable debugging */ #define XTI_LINGER 0x0080 /* linger on close if data present */ #define XTI_RCVBUF 0x1002 /* receive buffer size */ #define XTI_RCVLOWAT 0x1004 /* receive low-water mark */ #define XTI_SNDBUF 0x1001 /* send buffer size */ #define XTI_SNDLOWAT 0x1003 /* send low-water mark */ /* * Structure used with linger option. */ struct t_linger { t_scalar_t l_onoff; /* option on/off */ t_scalar_t l_linger; /* linger time */ }; #endif /* _SYS_XTI_H */
|
|||||||||||||||||||||||||||
OpenSS7 SS7 for the Common Man |
Home | Overview | Status | News | Documentation | Resources | About | ||||||||||||||||||||
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |