kernel tree reorganization stage 1: Major cvs repository work (not logged as
[dragonfly.git] / sys / netproto / atm / uni / sscop_pdu.h
1 /*
2  *
3  * ===================================
4  * HARP  |  Host ATM Research Platform
5  * ===================================
6  *
7  *
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.
12  *
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.
20  *
21  * Copyright 1994-1998 Network Computing Services, Inc.
22  *
23  * Copies of this Software may be made, however, the above copyright
24  * notice must be reproduced on all copies.
25  *
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 $
28  *
29  */
30
31 /*
32  * ATM Forum UNI Support
33  * ---------------------
34  *
35  * SSCOP Protocol Data Unit (PDU) definitions
36  *
37  */
38
39 #ifndef _UNI_SSCOP_PDU_H
40 #define _UNI_SSCOP_PDU_H
41
42 /*
43  * SSCOP PDU Constants
44  */
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 */
54
55
56 /*
57  * PDU Queueing Header
58  *
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.
63  */
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 */
73 };
74 #define ph_pack_lk      ph_u.phu_pack_lk
75 #define ph_recv_lk      ph_u.phu_recv_lk
76
77
78 /*
79  * SSCOP PDU formats
80  *
81  * N.B. - all SSCOP PDUs are trailer oriented (don't ask me...)
82  */
83
84 /*
85  * PDU Type Fields
86  */
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 */
93
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 */
110
111 /*
112  * Begin PDU
113  */
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;
121 };
122 #define bgn_type        bgn_u.bgnu_type
123 #define bgn_nmr         bgn_u.bgnu_nmr
124
125 /*
126  * Begin Acknowledge PDU
127  */
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;
134 };
135 #define bgak_type       bgak_u.bgaku_type
136 #define bgak_nmr        bgak_u.bgaku_nmr
137
138 /*
139  * Begin Reject PDU
140  */
141 struct bgrej_pdu {
142         int             bgrej_rsvd2;    /* Reserved */
143         u_char          bgrej_type;     /* PDU type, etc */
144         u_char          bgrej_rsvd1[3]; /* Reserved */
145 };
146
147 /*
148  * End PDU
149  */
150 struct end_pdu {
151         int             end_rsvd2;      /* Reserved */
152         u_char          end_type;       /* PDU type, etc */
153         u_char          end_rsvd1[3];   /* Reserved */
154 };
155
156 /*
157  * End Acknowledge PDU (Q.2110)
158  */
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 */
163 };
164
165 /*
166  * End Acknowledge PDU (Q.SAAL)
167  */
168 struct endak_qsaal_pdu {
169         u_char          endak_type;     /* PDU type, etc */
170         u_char          endak_rsvd[3];  /* Reserved */
171 };
172
173 /*
174  * Resynchronization PDU
175  */
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;
183 };
184 #define rs_type         rs_u.rsu_type
185 #define rs_nmr          rs_u.rsu_nmr
186
187 /*
188  * Resynchronization Acknowledge PDU (Q.2110)
189  */
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;
196 };
197 #define rsak2_type      rsak_u.rsaku_type
198 #define rsak_nmr        rsak_u.rsaku_nmr
199
200 /*
201  * Resynchronization Acknowledge PDU (Q.SAAL)
202  */
203 struct rsak_qsaal_pdu {
204         u_char          rsaks_type;     /* PDU type, etc */
205         u_char          rsak_rsvd[3];   /* Reserved */
206 };
207
208 /*
209  * Error Recovery PDU
210  */
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;
218 };
219 #define er_type         er_u.eru_type
220 #define er_nmr          er_u.eru_nmr
221
222 /*
223  * Error Recovery Acknowledge PDU
224  */
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;
231 };
232 #define erak_type       erak_u.eraku_type
233 #define erak_nmr        erak_u.eraku_nmr
234
235 /*
236  * Sequenced Data PDU
237  */
238 struct sd_pdu {
239         union {
240                 u_char          sdu_type;       /* PDU type, etc */
241                 sscop_seq       sdu_ns;         /* N(S) */
242         } sd_u;
243 };
244 #define sd_type         sd_u.sdu_type
245 #define sd_ns           sd_u.sdu_ns
246
247 /*
248  * Sequenced Data with Poll PDU
249  */
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;
256 };
257 #define sdp_type        sdp_u.sdpu_type
258 #define sdp_ns          sdp_u.sdpu_ns
259
260 /*
261  * Poll PDU
262  */
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;
269 };
270 #define poll_type       poll_u.pollu_type
271 #define poll_ns         poll_u.pollu_ns
272
273 /*
274  * Solicited Status PDU
275  */
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;
283 };
284 #define stat_type       stat_u.statu_type
285 #define stat_nr         stat_u.statu_nr
286
287 /*
288  * Unsolicited Status PDU
289  */
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;
298 };
299 #define ustat_type      ustat_u.ustatu_type
300 #define ustat_nr        ustat_u.ustatu_nr
301
302 /*
303  * Unit Data PDU
304  */
305 struct ud_pdu {
306         u_char          ud_type;        /* PDU type, etc */
307         u_char          ud_rsvd[3];     /* Reserved */
308 };
309
310 /*
311  * Management Data PDU
312  */
313 struct md_pdu {
314         u_char          md_type;        /* PDU type, etc */
315         u_char          md_rsvd[3];     /* Reserved */
316 };
317
318 #endif  /* _UNI_SSCOP_PDU_H */