home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / sys / netiso / tp_param.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-06-27  |  11.2 KB  |  370 lines

  1. /*-
  2.  * Copyright (c) 1991 The Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *    This product includes software developed by the University of
  16.  *    California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  *
  33.  *    @(#)tp_param.h    7.8 (Berkeley) 6/27/91
  34.  */
  35.  
  36. /***********************************************************
  37.         Copyright IBM Corporation 1987
  38.  
  39.                       All Rights Reserved
  40.  
  41. Permission to use, copy, modify, and distribute this software and its 
  42. documentation for any purpose and without fee is hereby granted, 
  43. provided that the above copyright notice appear in all copies and that
  44. both that copyright notice and this permission notice appear in 
  45. supporting documentation, and that the name of IBM not be
  46. used in advertising or publicity pertaining to distribution of the
  47. software without specific, written prior permission.  
  48.  
  49. IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  50. ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
  51. IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
  52. ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  53. WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  54. ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  55. SOFTWARE.
  56.  
  57. ******************************************************************/
  58.  
  59. /*
  60.  * ARGO Project, Computer Sciences Dept., University of Wisconsin - Madison
  61.  */
  62. /* 
  63.  * ARGO TP
  64.  *
  65.  * $Header: tp_param.h,v 5.3 88/11/18 17:28:18 nhall Exp $
  66.  * $Source: /usr/argo/sys/netiso/RCS/tp_param.h,v $
  67.  *
  68.  */
  69.  
  70. #ifndef __TP_PARAM__
  71. #define __TP_PARAM__
  72.  
  73.  
  74. /******************************************************
  75.  * compile time parameters that can be changed
  76.  *****************************************************/
  77.  
  78. #define     TP_CLASSES_IMPLEMENTED 0x11 /* zero and 4 */
  79.  
  80. #define        TP_DECBIT_CLEAR_COUNT    3
  81.  
  82. /*#define     N_TPREF                100 */
  83. #ifdef KERNEL
  84. extern int N_TPREF;
  85. #endif
  86.  
  87. #define     TP_SOCKBUFSIZE        ((u_long)4096)
  88. #define     TP0_SOCKBUFSIZE        ((u_long)512)
  89. #define        MAX_TSAP_SEL_LEN    64
  90.  
  91. /* maximum tpdu size we'll accept: */
  92. #define     TP_TPDUSIZE            0xc        /* 4096 octets for classes 1-4*/
  93. #define     TP0_TPDUSIZE        0xb        /* 2048 octets for class 0 */
  94. #define     TP_DFL_TPDUSIZE        0x7        /* 128 octets default */
  95.     /* NOTE: don't ever negotiate 8192 because could get 
  96.      * wraparound in checksumming
  97.      * (No mtu is likely to be larger than 4K anyway...)
  98.      */
  99. #define        TP_NRETRANS            5 /* was 1; cray uses 6 */
  100. #define        TP_MAXPORT            0xefff
  101.  
  102. #define        TP_RTT_NUM            0x7
  103. /* ALPHA: to be used in the context: gain= 1/(2**alpha), or 
  104.  * put another way, gaintimes(x) (x)>>alpha (forgetting the case alpha==0) 
  105.  */
  106. #define     TP_RTT_ALPHA        3 
  107. #define     TP_RTV_ALPHA        2
  108.  
  109. /*
  110.  * not sure how to treat data on disconnect 
  111.  */
  112. #define     T_CONN_DATA            0x1
  113. #define     T_DISCONNECT        0x2
  114. #define     T_DISC_DATA            0x4
  115. #define     T_XDATA                0x8
  116.  
  117. #define ISO_CLNS     0
  118. #define IN_CLNS          1
  119. #define ISO_CONS     2
  120. #define ISO_COSNS     3
  121. #define TP_MAX_NETSERVICES 3
  122.  
  123. /* Indices into tp stats ackreason[i] */
  124. #define _ACK_DONT_ 0
  125. #define _ACK_STRAT_EACH_ 0x1
  126. #define _ACK_STRAT_FULLWIN_ 0x2
  127. #define _ACK_DUP_ 0x3
  128. #define _ACK_EOT_ 0x4
  129. #define _ACK_REORDER_ 0x5
  130. #define _ACK_USRRCV_ 0x6
  131. #define _ACK_FCC_ 0x7
  132. #define _ACK_NUM_REASONS_ 0x8
  133.  
  134. /* masks for use in tp_stash() */
  135. #define ACK_DONT             0
  136. #define ACK_STRAT_EACH        (1<< _ACK_STRAT_EACH_)
  137. #define ACK_STRAT_FULLWIN    (1<< _ACK_STRAT_FULLWIN_)
  138. #define ACK_DUP             (1<< _ACK_DUP_)
  139. #define ACK_EOT                (1<< _ACK_EOT_)
  140. #define ACK_REORDER            (1<< _ACK_REORDER_)
  141.  
  142. /******************************************************
  143.  * constants used in the protocol 
  144.  *****************************************************/
  145.  
  146. #define        TP_VERSION             0x1
  147.  
  148. #define     TP_MAX_HEADER_LEN    256
  149.  
  150. #define     TP_MIN_TPDUSIZE        0x7        /* 128 octets */
  151. #define     TP_MAX_TPDUSIZE        0xd        /* 8192 octets */
  152.  
  153. #define        TP_MAX_XPD_DATA        0x10    /* 16 octets */
  154. #define        TP_MAX_CC_DATA        0x20    /* 32 octets */
  155. #define        TP_MAX_CR_DATA        TP_MAX_CC_DATA
  156. #define        TP_MAX_DR_DATA        0x40    /* 64 octets */
  157.  
  158. #define        TP_XTD_FMT_BIT     0x80000000
  159. #define        TP_XTD_FMT_MASK    0x7fffffff
  160. #define        TP_NML_FMT_BIT     0x80
  161. #define        TP_NML_FMT_MASK    0x7f
  162.  
  163. /*  
  164.  * values for the tpdu_type field, 2nd byte in a tpdu 
  165.  */
  166.  
  167. #define TP_MIN_TPDUTYPE 0x1
  168.  
  169. #define XPD_TPDU_type    0x1
  170. #define XAK_TPDU_type    0x2
  171. #define GR_TPDU_type    0x3    
  172. #define AK_TPDU_type    0x6
  173. #define ER_TPDU_type    0x7
  174. #define DR_TPDU_type    0x8
  175. #define DC_TPDU_type    0xc
  176. #define CC_TPDU_type    0xd
  177. #define CR_TPDU_type    0xe
  178. #define DT_TPDU_type    0xf
  179.  
  180. #define TP_MAX_TPDUTYPE 0xf
  181.  
  182. /*
  183.  * identifiers for the variable-length options in tpdus 
  184.  */
  185.  
  186. #define        TPP_acktime            0x85
  187. #define        TPP_residER            0x86
  188. #define        TPP_priority        0x87
  189. #define        TPP_transdelay        0x88
  190. #define        TPP_throughput        0x89
  191. #define        TPP_subseq            0x8a
  192. #define        TPP_flow_cntl_conf    0x8c    /* not implemented */
  193. #define        TPP_addl_info        0xe0
  194. #define        TPP_tpdu_size        0xc0
  195. #define        TPP_calling_sufx    0xc1
  196. #define        TPP_invalid_tpdu    0xc1    /* the bozos used a value twice */
  197. #define        TPP_called_sufx        0xc2
  198. #define        TPP_checksum        0xc3
  199. #define        TPP_vers            0xc4
  200. #define        TPP_security        0xc5
  201. #define        TPP_addl_opt        0xc6
  202. #define        TPP_alt_class        0xc7
  203. #define        TPP_perf_meas        0xc8    /* local item : perf meas on, svp */
  204.  
  205. /******************************************************
  206.  * Some fundamental data types
  207.  *****************************************************/
  208. #ifndef        TRUE
  209. #define        TRUE                1
  210. #endif        TRUE
  211.  
  212. #ifndef        FALSE
  213. #define        FALSE                0
  214. #endif        FALSE
  215.  
  216. #define        TP_LOCAL                22
  217. #define        TP_FOREIGN                33
  218.  
  219. #ifndef     EOK
  220. #define     EOK     0
  221. #endif      EOK
  222.  
  223. #define     TP_CLASS_0     (1<<0)
  224. #define     TP_CLASS_1     (1<<1)
  225. #define     TP_CLASS_2     (1<<2)
  226. #define     TP_CLASS_3     (1<<3)
  227. #define     TP_CLASS_4     (1<<4)
  228.  
  229. #define     TP_FORCE     0x1
  230. #define     TP_STRICT     0x2
  231.  
  232. #ifndef     MNULL
  233. #define     MNULL                (struct mbuf *)0
  234. #endif     MNULL
  235.     /* if ../sys/mbuf.h gets MT_types up to 0x40, these will 
  236.      * have to be changed:
  237.      */
  238. #define     MT_XPD                 0x44    
  239. #define     MT_EOT                 0x40
  240.  
  241. #define        TP_ENOREF            0x80000000
  242.  
  243. typedef     unsigned int    SeqNum;
  244. typedef        unsigned short    RefNum;
  245. typedef        int                ProtoHook;
  246.  
  247.  
  248. /******************************************************
  249.  * Some fundamental constants
  250.  *****************************************************/
  251.  
  252. #define TP_MIN_WIN    2048
  253. #define TP_MAX_WIN 16384
  254. #define TP_MAX_WIN_UNPRIV 8192
  255.  
  256. /******************************************************
  257.  * Macro used all over, for driver
  258.  *****************************************************/
  259.  
  260. #define  DoEvent(x) \
  261.   ((E.ev_number=(x)),(tp_driver(tpcb,&E)))
  262.  
  263. /******************************************************
  264.  * Some macros used all over, for timestamping
  265.  *****************************************************/
  266.  
  267. #define GET_CUR_TIME(tvalp) ((*tvalp) = time)
  268.  
  269. #define GET_TIME_SINCE(oldtvalp, diffp) {\
  270.     (diffp)->tv_sec = time.tv_sec - (oldtvalp)->tv_sec;\
  271.     (diffp)->tv_usec = time.tv_usec - (oldtvalp)->tv_usec;\
  272.     if( (diffp)->tv_usec <0 ) {\
  273.         (diffp)->tv_sec --;\
  274.         (diffp)->tv_usec = 1000000 - (diffp)->tv_usec;\
  275.     }\
  276. }
  277.             
  278. /******************************************************
  279.  * Some macros used for address families
  280.  *****************************************************/
  281.  
  282. #define satosiso(ADDR) ((struct sockaddr_iso *)(ADDR))
  283. #define satosin(ADDR) ((struct sockaddr_in *)(ADDR))
  284.  
  285. /******************************************************
  286.  * Macro used for changing types of mbufs
  287.  *****************************************************/
  288.  
  289. #define CHANGE_MTYPE(m, TYPE)\
  290.     if((m)->m_type != TYPE) { \
  291.         mbstat.m_mtypes[(m)->m_type]--; mbstat.m_mtypes[TYPE]++; \
  292.         (m)->m_type = TYPE; \
  293.     }
  294.  
  295. /******************************************************
  296.  * Macros used for adding options to a tpdu header and for
  297.  * parsing the headers.
  298.  * Options are variable-length and must be bcopy-d because on the
  299.  * RT your assignments must be N-word aligned for objects of length
  300.  * N.  Such a drag.
  301.  *****************************************************/
  302.  
  303. struct tp_vbp {
  304.     u_char    tpv_code;
  305.     char     tpv_len;
  306.     char    tpv_val;
  307. };
  308. #define vbptr(x) ((struct tp_vbp *)(x))
  309. #define vbval(x,type) (*((type *)&(((struct tp_vbp *)(x))->tpv_val)))
  310. #define vbcode(x) (vbptr(x)->tpv_code)
  311. #define vblen(x) (vbptr(x)->tpv_len)
  312.  
  313. #define vb_putval(dst,type,src)\
  314.     bcopy((caddr_t)&(src),(caddr_t)&(((struct tp_vbp *)(dst))->tpv_val),\
  315.     sizeof(type))
  316.  
  317. #define vb_getval(src,type,dst)\
  318. bcopy((caddr_t)&(((struct tp_vbp *)(src))->tpv_val),(caddr_t)&(dst),sizeof(type))
  319.  
  320. #define ADDOPTION(type, DU, len, src)\
  321. {    register caddr_t P;\
  322.     P = (caddr_t)(DU) + (int)((DU)->tpdu_li);\
  323.     vbptr(P)->tpv_code = type;\
  324.     vbptr(P)->tpv_len = len;\
  325.     bcopy((caddr_t)&src, (caddr_t)&(vbptr(P)->tpv_val), (unsigned)len);\
  326.     DU->tpdu_li += len+2;/* 1 for code, 1 for length */\
  327. }
  328. /******************************************************
  329.  * Macro for the local credit:
  330.  * uses max transmission unit for the ll
  331.  * (as modified by the max TPDU size negotiated) 
  332.  *****************************************************/
  333.  
  334. #if defined(ARGO_DEBUG)&&!defined(LOCAL_CREDIT_EXPAND)
  335. #define LOCAL_CREDIT(tpcb) tp_local_credit(tpcb)
  336. #else
  337. #define LOCAL_CREDIT( tpcb ) {\
  338.     register struct sockbuf *xxsb = &((tpcb)->tp_sock->so_rcv);\
  339.     register int xxi = ((xxsb)->sb_hiwat-(xxsb)->sb_cc);\
  340.     register int maxcredit = ((tpcb)->tp_xtd_format?0xffff:0xf);\
  341.     xxi = (xxi<0) ? 0 : ((xxi)>>(tpcb)->tp_tpdusize);\
  342.     xxi = MIN(xxi, maxcredit); \
  343.     if (!(tpcb->tp_cebit_off)) { \
  344.         (tpcb)->tp_lcredit = ROUND((tpcb)->tp_win_recv); \
  345.         if (xxi < (tpcb)->tp_lcredit) { \
  346.             (tpcb)->tp_lcredit = xxi; \
  347.         } \
  348.     } \
  349.     else { \
  350.         (tpcb)->tp_lcredit = xxi; \
  351.     } \
  352. }
  353. #endif ARGO_DEBUG
  354.  
  355. #ifdef KERNEL
  356.  
  357. #ifndef  tp_NSTATES 
  358.  
  359. #include "tp_states.h"
  360. #include "tp_events.h"
  361. #if defined(__STDC__) || defined(__cplusplus)
  362. #undef ATTR
  363. #define ATTR(X) ev_union.EV_ ## X
  364. #endif /* defined(__STDC__) || defined(__cplusplus) */
  365.  
  366. #endif  tp_NSTATES 
  367. #endif KERNEL
  368.  
  369. #endif __TP_PARAM__
  370.