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/tpi.h#ifndef _SYS_TPI_H #define _SYS_TPI_H #ident "@(#) $Name: $($Revision: 0.8.2.3 $) Copyright (c) 1997-2002 OpenSS7 Corporation." #ifdef __cplusplus #pragma interface #endif #define T_CURRENT_VERSION 5 #ifndef t_scalar_t typedef long t_scalar_t; typedef unsigned long t_uscalar_t; #endif #if 0 struct t_info { long addr; long options; long tsdu; long etsdu; long connect; long discon; long servtype; }; #endif /* * Transport service error numbers * (error codes used by TLI transport providers) */ #define TBADADDR 1 /* Bad address format */ #define TBADOPT 2 /* Bad options format */ #define TACCES 3 /* Bad permissions */ #define TBADF 4 /* Bad file descriptor */ #define TNOADDR 5 /* Unable to allocate an address */ #define TOUTSTATE 6 /* Would place interface out of state */ #define TBADSEQ 7 /* Bad call sequence number */ #define TSYSERR 8 /* System error */ #define TLOOK 9 /* Has to t_look() for event */ /* not TLI */ #define TBADDATA 10 /* Bad amount of data */ #define TBUFOVFLW 11 /* Buffer was too small */ /* not TLI */ #define TFLOW 12 /* Would block due to flow control */ /* not TLI */ #define TNODATA 13 /* No data indication */ /* not TLI */ #define TNODIS 14 /* No disconnect indication */ /* not TLI */ #define TNOUDERR 15 /* No unitdata error indication */ /* not TLI */ #define TBADFLAG 16 /* Bad flags */ #define TNOREL 17 /* No orderly release indication */ /* not TLI */ #define TNOTSUPPORT 18 /* Not supported */ #define TSTATECHNG 19 /* State is currently changing */ /* not TLI */ #define TNOSTRUCTYPE 20 /* Structure type not supported */ /* not TLI */ #define TBADNAME 21 /* Bad transport provider name */ /* not TLI */ #define TBADQLEN 22 /* Listener queue length limit is zero */ /* not TLI */ #define TADDRBUSY 23 /* Address already in use */ /* not TLI */ #define TINDOUT 24 /* Outstanding connect indications */ /* not TLI */ #define TPROVMISMATCH 25 /* Not same transport provider */ /* not TLI */ #define TRESQLEN 26 /* Connection acceptor has qlen > 0 */ /* not TLI */ #define TRESADDR 27 /* Conn. acceptor bound to different address */ /* not TLI */ #define TQFULL 28 /* Connection indicator queue is full */ /* not TLI */ #define TPROTO 29 /* Protocol error */ /* not TLI */ /* * Transport service types */ #define T_COTS 1 /* Connection oriented transport service */ #define T_COTS_ORD 2 /* COTS with orderly release */ #define T_CLTS 3 /* Connectionless transport service */ /* * Transport provider flags */ #define T_SNDZERO 1 /* Must match <sys/strops.h>: SNDZERO */ #define XPG4_1 2 /* This indicates that the transport provider conforms to XTI in XPG4 and supports the new primitives T_ADDR_REQ and T_ADDR_ACK */ /* * User level states (maintained internally by libnsl_s). */ #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_FAKE 8 #define T_HACK 12 /* * Kernel level states of a transport end point. */ #define TS_UNBND 0 /* unbound */ #define TS_WACK_BREQ 1 /* waiting for T_BIND_REQ ack */ #define TS_WACK_UREQ 2 /* waiting for T_UNBIND_REQ ack */ #define TS_IDLE 3 /* idle */ #define TS_WACK_OPTREQ 4 /* waiting for T_OPTMGMT_REQ ack */ #define TS_WACK_CREQ 5 /* waiting for T_CONN_REQ ack */ #define TS_WCON_CREQ 6 /* waiting for T_CONN_REQ confirmation */ #define TS_WRES_CIND 7 /* waiting for T_CONN_IND */ #define TS_WACK_CRES 8 /* waiting for T_CONN_RES ack */ #define TS_DATA_XFER 9 /* data transfer */ #define TS_WIND_ORDREL 10 /* releasing read but not write */ #define TS_WREQ_ORDREL 11 /* wait to release write but not read */ #define TS_WACK_DREQ6 12 /* waiting for T_DISCON_REQ ack */ #define TS_WACK_DREQ7 13 /* waiting for T_DISCON_REQ ack */ #define TS_WACK_DREQ9 14 /* waiting for T_DISCON_REQ ack */ #define TS_WACK_DREQ10 15 /* waiting for T_DISCON_REQ ack */ #define TS_WACK_DREQ11 16 /* waiting for T_DISCON_REQ ack */ #define TS_NOSTATES 17 /* * Messages used by "timod". */ #define T_CONN_REQ 0 #define T_CONN_RES 1 #define T_DISCON_REQ 2 #define T_DATA_REQ 3 #define T_EXDATA_REQ 4 #define T_INFO_REQ 5 #define T_BIND_REQ 6 #define T_UNBIND_REQ 7 #define T_UNITDATA_REQ 8 #define T_OPTMGMT_REQ 9 #define T_ORDREL_REQ 10 #define T_OPTDATA_REQ 24 /* data with options request */ #define T_ADDR_REQ 25 /* address request */ #define T_CONN_IND 11 #define T_CONN_CON 12 #define T_DISCON_IND 13 #define T_DATA_IND 14 #define T_EXDATA_IND 15 #define T_INFO_ACK 16 #define T_BIND_ACK 17 #define T_ERROR_ACK 18 #define T_OK_ACK 19 #define T_UNITDATA_IND 20 #define T_UDERROR_IND 21 #define T_OPTMGMT_ACK 22 #define T_ORDREL_IND 23 #define T_OPTDATA_IND 26 /* data with options indication */ #define T_ADDR_ACK 27 /* address acknowledgement */ #ifndef T_MORE /* * Flags used from user level library routines. */ #define T_MORE 0x0001 #define T_EXPEDITED 0x0002 #define T_NEGOTIATE 0x0004 /* Negotiate options */ #define T_CHECK 0x0008 /* Check options */ #define T_DEFAULT 0x0010 /* Get default options */ #define T_SUCCESS 0x0020 /* Success */ #define T_FAILURE 0x0040 /* Failure */ #define T_CURRENT 0x0080 /* Get current options */ #define T_PARTSUCCESS 0x0100 /* Partial success */ #define T_READONLY 0x0200 /* Option is read only */ #define T_NOTSUPPORT 0x0400 /* Option is not supported */ #endif #define T_ALLOPT 0 /* All options at a level */ #define T_ODF_MORE T_MORE #define T_ODF_EX T_EXPEDITED /* * T_INFO_REQ, M_PCPROTO * * This primitive requests the transport provider to return the sizes of all * relevant protocol parameters, plus the current state of the provider[2]. */ struct T_info_req { long PRIM_type; /* always T_INFO_REQ */ }; /* * T_BIND_REQ, M_PROTO * * This primitive request that the transport provider bind a protocol address * to the stream, negotiate the number of connection indications allowed to * be outstanding by the transport provider for the specified protocol * address, and activate[3] the stream associated with the protocol address. */ struct T_bind_req { long PRIM_type; /* always T_BIND_REQ */ long ADDR_length; /* length of address */ long ADDR_offset; /* offset of address */ t_uscalar_t CONIND_number; /* requested number of connect indications to be queued */ }; /* * T_UNBIND_REQ, M_PROTO * * This primitive requests that the transport provider unbind the protocol * address associated with the stream and deactivate the stream. The format */ struct T_unbind_req { long PRIM_type; /* always T_UNBIND_REQ */ }; /* * T_OPTMGMT_REQ, M_PROTO * * This primitive allows the transport user to manage the options associated * with the stream. * * MGMT_flags: * T_NEGOTIATE - negotiate and set the options with the transport provider * T_CHECK - check the validity of the specified options * T_CURRENT - return the options currently in effect * T_DEFAULT - return the default options */ struct T_optmgmt_req { long PRIM_type; /* always T_OPTMGMT_REQ */ long OPT_length; /* options length */ long OPT_offset; /* options offset */ long MGMT_flags; /* flags */ }; /* * T_ADDR_REQ, M_PROTO * * This primitive requests that the transport provider return the local * protocol address that is bound to the stream and the address of the remote * transport entity if a connection has been established. */ struct T_addr_req { long PRIM_type; /* always T_ADDR_REQ */ }; /* information acknowledgment */ /* * T_INFO_ACK, M_PCPROTO * * This primitive indicates to the transport user any relevant protocol- * dependent parameters. It should be initiated in response to the * T_INFO_REQ primitives described above. */ struct T_info_ack { long PRIM_type; /* always T_INFO_ACK */ long TSDU_size; /* max TSDU size */ long ETSDU_size; /* max ETSDU size */ long CDATA_size; /* Connect data size */ long DDATA_size; /* Discon data size */ long ADDR_size; /* TSAP size */ long OPT_size; /* options size */ long TIDU_size; /* TIDU size */ long SERV_type; /* service type */ long CURRENT_state; /* current state */ long PROVIDER_flag; /* provider flags */ }; /* * T_BIND_ACK, M_PCPROTO * * This primitive indicates to the transport user that the sepcified protocol * address has been bound to the stream, that the specified number of connect * indications are allowed to be queued by the transport provider for the * specified protocol address, and that the stream associated with the * specified protocol address has been activated. */ struct T_bind_ack { long PRIM_type; /* always T_BIND_ACK */ long ADDR_length; /* length of address - see note in sec. 1.4 */ long ADDR_offset; /* offset of address */ t_uscalar_t CONIND_number; /* connect indications to be queued */ }; /* * T_OPTMGMT_ACK, M_PCPROTO * * This indicates to the transport user that the options management request * has completed. */ struct T_optmgmt_ack { long PRIM_type; /* always T_OPTMGMT_ACK */ long OPT_length; /* options length - see note in sec. 1.4 */ long OPT_offset; /* options offset */ long MGMT_flags; /* flags */ }; /* * T_ERROR_ACK, M_PRPROTO * * This primitive indicates to the transport user that a non-fatal[9] error * has occured in the last transport-user-originated primitive. This may * only be initiated as an acknowledgement for those primitives that require * one. It also indicates to the user that no action was taken on the * primitive that cause the error. */ struct T_error_ack { long PRIM_type; /* always T_ERROR_ACK */ long ERROR_prim; /* primitive in error */ long TLI_error; /* TLI error code - see not in sec. 1.4 */ long UNIX_error; /* UNIX error code - see not in sec. 1.4 */ }; /* * T_OK_ACK, M_PCPROTO * * This primtiive indicates to the transport user that the previous * transport-user-originated primitive was received successfully by the * transport provider. It does not indicate to the transport user any * transport protocol action taken due to the issuance of the last primitive. * This may only be initiated as an acknowledgement for those primitives that * require one. */ struct T_ok_ack { long PRIM_type; /* always T_OK_ACK */ long CORRECT_prim; /* primitive */ }; /* * T_ADDR_ACK, M_PCPROTO * * This primitive indicates to the transport user the addresses fo the local * and remote transport entities. The local address is the protocol address * that has been bound to the stream. If a connection has been established, * the remote address is the protocol address of the remote transport entity. */ struct T_addr_ack { long PRIM_type; /* always T_ADDR_ACK */ long LOCADDR_length; /* length of local address - see not in sec. 1.4 */ long LOCADDR_offset; /* offset of local address */ long REMADDR_length; /* length of remote address - see not in sec. 1.4 */ long REMADDR_offset; /* offset of remote address */ }; /* * Connection Oriented Transport Primitives */ /* * T_CONN_REQ, M_PROTO * * This primitive requests that the transport provider make a connection to * the specified destination. */ struct T_conn_req { long PRIM_type; /* always T_CONN_REQ */ long DEST_length; /* dest addr length */ long DEST_offset; /* dest addr offset */ long OPT_length; /* options length */ long OPT_offset; /* options offset */ }; /* * T_CONN_RES, M_PROTO (followed by 0 or more M_DATA) * * This primitive requests that the transport provider accept a previous * connect request on the specified response queue. */ struct T_conn_res { long PRIM_type; /* always T_CONN_RES */ long ACCEPTOR_id; /* reponse queue ptr */ long OPT_length; /* options length */ long OPT_offset; /* options offset */ long SEQ_number; /* sequence number */ }; /* * T_DSICON_REQ, M_PROTO (followed by 0 or more M_DATA) * * This primitive request that the transport provider deny a request for * connection, or disconnect an existing connection. */ struct T_discon_req { long PRIM_type; /* always T_DISCON_REQ */ long SEQ_number; /* sequence number */ }; /* * T_DATA_REQ, (opt M_PROTO) (followed by 0 or more M_DATA) * * This primitive indicates to the transport provider that this message * contains a transport interface data unit. One or more transport interface * data units form a transport service data unit (TSDU)[11]. This primitive * has a mechanism which indicates the beginning and end of a transport * service data unit. However, not all transport providers support the * concept of a transport service data unit, as noted in section 2.1.2.1. */ struct T_data_req { long PRIM_type; /* always T_DATA_REQ */ long MORE_flag; /* indicates more data in TSDU */ }; /* * T_EXDATA_REQ, M_PROTO (followed by 1 or more M_DATA) * * This primitive indicates to the transport provider that this message * contains an expedited transport interface data unit. One or more * expedited transport interface data units form an expedited transport * service data unit[12]. This primitive has a mechanism which indicates the * beginning and end of an expedited tansport service data unit. However, * not all transport providers support the concept of an expedited transport * service data unit, as noted in section 2.1.2.1. */ struct T_exdata_req { long PRIM_type; /* T_EXDATA_REQ */ long MORE_flag; }; /* * T_ORDREL_REQ, M_PROTO * * This primitive indicates to the transport provider that the user is * finished sending data. This primitive is only supported by the transport * provider if it is of type T_COTS_ORD. */ struct T_ordrel_req { long PRIM_type; /* always T_ORDREL_REQ */ }; /* * T_CONN_IND, M_PROTO * * This primnitive indicates to the transport user that a connect request to * the user has been made by the user at the specified source address. The */ struct T_conn_ind { long PRIM_type; /* always T_CONN_IND */ long SRC_length; /* source addr length = see note in sec. 1.4 */ long SRC_offset; /* source addr offset */ long OPT_length; /* options length = see note in sec. 1.4 */ long OPT_offset; /* options offset */ long SEQ_number; /* sequence number - see not in sec. 1.4 */ }; /* * T_CONN_CON, M_PROTO, (followed by 0 or more M_DATA) * * This primitive indicates to the user that a connect request has been * confirmed on the specified responding address. */ struct T_conn_con { long PRIM_type; /* T_CONN_CON */ long RES_length; /* responding addr length - see note in sec. 1.4 */ long RES_offset; /* responding addr offset */ long OPT_length; /* options length - see note in sec. 1.4 */ long OPT_offset; /* options offset */ }; /* * T_DISCON_IND, M_PROTO (followed by 0 or more M_DATA) * * This primitive indicates to the user that either a request for connection * has been denied or and existing connection has been disconnected. */ struct T_discon_ind { long PRIM_type; /* T_DISCON_IND */ long DISCON_reason; /* disconnect reason - see note in sec. 1.4 */ long SEQ_number; /* sequence number - see note in sec. 1.4 */ }; /* * T_DATA_IND, (opt M_PROTO) (followed by 0 or more M_DATA) * * This primitive indicates to the transport user that this message contains * a transport interface data unit. One or more transport interface data * units form a transport servie data unit. This primitive has a mechanism * which indicates the beginning and end of a transport service data unit. * However, not all transport provider support the concept of a transport * service data unit, as noted in section 2.1.2.1. */ struct T_data_ind { long PRIM_type; /* always T_DATA_IND */ long MORE_flag; /* indicates more data in TSDU */ }; /* * T_EXDATA_IND, M_PROTO * * This primitive indicates to the transport user that this message contains * an expedited transport interface data unit. One or more expedited * transport interface data units form an expedited transport service data * unit. This primitive has a mechanism which indicates the beginning and * end of an expedited transport service data unit. However, not all * transport providers support the concept of an expedited transport service * data unit, as noted in section 2.1.2.1. */ struct T_exdata_ind { long PRIM_type; /* always T_EXDATA_IND */ long MORE_flag; /* indicates more data in ETSDU */ }; /* * T_ORDREL_IND, M_PROTO * * This primitive indicates to the transport user that the other side of the * connection is finished sending data. This primitive is only supported by * the transport provider if it is of type T_COTS_ORD. */ struct T_ordrel_ind { long PRIM_type; /* always T_ORDREL_IND */ }; /* * Connectionless-Mode Transport Primitives */ /* * T_UNITDATA_REQ, M_PROTO * * This primitive request that the transport provider send the specified * datagram to the specified destination. */ struct T_unitdata_req { long PRIM_type; /* always T_UNITDATA_REQ */ long DEST_length; /* dest addr length */ long DEST_offset; /* dest addr offset */ long OPT_length; /* options length */ long OPT_offset; /* options offset */ }; /* * T_UNITDATA_IND, M_PROTO * * This primitive indicates to the transport user that a datagram has been * received from the specified source address. */ struct T_unitdata_ind { long PRIM_type; /* T_UNITDATA_IND */ long SRC_length; /* source addr length - see note in sec. 1.4 */ long SRC_offset; /* source addr offset */ long OPT_length; /* options length - see note in sec. 1.4 */ long OPT_offset; /* options offset */ }; /* * T_UDERROR_IND, M_PROTO * * This primitive indicates to the transport user that a datagram with the * specified destination address and options produced an error. */ struct T_uderror_ind { long PRIM_type; /* T_UDERROR_IND */ long DEST_length; /* dest addr length - see note in sec. 1.4 */ long DEST_offset; /* dest addr offset */ long OPT_length; /* options length - see note in sec. 1.4 */ long OPT_offset; /* options offset */ long ERROR_type; /* error type */ }; struct T_optdata_req { long PRIM_type; /* T_OPTDATA_REQ */ long DATA_flag; /* flag bits associated with data */ long OPT_length; /* options length */ long OPT_offset; /* options offset */ }; struct T_optdata_ind { long PRIM_type; /* T_OPTDATA_REQ */ long DATA_flag; /* flag bits associated with data */ long OPT_length; /* options length */ long OPT_offset; /* options offset */ }; union T_primitives { long type; struct T_addr_ack addr_ack; struct T_addr_req addr_req; struct T_bind_ack bind_ack; struct T_bind_req bind_req; struct T_conn_con conn_con; struct T_conn_ind conn_ind; struct T_conn_req conn_req; struct T_conn_res conn_res; struct T_data_ind data_ind; struct T_data_req data_req; struct T_discon_ind discon_ind; struct T_discon_req discon_req; struct T_error_ack error_ack; struct T_exdata_ind exdata_ind; struct T_exdata_req exdata_req; struct T_info_ack info_ack; struct T_info_req info_req; struct T_ok_ack ok_ack; struct T_optmgmt_ack optmgmt_ack; struct T_optmgmt_req optmgmt_req; struct T_ordrel_ind ordrel_ind; struct T_ordrel_req ordrel_req; struct T_uderror_ind uderror_ind; struct T_unbind_req unbind_req; struct T_unitdata_ind unitdata_ind; struct T_unitdata_req unitdata_req; struct T_optdata_req optdata_req; struct T_optdata_ind optdata_ind; }; #ifndef T_OPT_FIRSTHDR /* The t_opthdr structure defines the layout of options in a T_OPTMGMT_* * data buffer. This is specified in the X/Open specs but does not * appear to exist in SCO 3.2.x, SCO OS5, Interactive SVR4 or UnixWare 1.x. * There are programs that make options request however. * The older TLI uses struct opthdr which is different and incompatible * (see below). */ struct t_opthdr { t_uscalar_t len; /* Option length, incl. header */ t_uscalar_t level; /* Option level */ t_uscalar_t name; /* Option name */ t_uscalar_t status; /* Negotiation result */ char value[0]; /* and onwards... */ }; struct opthdr { t_scalar_t level; /* Option level */ t_scalar_t name; /* Option name */ t_scalar_t len; /* Length of option value */ char value[0]; /* and onwards... */ }; #define _T_ALIGN_SIZE sizeof(t_uscalar_t) #define _T_ALIGN_OFS(p, o) \ ((char *)(((unsigned long)(p) - (o) + _T_ALIGN_SIZE - 1) \ & ~(_T_ALIGN_SIZE - 1)) + (o)) #define _T_ALIGN_OFFSET(p) \ ((unsigned long)(p) & (_T_ALIGN_SIZE - 1)) #define _T_ALIGN_OFS_OFS(p, l, o) _T_ALIGN_OFS((char *)(p) + l, (o)) #define _T_OPT_FIRSTHDR_OFS(b, l, o) \ ((struct t_opthdr *)( \ (_T_ALIGN_OFS((b), (o)) + sizeof(struct t_opthdr) \ <= (char *)(b) + (l)) ? \ _T_ALIGN_OFS((b), (o)) : NULL)) #define _T_OPT_NEXTHDR_OFS(b, l, p, o) \ ((struct t_opthdr *)( \ (_T_ALIGN_OFS_OFS((p), (p)->len + sizeof(struct t_opthdr), (o)) \ <= ((char *)(b) + (l))) ? \ _T_ALIGN_OFS_OFS((p), (p)->len, (o)) : NULL \ )) #define _T_OPT_DATA_OFS(p, o) \ ((unsigned char *)(_T_ALIGN_OFS((struct t_opthdr *)(p)+1, (o)))) #define T_OPT_FIRSTHDR(b) _T_OPT_FIRSTHDR_OFS((b)->buf, (b)->len, 0) #define T_OPT_NEXTHDR(b, p) _T_OPT_NEXTHDR_OFS((b)->buf, (b)->len, p, 0) #define T_OPT_DATA(p) _T_OPT_DATA_OFS((p), 0) #endif /* * General purpose constants */ #ifndef T_YES #define T_YES 1 /* Yes/on/true */ #define T_NO 0 /* No/off/false */ #endif #ifndef T_INFINITE #define T_INFINITE -1 /* No limit */ #define T_INVALID -2 /* No sense */ #endif #ifndef T_SNDZERO #define T_SNDZERO 1 /* Must match <sys/stropts.h>: SNDZERO */ #endif #endif /* _SYS_TPI_H */
|
|||||||||||||||||||||||||||
OpenSS7 SS7 for the Common Man |
Home | Overview | Status | News | Documentation | Resources | About | ||||||||||||||||||||
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |