home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / nsu / root / usr / include / sys / tihdr.h / tihdr
Text File  |  1998-08-19  |  15KB  |  462 lines

  1. /*
  2.  * Copyright (c) 1998 The Santa Cruz Operation, Inc.. All Rights Reserved. 
  3.  *                                                                         
  4.  *        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF THE               
  5.  *                   SANTA CRUZ OPERATION INC.                             
  6.  *                                                                         
  7.  *   The copyright notice above does not evidence any actual or intended   
  8.  *   publication of such source code.                                      
  9.  */
  10.  
  11. #ifndef _NET_TIHDR_H    /* wrapper symbol for kernel use */
  12. #define _NET_TIHDR_H    /* subject to change without notice */
  13.  
  14. #ident    "@(#)tihdr.h    1.2"
  15. #ident    "$Header: $"
  16.  
  17. #if defined(__cplusplus)
  18. extern "C" {
  19. #endif
  20.  
  21. /*
  22.  * The following is all the information
  23.  * needed by the Transport Service Interface.
  24.  */
  25.  
  26. #ifdef _KERNEL_HEADERS
  27.  
  28. #include <io/stream.h>    /* REQUIRED */
  29.  
  30. #elif defined(_KERNEL) || defined(_KMEMUSER)
  31.  
  32. #include <sys/stream.h>    /* REQUIRED */
  33.  
  34. #endif /* _KERNEL_HEADERS */
  35.  
  36.  
  37. /* 
  38.  * The following are the definitions of the Transport
  39.  * Service Interface primitives.
  40.  */
  41.  
  42. /* 
  43.  * Primitives that are initiated by the transport user.
  44.  */
  45.  
  46. #define    T_CONN_REQ    0    /* connection request     */
  47. #define T_CONN_RES    1    /* connection response    */
  48. #define T_DISCON_REQ    2    /* disconnect request     */
  49. #define T_DATA_REQ    3    /* data request              */
  50. #define T_EXDATA_REQ    4    /* expedited data request */
  51. #define T_INFO_REQ    5    /* information request    */
  52. #define O_T_BIND_REQ    6    /* old (TLI) bind request */
  53. #define T_UNBIND_REQ    7    /* unbind request      */
  54. #define T_UNITDATA_REQ    8    /* unitdata request       */
  55. #define T_OPTMGMT_REQ    9    /* options management req */
  56. #define T_ORDREL_REQ   10       /* orderly release req    */
  57. #define T_ADDR_REQ     24    /* get protocol addr req  */
  58. #define T_BIND_REQ     26    /* new (XTI) bind request */
  59.  
  60. /* 
  61.  * Primitives that are initiated by the transport provider.
  62.  */
  63.  
  64. #define T_CONN_IND    11    /* connection indication      */
  65. #define T_CONN_CON    12    /* connection confirmation    */
  66. #define T_DISCON_IND    13    /* disconnect indication      */
  67. #define T_DATA_IND    14    /* data indication          */
  68. #define T_EXDATA_IND    15    /* expeditied data indication */
  69. #define T_INFO_ACK    16    /* information acknowledgment */
  70. #define T_BIND_ACK    17    /* bind acknowledment          */
  71. #define T_ERROR_ACK    18    /* error acknowledgment       */
  72. #define T_OK_ACK    19    /* ok acknowledgment          */
  73. #define T_UNITDATA_IND    20    /* unitdata indication          */
  74. #define T_UDERROR_IND    21    /* unitdata error indication  */
  75. #define T_OPTMGMT_ACK   22      /* manage options ack         */
  76. #define T_ORDREL_IND    23      /* orderly release ind           */
  77. #define    T_ADDR_ACK    25    /* get protocol addr ack      */
  78.  
  79. #define T_CONN_INDE    (T_CONN_IND + 200)    /* SNI */
  80.  
  81. /*
  82.  * The following are the events that drive the state machine
  83.  */
  84. /* Initialization events */
  85. #define TE_BIND_REQ    0    /* bind request                  */
  86. #define TE_UNBIND_REQ    1    /* unbind request              */
  87. #define TE_OPTMGMT_REQ  2    /* manage options req             */
  88. #define TE_BIND_ACK    3    /* bind acknowledment                  */
  89. #define TE_OPTMGMT_ACK  4       /* manage options ack                 */
  90. #define TE_ERROR_ACK    5    /* error acknowledgment               */
  91. #define TE_OK_ACK1    6    /* ok ack  seqcnt == 0               */
  92. #define TE_OK_ACK2    7    /* ok ack  seqcnt == 1, q == resq          */
  93. #define TE_OK_ACK3    8    /* ok ack  seqcnt == 1, q != resq       */
  94. #define TE_OK_ACK4    9    /* ok ack  seqcnt > 1                */
  95.  
  96. /* Connection oriented events */
  97. #define    TE_CONN_REQ    10    /* connection request             */
  98. #define TE_CONN_RES    11    /* connection response            */
  99. #define TE_DISCON_REQ    12    /* disconnect request             */
  100. #define TE_DATA_REQ    13    /* data request                      */
  101. #define TE_EXDATA_REQ    14    /* expedited data request         */
  102. #define TE_ORDREL_REQ   15      /* orderly release req            */
  103. #define TE_CONN_IND    16    /* connection indication              */
  104. #define TE_CONN_CON    17    /* connection confirmation            */
  105. #define TE_DATA_IND    18    /* data indication                  */
  106. #define TE_EXDATA_IND    19    /* expedited data indication         */
  107. #define TE_ORDREL_IND   20      /* orderly release ind                   */
  108. #define TE_DISCON_IND1    21    /* disconnect indication seq == 0          */
  109. #define TE_DISCON_IND2    22    /* disconnect indication seq == 1       */
  110. #define TE_DISCON_IND3    23    /* disconnect indication seq > 1      */
  111. #define TE_PASS_CONN    24    /* pass connection                   */
  112.  
  113. /* Unit data events */
  114. #define TE_UNITDATA_REQ    25    /* unitdata request               */
  115. #define TE_UNITDATA_IND    26    /* unitdata indication                  */
  116. #define TE_UDERROR_IND    27    /* unitdata error indication          */
  117.  
  118. #define TE_NOEVENTS    28
  119. /*
  120.  * The following are the possible states of the Transport
  121.  * Service Interface
  122.  */
  123.  
  124. #define TS_UNBND        0    /* unbound                    */
  125. #define    TS_WACK_BREQ        1    /* waiting ack of BIND_REQ      */
  126. #define TS_WACK_UREQ        2    /* waiting ack of UNBIND_REQ    */
  127. #define TS_IDLE            3    /* idle                 */
  128. #define TS_WACK_OPTREQ        4    /* wait ack options request     */
  129. #define TS_WACK_CREQ        5    /* waiting ack of CONN_REQ      */
  130. #define TS_WCON_CREQ        6    /* waiting confirm of CONN_REQ  */
  131. #define    TS_WRES_CIND        7    /* waiting response of CONN_IND */
  132. #define TS_WACK_CRES        8    /* waiting ack of CONN_RES      */
  133. #define TS_DATA_XFER        9    /* data transfer        */
  134. #define TS_WIND_ORDREL         10    /* releasing rd but not wr      */
  135. #define TS_WREQ_ORDREL        11      /* wait to release wr but not rd*/
  136. #define TS_WACK_DREQ6        12    /* waiting ack of DISCON_REQ    */
  137. #define TS_WACK_DREQ7        13    /* waiting ack of DISCON_REQ    */
  138. #define TS_WACK_DREQ9        14    /* waiting ack of DISCON_REQ    */
  139. #define TS_WACK_DREQ10        15    /* waiting ack of DISCON_REQ    */
  140. #define TS_WACK_DREQ11        16    /* waiting ack of DISCON_REQ    */
  141.  
  142. #define TS_NOSTATES        17
  143.  
  144. /*
  145.  * The following are the different flags available to
  146.  * the transport provider to set in the PROVIDER_flag
  147.  * field of the T_info_ack structure.
  148.  */
  149. #define SENDZERO        0x0001  /* provider can handle 0-length TSDU's */
  150. #define EXPINLINE       0x0002  /* provider wants ETSDU's in band 0 */
  151. #define XPG4_1          0x0004  /* provider confirms to XTI in XPG4 and *
  152.                                  * supports T_ADDR_REQ & T_ADDR_ACK */
  153.  
  154. /* 
  155.  * The following structure definitions define the format of the
  156.  * stream message block of the above primitives.
  157.  * (everything is declared long to ensure proper alignment
  158.  *  across different machines)
  159.  */
  160.  
  161. /* connection request */
  162.  
  163. struct T_conn_req {
  164.     long    PRIM_type;    /* always T_CONN_REQ  */
  165.     long    DEST_length;    /* dest addr length   */
  166.     long    DEST_offset;    /* dest addr offset   */
  167.     long    OPT_length;    /* options length     */
  168.     long    OPT_offset;    /* options offset     */
  169. };
  170.  
  171. struct queue;            /* For user level usage */
  172.  
  173. /* connect response */
  174.  
  175. struct T_conn_res {
  176.     long    PRIM_type;    /* always T_CONN_RES       */
  177.     struct queue *QUEUE_ptr;/* responding queue ptr    */
  178.     long    OPT_length;    /* options length          */
  179.     long    OPT_offset;    /* options offset          */
  180.     long    SEQ_number;    /* sequence number          */
  181. };
  182.  
  183. /* disconnect request */
  184.  
  185. struct T_discon_req {
  186.     long    PRIM_type;    /* always T_DISCON_REQ */
  187.     long    SEQ_number;    /* sequnce number      */
  188. };
  189.  
  190. /* data request */
  191.  
  192. struct T_data_req {
  193.     long    PRIM_type;    /* always T_DATA_REQ */
  194.     long    MORE_flag;    /* more data         */
  195. };
  196.  
  197. /* expedited data request */
  198.  
  199. struct T_exdata_req {
  200.     long    PRIM_type;    /* always T_EXDATA_REQ */
  201.     long    MORE_flag;    /* more data           */
  202. };
  203.  
  204. /* information request */
  205.  
  206. struct T_info_req {
  207.     long    PRIM_type;    /* always T_INFO_REQ */
  208. };
  209.  
  210. /* bind request */
  211.  
  212. struct T_bind_req {
  213.     long        PRIM_type;    /* always T_BIND_REQ            */
  214.     long        ADDR_length;    /* addr length                    */
  215.     long        ADDR_offset;    /* addr offset                    */
  216.     unsigned long    CONIND_number;    /*connect indications requested */
  217. };
  218.  
  219. /* unbind request */
  220.  
  221. struct T_unbind_req {
  222.     long    PRIM_type;    /* always T_UNBIND_REQ */
  223. };
  224.  
  225. /* unitdata request */
  226.  
  227. struct T_unitdata_req {
  228.     long    PRIM_type;    /* always T_UNITDATA_REQ  */
  229.     long    DEST_length;    /* dest addr length       */
  230.     long    DEST_offset;    /* dest addr offset       */
  231.     long    OPT_length;    /* options length         */
  232.     long    OPT_offset;    /* options offset         */
  233. };
  234.  
  235. /* manage options request */
  236.  
  237. struct T_optmgmt_req {
  238.     long    PRIM_type;    /* always T_OPTMGMT_REQ   */
  239.     long    OPT_length;    /* options length         */
  240.     long    OPT_offset;    /* options offset         */
  241.     long    MGMT_flags;    /* options flags          */
  242. };
  243.  
  244. /* orderly release request */
  245.  
  246. struct T_ordrel_req {
  247.     long    PRIM_type;    /* always T_ORDREL_REQ */
  248. };
  249.  
  250. /* connect indication */
  251.  
  252. struct T_conn_ind {
  253.     long    PRIM_type;    /* always T_CONN_IND */
  254.     long    SRC_length;    /* src addr length   */
  255.     long    SRC_offset;    /* src addr offset   */
  256.     long    OPT_length;    /* option length     */
  257.     long    OPT_offset;    /* option offset     */
  258.     long    SEQ_number;    /* sequnce number    */
  259. };
  260.  
  261. /* connect confirmation */
  262.  
  263. struct T_conn_con {
  264.     long    PRIM_type;    /* always T_CONN_CON      */
  265.     long    RES_length;    /* responding addr length */
  266.     long    RES_offset;    /* responding addr offset */
  267.     long    OPT_length;    /* option length          */
  268.     long    OPT_offset;    /* option offset          */
  269. };
  270.  
  271. /* disconnect indication */
  272.  
  273. struct T_discon_ind {
  274.     long    PRIM_type;    /* always T_DISCON_IND     */
  275.     long    DISCON_reason;    /* disconnect reason    */
  276.     long    SEQ_number;    /* sequnce number       */
  277. };
  278.  
  279. /* data indication */
  280.  
  281. struct T_data_ind {
  282.     long     PRIM_type;    /* always T_DATA_IND */
  283.     long    MORE_flag;    /* more data          */
  284. };
  285.  
  286. /* expedited data indication */
  287.  
  288. struct T_exdata_ind {
  289.     long    PRIM_type;    /* always T_EXDATA_IND */
  290.     long    MORE_flag;    /* more data           */
  291. };
  292.  
  293. /* information acknowledgment */
  294.  
  295. struct T_info_ack {
  296.     long    PRIM_type;    /* always T_INFO_ACK     */
  297.     long    TSDU_size;    /* max TSDU size         */
  298.     long    ETSDU_size;    /* max ETSDU size        */
  299.     long    CDATA_size;    /* max connect data size */
  300.     long    DDATA_size;    /* max discon data size  */
  301.     long    ADDR_size;    /* address size         */
  302.     long    OPT_size;    /* options size         */
  303.     long    TIDU_size;    /* max TIDU size         */
  304.     long    SERV_type;    /* provider service type */
  305.     long    CURRENT_state;  /* current state         */
  306.     long    PROVIDER_flag;  /* provider flags        */
  307. };
  308.  
  309. /* bind acknowledgment */
  310.  
  311. struct T_bind_ack {
  312.     long        PRIM_type;    /* always T_BIND_ACK        */
  313.     long        ADDR_length;    /* addr length              */
  314.     long        ADDR_offset;    /* addr offset              */
  315.     unsigned long    CONIND_number;    /* connect ind to be queued */
  316. };
  317.  
  318. /* error acknowledgment */
  319.  
  320. struct T_error_ack { 
  321.     long     PRIM_type;    /* always T_ERROR_ACK  */
  322.     long    ERROR_prim;    /* primitive in error  */
  323.     long    TLI_error;    /* TLI error code      */
  324.     long    UNIX_error;    /* UNIX error code     */
  325. };
  326.  
  327. /* ok acknowledgment */
  328.  
  329. struct T_ok_ack {
  330.     long     PRIM_type;    /* always T_OK_ACK   */
  331.     long    CORRECT_prim;    /* correct primitive */
  332. };
  333.  
  334. /* unitdata indication */
  335.  
  336. struct T_unitdata_ind {
  337.     long    PRIM_type;    /* always T_UNITDATA_IND  */
  338.     long    SRC_length;    /* source addr length     */
  339.     long    SRC_offset;    /* source addr offset     */
  340.     long    OPT_length;    /* options length         */
  341.     long    OPT_offset;    /* options offset         */
  342. };
  343.  
  344. /* unitdata error indication */
  345.  
  346. struct T_uderror_ind {
  347.     long    PRIM_type;    /* always T_UDERROR_IND   */
  348.     long    DEST_length;    /* dest addr length       */
  349.     long    DEST_offset;    /* dest addr offset       */
  350.     long    OPT_length;    /* options length         */
  351.     long    OPT_offset;    /* options offset         */
  352.     long    ERROR_type;    /* error type              */
  353. };
  354.  
  355. /* manage options ack */
  356.  
  357. struct T_optmgmt_ack {
  358.     long    PRIM_type;    /* always T_OPTMGMT_ACK   */
  359.     long    OPT_length;    /* options length         */
  360.     long    OPT_offset;    /* options offset         */
  361.     long    MGMT_flags;    /* managment flags        */
  362. };
  363.  
  364. /* orderly release indication */
  365.  
  366. struct T_ordrel_ind {
  367.     long    PRIM_type;    /* always T_ORDREL_IND */
  368. };
  369.  
  370. /*
  371.  *  get protocol address request
  372.  */
  373. struct T_addr_req {
  374.     long    PRIM_type;    /* always T_ADDR_REQ    */
  375. };
  376.  
  377. /*
  378.  *  get protocol address request  ack
  379.  */
  380. struct T_addr_ack {
  381.     long    PRIM_type;    /* always T_ADDR_ACK    */
  382.     long    LOCADDR_length;    /* length of local addr    */
  383.     long    LOCADDR_offset;    /* offset of local addr    */
  384.     long    REMADDR_length;    /* length of remote addr*/
  385.     long    REMADDR_offset;    /* offset of remote addr*/
  386. };
  387.  
  388. /*
  389.  * extended connect indication (SNI)
  390.  */
  391. struct T_conn_inde {
  392.     long    PRIM_type;    /* always T_CONN_INDE        */
  393.     long    SRC_length;    /* src addr length        */
  394.     long    SRC_offset;    /* src addr offset        */
  395.     long    OPT_length;    /* option length        */
  396.     long    OPT_offset;    /* option offset        */
  397.     long    SEQ_number;    /* sequnce number        */
  398.     long    DEST_length;    /* destination addr length    */
  399.     long    DEST_offset;    /* destination addr offset    */
  400. };
  401.  
  402. /*
  403.  * The following is a union of the primitives
  404.  */
  405. union T_primitives {
  406.     long            type;        /* primitive type     */
  407.     struct T_conn_req    conn_req;    /* connect request    */
  408.     struct T_conn_res    conn_res;    /* connect response   */
  409.     struct T_discon_req    discon_req;    /* disconnect request */
  410.     struct T_data_req    data_req;    /* data request       */
  411.     struct T_exdata_req    exdata_req;    /* expedited data req */
  412.     struct T_info_req    info_req;    /* information req    */
  413.     struct T_bind_req    bind_req;    /* bind request       */
  414.     struct T_unbind_req    unbind_req;    /* unbind request     */
  415.     struct T_unitdata_req    unitdata_req;    /* unitdata requset   */
  416.     struct T_optmgmt_req    optmgmt_req;    /* manage opt req     */
  417.     struct T_ordrel_req    ordrel_req;    /* orderly rel req    */
  418.     struct T_conn_ind    conn_ind;    /* connect indication */
  419.     struct T_conn_con    conn_con;    /* connect corfirm    */
  420.     struct T_discon_ind    discon_ind;    /* discon indication  */
  421.     struct T_data_ind    data_ind;    /* data indication    */
  422.     struct T_exdata_ind    exdata_ind;    /* expedited data ind */
  423.     struct T_info_ack    info_ack;    /* info ack          */
  424.     struct T_bind_ack    bind_ack;    /* bind ack          */
  425.     struct T_error_ack    error_ack;    /* error ack          */
  426.     struct T_ok_ack        ok_ack;        /* ok ack          */
  427.     struct T_unitdata_ind    unitdata_ind;    /* unitdata ind       */
  428.     struct T_uderror_ind    uderror_ind;    /* unitdata error ind */
  429.     struct T_optmgmt_ack    optmgmt_ack;    /* manage opt ack     */
  430.     struct T_ordrel_ind    ordrel_ind;    /* orderly rel ind    */
  431.     struct T_addr_req    addr_req;    /* address req          */
  432.     struct T_addr_ack    addr_ack;    /* address response   */
  433.     struct T_conn_inde    conn_inde;    /* ext conn ind (SNI) */
  434. };
  435.  
  436. #if defined(_KERNEL) || defined(_KMEMUSER)
  437. /*
  438.  * For kernel internal use only.
  439.  * These are not "officially" sanctioned manifest constants.
  440.  */
  441.  
  442. /*
  443.  * Definitions for return values less than zero for the T_info_ack fields
  444.  * TSDU_size, ETSDU_size, CDATA_size, DDATA_size and ADDR_size.
  445.  */
  446. #define TP_UNLIMITED    -1    /* No maximum limit imposed on value */
  447. #define TP_NOTSUPPORTED    -2    /* Capability not supported by transport */
  448.  
  449. /*
  450.  * Definitions for return values less than zero for the T_info_ack field
  451.  * OPT_size, which has different semantics from those immediately above.
  452.  */
  453. #define TP_READONLY    -2    /* Options are read-only */
  454. #define TP_NOOPTIONS    -3    /* Transport does not support options */
  455. #endif
  456.  
  457. #if defined(__cplusplus)
  458.     }
  459. #endif
  460.  
  461. #endif /* _NET_TIHDR_H */
  462.