summaryrefslogtreecommitdiffstats
path: root/sys/netatm/uni/sscop_pdu.h
blob: e039a8a8d619a957582ba7ba73240250088a9206 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
/*-
 *
 * ===================================
 * HARP  |  Host ATM Research Platform
 * ===================================
 *
 *
 * This Host ATM Research Platform ("HARP") file (the "Software") is
 * made available by Network Computing Services, Inc. ("NetworkCS")
 * "AS IS".  NetworkCS does not provide maintenance, improvements or
 * support of any kind.
 *
 * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
 * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
 * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
 * In no event shall NetworkCS be responsible for any damages, including
 * but not limited to consequential damages, arising from or relating to
 * any use of the Software or related support.
 *
 * Copyright 1994-1998 Network Computing Services, Inc.
 *
 * Copies of this Software may be made, however, the above copyright
 * notice must be reproduced on all copies.
 *
 *	@(#) $FreeBSD$
 *
 */

/*
 * ATM Forum UNI Support
 * ---------------------
 *
 * SSCOP Protocol Data Unit (PDU) definitions
 *
 */

#ifndef _UNI_SSCOP_PDU_H
#define _UNI_SSCOP_PDU_H

/*
 * SSCOP PDU Constants
 */
#define	PDU_MIN_LEN	4		/* Minimum PDU length */
#define	PDU_LEN_MASK	3		/* PDU length must be 32-bit aligned */
#define	PDU_ADDR_MASK	3		/* PDUs must be 32-bit aligned */
#define	PDU_SEQ_MASK	0x00ffffff	/* Mask for 24-bit sequence values */
#define	PDU_MAX_INFO	65528		/* Maximum length of PDU info field */
#define	PDU_MAX_UU	65524		/* Maximum length of SSCOP-UU field */
#define	PDU_MAX_STAT	65520		/* Maximum length of STAT list */
#define	PDU_MAX_ELEM	67		/* Maximum elements sent in STAT */
#define	PDU_PAD_ALIGN	4		/* I-field padding alignment */


/*
 * PDU Queueing Header
 *
 * There will be a queueing header tacked on to the front of each
 * buffer chain that is placed on any of the sscop SD PDU queues (not
 * including the SD transmission queue).  Note that this header will
 * not be included in the buffer data length/offset fields.
 */
struct pdu_hdr {
	union {
		struct pdu_hdr	*phu_pack_lk;	/* Pending ack queue link */
		struct pdu_hdr	*phu_recv_lk;	/* Receive queue link */
	} ph_u;
	struct pdu_hdr	*ph_rexmit_lk;	/* Retranmit queue link */
	sscop_seq	ph_ns;		/* SD.N(S) - SD's sequence number */
	sscop_seq	ph_nps;		/* SD.N(PS) - SD's poll sequence */
	KBuffer		*ph_buf;	/* Pointer to containing buffer */
};
#define	ph_pack_lk	ph_u.phu_pack_lk
#define	ph_recv_lk	ph_u.phu_recv_lk


/*
 * SSCOP PDU formats
 *
 * N.B. - all SSCOP PDUs are trailer oriented (don't ask me...)
 */

/*
 * PDU Type Fields
 */
#define	PT_PAD_MASK	0xc0		/* Pad length mask */
#define	PT_PAD_SHIFT	6		/* Pad byte shift count */
#define	PT_SOURCE_SSCOP	0x10		/* Source = SSCOP */
#define	PT_TYPE_MASK	0x0f		/* Type mask */
#define	PT_TYPE_MAX	0x0f		/* Maximum pdu type */
#define	PT_TYPE_SHIFT	24		/* Type word shift count */

#define	PT_BGN		0x01		/* Begin */
#define	PT_BGAK		0x02		/* Begin Acknowledge */
#define	PT_BGREJ	0x07		/* Begin Reject */
#define	PT_END		0x03		/* End */
#define	PT_ENDAK	0x04		/* End Acknowledge */
#define	PT_RS		0x05		/* Resynchronization */
#define	PT_RSAK		0x06		/* Resynchronization Acknowledge */
#define	PT_ER		0x09		/* Error Recovery */
#define	PT_ERAK		0x0f		/* Error Recovery Acknowledge */
#define	PT_SD		0x08		/* Sequenced Data */
#define	PT_SDP		0x09		/* Sequenced Data with Poll */
#define	PT_POLL		0x0a		/* Status Request */
#define	PT_STAT		0x0b		/* Solicited Status Response */
#define	PT_USTAT	0x0c		/* Unsolicited Status Response */
#define	PT_UD		0x0d		/* Unnumbered Data */
#define	PT_MD		0x0e		/* Management Data */

/*
 * Begin PDU
 */
struct bgn_pdu {
	u_char		bgn_rsvd[3];	/* Reserved */
	u_char		bgn_nsq;	/* N(SQ) */
	union {
		u_char		bgnu_type;	/* PDU type, etc */
		sscop_seq	bgnu_nmr;	/* N(MR) */
	} bgn_u;
};
#define	bgn_type	bgn_u.bgnu_type
#define	bgn_nmr		bgn_u.bgnu_nmr

/*
 * Begin Acknowledge PDU
 */
struct bgak_pdu {
	int		bgak_rsvd;	/* Reserved */
	union {
		u_char		bgaku_type;	/* PDU type, etc */
		sscop_seq	bgaku_nmr;	/* N(MR) */
	} bgak_u;
};
#define	bgak_type	bgak_u.bgaku_type
#define	bgak_nmr	bgak_u.bgaku_nmr

