|
|
1.1 root 1: /*
2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7: * Reserved. This file contains Original Code and/or Modifications of
8: * Original Code as defined in and that are subject to the Apple Public
9: * Source License Version 1.1 (the "License"). You may not use this file
10: * except in compliance with the License. Please obtain a copy of the
11: * License at http://www.apple.com/publicsource and read it before using
12: * this file.
13: *
14: * The Original Code and all software distributed under the License are
15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
19: * License for the specific language governing rights and limitations
20: * under the License.
21: *
22: * @APPLE_LICENSE_HEADER_END@
23: */
24:
25: /*-
26: * Copyright (c) 1991, 1993
27: * The Regents of the University of California. All rights reserved.
28: *
29: * Redistribution and use in source and binary forms, with or without
30: * modification, are permitted provided that the following conditions
31: * are met:
32: * 1. Redistributions of source code must retain the above copyright
33: * notice, this list of conditions and the following disclaimer.
34: * 2. Redistributions in binary form must reproduce the above copyright
35: * notice, this list of conditions and the following disclaimer in the
36: * documentation and/or other materials provided with the distribution.
37: * 3. All advertising materials mentioning features or use of this software
38: * must display the following acknowledgement:
39: * This product includes software developed by the University of
40: * California, Berkeley and its contributors.
41: * 4. Neither the name of the University nor the names of its contributors
42: * may be used to endorse or promote products derived from this software
43: * without specific prior written permission.
44: *
45: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
46: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
47: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
48: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
49: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
50: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
51: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
52: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
53: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
54: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
55: * SUCH DAMAGE.
56: *
57: * @(#)tp_tpdu.h 8.1 (Berkeley) 6/10/93
58: */
59:
60: /***********************************************************
61: Copyright IBM Corporation 1987
62:
63: All Rights Reserved
64:
65: Permission to use, copy, modify, and distribute this software and its
66: documentation for any purpose and without fee is hereby granted,
67: provided that the above copyright notice appear in all copies and that
68: both that copyright notice and this permission notice appear in
69: supporting documentation, and that the name of IBM not be
70: used in advertising or publicity pertaining to distribution of the
71: software without specific, written prior permission.
72:
73: IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
74: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
75: IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
76: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
77: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
78: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
79: SOFTWARE.
80:
81: ******************************************************************/
82:
83: /*
84: * ARGO Project, Computer Sciences Dept., University of Wisconsin - Madison
85: */
86: /*
87: * ARGO TP
88: *
89: * This ghastly set of macros makes it possible to
90: * refer to tpdu structures without going mad.
91: */
92:
93: #ifndef __TP_TPDU__
94: #define __TP_TPDU__
95:
96: #ifndef BYTE_ORDER
97: /*
98: * Definitions for byte order,
99: * according to byte significance from low address to high.
100: */
101: #define LITTLE_ENDIAN 1234 /* least-significant byte first (vax) */
102: #define BIG_ENDIAN 4321 /* most-significant byte first (IBM, net) */
103: #define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long (pdp) */
104:
105: #ifdef vax
106: #define BYTE_ORDER LITTLE_ENDIAN
107: #else
108: #define BYTE_ORDER BIG_ENDIAN /* mc68000, tahoe, most others */
109: #endif
110: #endif /* BYTE_ORDER */
111:
112: /* This much of a tpdu is the same for all types of tpdus (except
113: * DT tpdus in class 0; their exceptions are handled by the data
114: * structure below
115: */
116: struct tpdu_fixed {
117: u_char _tpduf_li:8, /* length indicator */
118: #if BYTE_ORDER == LITTLE_ENDIAN
119: _tpduf_cdt: 4, /* credit */
120: _tpduf_type: 4; /* type of tpdu (DT, CR, etc.) */
121: #endif
122: #if BYTE_ORDER == BIG_ENDIAN
123: _tpduf_type: 4, /* type of tpdu (DT, CR, etc.) */
124: _tpduf_cdt: 4; /* credit */
125: #endif
126: u_short _tpduf_dref; /* destination ref; not in DT in class 0 */
127: };
128:
129: #define tpdu_li _tpduf._tpduf_li
130: #define tpdu_type _tpduf._tpduf_type
131: #define tpdu_cdt _tpduf._tpduf_cdt
132: #define tpdu_dref _tpduf._tpduf_dref
133:
134: struct tp0du {
135: u_char _tp0_li,
136: _tp0_cdt_type, /* same as in tpdu_fixed */
137: #if BYTE_ORDER == BIG_ENDIAN
138: _tp0_eot: 1, /* eot */
139: _tp0_mbz: 7, /* must be zero */
140: #endif
141: #if BYTE_ORDER == LITTLE_ENDIAN
142: _tp0_mbz: 7, /* must be zero */
143: _tp0_eot: 1, /* eot */
144: #endif
145: _tp0_notused: 8; /* data begins on this octet */
146: };
147:
148: #define tp0du_eot _tp0_eot
149: #define tp0du_mbz _tp0_mbz
150:
151: /*
152: * This is used when the extended format seqence numbers are
153: * being sent and received.
154: */
155: /*
156: * the seqeot field is an int that overlays the seq
157: * and eot fields, this allows the htonl operation
158: * to be applied to the entire 32 bit quantity, and
159: * simplifies the structure definitions.
160: */
161: union seq_type {
162: struct {
163: #if BYTE_ORDER == BIG_ENDIAN
164: unsigned int st_eot:1, /* end-of-tsdu */
165: st_seq:31; /* 31 bit sequence number */
166: #endif
167: #if BYTE_ORDER == LITTLE_ENDIAN
168: unsigned int st_seq:31, /* 31 bit sequence number */
169: st_eot:1; /* end-of-tsdu */
170: #endif
171: } st;
172: unsigned int s_seqeot;
173: #define s_eot st.st_eot
174: #define s_seq st.st_seq
175: };
176:
177: /* Then most tpdu types have a portion that is always present but
178: * differs among the tpdu types :
179: */
180: union tpdu_fixed_rest {
181:
182: struct {
183: u_short _tpdufr_sref, /* source reference */
184: #if BYTE_ORDER == BIG_ENDIAN
185: _tpdufr_class: 4, /* class [ ISO 8073 13.3.3.e ] */
186: _tpdufr_opt: 4, /* options [ ISO 8073 13.3.3.e ] */
187: #endif
188: #if BYTE_ORDER == LITTLE_ENDIAN
189: _tpdufr_opt: 4, /* options [ ISO 8073 13.3.3.e ] */
190: _tpdufr_class: 4, /* class [ ISO 8073 13.3.3.e ] */
191: #endif
192: _tpdufr_xx: 8; /* unused */
193: } CRCC;
194:
195: #define tpdu_CRli _tpduf._tpduf_li
196: #define tpdu_CRtype _tpduf._tpduf_type
197: #define tpdu_CRcdt _tpduf._tpduf_cdt
198: #define tpdu_CRdref_0 _tpduf._tpduf_dref
199: #define tpdu_CRsref _tpdufr.CRCC._tpdufr_sref
200: #define tpdu_sref _tpdufr.CRCC._tpdufr_sref
201: #define tpdu_CRclass _tpdufr.CRCC._tpdufr_class
202: #define tpdu_CRoptions _tpdufr.CRCC._tpdufr_opt
203:
204: #define tpdu_CCli _tpduf._tpduf_li
205: #define tpdu_CCtype _tpduf._tpduf_type
206: #define tpdu_CCcdt _tpduf._tpduf_cdt
207: #define tpdu_CCdref _tpduf._tpduf_dref
208: #define tpdu_CCsref _tpdufr.CRCC._tpdufr_sref
209: #define tpdu_CCclass _tpdufr.CRCC._tpdufr_class
210: #define tpdu_CCoptions _tpdufr.CRCC._tpdufr_opt
211:
212: /* OPTIONS and ADDL OPTIONS bits */
213: #define TPO_USE_EFC 0x1
214: #define TPO_XTD_FMT 0x2
215: #define TPAO_USE_TXPD 0x1
216: #define TPAO_NO_CSUM 0x2
217: #define TPAO_USE_RCC 0x4
218: #define TPAO_USE_NXPD 0x8
219:
220: struct {
221: unsigned short _tpdufr_sref; /* source reference */
222: unsigned char _tpdufr_reason; /* [ ISO 8073 13.5.3.d ] */
223: } DR;
224: #define tpdu_DRli _tpduf._tpduf_li
225: #define tpdu_DRtype _tpduf._tpduf_type
226: #define tpdu_DRdref _tpduf._tpduf_dref
227: #define tpdu_DRsref _tpdufr.DR._tpdufr_sref
228: #define tpdu_DRreason _tpdufr.DR._tpdufr_reason
229:
230: unsigned short _tpdufr_sref; /* source reference */
231:
232: #define tpdu_DCli _tpduf._tpduf_li
233: #define tpdu_DCtype _tpduf._tpduf_type
234: #define tpdu_DCdref _tpduf._tpduf_dref
235: #define tpdu_DCsref _tpdufr._tpdufr_sref
236:
237: struct {
238: #if BYTE_ORDER == BIG_ENDIAN
239: unsigned char _tpdufr_eot:1, /* end-of-tsdu */
240: _tpdufr_seq:7; /* 7 bit sequence number */
241: #endif
242: #if BYTE_ORDER == LITTLE_ENDIAN
243: unsigned char _tpdufr_seq:7, /* 7 bit sequence number */
244: _tpdufr_eot:1; /* end-of-tsdu */
245: #endif
246: }SEQEOT;
247: struct {
248: #if BYTE_ORDER == BIG_ENDIAN
249: unsigned int _tpdufr_Xeot:1, /* end-of-tsdu */
250: _tpdufr_Xseq:31; /* 31 bit sequence number */
251: #endif
252: #if BYTE_ORDER == LITTLE_ENDIAN
253: unsigned int _tpdufr_Xseq:31, /* 31 bit sequence number */
254: _tpdufr_Xeot:1; /* end-of-tsdu */
255: #endif
256: }SEQEOT31;
257: unsigned int _tpdufr_Xseqeot;
258: #define tpdu_seqeotX _tpdufr._tpdufr_Xseqeot
259:
260: #define tpdu_DTli _tpduf._tpduf_li
261: #define tpdu_DTtype _tpduf._tpduf_type
262: #define tpdu_DTdref _tpduf._tpduf_dref
263: #define tpdu_DTseq _tpdufr.SEQEOT._tpdufr_seq
264: #define tpdu_DTeot _tpdufr.SEQEOT._tpdufr_eot
265: #define tpdu_DTseqX _tpdufr.SEQEOT31._tpdufr_Xseq
266: #define tpdu_DTeotX _tpdufr.SEQEOT31._tpdufr_Xeot
267:
268: #define tpdu_XPDli _tpduf._tpduf_li
269: #define tpdu_XPDtype _tpduf._tpduf_type
270: #define tpdu_XPDdref _tpduf._tpduf_dref
271: #define tpdu_XPDseq _tpdufr.SEQEOT._tpdufr_seq
272: #define tpdu_XPDeot _tpdufr.SEQEOT._tpdufr_eot
273: #define tpdu_XPDseqX _tpdufr.SEQEOT31._tpdufr_Xseq
274: #define tpdu_XPDeotX _tpdufr.SEQEOT31._tpdufr_Xeot
275:
276: struct {
277: #if BYTE_ORDER == BIG_ENDIAN
278: unsigned _tpdufr_yrseq0:1, /* always zero */
279: _tpdufr_yrseq:31; /* [ ISO 8073 13.9.3.d ] */
280: #endif
281: #if BYTE_ORDER == LITTLE_ENDIAN
282: unsigned _tpdufr_yrseq:31, /* [ ISO 8073 13.9.3.d ] */
283: _tpdufr_yrseq0:1; /* always zero */
284: #endif
285: unsigned short _tpdufr_cdt; /* [ ISO 8073 13.9.3.b ] */
286: } AK31;
287:
288: #define tpdu_AKli _tpduf._tpduf_li
289: #define tpdu_AKtype _tpduf._tpduf_type
290: #define tpdu_AKdref _tpduf._tpduf_dref
291: #define tpdu_AKseq _tpdufr.SEQEOT._tpdufr_seq
292: #define tpdu_AKseqX _tpdufr.AK31._tpdufr_yrseq
293: /* location of cdt depends on size of seq. numbers */
294: #define tpdu_AKcdt _tpduf._tpduf_cdt
295: #define tpdu_AKcdtX _tpdufr.AK31._tpdufr_cdt
296:
297: #define tpdu_XAKli _tpduf._tpduf_li
298: #define tpdu_XAKtype _tpduf._tpduf_type
299: #define tpdu_XAKdref _tpduf._tpduf_dref
300: #define tpdu_XAKseq _tpdufr.SEQEOT._tpdufr_seq
301: #define tpdu_XAKseqX _tpdufr.SEQEOT31._tpdufr_Xseq
302:
303: unsigned char _tpdu_ERreason; /* [ ISO 8073 13.12.3.c ] */
304:
305: #define tpdu_ERli _tpduf._tpduf_li
306: #define tpdu_ERtype _tpduf._tpduf_type
307: #define tpdu_ERdref _tpduf._tpduf_dref
308: #define tpdu_ERreason _tpdufr._tpdu_ERreason
309:
310: };
311:
312: struct tpdu {
313: struct tpdu_fixed _tpduf;
314: union tpdu_fixed_rest _tpdufr;
315: };
316:
317: #endif /* __TP_TPDU__ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.