home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / nsu / root / usr / include / sys / ticlts.h / ticlts
Text File  |  1998-08-19  |  8KB  |  272 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_LOOPBACK_TICLTS_H    /* wrapper symbol for kernel use */
  12. #define _NET_LOOPBACK_TICLTS_H    /* subject to change without notice */
  13.  
  14. #ident    "@(#)ticlts.h    1.2"
  15. #ident    "$Header: $"
  16.  
  17. #if defined(__cplusplus)
  18. extern "C" {
  19. #endif
  20.  
  21. /*
  22.  *    ticlts provider-dependent info
  23.  *    (provider-independent applications must not include this header file)
  24.  */
  25.  
  26. #ifdef _KERNEL_HEADERS
  27.  
  28. #include <util/types.h>    /* REQUIRED */
  29. #include <io/stream.h>    /* REQUIRED */
  30.  
  31. #elif defined(_KERNEL) || defined(_KMEMUSER)
  32.  
  33. #include <sys/types.h>    /* REQUIRED */
  34. #include <sys/stream.h>    /* REQUIRED */
  35.  
  36. #endif /* _KERNEL_HEADERS */
  37.  
  38. /* basic constant - not ifdef KERNEL for ABI */
  39. #define TCL_DEFAULTADDRSZ    4            /* default addr sz */
  40.  
  41. /*
  42.  *    unitdata error codes (see t_rcvuderr())
  43.  */
  44. #define TCL_BADADDR        1        /* bad addr specification */
  45. #define TCL_BADOPT        2        /* bad option specification */
  46. #define TCL_NOPEER        3        /* dest addr is unbound */
  47. #define TCL_PEERBADSTATE    4        /* peer in wrong state */
  48.  
  49. /*
  50.  *    options (flattened linked-list of flattened C-structures)
  51.  */
  52. #define TCL_OPT_NOHDR        0        /* invalid nexthdr offset (end of list) */
  53.  
  54. #define TCL_OPT_NOOP        1        /* no-op opt -- default */
  55. #define TCL_OPT_SETID        2        /* set ident */
  56. #define TCL_OPT_GETID        3        /* get ident */
  57. #define TCL_OPT_UID        4        /* uid info */
  58. #define TCL_OPT_GID        5        /* gid info */
  59. #define TCL_OPT_RUID        6        /* ruid info */
  60. #define TCL_OPT_RGID        7        /* rgid info */
  61.  
  62. #define TCL_IDFLG_UID        0x1        /* uid flag */
  63. #define TCL_IDFLG_GID        0x2        /* gid flag */
  64. #define TCL_IDFLG_RUID        0x4        /* ruid flag */
  65. #define TCL_IDFLG_RGID        0x8        /* rgid flag */
  66.  
  67. /* header for maintaining list of opts; one for each opt in list;
  68.    offsets are measured from beginning of options buffer;
  69.    headers must occur in increasing order, to avoid loops */
  70. struct tcl_opt_hdr {
  71.     long            hdr_thisopt_off;    /* offset to current opt */
  72.     long            hdr_nexthdr_off;    /* offset to next hdr */
  73. };
  74.  
  75. /* no-op opt -- the default */
  76. struct tcl_opt_noop {
  77.     long            noop_type;    /* TCL_OPT_NOOP; must be first */
  78. };
  79.  
  80. /* set ident opt -- subsequent t_rcvudata()'s
  81.    (i.e., T_UNITDATA_IND) will contain peer's ident info */
  82. struct tcl_opt_setid {
  83.     long            setid_type;    /* TCL_OPT_SETID; must be first */
  84.     long            setid_flg;    /* which id opts to set */
  85. };
  86.  
  87. /* get ident opt */
  88. struct tcl_opt_getid {
  89.     long            getid_type;    /* TCL_OPT_GETID; must be first */
  90.     long            getid_flg;    /* which id opts are set */
  91. };
  92.  
  93. /* uid info opt */
  94. struct tcl_opt_uid {
  95.     long            uid_type;    /* TCL_OPT_UID; must be first */
  96.     uid_t            uid_val;    /* effective user id */
  97. };
  98.  
  99. /* gid info opt */
  100. struct tcl_opt_gid {
  101.     long            gid_type;    /* TCL_OPT_GID; must be first */
  102.     gid_t            gid_val;    /* effective group id */
  103. };
  104.  
  105. /* ruid info opt */
  106. struct tcl_opt_ruid {
  107.     long            ruid_type;    /* TCL_OPT_RUID; must be first */
  108.     uid_t            ruid_val;    /* real user id */
  109. };
  110.  
  111. /* rgid info opt */
  112. struct tcl_opt_rgid {
  113.     long            rgid_type;    /* TCL_OPT_RGID; must be first */
  114.     gid_t            rgid_val;    /* real group id */
  115. };
  116.  
  117. /* union of all the opts */
  118. union tcl_opt {
  119.     long            opt_type;    /* opt type; must be first */
  120.     struct tcl_opt_noop    opt_noop;    /* noop opt */
  121.     struct tcl_opt_setid    opt_setid;    /* set ident opt */
  122.     struct tcl_opt_getid    opt_getid;    /* get ident opt */
  123.     struct tcl_opt_uid    opt_uid;    /* uid info opt */
  124.     struct tcl_opt_gid    opt_gid;    /* gid info opt */
  125.     struct tcl_opt_ruid    opt_ruid;    /* ruid info opt */
  126.     struct tcl_opt_rgid    opt_rgid;    /* rgid info opt */
  127. };
  128.  
  129. /******************************************************************************/
  130.  
  131. #ifdef _KERNEL
  132.  
  133. /*
  134.  *    transport endpoint structure
  135.  */
  136. struct tcl_endpt {
  137.     lock_t            *te_lock;    /* lock to protect this structure */
  138.     event_t            *te_event;    /* event */
  139.     int             te_bid;    /* bufcall id */
  140.     struct tcl_endpt    *te_linkep;    /* linked endpt for M_PASSFP */
  141.     struct tcl_endpt    *te_folist;    /* forw ptr, list of open endpts */
  142.     struct tcl_endpt    *te_bolist;    /* back ptr, list of open endpts */
  143.     queue_t            *te_rq;    /* stream read queue */
  144.     struct tcl_addr        *te_addr;    /* address bound to this endpt */
  145.     minor_t             te_min;    /* minor number */
  146.     char             te_state;    /* state of interface */
  147.     char             te_flg;    /* internal flags */
  148.     long             te_refcnt;    /* ref # of putnexts intended */
  149.     long             te_idflg;    /* ident flags */
  150.     uid_t             te_uid;    /* uid */
  151.     gid_t             te_gid;    /* gid */
  152.     uid_t             te_ruid;    /* ruid */
  153.     gid_t             te_rgid;    /* rgid */
  154. };
  155. typedef struct tcl_endpt    tcl_endpt_t;
  156.  
  157. /*
  158.  *    transport addr structure
  159.  */
  160. struct tcl_addr {
  161.     struct tcl_addr        *ta_falist;    /* forw ptr, list of bound addrs */
  162.     struct tcl_addr        *ta_balist;    /* back ptr, list of bound addrs */
  163.     struct tcl_endpt    *ta_blist;    /* list (<= 1) of endpts bound to this addr */
  164.     unsigned short         ta_ahash;    /* addr hash bucket */
  165.     long             ta_alen;    /* length of abuf */
  166.     char            *ta_abuf;    /* the addr itself */
  167. };
  168. typedef struct tcl_addr        tcl_addr_t;
  169.  
  170. /* M_CTL types.
  171.  */
  172. #define        TCL_IOCTL    ('T'<<8)
  173. #define        TCL_LINK    (TCL_IOCTL|101)
  174. #define        TCL_UNLINK    (TCL_IOCTL|102)
  175.  
  176. /* Socket link M_CTL structure.
  177.  */
  178. struct tcl_sictl {
  179.     long    type;
  180.     long    ADDR_offset;
  181.     long    ADDR_len;
  182. };
  183.  
  184. /*
  185.  *    registered id
  186.  */
  187. #define TCL_ID            10001
  188.  
  189. /*
  190.  *    basic constants
  191.  */
  192. #define TCL_SERVTYPE        T_CLTS
  193. #define TCL_TIDUSZ        (4*1024)        /* max packet size */
  194. /* can't make the following 2 sizes -1 (unlimited), because of bug in TLI/TPI specs:
  195.    unlimited data can be sent but cannot received in a well-specified way
  196.    (receiver doesn't know how big to make buffer, and T_MORE flag can't be used) */
  197. #define TCL_ADDRSZ        (256-24)        /* 24 = sizeof(struct T_bind_req) + 8
  198.                                   = sizeof(struct T_bind_ack) + 8
  199.                                   = sizeof(struct T_unitdata_req) + 4
  200.                                   = sizeof(struct T_uderror_ind) */
  201. #define TCL_OPTSZ        (TCL_TIDUSZ-24)        /* 24 = sizeof(struct T_optmgmt_req) + 8
  202.                                   = sizeof(struct T_optmgmt_ack) + 8
  203.                                   = sizeof(struct T_unitdata_req) + 4
  204.                                   = sizeof(struct T_uderror_ind) */
  205. #define TCL_CDATASZ        -2            /* connectionless */
  206. #define TCL_DDATASZ        -2            /* connectionless */
  207. #define TCL_TSDUSZ        TCL_TIDUSZ        /* connectionless */
  208. #define TCL_ETSDUSZ        -2            /* connectionless */
  209. #define TCL_MINPSZ        0
  210. #define TCL_MAXPSZ        TCL_TIDUSZ
  211. #define TCL_LOWAT        (TCL_TIDUSZ/4)
  212. #define TCL_HIWAT        (4*TCL_TIDUSZ)
  213.  
  214. /*
  215.  *    te_flg
  216.  */
  217. #define TCL_ZOMBIE        0x1        /* fatal error on endpoint */
  218. #define    TCL_BUSY        0x2        /* Cannot close. Putnext in
  219.                          * progress           */
  220. /*
  221.  *    pass/fail indicators
  222.  */
  223. #define TCL_REALOPT        0x01            /* for tcl_ckopt() */
  224. #define TCL_NOOPOPT        0x02            /* for tcl_ckopt() */
  225. #define TCL_BADFORMAT        0x04            /* for tcl_ckopt() */
  226. #define TCL_BADTYPE        0x08            /* for tcl_ckopt() */
  227. #define TCL_BADVALUE        0x10            /* for tcl_ckopt() */
  228.  
  229. /*
  230.  *    internal defines
  231.  */
  232. #define TCL_BIND        1
  233. #define TCL_DEST        2
  234. #define TCL_IDFLG_ALL        (TCL_IDFLG_UID | TCL_IDFLG_GID | TCL_IDFLG_RUID | TCL_IDFLG_RGID)
  235. #define TCL_MHASH        5
  236. #define TCL_NMHASH        (1 << TCL_MHASH)    /* num of hash buckets in open endpt table */
  237. #define TCL_MMASK        (TCL_NMHASH - 1)
  238. #define TCL_AHASH        5            /* must be <= NBBY*sizeof(tcl_addr.ta_ahash) */
  239. #define TCL_NAHASH        (1 << TCL_AHASH)    /* num of hash buckets in bound addr table */
  240. #define TCL_AMASK        (TCL_NAHASH - 1)
  241.  
  242. /*
  243.  *    some useful macros
  244.  */
  245. #define tcl_min(TE)        ((TE)->te_min)
  246. #define tcl_mkmhash(TE)        ((unsigned)(tcl_min(TE)) & TCL_MMASK)
  247. #define tcl_mhash(TE)        tcl_mkmhash(TE)
  248. #define tcl_alen(TA)        ((TA)->ta_alen)
  249. #define tcl_abuf(TA)        ((TA)->ta_abuf)
  250. #define tcl_mkahash(TA)        ((unsigned)(tcl_sumbytes(tcl_abuf(TA),tcl_alen(TA)) & TCL_AMASK))
  251. #define tcl_ahash(TA)        ((unsigned)(TA)->ta_ahash)
  252. #define tcl_eqabuf(TA,TB)    ((tcl_alen(TA) == tcl_alen(TB)) \
  253.                  && (bcmp(tcl_abuf(TA),tcl_abuf(TB),tcl_alen(TA)) == 0))
  254.  
  255. /*
  256.  *    STRLOG tracing levels:
  257.  *
  258.  *    0 = urgent
  259.  *    1 = fatal
  260.  *    2 = errack, uderr
  261.  *    3 = interesting stuff
  262.  *    4 = chit-chat
  263.  */
  264.  
  265. #endif /* _KERNEL */
  266.  
  267. #if defined(__cplusplus)
  268.     }
  269. #endif
  270.  
  271. #endif /* _NET_LOOPBACK_TICLTS_H */ 
  272.