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 $
31 * ATM Forum UNI Support
32 * ---------------------
34 * SSCOP Protocol Data Unit (PDU) definitions
38 #ifndef _UNI_SSCOP_PDU_H
39 #define _UNI_SSCOP_PDU_H
44 #define PDU_MIN_LEN 4 /* Minimum PDU length */
45 #define PDU_LEN_MASK 3 /* PDU length must be 32-bit aligned */
46 #define PDU_ADDR_MASK 3 /* PDUs must be 32-bit aligned */
47 #define PDU_SEQ_MASK 0x00ffffff /* Mask for 24-bit sequence values */
48 #define PDU_MAX_INFO 65528 /* Maximum length of PDU info field */
49 #define PDU_MAX_UU 65524 /* Maximum length of SSCOP-UU field */
50 #define PDU_MAX_STAT 65520 /* Maximum length of STAT list */
51 #define PDU_MAX_ELEM 67 /* Maximum elements sent in STAT */
52 #define PDU_PAD_ALIGN 4 /* I-field padding alignment */
58 * There will be a queueing header tacked on to the front of each
59 * buffer chain that is placed on any of the sscop SD PDU queues (not
60 * including the SD transmission queue). Note that this header will
61 * not be included in the buffer data length/offset fields.
65 struct pdu_hdr *phu_pack_lk; /* Pending ack queue link */
66 struct pdu_hdr *phu_recv_lk; /* Receive queue link */
68 struct pdu_hdr *ph_rexmit_lk; /* Retranmit queue link */
69 sscop_seq ph_ns; /* SD.N(S) - SD's sequence number */
70 sscop_seq ph_nps; /* SD.N(PS) - SD's poll sequence */
71 KBuffer *ph_buf; /* Pointer to containing buffer */
73 #define ph_pack_lk ph_u.phu_pack_lk
74 #define ph_recv_lk ph_u.phu_recv_lk
80 * N.B. - all SSCOP PDUs are trailer oriented (don't ask me...)
86 #define PT_PAD_MASK 0xc0 /* Pad length mask */
87 #define PT_PAD_SHIFT 6 /* Pad byte shift count */
88 #define PT_SOURCE_SSCOP 0x10 /* Source = SSCOP */
89 #define PT_TYPE_MASK 0x0f /* Type mask */
90 #define PT_TYPE_MAX 0x0f /* Maximum pdu type */
91 #define PT_TYPE_SHIFT 24 /* Type word shift count */
93 #define PT_BGN 0x01 /* Begin */
94 #define PT_BGAK 0x02 /* Begin Acknowledge */
95 #define PT_BGREJ 0x07 /* Begin Reject */
96 #define PT_END 0x03 /* End */
97 #define PT_ENDAK 0x04 /* End Acknowledge */
98 #define PT_RS 0x05 /* Resynchronization */
99 #define PT_RSAK 0x06 /* Resynchronization Acknowledge */
100 #define PT_ER 0x09 /* Error Recovery */
101 #define PT_ERAK 0x0f /* Error Recovery Acknowledge */
102 #define PT_SD 0x08 /* Sequenced Data */
103 #define PT_SDP 0x09 /* Sequenced Data with Poll */
104 #define PT_POLL 0x0a /* Status Request */
105 #define PT_STAT 0x0b /* Solicited Status Response */
106 #define PT_USTAT 0x0c /* Unsolicited Status Response */
107 #define PT_UD 0x0d /* Unnumbered Data */
108 #define PT_MD 0x0e /* Management Data */
114 u_char bgn_rsvd[3]; /* Reserved */
115 u_char bgn_nsq; /* N(SQ) */
117 u_char bgnu_type; /* PDU type, etc */
118 sscop_seq bgnu_nmr; /* N(MR) */
121 #define bgn_type bgn_u.bgnu_type
122 #define bgn_nmr bgn_u.bgnu_nmr
125 * Begin Acknowledge PDU
128 int bgak_rsvd; /* Reserved */
130 u_char bgaku_type; /* PDU type, etc */
131 sscop_seq bgaku_nmr; /* N(MR) */
134 #define bgak_type bgak_u.bgaku_type
135 #define bgak_nmr bgak_u.bgaku_nmr
141 int bgrej_rsvd2; /* Reserved */
142 u_char bgrej_type; /* PDU type, etc */
143 u_char bgrej_rsvd1[3]; /* Reserved */
150 int end_rsvd2; /* Reserved */
151 u_char end_type; /* PDU type, etc */
152 u_char end_rsvd1[3]; /* Reserved */
156 * End Acknowledge PDU (Q.2110)
158 struct endak_q2110_pdu {
159 int endak_rsvd2; /* Reserved */
160 u_char endak_type; /* PDU type, etc */
161 u_char endak_rsvd1[3]; /* Reserved */
165 * End Acknowledge PDU (Q.SAAL)
167 struct endak_qsaal_pdu {
168 u_char endak_type; /* PDU type, etc */
169 u_char endak_rsvd[3]; /* Reserved */
173 * Resynchronization PDU
176 char rs_rsvd[3]; /* Reserved */
177 u_char rs_nsq; /* N(SQ) */
179 u_char rsu_type; /* PDU type, etc */
180 sscop_seq rsu_nmr; /* N(MR) */
183 #define rs_type rs_u.rsu_type
184 #define rs_nmr rs_u.rsu_nmr
187 * Resynchronization Acknowledge PDU (Q.2110)
189 struct rsak_q2110_pdu {
190 int rsak_rsvd; /* Reserved */
192 u_char rsaku_type; /* PDU type, etc */
193 sscop_seq rsaku_nmr; /* N(MR) */
196 #define rsak2_type rsak_u.rsaku_type
197 #define rsak_nmr rsak_u.rsaku_nmr
200 * Resynchronization Acknowledge PDU (Q.SAAL)
202 struct rsak_qsaal_pdu {
203 u_char rsaks_type; /* PDU type, etc */
204 u_char rsak_rsvd[3]; /* Reserved */
211 char er_rsvd[3]; /* Reserved */
212 u_char er_nsq; /* N(SQ) */
214 u_char eru_type; /* PDU type, etc */
215 sscop_seq eru_nmr; /* N(MR) */
218 #define er_type er_u.eru_type
219 #define er_nmr er_u.eru_nmr
222 * Error Recovery Acknowledge PDU
225 int erak_rsvd; /* Reserved */
227 u_char eraku_type; /* PDU type, etc */
228 sscop_seq eraku_nmr; /* N(MR) */
231 #define erak_type erak_u.eraku_type
232 #define erak_nmr erak_u.eraku_nmr
239 u_char sdu_type; /* PDU type, etc */
240 sscop_seq sdu_ns; /* N(S) */
243 #define sd_type sd_u.sdu_type
244 #define sd_ns sd_u.sdu_ns
247 * Sequenced Data with Poll PDU
250 sscop_seq sdp_nps; /* N(PS) */
252 u_char sdpu_type; /* PDU type, etc */
253 sscop_seq sdpu_ns; /* N(S) */
256 #define sdp_type sdp_u.sdpu_type
257 #define sdp_ns sdp_u.sdpu_ns
263 sscop_seq poll_nps; /* N(PS) */
265 u_char pollu_type; /* PDU type, etc */
266 sscop_seq pollu_ns; /* N(S) */
269 #define poll_type poll_u.pollu_type
270 #define poll_ns poll_u.pollu_ns
273 * Solicited Status PDU
276 sscop_seq stat_nps; /* N(PS) */
277 sscop_seq stat_nmr; /* N(MR) */
279 u_char statu_type; /* PDU type, etc */
280 sscop_seq statu_nr; /* N(R) */
283 #define stat_type stat_u.statu_type
284 #define stat_nr stat_u.statu_nr
287 * Unsolicited Status PDU
290 sscop_seq ustat_le1; /* List element 1 */
291 sscop_seq ustat_le2; /* List element 2 */
292 sscop_seq ustat_nmr; /* N(MR) */
294 u_char ustatu_type; /* PDU type, etc */
295 sscop_seq ustatu_nr; /* N(R) */
298 #define ustat_type ustat_u.ustatu_type
299 #define ustat_nr ustat_u.ustatu_nr
305 u_char ud_type; /* PDU type, etc */
306 u_char ud_rsvd[3]; /* Reserved */
310 * Management Data PDU
313 u_char md_type; /* PDU type, etc */
314 u_char md_rsvd[3]; /* Reserved */
317 #endif /* _UNI_SSCOP_PDU_H */