1 /*
2 * Copyright (c) 1996-2003
3 * Fraunhofer Institute for Open Communication Systems (FhG Fokus).
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 * SUCH DAMAGE.
26 *
27 * Author: Hartmut Brandt <harti@freebsd.org>
28 *
29 * $Begemot: libunimsg/netnatm/sig/unidef.h,v 1.9 2004/07/08 08:22:24 brandt Exp $
30 *
31 * UNI public definitions.
32 */
33 #ifndef _ATM_SIG_UNIDEF_H_
34 #define _ATM_SIG_UNIDEF_H_
35
36 #ifdef _KERNEL
37 #include <sys/stdint.h>
38 #else
39 #include <stdint.h>
40 #endif
41
42 /*
43 * Debug facilities
44 */
45 #define UNI_DEBUG_FACILITIES \
46 UNI_DEBUG_DEFINE(TIMEOUT) \
47 UNI_DEBUG_DEFINE(RESTART) \
48 UNI_DEBUG_DEFINE(SAAL) \
49 UNI_DEBUG_DEFINE(PARSE) \
50 UNI_DEBUG_DEFINE(CALL) \
51 UNI_DEBUG_DEFINE(WARN) \
52 UNI_DEBUG_DEFINE(COORD) \
53 UNI_DEBUG_DEFINE(API) \
54 UNI_DEBUG_DEFINE(MSG) \
55 UNI_DEBUG_DEFINE(ERR) \
56 UNI_DEBUG_DEFINE(VERIFY) \
57
58 enum uni_verb {
59 #define UNI_DEBUG_DEFINE(D) UNI_FAC_##D,
60 UNI_DEBUG_FACILITIES
61 #undef UNI_DEBUG_DEFINE
62
63 UNI_MAXFACILITY,
64 };
65
66 /*
67 * Default timer values and repeat counts
68 */
69 #define UNI_T301_DEFAULT 180000
70 #define UNI_T303_DEFAULT 4000
71 #define UNI_T303_CNT_DEFAULT 2
72 #define UNI_T308_DEFAULT 30000
73 #define UNI_T308_CNT_DEFAULT 2
74 #define UNI_T309_DEFAULT 10000
75 #define UNI_T310U_DEFAULT 30000
76 #define UNI_T310N_DEFAULT 10000
77 #define UNI_T313_DEFAULT 4000
78 #define UNI_T316_DEFAULT 120000
79 #define UNI_T316_CNT_DEFAULT 2
80 #define UNI_T317_DEFAULT 90000
81 #define UNI_T322_DEFAULT 4000
82 #define UNI_T322_CNT_DEFAULT 2
83 #define UNI_T397_DEFAULT UNI_T301_DEFAULT
84 #define UNI_T398_DEFAULT 4000
85 #define UNI_T399U_DEFAULT (UNI_T303_DEFAULT + UNI_T310U_DEFAULT)
86 #define UNI_T399N_DEFAULT (UNI_T303_DEFAULT + UNI_T310N_DEFAULT)
87
88 /*
89 * Protocol support
90 */
91 enum uni_proto {
92 UNIPROTO_UNI40U, /* UNI4.0 user side */
93 UNIPROTO_UNI40N, /* UNI4.0 network side */
94 UNIPROTO_PNNI10, /* PNNI1.0 */
95 };
96 enum uni_popt {
97 UNIPROTO_GFP = 0x0001, /* enable GFP */
98 UNIPROTO_SB_TB = 0x0002, /* Coincident Sb-Tb/Tb */
99
100 UNIPROTO_ALLMASK = 0x0003,
101 };
102
103 /*
104 * Other options
105 */
106 enum uni_option {
107 UNIOPT_GIT_HARD = 0x0001, /* harder check of GIT IE */
108 UNIOPT_BEARER_HARD = 0x0002, /* harder check of BEARER IE */
109 UNIOPT_CAUSE_HARD = 0x0004, /* harder check of CAUSE IE */
110
111 UNIOPT_ALLMASK = 0x0007,
112 };
113
114 /*
115 * UNI configuration
116 */
117 struct uni_config {
118 uint32_t proto; /* which protocol */
119 uint32_t popt; /* protocol option */
120 uint32_t option; /* other options */
121 uint32_t timer301; /* T301 */
122 uint32_t timer303; /* T303 */
123 uint32_t init303; /* T303 retransmission count */
124 uint32_t timer308; /* T308 */
125 uint32_t init308; /* T308 retransmission count */
126 uint32_t timer309; /* T309 */
127 uint32_t timer310; /* T310 */
128 uint32_t timer313; /* T313 */
129 uint32_t timer316; /* T316 */
130 uint32_t init316; /* T316 retransmission count */
131 uint32_t timer317; /* T317 */
132 uint32_t timer322; /* T322 */
133 uint32_t init322; /* T322 retransmission count */
134 uint32_t timer397; /* T397 */
135 uint32_t timer398; /* T398 */
136 uint32_t timer399; /* T399 */
137 };
138 enum uni_config_mask {
139 UNICFG_PROTO = 0x00000001,
140 UNICFG_TIMER301 = 0x00000002,
141 UNICFG_TIMER303 = 0x00000004,
142 UNICFG_INIT303 = 0x00000008,
143 UNICFG_TIMER308 = 0x00000010,
144 UNICFG_INIT308 = 0x00000020,
145 UNICFG_TIMER309 = 0x00000040,
146 UNICFG_TIMER310 = 0x00000080,
147 UNICFG_TIMER313 = 0x00000100,
148 UNICFG_TIMER316 = 0x00000200,
149 UNICFG_INIT316 = 0x00000400,
150 UNICFG_TIMER317 = 0x00000800,
151 UNICFG_TIMER322 = 0x00001000,
152 UNICFG_INIT322 = 0x00002000,
153 UNICFG_TIMER397 = 0x00004000,
154 UNICFG_TIMER398 = 0x00008000,
155 UNICFG_TIMER399 = 0x00010000,
156
157 UNICFG_ALLMASK = 0x0001ffff,
158 };
159
160 /*
161 * API signals
162 */
163 enum uni_sig {
164 UNIAPI_ERROR = 0, /* UNI -> API */
165
166 UNIAPI_CALL_CREATED = 1, /* UNI -> API */
167 UNIAPI_CALL_DESTROYED = 2, /* UNI -> API */
168 UNIAPI_PARTY_CREATED = 3, /* UNI -> API */
169 UNIAPI_PARTY_DESTROYED = 4, /* UNI -> API */
170
171 UNIAPI_LINK_ESTABLISH_request = 5, /* API -> UNI */
172 UNIAPI_LINK_ESTABLISH_confirm = 6, /* UNI -> API */
173 UNIAPI_LINK_RELEASE_request = 7, /* API -> UNI */
174 UNIAPI_LINK_RELEASE_confirm = 8, /* UNI -> API */
175
176 UNIAPI_RESET_request = 9, /* API -> UNI */
177 UNIAPI_RESET_confirm = 10, /* UNI -> API */
178 UNIAPI_RESET_indication = 11, /* UNI -> API */
179 UNIAPI_RESET_ERROR_indication = 12, /* UNI -> API */
180 UNIAPI_RESET_response = 13, /* API -> UNI */
181 UNIAPI_RESET_ERROR_response = 14, /* API -> UNI */
182 UNIAPI_RESET_STATUS_indication = 15, /* UNI -> API */
183
184 UNIAPI_SETUP_request = 16, /* API -> UNI */
185 UNIAPI_SETUP_indication = 17, /* UNI -> API */
186 UNIAPI_SETUP_response = 18, /* API -> UNI */
187 UNIAPI_SETUP_confirm = 19, /* UNI -> API */
188 UNIAPI_SETUP_COMPLETE_indication= 20, /* U-UNI -> API */
189 UNIAPI_SETUP_COMPLETE_request = 46, /* API -> N-UNI */
190 UNIAPI_ALERTING_request = 21, /* API -> UNI */
191 UNIAPI_ALERTING_indication = 22, /* UNI -> API */
192 UNIAPI_PROCEEDING_request = 23, /* API -> UNI */
193 UNIAPI_PROCEEDING_indication = 24, /* UNI -> API */
194 UNIAPI_RELEASE_request = 25, /* API -> UNI */
195 UNIAPI_RELEASE_indication = 26, /* UNI -> API */
196 UNIAPI_RELEASE_response = 27, /* API -> UNI */
197 UNIAPI_RELEASE_confirm = 28, /* UNI -> API */
198 UNIAPI_NOTIFY_request = 29, /* API -> UNI */
199 UNIAPI_NOTIFY_indication = 30, /* UNI -> API */
200 UNIAPI_STATUS_indication = 31, /* UNI -> API */
201 UNIAPI_STATUS_ENQUIRY_request = 32, /* API -> UNI */
202
203 UNIAPI_ADD_PARTY_request = 33, /* API -> UNI */
204 UNIAPI_ADD_PARTY_indication = 34, /* UNI -> API */
205 UNIAPI_PARTY_ALERTING_request = 35, /* API -> UNI */
206 UNIAPI_PARTY_ALERTING_indication= 36, /* UNI -> API */
207 UNIAPI_ADD_PARTY_ACK_request = 37, /* API -> UNI */
208 UNIAPI_ADD_PARTY_ACK_indication = 38, /* UNI -> API */
209 UNIAPI_ADD_PARTY_REJ_request = 39, /* API -> UNI */
210 UNIAPI_ADD_PARTY_REJ_indication = 40, /* UNI -> API */
211 UNIAPI_DROP_PARTY_request = 41, /* API -> UNI */
212 UNIAPI_DROP_PARTY_indication = 42, /* UNI -> API */
213 UNIAPI_DROP_PARTY_ACK_request = 43, /* API -> UNI */
214 UNIAPI_DROP_PARTY_ACK_indication= 44, /* UNI -> API */
215
216 UNIAPI_ABORT_CALL_request = 45, /* API -> UNI */
217
218 UNIAPI_MAXSIG = 47
219 };
220
221 struct uniapi_error {
222 uint32_t reason;
223 uint32_t state;
224 };
225 /* keep this in sync with atmapi.h:enum atmerr */
226
227 #define UNIAPI_DEF_ERRORS(MACRO) \
228 MACRO(OK, 0, "no error") \
229 MACRO(ERROR_BAD_SIGNAL, 1, "unknown signal") \
230 MACRO(ERROR_BADCU, 2, "signal in bad co-ordinator state") \
231 MACRO(ERROR_BAD_CALLSTATE, 3, "signal in bad call state") \
232 MACRO(ERROR_BAD_EPSTATE, 4, "signal in bad endpoint state") \
233 MACRO(ERROR_BAD_ARG, 5, "bad argument") \
234 MACRO(ERROR_BAD_CALL, 6, "unknown call reference") \
235 MACRO(ERROR_BAD_PARTY, 7, "unknown party") \
236 MACRO(ERROR_BAD_CTYPE, 8, "bad type of call for signal") \
237 MACRO(ERROR_BAD_IE, 9, "bad information element") \
238 MACRO(ERROR_EPREF_INUSE, 10, "endpoint reference already in use") \
239 MACRO(ERROR_MISSING_IE, 11, "missing information element") \
240 MACRO(ERROR_ENCODING, 12, "error during message encoding") \
241 MACRO(ERROR_NOMEM, 13, "out of memory") \
242 MACRO(ERROR_BUSY, 14, "status enquiry busy")
243
244 enum {
245 #define DEF(NAME, VAL, STR) UNIAPI_##NAME = VAL,
246 UNIAPI_DEF_ERRORS(DEF)
247 #undef DEF
248 };
249
250 struct uniapi_call_created {
251 struct uni_cref cref;
252 };
253 struct uniapi_call_destroyed {
254 struct uni_cref cref;
255 };
256 struct uniapi_party_created {
257 struct uni_cref cref;
258 struct uni_ie_epref epref;
259 };
260 struct uniapi_party_destroyed {
261 struct uni_cref cref;
262 struct uni_ie_epref epref;
263 };
264 struct uniapi_abort_call_request {
265 struct uni_cref cref;
266 };
267
268 struct uniapi_reset_request {
269 struct uni_ie_restart restart;
270 struct uni_ie_connid connid;
271 };
272
273 struct uniapi_reset_confirm {
274 struct uni_ie_restart restart;
275 struct uni_ie_connid connid;
276 };
277
278 struct uniapi_reset_indication {
279 struct uni_ie_restart restart;
280 struct uni_ie_connid connid;
281
282 };
283 struct uniapi_reset_error_indication {
284 uint32_t source; /* 0 - start, 1 - response */
285 uint32_t reason;
286 };
287
288 #define UNIAPI_DEF_RESET_ERRORS(MACRO) \
289 MACRO(UNIAPI_RESET_ERROR_NO_CONFIRM, 0, \
290 "no confirmation") \
291 MACRO(UNIAPI_RESET_ERROR_NO_RESPONSE, 1, \
292 "no response") \
293 MACRO(UNIAPI_RESET_ERROR_PEER_INCOMP_STATE, 2, \
294 "incompatible state")
295 enum {
296 #define DEF(NAME, VALUE, STR) NAME = VALUE,
297 UNIAPI_DEF_RESET_ERRORS(DEF)
298 #undef DEF
299 };
300
301 struct uniapi_reset_response {
302 struct uni_ie_restart restart;
303 struct uni_ie_connid connid;
304 };
305
306 struct uniapi_reset_error_response {
307 struct uni_ie_cause cause;
308 };
309
310 struct uniapi_reset_status_indication {
311 struct uni_cref cref; /* STATUS message CREF */
312 struct uni_ie_callstate callstate;
313 struct uni_ie_cause cause;
314 };
315
316 struct uniapi_setup_request {
317 struct uni_setup setup;
318 };
319 struct uniapi_setup_indication {
320 struct uni_setup setup;
321 };
322 struct uniapi_setup_response {
323 struct uni_connect connect;
324 };
325 struct uniapi_setup_confirm {
326 struct uni_connect connect;
327 };
328 struct uniapi_setup_complete_indication {
329 struct uni_connect_ack connect_ack;
330 };
331 struct uniapi_setup_complete_request {
332 struct uni_connect_ack connect_ack;
333 };
334
335 struct uniapi_alerting_request {
336 struct uni_alerting alerting;
337 };
338
339 struct uniapi_alerting_indication {
340 struct uni_alerting alerting;
341 };
342
343 struct uniapi_proceeding_request {
344 struct uni_call_proc call_proc;
345 };
346
347 struct uniapi_proceeding_indication {
348 struct uni_call_proc call_proc;
349 };
350
351
352 struct uniapi_release_request {
353 struct uni_release release;
354 };
355 struct uniapi_release_indication {
356 struct uni_release release;
357 };
358 struct uniapi_release_response {
359 struct uni_release_compl release_compl;
360 };
361 /*
362 * A release confirm can come from a RELEASE COMPLETE or a RELEASE.
363 * Because the IEs in a RELEASE COMPLETE are a subset of a RELEASE,
364 * use the RELEASE here.
365 */
366 struct uniapi_release_confirm {
367 struct uni_release release;
368 };
369
370 struct uniapi_notify_request {
371 struct uni_notify notify;
372 };
373 struct uniapi_notify_indication {
374 struct uni_notify notify;
375 };
376
377 struct uniapi_status_indication {
378 struct uni_cref cref;
379 enum uni_callstate my_state;
380 enum uni_cause my_cause;
381 struct uni_ie_callstate his_state;
382 struct uni_ie_cause his_cause;
383 struct uni_ie_epref epref;
384 struct uni_ie_epstate epstate;
385 };
386 struct uniapi_status_enquiry_request {
387 struct uni_cref cref;
388 struct uni_ie_epref epref;
389 };
390
391 struct uniapi_add_party_request {
392 struct uni_add_party add;
393 };
394 struct uniapi_add_party_indication {
395 struct uni_add_party add;
396 };
397
398 struct uniapi_party_alerting_request {
399 struct uni_party_alerting alert;
400 };
401 struct uniapi_party_alerting_indication {
402 struct uni_party_alerting alert;
403 };
404
405 struct uniapi_add_party_ack_request {
406 struct uni_add_party_ack ack;
407 };
408 struct uniapi_add_party_ack_indication {
409 struct uni_add_party_ack ack;
410 };
411 struct uniapi_add_party_rej_request {
412 struct uni_add_party_rej rej;
413 };
414 struct uniapi_add_party_rej_indication {
415 struct uni_add_party_rej rej;
416 };
417
418 struct uniapi_drop_party_request {
419 struct uni_drop_party drop;
420 };
421 struct uniapi_drop_party_indication {
422 struct uni_drop_party drop;
423 struct uni_ie_cause my_cause;
424 };
425
426 struct uniapi_drop_party_ack_request {
427 struct uni_drop_party_ack ack;
428 };
429 struct uniapi_drop_party_ack_indication {
430 struct uni_drop_party drop;
431 struct uni_ie_crankback crankback;
432 };
433
434 union uniapi_all {
435 struct uniapi_error error;
436 struct uniapi_call_created call_created;
437 struct uniapi_call_destroyed call_destroyed;
438 struct uniapi_party_created party_created;
439 struct uniapi_party_destroyed party_destroyed;
440 struct uniapi_abort_call_request abort_call_request;
441 struct uniapi_reset_request reset_request;
442 struct uniapi_reset_confirm reset_confirm;
443 struct uniapi_reset_indication reset_indication;
444 struct uniapi_reset_error_indication reset_error_indication;
445 struct uniapi_reset_response reset_response;
446 struct uniapi_reset_error_response reset_error_response;
447 struct uniapi_reset_status_indication reset_status_indication;
448 struct uniapi_setup_request setup_request;
449 struct uniapi_setup_indication setup_indication;
450 struct uniapi_setup_response setup_response;
451 struct uniapi_setup_confirm setup_confirm;
452 struct uniapi_setup_complete_indication setup_complete_indication;
453 struct uniapi_setup_complete_request setup_complete_request;
454 struct uniapi_alerting_request alerting_request;
455 struct uniapi_alerting_indication alerting_indication;
456 struct uniapi_proceeding_request proceeding_request;
457 struct uniapi_proceeding_indication proceeding_indication;
458 struct uniapi_release_request release_request;
459 struct uniapi_release_indication release_indication;
460 struct uniapi_release_response release_response;
461 struct uniapi_release_confirm release_confirm;
462 struct uniapi_notify_request notify_request;
463 struct uniapi_notify_indication notify_indication;
464 struct uniapi_status_indication status_indication;
465 struct uniapi_status_enquiry_request status_enquiry_request;
466 struct uniapi_add_party_request add_party_request;
467 struct uniapi_add_party_indication add_party_indication;
468 struct uniapi_party_alerting_request party_alerting_request;
469 struct uniapi_party_alerting_indication party_alerting_indication;
470 struct uniapi_add_party_ack_request add_party_ack_request;
471 struct uniapi_add_party_ack_indication add_party_ack_indication;
472 struct uniapi_add_party_rej_request add_party_rej_request;
473 struct uniapi_add_party_rej_indication add_party_rej_indication;
474 struct uniapi_drop_party_request drop_party_request;
475 struct uniapi_drop_party_indication drop_party_indication;
476 struct uniapi_drop_party_ack_request drop_party_ack_request;
477 struct uniapi_drop_party_ack_indication drop_party_ack_indication;
478 };
479
480 #endif
Cache object: fd92ff24b0e28ddda7c01b18d07b6b1b
|