home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0010 - 0019 / ibm0010-0019 / ibm0010.tar / ibm0010 / UNIX3862.ZIP / U386-06.ZIP / U386-6.TD0 / usr / include / sys / tihdr.h < prev    next >
Encoding:
C/C++ Source or Header  |  1988-06-26  |  11.5 KB  |  365 lines

  1. /*    Copyright (c) 1984, 1986, 1987, 1988 AT&T    */
  2. /*      All Rights Reserved      */
  3.  
  4. /*    THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T    */
  5. /*    The copyright notice above does not evidence any       */
  6. /*    actual or intended publication of such source code.    */
  7.  
  8.  
  9. #ident    "@(#)head.sys:tihdr.h    1.3"
  10.  
  11. /*
  12.  * The following is all the information
  13.  * needed by the Transport Service Interface.
  14.  */
  15.  
  16.  
  17.  
  18. /* 
  19.  * The following are the definitions of the Transport
  20.  * Service Interface primitives.
  21.  */
  22.  
  23. /* 
  24.  * Primitives that are initiated by the transport user.
  25.  */
  26.  
  27. #define    T_CONN_REQ    0    /* connection request     */
  28. #define T_CONN_RES    1    /* connection response    */
  29. #define T_DISCON_REQ    2    /* disconnect request     */
  30. #define T_DATA_REQ    3    /* data request              */
  31. #define T_EXDATA_REQ    4    /* expedited data request */
  32. #define T_INFO_REQ    5    /* information request    */
  33. #define T_BIND_REQ    6    /* bind request          */
  34. #define T_UNBIND_REQ    7    /* unbind request      */
  35. #define T_UNITDATA_REQ    8    /* unitdata request       */
  36. #define T_OPTMGMT_REQ   9    /* manage options req     */
  37. #define T_ORDREL_REQ   10       /* orderly release req    */
  38.  
  39. /* 
  40.  * Primitives that are initiated by the transport provider.
  41.  */
  42.  
  43. #define T_CONN_IND    11    /* connection indication      */
  44. #define T_CONN_CON    12    /* connection confirmation    */
  45. #define T_DISCON_IND    13    /* disconnect indication      */
  46. #define T_DATA_IND    14    /* data indication          */
  47. #define T_EXDATA_IND    15    /* expeditied data indication */
  48. #define T_INFO_ACK    16    /* information acknowledgment */
  49. #define T_BIND_ACK    17    /* bind acknowledment          */
  50. #define T_ERROR_ACK    18    /* error acknowledgment       */
  51. #define T_OK_ACK    19    /* ok acknowledgment          */
  52. #define T_UNITDATA_IND    20    /* unitdata indication          */
  53. #define T_UDERROR_IND    21    /* unitdata error indication  */
  54. #define T_OPTMGMT_ACK   22      /* manage options ack         */
  55. #define T_ORDREL_IND    23      /* orderly release ind           */
  56.  
  57. /*
  58.  * The following are the events that drive the state machine
  59.  */
  60. /* Initialization events */
  61. #define TE_BIND_REQ    0    /* bind request                  */
  62. #define TE_UNBIND_REQ    1    /* unbind request              */
  63. #define TE_OPTMGMT_REQ  2    /* manage options req             */
  64. #define TE_BIND_ACK    3    /* bind acknowledment                  */
  65. #define TE_OPTMGMT_ACK  4       /* manage options ack                 */
  66. #define TE_ERROR_ACK    5    /* error acknowledgment               */
  67. #define TE_OK_ACK1    6    /* ok ack  seqcnt == 0               */
  68. #define TE_OK_ACK2    7    /* ok ack  seqcnt == 1, q == resq          */
  69. #define TE_OK_ACK3    8    /* ok ack  seqcnt == 1, q != resq       */
  70. #define TE_OK_ACK4    9    /* ok ack  seqcnt > 1                */
  71.  
  72. /* Connection oriented events */
  73. #define    TE_CONN_REQ    10    /* connection request             */
  74. #define TE_CONN_RES    11    /* connection response            */
  75. #define TE_DISCON_REQ    12    /* disconnect request             */
  76. #define TE_DATA_REQ    13    /* data request                      */
  77. #define TE_EXDATA_REQ    14    /* expedited data request         */
  78. #define TE_ORDREL_REQ   15      /* orderly release req            */
  79. #define TE_CONN_IND    16    /* connection indication              */
  80. #define TE_CONN_CON    17    /* connection confirmation            */
  81. #define TE_DATA_IND    18    /* data indication                  */
  82. #define TE_EXDATA_IND    19    /* expedited data indication         */
  83. #define TE_ORDREL_IND   20      /* orderly release ind                   */
  84. #define TE_DISCON_IND1    21    /* disconnect indication seq == 0          */
  85. #define TE_DISCON_IND2    22    /* disconnect indication seq == 1       */
  86. #define TE_DISCON_IND3    23    /* disconnect indication seq > 1      */
  87. #define TE_PASS_CONN    24    /* pass connection                   */
  88.  
  89. /* Unit data events */
  90. #define TE_UNITDATA_REQ    25    /* unitdata request               */
  91. #define TE_UNITDATA_IND    26    /* unitdata indication                  */
  92. #define TE_UDERROR_IND    27    /* unitdata error indication          */
  93.  
  94. #define TE_NOEVENTS    28
  95. /*
  96.  * The following are the possible states of the Transport
  97.  * Service Interface
  98.  */
  99.  
  100. #define TS_UNBND        0    /* unbound                    */
  101. #define    TS_WACK_BREQ        1    /* waiting ack of BIND_REQ      */
  102. #define TS_WACK_UREQ        2    /* waiting ack of UNBIND_REQ    */
  103. #define TS_IDLE            3    /* idle                 */
  104. #define TS_WACK_OPTREQ        4    /* wait ack options request     */
  105. #define TS_WACK_CREQ        5    /* waiting ack of CONN_REQ      */
  106. #define TS_WCON_CREQ        6    /* waiting confirm of CONN_REQ  */
  107. #define    TS_WRES_CIND        7    /* waiting response of CONN_IND */
  108. #define TS_WACK_CRES        8    /* waiting ack of CONN_RES      */
  109. #define TS_DATA_XFER        9    /* data transfer        */
  110. #define TS_WIND_ORDREL         10    /* releasing rd but not wr      */
  111. #define TS_WREQ_ORDREL        11      /* wait to release wr but not rd*/
  112. #define TS_WACK_DREQ6        12    /* waiting ack of DISCON_REQ    */
  113. #define TS_WACK_DREQ7        13    /* waiting ack of DISCON_REQ    */
  114. #define TS_WACK_DREQ9        14    /* waiting ack of DISCON_REQ    */
  115. #define TS_WACK_DREQ10        15    /* waiting ack of DISCON_REQ    */
  116. #define TS_WACK_DREQ11        16    /* waiting ack of DISCON_REQ    */
  117.  
  118. #define TS_NOSTATES        17
  119.  
  120.  
  121. /* 
  122.  * The following structure definitions define the format of the
  123.  * stream message block of the above primitives.
  124.  * (everything is declared long to ensure proper alignment
  125.  *  across different machines)
  126.  */
  127.  
  128. /* connection request */
  129.  
  130. struct T_conn_req {
  131.     long    PRIM_type;    /* always T_CONN_REQ  */
  132.     long    DEST_length;    /* dest addr length   */
  133.     long    DEST_offset;    /* dest addr offset   */
  134.     long    OPT_length;    /* options length     */
  135.     long    OPT_offset;    /* options offset     */
  136. };
  137.  
  138. /* connect response */
  139.  
  140. struct T_conn_res {
  141.     long    PRIM_type;    /* always T_CONN_RES       */
  142.     queue_t *QUEUE_ptr;    /* responding queue ptr    */
  143.     long    OPT_length;    /* options length          */
  144.     long    OPT_offset;    /* options offset          */
  145.     long    SEQ_number;    /* sequence number          */
  146. };
  147.  
  148. /* disconnect request */
  149.  
  150. struct T_discon_req {
  151.     long    PRIM_type;    /* always T_DISCON_REQ */
  152.     long    SEQ_number;    /* sequnce number      */
  153. };
  154.  
  155. /* data request */
  156.  
  157. struct T_data_req {
  158.     long    PRIM_type;    /* always T_DATA_REQ */
  159.     long    MORE_flag;    /* more data         */
  160. };
  161.  
  162. /* expedited data request */
  163.  
  164. struct T_exdata_req {
  165.     long    PRIM_type;    /* always T_EXDATA_REQ */
  166.     long    MORE_flag;    /* more data           */
  167. };
  168.  
  169. /* information request */
  170.  
  171. struct T_info_req {
  172.     long    PRIM_type;    /* always T_INFO_REQ */
  173. };
  174.  
  175. /* bind request */
  176.  
  177. struct T_bind_req {
  178.     long        PRIM_type;    /* always T_BIND_REQ            */
  179.     long        ADDR_length;    /* addr length                    */
  180.     long        ADDR_offset;    /* addr offset                    */
  181.     unsigned long    CONIND_number;    /*connect indications requested */
  182. };
  183.  
  184. /* unbind request */
  185.  
  186. struct T_unbind_req {
  187.     long    PRIM_type;    /* always T_UNBIND_REQ */
  188. };
  189.  
  190. /* unitdata request */
  191.  
  192. struct T_unitdata_req {
  193.     long    PRIM_type;    /* always T_UNITDATA_REQ  */
  194.     long    DEST_length;    /* dest addr length       */
  195.     long    DEST_offset;    /* dest addr offset       */
  196.     long    OPT_length;    /* options length         */
  197.     long    OPT_offset;    /* options offset         */
  198. };
  199.  
  200. /* manage options request */
  201.  
  202. struct T_optmgmt_req {
  203.     long    PRIM_type;    /* always T_OPTMGMT_REQ   */
  204.     long    OPT_length;    /* options length         */
  205.     long    OPT_offset;    /* options offset         */
  206.     long    MGMT_flags;    /* options flags          */
  207. };
  208.  
  209. /* orderly release request */
  210.  
  211. struct T_ordrel_req {
  212.     long    PRIM_type;    /* always T_ORDREL_REQ */
  213. };
  214.  
  215. /* connect indication */
  216.  
  217. struct T_conn_ind {
  218.     long    PRIM_type;    /* always T_CONN_IND */
  219.     long    SRC_length;    /* src addr length   */
  220.     long    SRC_offset;    /* src addr offset   */
  221.     long    OPT_length;    /* option length     */
  222.     long    OPT_offset;    /* option offset     */
  223.     long    SEQ_number;    /* sequnce number    */
  224. };
  225.  
  226. /* connect confirmation */
  227.  
  228. struct T_conn_con {
  229.     long    PRIM_type;    /* always T_CONN_CON      */
  230.     long    RES_length;    /* responding addr length */
  231.     long    RES_offset;    /* responding addr offset */
  232.     long    OPT_length;    /* option length          */
  233.     long    OPT_offset;    /* option offset          */
  234. };
  235.  
  236. /* disconnect indication */
  237.  
  238. struct T_discon_ind {
  239.     long    PRIM_type;    /* always T_DISCON_IND     */
  240.     long    DISCON_reason;    /* disconnect reason    */
  241.     long    SEQ_number;    /* sequnce number       */
  242. };
  243.  
  244. /* data indication */
  245.  
  246. struct T_data_ind {
  247.     long     PRIM_type;    /* always T_DATA_IND */
  248.     long    MORE_flag;    /* more data          */
  249. };
  250.  
  251. /* expedited data indication */
  252.  
  253. struct T_exdata_ind {
  254.     long    PRIM_type;    /* always T_EXDATA_IND */
  255.     long    MORE_type;    /* more data           */
  256. };
  257.  
  258. /* information acknowledgment */
  259.  
  260. struct T_info_ack {
  261.     long    PRIM_type;    /* always T_INFO_ACK     */
  262.     long    TSDU_size;    /* max TSDU size         */
  263.     long    ETSDU_size;    /* max ETSDU size        */
  264.     long    CDATA_size;    /* max connect data size */
  265.     long    DDATA_size;    /* max discon data size  */
  266.     long    ADDR_size;    /* address size         */
  267.     long    OPT_size;    /* options size         */
  268.     long    TIDU_size;    /* max TIDU size         */
  269.     long    SERV_type;    /* provider service type */
  270.     long    CURRENT_state;  /* current state         */
  271. };
  272.  
  273. /* bind acknowledgment */
  274.  
  275. struct T_bind_ack {
  276.     long        PRIM_type;    /* always T_BIND_ACK        */
  277.     long        ADDR_length;    /* addr length              */
  278.     long        ADDR_offset;    /* addr offset              */
  279.     unsigned long    CONIND_number;    /* connect ind to be queued */
  280. };
  281.  
  282. /* error acknowledgment */
  283.  
  284. struct T_error_ack { 
  285.     long     PRIM_type;    /* always T_ERROR_ACK  */
  286.     long    ERROR_prim;    /* primitive in error  */
  287.     long    TLI_error;    /* TLI error code      */
  288.     long    UNIX_error;    /* UNIX error code     */
  289. };
  290.  
  291. /* ok acknowledgment */
  292.  
  293. struct T_ok_ack {
  294.     long     PRIM_type;    /* always T_OK_ACK   */
  295.     long    CORRECT_prim;    /* correct primitive */
  296. };
  297.  
  298. /* unitdata indication */
  299.  
  300. struct T_unitdata_ind {
  301.     long    PRIM_type;    /* always T_UNITDATA_IND  */
  302.     long    SRC_length;    /* source addr length     */
  303.     long    SRC_offset;    /* source addr offset     */
  304.     long    OPT_length;    /* options length         */
  305.     long    OPT_offset;    /* options offset         */
  306. };
  307.  
  308. /* unitdata error indication */
  309.  
  310. struct T_uderror_ind {
  311.     long    PRIM_type;    /* always T_UDERROR_IND   */
  312.     long    DEST_length;    /* dest addr length       */
  313.     long    DEST_offset;    /* dest addr offset       */
  314.     long    OPT_length;    /* options length         */
  315.     long    OPT_offset;    /* options offset         */
  316.     long    ERROR_type;    /* error type              */
  317. };
  318.  
  319. /* manage options ack */
  320.  
  321. struct T_optmgmt_ack {
  322.     long    PRIM_type;    /* always T_OPTMGMT_ACK   */
  323.     long    OPT_length;    /* options length         */
  324.     long    OPT_offset;    /* options offset         */
  325.     long    MGMT_flags;    /* managment flags        */
  326. };
  327.  
  328. /* orderly release indication */
  329.  
  330. struct T_ordrel_ind {
  331.     long    PRIM_type;    /* always T_ORDREL_IND */
  332. };
  333.  
  334. /*
  335.  * The following is a union of the primitives
  336.  */
  337. union T_primitives {
  338.     long            type;        /* primitive type     */
  339.     struct T_conn_req    conn_req;    /* connect request    */
  340.     struct T_conn_res    conn_res;    /* connect response   */
  341.     struct T_discon_req    discon_req;    /* disconnect request */
  342.     struct T_data_req    data_req;    /* data request       */
  343.     struct T_exdata_req    exdata_req;    /* expedited data req */
  344.     struct T_info_req    info_req;    /* information req    */
  345.     struct T_bind_req    bind_req;    /* bind request       */
  346.     struct T_unbind_req    unbind_req;    /* unbind request     */
  347.     struct T_unitdata_req    unitdata_req;    /* unitdata requset   */
  348.     struct T_optmgmt_req    optmgmt_req;    /* manage opt req     */
  349.     struct T_ordrel_req    ordrel_req;    /* orderly rel req    */
  350.     struct T_conn_ind    conn_ind;    /* connect indication */
  351.     struct T_conn_con    conn_con;    /* connect corfirm    */
  352.     struct T_discon_ind    discon_ind;    /* discon indication  */
  353.     struct T_data_ind    data_ind;    /* data indication    */
  354.     struct T_exdata_ind    exdata_ind;    /* expedited data ind */
  355.     struct T_info_ack    info_ack;    /* info ack          */
  356.     struct T_bind_ack    bind_ack;    /* bind ack          */
  357.     struct T_error_ack    error_ack;    /* error ack          */
  358.     struct T_ok_ack        ok_ack;        /* ok ack          */
  359.     struct T_unitdata_ind    unitdata_ind;    /* unitdata ind       */
  360.     struct T_uderror_ind    uderror_ind;    /* unitdata error ind */
  361.     struct T_optmgmt_ack    optmgmt_ack;    /* manage opt ack     */
  362.     struct T_ordrel_ind    ordrel_ind;    /* orderly rel ind    */
  363. };
  364.  
  365.