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 <[email protected]> 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 481