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