HAMMER Utilities: MFC work to date.
[dragonfly.git] / sys / netproto / atm / uni / sscop_pdu.h
blob42f0f7b431e150a73551dec0bb07592f45c21704
1 /*
3 * ===================================
4 * HARP | Host ATM Research Platform
5 * ===================================
8 * This Host ATM Research Platform ("HARP") file (the "Software") is
9 * made available by Network Computing Services, Inc. ("NetworkCS")
10 * "AS IS". NetworkCS does not provide maintenance, improvements or
11 * support of any kind.
13 * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
14 * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
15 * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
16 * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
17 * In no event shall NetworkCS be responsible for any damages, including
18 * but not limited to consequential damages, arising from or relating to
19 * any use of the Software or related support.
21 * Copyright 1994-1998 Network Computing Services, Inc.
23 * Copies of this Software may be made, however, the above copyright
24 * notice must be reproduced on all copies.
26 * @(#) $FreeBSD: src/sys/netatm/uni/sscop_pdu.h,v 1.2 1999/08/28 00:48:59 peter Exp $
27 * @(#) $DragonFly: src/sys/netproto/atm/uni/sscop_pdu.h,v 1.2 2003/06/17 04:28:49 dillon Exp $
32 * ATM Forum UNI Support
33 * ---------------------
35 * SSCOP Protocol Data Unit (PDU) definitions
39 #ifndef _UNI_SSCOP_PDU_H
40 #define _UNI_SSCOP_PDU_H
43 * SSCOP PDU Constants
45 #define PDU_MIN_LEN 4 /* Minimum PDU length */
46 #define PDU_LEN_MASK 3 /* PDU length must be 32-bit aligned */
47 #define PDU_ADDR_MASK 3 /* PDUs must be 32-bit aligned */
48 #define PDU_SEQ_MASK 0x00ffffff /* Mask for 24-bit sequence values */
49 #define PDU_MAX_INFO 65528 /* Maximum length of PDU info field */
50 #define PDU_MAX_UU 65524 /* Maximum length of SSCOP-UU field */
51 #define PDU_MAX_STAT 65520 /* Maximum length of STAT list */
52 #define PDU_MAX_ELEM 67 /* Maximum elements sent in STAT */
53 #define PDU_PAD_ALIGN 4 /* I-field padding alignment */
57 * PDU Queueing Header
59 * There will be a queueing header tacked on to the front of each
60 * buffer chain that is placed on any of the sscop SD PDU queues (not
61 * including the SD transmission queue). Note that this header will
62 * not be included in the buffer data length/offset fields.
64 struct pdu_hdr {
65 union {
66 struct pdu_hdr *phu_pack_lk; /* Pending ack queue link */
67 struct pdu_hdr *phu_recv_lk; /* Receive queue link */
68 } ph_u;
69 struct pdu_hdr *ph_rexmit_lk; /* Retranmit queue link */
70 sscop_seq ph_ns; /* SD.N(S) - SD's sequence number */
71 sscop_seq ph_nps; /* SD.N(PS) - SD's poll sequence */
72 KBuffer *ph_buf; /* Pointer to containing buffer */
74 #define ph_pack_lk ph_u.phu_pack_lk
75 #define ph_recv_lk ph_u.phu_recv_lk
79 * SSCOP PDU formats
81 * N.B. - all SSCOP PDUs are trailer oriented (don't ask me...)
85 * PDU Type Fields
87 #define PT_PAD_MASK 0xc0 /* Pad length mask */
88 #define PT_PAD_SHIFT 6 /* Pad byte shift count */
89 #define PT_SOURCE_SSCOP 0x10 /* Source = SSCOP */
90 #define PT_TYPE_MASK 0x0f /* Type mask */
91 #define PT_TYPE_MAX 0x0f /* Maximum pdu type */
92 #define PT_TYPE_SHIFT 24 /* Type word shift count */
94 #define PT_BGN 0x01 /* Begin */
95 #define PT_BGAK 0x02 /* Begin Acknowledge */
96 #define PT_BGREJ 0x07 /* Begin Reject */
97 #define PT_END 0x03 /* End */
98 #define PT_ENDAK 0x04 /* End Acknowledge */
99 #define PT_RS 0x05 /* Resynchronization */
100 #define PT_RSAK 0x06 /* Resynchronization Acknowledge */
101 #define PT_ER 0x09 /* Error Recovery */
102 #define PT_ERAK 0x0f /* Error Recovery Acknowledge */
103 #define PT_SD 0x08 /* Sequenced Data */
104 #define PT_SDP 0x09 /* Sequenced Data with Poll */
105 #define PT_POLL 0x0a /* Status Request */
106 #define PT_STAT 0x0b /* Solicited Status Response */
107 #define PT_USTAT 0x0c /* Unsolicited Status Response */
108 #define PT_UD 0x0d /* Unnumbered Data */
109 #define PT_MD 0x0e /* Management Data */
112 * Begin PDU
114 struct bgn_pdu {
115 u_char bgn_rsvd[3]; /* Reserved */
116 u_char bgn_nsq; /* N(SQ) */
117 union {
118 u_char bgnu_type; /* PDU type, etc */
119 sscop_seq bgnu_nmr; /* N(MR) */
120 } bgn_u;
122 #define bgn_type bgn_u.bgnu_type
123 #define bgn_nmr bgn_u.bgnu_nmr
126 * Begin Acknowledge PDU
128 struct bgak_pdu {
129 int bgak_rsvd; /* Reserved */
130 union {
131 u_char bgaku_type; /* PDU type, etc */
132 sscop_seq bgaku_nmr; /* N(MR) */
133 } bgak_u;
135 #define bgak_type bgak_u.bgaku_type
136 #define bgak_nmr bgak_u.bgaku_nmr
139 * Begin Reject PDU
141 struct bgrej_pdu {
142 int bgrej_rsvd2; /* Reserved */
143 u_char bgrej_type; /* PDU type, etc */
144 u_char bgrej_rsvd1[3]; /* Reserved */
148 * End PDU
150 struct end_pdu {
151 int end_rsvd2; /* Reserved */
152 u_char end_type; /* PDU type, etc */
153 u_char end_rsvd1[3]; /* Reserved */
157 * End Acknowledge PDU (Q.2110)
159 struct endak_q2110_pdu {
160 int endak_rsvd2; /* Reserved */
161 u_char endak_type; /* PDU type, etc */
162 u_char endak_rsvd1[3]; /* Reserved */
166 * End Acknowledge PDU (Q.SAAL)
168 struct endak_qsaal_pdu {
169 u_char endak_type; /* PDU type, etc */
170 u_char endak_rsvd[3]; /* Reserved */
174 * Resynchronization PDU
176 struct rs_pdu {
177 char rs_rsvd[3]; /* Reserved */
178 u_char rs_nsq; /* N(SQ) */
179 union {
180 u_char rsu_type; /* PDU type, etc */
181 sscop_seq rsu_nmr; /* N(MR) */
182 } rs_u;
184 #define rs_type rs_u.rsu_type
185 #define rs_nmr rs_u.rsu_nmr
188 * Resynchronization Acknowledge PDU (Q.2110)
190 struct rsak_q2110_pdu {
191 int rsak_rsvd; /* Reserved */
192 union {
193 u_char rsaku_type; /* PDU type, etc */
194 sscop_seq rsaku_nmr; /* N(MR) */
195 } rsak_u;
197 #define rsak2_type rsak_u.rsaku_type
198 #define rsak_nmr rsak_u.rsaku_nmr
201 * Resynchronization Acknowledge PDU (Q.SAAL)
203 struct rsak_qsaal_pdu {
204 u_char rsaks_type; /* PDU type, etc */
205 u_char rsak_rsvd[3]; /* Reserved */
209 * Error Recovery PDU
211 struct er_pdu {
212 char er_rsvd[3]; /* Reserved */
213 u_char er_nsq; /* N(SQ) */
214 union {
215 u_char eru_type; /* PDU type, etc */
216 sscop_seq eru_nmr; /* N(MR) */
217 } er_u;
219 #define er_type er_u.eru_type
220 #define er_nmr er_u.eru_nmr
223 * Error Recovery Acknowledge PDU
225 struct erak_pdu {
226 int erak_rsvd; /* Reserved */
227 union {
228 u_char eraku_type; /* PDU type, etc */
229 sscop_seq eraku_nmr; /* N(MR) */
230 } erak_u;
232 #define erak_type erak_u.eraku_type
233 #define erak_nmr erak_u.eraku_nmr
236 * Sequenced Data PDU
238 struct sd_pdu {
239 union {
240 u_char sdu_type; /* PDU type, etc */
241 sscop_seq sdu_ns; /* N(S) */
242 } sd_u;
244 #define sd_type sd_u.sdu_type
245 #define sd_ns sd_u.sdu_ns
248 * Sequenced Data with Poll PDU
250 struct sdp_pdu {
251 sscop_seq sdp_nps; /* N(PS) */
252 union {
253 u_char sdpu_type; /* PDU type, etc */
254 sscop_seq sdpu_ns; /* N(S) */
255 } sdp_u;
257 #define sdp_type sdp_u.sdpu_type
258 #define sdp_ns sdp_u.sdpu_ns
261 * Poll PDU
263 struct poll_pdu {
264 sscop_seq poll_nps; /* N(PS) */
265 union {
266 u_char pollu_type; /* PDU type, etc */
267 sscop_seq pollu_ns; /* N(S) */
268 } poll_u;
270 #define poll_type poll_u.pollu_type
271 #define poll_ns poll_u.pollu_ns
274 * Solicited Status PDU
276 struct stat_pdu {
277 sscop_seq stat_nps; /* N(PS) */
278 sscop_seq stat_nmr; /* N(MR) */
279 union {
280 u_char statu_type; /* PDU type, etc */
281 sscop_seq statu_nr; /* N(R) */
282 } stat_u;
284 #define stat_type stat_u.statu_type
285 #define stat_nr stat_u.statu_nr
288 * Unsolicited Status PDU
290 struct ustat_pdu {
291 sscop_seq ustat_le1; /* List element 1 */
292 sscop_seq ustat_le2; /* List element 2 */
293 sscop_seq ustat_nmr; /* N(MR) */
294 union {
295 u_char ustatu_type; /* PDU type, etc */
296 sscop_seq ustatu_nr; /* N(R) */
297 } ustat_u;
299 #define ustat_type ustat_u.ustatu_type
300 #define ustat_nr ustat_u.ustatu_nr
303 * Unit Data PDU
305 struct ud_pdu {
306 u_char ud_type; /* PDU type, etc */
307 u_char ud_rsvd[3]; /* Reserved */
311 * Management Data PDU
313 struct md_pdu {
314 u_char md_type; /* PDU type, etc */
315 u_char md_rsvd[3]; /* Reserved */
318 #endif /* _UNI_SSCOP_PDU_H */