Initial import from FreeBSD RELENG_4:
[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  *
28  */
29
30 /*
31  * ATM Forum UNI Support
32  * ---------------------
33  *
34  * SSCOP Protocol Data Unit (PDU) definitions
35  *
36  */
37
38 #ifndef _UNI_SSCOP_PDU_H
39 #define _UNI_SSCOP_PDU_H
40
41 /*
42  * SSCOP PDU Constants
43  */
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 */
53
54
55 /*
56  * PDU Queueing Header
57  *
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.
62  */
63 struct pdu_hdr {
64         union {
65                 struct pdu_hdr  *phu_pack_lk;   /* Pending ack queue link */
66                 struct pdu_hdr  *phu_recv_lk;   /* Receive queue link */
67         } ph_u;
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 */
72 };
73 #define ph_pack_lk      ph_u.phu_pack_lk
74 #define ph_recv_lk      ph_u.phu_recv_lk
75
76
77 /*
78  * SSCOP PDU formats
79  *
80  * N.B. - all SSCOP PDUs are trailer oriented (don't ask me...)
81  */
82
83 /*
84  * PDU Type Fields
85  */
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 */
92
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 */
109
110 /*
111  * Begin PDU
112  */
113 struct bgn_pdu {
114         u_char          bgn_rsvd[3];    /* Reserved */
115         u_char          bgn_nsq;        /* N(SQ) */
116         union {
117                 u_char          bgnu_type;      /* PDU type, etc */
118                 sscop_seq       bgnu_nmr;       /* N(MR) */
119         } bgn_u;
120 };
121 #define bgn_type        bgn_u.bgnu_type
122 #define bgn_nmr         bgn_u.bgnu_nmr
123
124 /*
125  * Begin Acknowledge PDU
126  */
127 struct bgak_pdu {
128         int             bgak_rsvd;      /* Reserved */
129         union {
130                 u_char          bgaku_type;     /* PDU type, etc */
131                 sscop_seq       bgaku_nmr;      /* N(MR) */
132         } bgak_u;
133 };
134 #define bgak_type       bgak_u.bgaku_type
135 #define bgak_nmr        bgak_u.bgaku_nmr
136
137 /*
138  * Begin Reject PDU
139  */
140 struct bgrej_pdu {
141         int             bgrej_rsvd2;    /* Reserved */
142         u_char          bgrej_type;     /* PDU type, etc */
143         u_char          bgrej_rsvd1[3]; /* Reserved */
144 };
145
146 /*
147  * End PDU
148  */
149 struct end_pdu {
150         int             end_rsvd2;      /* Reserved */
151         u_char          end_type;       /* PDU type, etc */
152         u_char          end_rsvd1[3];   /* Reserved */
153 };
154
155 /*
156  * End Acknowledge PDU (Q.2110)
157  */
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 */
162 };
163
164 /*
165  * End Acknowledge PDU (Q.SAAL)
166  */
167 struct endak_qsaal_pdu {
168         u_char          endak_type;     /* PDU type, etc */
169         u_char          endak_rsvd[3];  /* Reserved */
170 };
171
172 /*
173  * Resynchronization PDU
174  */
175 struct rs_pdu {
176         char            rs_rsvd[3];     /* Reserved */
177         u_char          rs_nsq;         /* N(SQ) */
178         union {
179                 u_char          rsu_type;       /* PDU type, etc */
180                 sscop_seq       rsu_nmr;        /* N(MR) */
181         } rs_u;
182 };
183 #define rs_type         rs_u.rsu_type
184 #define rs_nmr          rs_u.rsu_nmr
185
186 /*
187  * Resynchronization Acknowledge PDU (Q.2110)
188  */
189 struct rsak_q2110_pdu {
190         int             rsak_rsvd;      /* Reserved */
191         union {
192                 u_char          rsaku_type;     /* PDU type, etc */
193                 sscop_seq       rsaku_nmr;      /* N(MR) */
194         } rsak_u;
195 };
196 #define rsak2_type      rsak_u.rsaku_type
197 #define rsak_nmr        rsak_u.rsaku_nmr
198
199 /*
200  * Resynchronization Acknowledge PDU (Q.SAAL)
201  */
202 struct rsak_qsaal_pdu {
203         u_char          rsaks_type;     /* PDU type, etc */
204         u_char          rsak_rsvd[3];   /* Reserved */
205 };
206
207 /*
208  * Error Recovery PDU
209  */
210 struct er_pdu {
211         char            er_rsvd[3];     /* Reserved */
212         u_char          er_nsq;         /* N(SQ) */
213         union {
214                 u_char          eru_type;       /* PDU type, etc */
215                 sscop_seq       eru_nmr;        /* N(MR) */
216         } er_u;
217 };
218 #define er_type         er_u.eru_type
219 #define er_nmr          er_u.eru_nmr
220
221 /*
222  * Error Recovery Acknowledge PDU
223  */
224 struct erak_pdu {
225         int             erak_rsvd;      /* Reserved */
226         union {
227                 u_char          eraku_type;     /* PDU type, etc */
228                 sscop_seq       eraku_nmr;      /* N(MR) */
229         } erak_u;
230 };
231 #define erak_type       erak_u.eraku_type
232 #define erak_nmr        erak_u.eraku_nmr
233
234 /*
235  * Sequenced Data PDU
236  */
237 struct sd_pdu {
238         union {
239                 u_char          sdu_type;       /* PDU type, etc */
240                 sscop_seq       sdu_ns;         /* N(S) */
241         } sd_u;
242 };
243 #define sd_type         sd_u.sdu_type
244 #define sd_ns           sd_u.sdu_ns
245
246 /*
247  * Sequenced Data with Poll PDU
248  */
249 struct sdp_pdu {
250         sscop_seq       sdp_nps;        /* N(PS) */
251         union {
252                 u_char          sdpu_type;      /* PDU type, etc */
253                 sscop_seq       sdpu_ns;        /* N(S) */
254         } sdp_u;
255 };
256 #define sdp_type        sdp_u.sdpu_type
257 #define sdp_ns          sdp_u.sdpu_ns
258
259 /*
260  * Poll PDU
261  */
262 struct poll_pdu {
263         sscop_seq       poll_nps;       /* N(PS) */
264         union {
265                 u_char          pollu_type;     /* PDU type, etc */
266                 sscop_seq       pollu_ns;       /* N(S) */
267         } poll_u;
268 };
269 #define poll_type       poll_u.pollu_type
270 #define poll_ns         poll_u.pollu_ns
271
272 /*
273  * Solicited Status PDU
274  */
275 struct stat_pdu {
276         sscop_seq       stat_nps;       /* N(PS) */
277         sscop_seq       stat_nmr;       /* N(MR) */
278         union {
279                 u_char          statu_type;     /* PDU type, etc */
280                 sscop_seq       statu_nr;       /* N(R) */
281         } stat_u;
282 };
283 #define stat_type       stat_u.statu_type
284 #define stat_nr         stat_u.statu_nr
285
286 /*
287  * Unsolicited Status PDU
288  */
289 struct ustat_pdu {
290         sscop_seq       ustat_le1;      /* List element 1 */
291         sscop_seq       ustat_le2;      /* List element 2 */
292         sscop_seq       ustat_nmr;      /* N(MR) */
293         union {
294                 u_char          ustatu_type;    /* PDU type, etc */
295                 sscop_seq       ustatu_nr;      /* N(R) */
296         } ustat_u;
297 };
298 #define ustat_type      ustat_u.ustatu_type
299 #define ustat_nr        ustat_u.ustatu_nr
300
301 /*
302  * Unit Data PDU
303  */
304 struct ud_pdu {
305         u_char          ud_type;        /* PDU type, etc */
306         u_char          ud_rsvd[3];     /* Reserved */
307 };
308
309 /*
310  * Management Data PDU
311  */
312 struct md_pdu {
313         u_char          md_type;        /* PDU type, etc */
314         u_char          md_rsvd[3];     /* Reserved */
315 };
316
317 #endif  /* _UNI_SSCOP_PDU_H */