/*
 * Begin Reject PDU
 */
struct bgrej_pdu {
	int		bgrej_rsvd2;	/* Reserved */
	u_char		bgrej_type;	/* PDU type, etc */
	u_char		bgrej_rsvd1[3];	/* Reserved */
};

/*
 * End PDU
 */
struct end_pdu {
	int		end_rsvd2;	/* Reserved */
	u_char		end_type;	/* PDU type, etc */
	u_char		end_rsvd1[3];	/* Reserved */
};

/*
 * End Acknowledge PDU (Q.2110)
 */
struct endak_q2110_pdu {
	int		endak_rsvd2;	/* Reserved */
	u_char		endak_type;	/* PDU type, etc */
	u_char		endak_rsvd1[3];	/* Reserved */
};

/*
 * End Acknowledge PDU (Q.SAAL)
 */
struct endak_qsaal_pdu {
	u_char		endak_type;	/* PDU type, etc */
	u_char		endak_rsvd[3];	/* Reserved */
};

/*
 * Resynchronization PDU
 */
struct rs_pdu {
	char		rs_rsvd[3];	/* Reserved */
	u_char		rs_nsq;		/* N(SQ) */
	union {
		u_char		rsu_type;	/* PDU type, etc */
		sscop_seq	rsu_nmr;	/* N(MR) */
	} rs_u;
};
#define	rs_type		rs_u.rsu_type
#define	rs_nmr		rs_u.rsu_nmr

/*
 * Resynchronization Acknowledge PDU (Q.2110)
 */
struct rsak_q2110_pdu {
	int		rsak_rsvd;	/* Reserved */
	union {
		u_char		rsaku_type;	/* PDU type, etc */
		sscop_seq	rsaku_nmr;	/* N(MR) */
	} rsak_u;
};
#define	rsak2_type	rsak_u.rsaku_type
#define	rsak_nmr	rsak_u.rsaku_nmr

/*
 * Resynchronization Acknowledge PDU (Q.SAAL)
 */
struct rsak_qsaal_pdu {
	u_char		rsaks_type;	/* PDU type, etc */
	u_char		rsak_rsvd[3];	/* Reserved */
};

/*
 * Error Recovery PDU
 */
struct er_pdu {
	char		er_rsvd[3];	/* Reserved */
	u_char		er_nsq;		/* N(SQ) */
	union {
		u_char		eru_type;	/* PDU type, etc */
		sscop_seq	eru_nmr;	/* N(MR) */
	} er_u;
};
#define	er_type		er_u.eru_type
#define	er_nmr		er_u.eru_nmr

/*
 * Error Recovery Acknowledge PDU
 */
struct erak_pdu {
	int		erak_rsvd;	/* Reserved */
	union {
		u_char		eraku_type;	/* PDU type, etc */
		sscop_seq	eraku_nmr;	/* N(MR) */
	} erak_u;
};
#define	erak_type	erak_u.eraku_type
#define	erak_nmr	erak_u.eraku_nmr

/*
 * Sequenced Data PDU
 */
struct sd_pdu {
	union {
		u_char		sdu_type;	/* PDU type, etc */
		sscop_seq	sdu_ns;		/* N(S) */
	} sd_u;
};
#define	sd_type		sd_u.sdu_type
#define	sd_ns		sd_u.sdu_ns

/*
 * Sequenced Data with Poll PDU
 */
struct sdp_pdu {
	sscop_seq	sdp_nps;	/* N(PS) */
	union {
		u_char		sdpu_type;	/* PDU type, etc */
		sscop_seq	sdpu_ns;	/* N(S) */
	} sdp_u;
};
#define	sdp_type	sdp_u.sdpu_type
#define	sdp_ns		sdp_u.sdpu_ns

/*
 * Poll PDU
 */
struct poll_pdu {
	sscop_seq	poll_nps;	/* N(PS) */
	union {
		u_char		pollu_type;	/* PDU type, etc */
		sscop_seq	pollu_ns;	/* N(S) */
	} poll_u;
};
#define	poll_type	poll_u.pollu_type
#define	poll_ns		poll_u.pollu_ns

/*
 * Solicited Status PDU
 */
struct stat_pdu {
	sscop_seq	stat_nps;	/* N(PS) */
	sscop_seq	stat_nmr;	/* N(MR) */
	union {
		u_char		statu_type;	/* PDU type, etc */
		sscop_seq	statu_nr;	/* N(R) */
	} stat_u;
};
#define	stat_type	stat_u.statu_type
#define	stat_nr		stat_u.statu_nr

/*
 * Unsolicited Status PDU
 */
struct ustat_pdu {
	sscop_seq	ustat_le1;	/* List element 1 */
	sscop_seq	ustat_le2;	/* List element 2 */
	sscop_seq	ustat_nmr;	/* N(MR) */
	union {
		u_char		ustatu_type;	/* PDU type, etc */
		sscop_seq	ustatu_nr;	/* N(R) */
	} ustat_u;
};
#define	ustat_type	ustat_u.ustatu_type
#define	ustat_nr	ustat_u.ustatu_nr

/*
 * Unit Data PDU
 */
struct ud_pdu {
	u_char		ud_type;	/* PDU type, etc */
	u_char		ud_rsvd[3];	/* Reserved */
};

/*
 * Management Data PDU
 */
struct md_pdu {
	u_char		md_type;	/* PDU type, etc */
	u_char		md_rsvd[3];	/* Reserved */
};

#endif	/* _UNI_SSCOP_PDU_H */
OpenPOWER on IntegriCloud