home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / nsu / root / usr / include / sys / ticotsord.h / ticotsord
Text File  |  1998-08-19  |  10KB  |  319 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_TICOTSORD_H    /* wrapper symbol for kernel use */
  12. #define _NET_LOOPBACK_TICOTSORD_H    /* subject to change without notice */
  13.  
  14. #ident    "@(#)ticotsord.h    1.2"
  15. #ident    "$Header: $"
  16.  
  17. #if defined(__cplusplus)
  18. extern "C" {
  19. #endif
  20.  
  21. /*
  22.  *    ticotsord 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. /*
  39.  * The following control message types are handled by the ticots module.
  40.  */
  41. #define    TCOOMOD            ('T'<<16 | 'C'<<8)
  42. #define    TCOO_CONNINDQUERY    (TCOOMOD|201)
  43. #define    TCOO_CONNINDACK        (TCOOMOD|202)
  44. #define    TCOO_CONNINDNAK        (TCOOMOD|203)
  45.  
  46. /* basic constant - not ifdef KERNEL for ABI */
  47. #define TCOO_DEFAULTADDRSZ    4            /* default addr sz */
  48.  
  49. /*
  50.  *    disconnect reason codes     (see t_rcvdis())
  51.  *    These need to be interpretable as errno values, as in ticots.h.
  52.  */
  53. #define TCOO_NOPEER         ECONNREFUSED    /* no listener on dest addr */
  54. #define TCOO_PEERNOROOMONQ    ECONNREFUSED    /* peer has no room on incoming queue */
  55. #define TCOO_PEERBADSTATE    ECONNREFUSED    /* peer in wrong state */
  56. #define TCOO_PEERINITIATED     ECONNRESET    /* peer-initiated disconnect */
  57. #define TCOO_PROVIDERINITIATED     ECONNABORTED    /* provider-initiated disconnect */
  58.  
  59. /*
  60.  *    options (flattened linked-list of flattened C-structures)
  61.  */
  62. #define TCOO_OPT_NOHDR        0        /* invalid nexthdr offset (end of list) */
  63.  
  64. #define TCOO_OPT_NOOP        1        /* no-op opt -- default */
  65. #define TCOO_OPT_SETID        2        /* set ident */
  66. #define TCOO_OPT_GETID        3        /* get ident */
  67. #define TCOO_OPT_UID        4        /* uid info */
  68. #define TCOO_OPT_GID        5        /* gid info */
  69. #define TCOO_OPT_RUID        6        /* ruid info */
  70. #define TCOO_OPT_RGID        7        /* rgid info */
  71.  
  72. #define TCOO_IDFLG_UID        0x1        /* uid flag */
  73. #define TCOO_IDFLG_GID        0x2        /* gid flag */
  74. #define TCOO_IDFLG_RUID        0x4        /* ruid flag */
  75. #define TCOO_IDFLG_RGID        0x8        /* rgid flag */
  76.  
  77. /*
  78.  * control message structure introduced for handling nonblocking AF_UNIX
  79.  * connect requests
  80.  */
  81. struct tcoo_control {
  82.     unsigned long    type;
  83. };
  84.  
  85. /* header for maintaining list of opts; one for each opt in list;
  86.    offsets are measured from beginning of options buffer;
  87.    headers must occur in increasing order, to avoid loops */
  88. struct tcoo_opt_hdr {
  89.     long            hdr_thisopt_off;    /* offset to current opt */
  90.     long            hdr_nexthdr_off;    /* offset to next hdr */
  91. };
  92.  
  93. /* no-op opt -- the default */
  94. struct tcoo_opt_noop {
  95.     long            noop_type;    /* TCOO_OPT_NOOP; must be first */
  96. };
  97.  
  98. /* set ident opt -- subsequent t_rcvudata()'s
  99.    (i.e., T_UNITDATA_IND) will contain peer's ident info */
  100. struct tcoo_opt_setid {
  101.     long            setid_type;    /* TCOO_OPT_SETID; must be first */
  102.     long            setid_flg;    /* which id opts to set */
  103. };
  104.  
  105. /* get ident opt */
  106. struct tcoo_opt_getid {
  107.     long            getid_type;    /* TCOO_OPT_GETID; must be first */
  108.     long            getid_flg;    /* which id opts are set */
  109. };
  110.  
  111. /* uid info opt */
  112. struct tcoo_opt_uid {
  113.     long            uid_type;    /* TCOO_OPT_UID; must be first */
  114.     uid_t            uid_val;    /* effective user id */
  115. };
  116.  
  117. /* gid info opt */
  118. struct tcoo_opt_gid {
  119.     long            gid_type;    /* TCOO_OPT_GID; must be first */
  120.     gid_t            gid_val;    /* effective group id */
  121. };
  122.  
  123. /* ruid info opt */
  124. struct tcoo_opt_ruid {
  125.     long            ruid_type;    /* TCOO_OPT_RUID; must be first */
  126.     uid_t            ruid_val;    /* real user id */
  127. };
  128.  
  129. /* rgid info opt */
  130. struct tcoo_opt_rgid {
  131.     long            rgid_type;    /* TCOO_OPT_RGID; must be first */
  132.     gid_t            rgid_val;    /* real group id */
  133. };
  134.  
  135. /* union of all the opts */
  136. union tcoo_opt {
  137.     long            opt_type;    /* opt type; must be first */
  138.     struct tcoo_opt_noop    opt_noop;    /* noop opt */
  139.     struct tcoo_opt_setid    opt_setid;    /* set ident opt */
  140.     struct tcoo_opt_getid    opt_getid;    /* get ident opt */
  141.     struct tcoo_opt_uid    opt_uid;    /* uid info opt */
  142.     struct tcoo_opt_gid    opt_gid;    /* gid info opt */
  143.     struct tcoo_opt_ruid    opt_ruid;    /* ruid info opt */
  144.     struct tcoo_opt_rgid    opt_rgid;    /* rgid info opt */
  145. };
  146.  
  147. /******************************************************************************/
  148.  
  149. #ifdef _KERNEL
  150.  
  151. /*
  152.  *    transport endpoint structure
  153.  */
  154. struct tcoo_endpt {
  155.     lock_t            *te_lock;    /* lock for all con oriented 
  156.                          * fields */
  157.     event_t            *te_event;    /* event */
  158.     int             te_bid;    /* bufcall id */
  159.     struct tcoo_endpt    *te_folist;    /* forw ptr, list of open
  160.                          * endpts */
  161.     struct tcoo_endpt    *te_bolist;    /* back ptr, list of open 
  162.                          * endpts */
  163.     struct tcoo_endpt    *te_frqlist;    /* forw ptr, te_rq list */
  164.     struct tcoo_endpt    *te_brqlist;    /* back ptr, te_rq list */
  165.     struct tcoo_endpt    *te_fblist;    /* forw ptr, list of endpts
  166.                          * bound to addr */
  167.     struct tcoo_endpt    *te_bblist;    /* back ptr, list of endpts
  168.                          * bound to addr */
  169.     queue_t            *te_rq;        /* stream read queue */
  170.     struct tcoo_addr        *te_addr;    /* addr bound to this endpt */
  171.     minor_t            te_min;        /* minor number */
  172.     unsigned short        te_rqhash;    /* te_rq hash bucket */
  173.     char             te_state;    /* state of interface */
  174.     char            te_flg;        /* internal flags */
  175.     long            te_idflg;    /* ident flags */
  176.     unsigned char        te_ref;        /* reference count on queue */
  177.     unsigned char        te_qlen;    /* max incoming connect reqs
  178.                          * pending */
  179.     unsigned char        te_nicon;    /* num of incoming connect
  180.                          * reqs pending */
  181.  
  182. #define TCOO_MAXQLEN        8        /* must be <= (1 << 
  183.                          * (NBBY*sizeof(te_nicon))) */
  184.  
  185.     struct tcoo_endpt    *te_icon[TCOO_MAXQLEN];    /* incoming connect
  186.                          * requests pending */
  187.     struct tcoo_endpt    *te_ocon;    /* outgoing connect request
  188.                          * pending */
  189.     struct tcoo_endpt    *te_con;    /* connected endpt */
  190.     uid_t            te_uid;        /* uid - No protection needed */
  191.     gid_t            te_gid;        /* gid - No protection needed */
  192.     uid_t            te_ruid;    /* ruid- No protection needed */
  193.     gid_t            te_rgid;    /* rgid- No protection needed */
  194.     char             te_pstate;    /* prior state of interface */
  195. };
  196. typedef struct tcoo_endpt    tcoo_endpt_t;
  197.  
  198. /*
  199.  *    transport addr structure
  200.  */
  201. struct tcoo_addr {
  202.     struct tcoo_addr        *ta_falist;    /* forw ptr, list of bound addrs */
  203.     struct tcoo_addr        *ta_balist;    /* back ptr, list of bound addrs */
  204.     struct tcoo_endpt    *ta_hblist;    /* head ptr, list of endpts bound to this addr */
  205.     struct tcoo_endpt    *ta_tblist;    /* tail ptr, list of endpts bound to this addr */
  206.     unsigned short         ta_ahash;    /* addr hash bucket */
  207.     long            ta_alen;    /* length of abuf */
  208.     char            *ta_abuf;    /* the addr itself */
  209. };
  210. typedef struct tcoo_addr        tcoo_addr_t;
  211.  
  212. /*
  213.  *    registered id
  214.  */
  215. #ifdef TICOTS
  216. #define TCOO_ID            10002
  217. #endif
  218. #ifdef TICOTSORD
  219. #define    TCOO_ID            10003
  220. #endif
  221.  
  222. /*
  223.  *    basic constants
  224.  */
  225. #ifdef TICOTS
  226. #define TCOO_SERVTYPE        T_COTS
  227. #endif
  228. #ifdef TICOTSORD
  229. #define TCOO_SERVTYPE        T_COTS_ORD
  230. #endif
  231. #define TCOO_TIDUSZ        (4*1024)        /* max packet size */
  232. /* can't make the following 4 sizes -1 (unlimited), because of bug in TLI/TPI 
  233.  * specs: unlimited data can be sent but cannot received in a well-specified 
  234.  * way (receiver doesn't know how big to make buffer, and T_MORE flag can't 
  235.  * be used)
  236.  */
  237. #define TCOO_ADDRSZ        (256-(sizeof(struct T_bind_req)))
  238. #define TCOO_OPTSZ        (TCOO_TIDUSZ-(sizeof(struct T_optmgmt_req)))
  239. #define TCOO_CDATASZ        (TCOO_TIDUSZ-(sizeof(struct T_conn_ind)))
  240. #define TCOO_DDATASZ        (TCOO_TIDUSZ-(sizeof(struct T_discon_ind)))
  241. #define TCOO_TSDUSZ        -1            /* unlimited */
  242. #define TCOO_ETSDUSZ        -1            /* unlimited */
  243. #define TCOO_MINPSZ        0
  244. #define TCOO_MAXPSZ        TCOO_TIDUSZ
  245. #define TCOO_LOWAT        (TCOO_TIDUSZ/4)
  246. #define TCOO_HIWAT        (4*TCOO_TIDUSZ)
  247.  
  248. /*
  249.  *    te_flg
  250.  */
  251. #define TCOO_ZOMBIE        0x1        /* fatal error on endpoint */
  252. #define TCOO_DISCONNECTED    0x2        /* endpoint is disconnected */
  253. #define    TCOO_CONNINDQUEUED    0x4        /* most recent T_CONN_REQ caused
  254.                            T_CONN_IND to be queued */
  255.  
  256.  
  257. /*
  258.  *    pass/fail indicators
  259.  */
  260. #define TCOO_REALOPT        0x01            /* for tcoo_ckopt() */
  261. #define TCOO_NOOPOPT        0x02            /* for tcoo_ckopt() */
  262. #define TCOO_BADFORMAT        0x04            /* for tcoo_ckopt() */
  263. #define TCOO_BADTYPE        0x08            /* for tcoo_ckopt() */
  264. #define TCOO_BADVALUE        0x10            /* for tcoo_ckopt() */
  265. #define BADSEQNUM        ((long)(-1))        /* should be standardized */
  266.  
  267. /*
  268.  *    internal defines
  269.  */
  270. #define TCOO_BIND        1
  271. #define TCOO_CONN        2
  272. #define TCOO_OPEN        3
  273. #define TCOO_RQ            4
  274. #define TCOO_IDFLG_ALL        (TCOO_IDFLG_UID | TCOO_IDFLG_GID | TCOO_IDFLG_RUID | TCOO_IDFLG_RGID)
  275. #define TCOO_MHASH        5
  276. #define TCOO_NMHASH        (1 << TCOO_MHASH)    /* num of hash buckets in open endpt table */
  277. #define TCOO_MMASK        (TCOO_NMHASH - 1)
  278. #define TCOO_RQHASH        5            /* must be <= NBBY*sizeof(te_rqhash) */
  279. #define TCOO_NRQHASH        (1 << TCOO_RQHASH)    /* num of hash buckets in te_rq table */
  280. #define TCOO_RQMASK        (TCOO_NRQHASH - 1)
  281. /* following magic number and shift factor for fibonacci hash function */
  282. #define TCOO_RQMAGIC        0x9ce14b36
  283. #define TCOO_RQSHIFT        (NBBY*sizeof(int) - TCOO_RQHASH)
  284. #define TCOO_AHASH        5            /* must be <= NBBY*sizeof(ta_ahash) */
  285. #define TCOO_NAHASH        (1 << TCOO_AHASH)    /* num of hash buckets in bound addr table */
  286. #define TCOO_AMASK        (TCOO_NAHASH - 1)
  287. /*
  288.  *    some useful macros
  289.  */
  290. #define tcoo_min(TE)        ((TE)->te_min)
  291. #define tcoo_mkmhash(TE)        ((unsigned)(tcoo_min(TE)) & TCOO_MMASK)
  292. #define tcoo_mhash(TE)        tcoo_mkmhash(TE)
  293. #define tcoo_mkrqhash(TE)    (((((unsigned)((TE)->te_rq))*TCOO_RQMAGIC) >> TCOO_RQSHIFT) & TCOO_RQMASK)
  294. #define tcoo_rqhash(TE)        ((unsigned)(TE)->te_rqhash)
  295. #define tcoo_alen(TA)        ((TA)->ta_alen)
  296. #define tcoo_abuf(TA)        ((TA)->ta_abuf)
  297. #define tcoo_ahash(TA)        ((unsigned)(TA)->ta_ahash)
  298. #define tcoo_mkahash(TA)        ((unsigned)(tcoo_sumbytes(tcoo_abuf(TA),tcoo_alen(TA)) & TCOO_AMASK))
  299. #define tcoo_eqabuf(TA,TB)    ((tcoo_alen(TA) == tcoo_alen(TB)) \
  300.                  && (bcmp(tcoo_abuf(TA),tcoo_abuf(TB),tcoo_alen(TA)) == 0))
  301.  
  302. /*
  303.  *    STRLOG tracing levels:
  304.  *
  305.  *    0 = urgent
  306.  *    1 = fatal
  307.  *    2 = errack
  308.  *    3 = interesting stuff
  309.  *    4 = chit-chat
  310.  */
  311.  
  312. #endif /* _KERNEL */
  313.  
  314. #if defined(__cplusplus)
  315.     }
  316. #endif
  317.  
  318. #endif /* _NET_LOOPBACK_TICOTSORD_H */
  319.