1/* 2 * Copyright (c) 1996-2003 3 * Fraunhofer Institute for Open Communication Systems (FhG Fokus). 4 * All rights reserved. 5 * 6 * Author: Hartmut Brandt <harti@freebsd.org> 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 * 29 * $Begemot: libunimsg/netnatm/msg/unistruct.h,v 1.7 2004/07/16 18:42:22 brandt Exp $ 30 * 31 * This file defines all structures that are used by 32 * API users. 33 */ 34#ifndef _NETNATM_MSG_UNISTRUCT_H_ 35#define _NETNATM_MSG_UNISTRUCT_H_ 36 37#include <netnatm/msg/uni_config.h> 38 39/* 40 * define IE and MSG header 41 */ 42#include <netnatm/msg/uni_hdr.h> 43 44/* 45 * define all IE's 46 */ 47/************************************************************************* 48 * 49 * Free FORM IE 50 */ 51struct uni_ie_unrec { 52 struct uni_iehdr h; 53 uint8_t id; /* ID of this IE */ 54 u_int len; /* data length */ 55 u_char data[128]; /* arbitrary maximum length */ 56}; 57 58/************************************************************************* 59 * 60 * ATM adaptation layer parameters information element 61 */ 62enum { 63 UNI_AAL_SUB_ID = 0x85, 64 UNI_AAL_CBR_ID = 0x86, 65 UNI_AAL_MULT_ID = 0x87, 66 UNI_AAL_SCREC_ID = 0x88, 67 UNI_AAL_ECM_ID = 0x89, 68 UNI_AAL_BSIZE_ID = 0x8a, 69 UNI_AAL_PART_ID = 0x8b, 70 UNI_AAL_FWDCPCS_ID = 0x8c, 71 UNI_AAL_BWDCPCS_ID = 0x81, 72 UNI_AAL_MID_ID = 0x82, 73 UNI_AAL_SSCS_ID = 0x84, 74}; 75 76enum uni_aal { 77 UNI_AAL_0 = 0x00, /* voice */ 78 UNI_AAL_1 = 0x01, 79 UNI_AAL_2 = 0x02, 80 UNI_AAL_4 = 0x03, /* same as AAL 3 */ 81 UNI_AAL_5 = 0x05, 82 UNI_AAL_USER = 0x10, 83}; 84enum uni_aal1_subtype { 85 UNI_AAL1_SUB_NULL = 0x00, 86 UNI_AAL1_SUB_VOICE = 0x01, 87 UNI_AAL1_SUB_CIRCUIT = 0x02, 88 UNI_AAL1_SUB_HQAUDIO = 0x04, 89 UNI_AAL1_SUB_VIDEO = 0x05, 90}; 91enum uni_aal1_cbr { 92 UNI_AAL1_CBR_64 = 0x01, 93 UNI_AAL1_CBR_1544 = 0x04, 94 UNI_AAL1_CBR_6312 = 0x05, 95 UNI_AAL1_CBR_32064 = 0x06, 96 UNI_AAL1_CBR_44736 = 0x07, 97 UNI_AAL1_CBR_97728 = 0x08, 98 UNI_AAL1_CBR_2048 = 0x10, 99 UNI_AAL1_CBR_8448 = 0x11, 100 UNI_AAL1_CBR_34368 = 0x12, 101 UNI_AAL1_CBR_139264 = 0x13, 102 UNI_AAL1_CBR_N64 = 0x40, 103 UNI_AAL1_CBR_N8 = 0x41, 104}; 105enum uni_aal1_screc { 106 UNI_AAL1_SCREC_NULL = 0x00, /* synchr. circuit transport */ 107 UNI_AAL1_SCREC_SRTS = 0x01, /* synchr. residual timestamp */ 108 UNI_AAL1_SCREC_ACLK = 0x02, /* adaptive clock */ 109}; 110enum uni_aal1_ecm { 111 UNI_AAL1_ECM_NULL = 0x00, /* no error correction */ 112 UNI_AAL1_ECM_LOSS = 0x01, /* for loss sensitive signals */ 113 UNI_AAL1_ECM_DELAY = 0x02, /* for delay sensitive signals */ 114}; 115enum uni_aal_sscs { 116 UNI_AAL_SSCS_NULL = 0x00, /* Null */ 117 UNI_AAL_SSCS_SSCOPA = 0x01, /* assured SSCOP */ 118 UNI_AAL_SSCS_SSCOPU = 0x02, /* unassured SSCOP */ 119 UNI_AAL_SSCS_FRAME = 0x04, /* frame relay */ 120}; 121 122struct uni_ie_aal { 123 struct uni_iehdr h; 124 enum uni_aal type; /* aal type */ 125 126 union { 127#define UNI_AAL1_MULT_P 0x01 128#define UNI_AAL1_SCREC_P 0x02 129#define UNI_AAL1_ECM_P 0x04 130#define UNI_AAL1_BSIZE_P 0x08 131#define UNI_AAL1_PART_P 0x10 132 struct { 133 enum uni_aal1_subtype subtype; /* AAL1 subtype */ 134 enum uni_aal1_cbr cbr_rate; /* AAL1 CBR rate */ 135 u_int mult; /* AAL1 CBR mutliplier */ 136 enum uni_aal1_screc screc; /* AAL1 source clock recovery */ 137 enum uni_aal1_ecm ecm; /* AAL1 error correction */ 138 u_int bsize; /* AAL1 SDT blocksize */ 139 u_int part; /* AAL1 partial cell fill */ 140 } aal1; 141 142#define UNI_AAL4_CPCS_P 0x01 143#define UNI_AAL4_MID_P 0x02 144#define UNI_AAL4_SSCS_P 0x04 145 struct { 146 u_int fwd_cpcs; /* max fwd cpcs blocksize */ 147 u_int bwd_cpcs; /* max bkw cpcs blocksize */ 148 u_int mid_low; /* MID low range */ 149 u_int mid_high; /* MID high range */ 150 enum uni_aal_sscs sscs; /* sscs type */ 151 } aal4; 152 153#define UNI_AAL5_CPCS_P 0x01 154#define UNI_AAL5_SSCS_P 0x02 155 struct { 156 u_int fwd_cpcs; /* max fwd cpcs blocksize */ 157 u_int bwd_cpcs; /* max bkw cpcs blocksize */ 158 enum uni_aal_sscs sscs; /* sscs type */ 159 } aal5; 160 161 struct { 162 u_int len; /* number of bytes */ 163 u_char user[4]; /* user data */ 164 } aalu; 165 } u; 166}; 167 168/************************************************************************* 169 * 170 * Called party number information element 171 * Called party subaddress information element 172 * Calling party number information element 173 * Calling party subaddress information element 174 * Q.2951/UNI4.0 Connected number information element 175 * Q.2951/UNI4.0 Connected subaddress information element 176 */ 177enum uni_addr_type { 178 UNI_ADDR_UNKNOWN = 0x0, 179 UNI_ADDR_INTERNATIONAL = 0x1, 180 UNI_ADDR_NATIONAL = 0x2, /* not sup */ 181 UNI_ADDR_NETWORK = 0x3, /* not sup */ 182 UNI_ADDR_SUBSCR = 0x4, /* not sup */ 183 UNI_ADDR_ABBR = 0x6, /* not sup */ 184}; 185enum uni_addr_plan { 186 /* UNI_ADDR_UNKNOWN = 0x0, */ /* not sup */ 187 UNI_ADDR_E164 = 0x1, 188 UNI_ADDR_ATME = 0x2, 189 UNI_ADDR_DATA = 0x3, /* not sup */ 190 UNI_ADDR_PRIVATE = 0x9, /* not sup */ 191}; 192enum uni_subaddr_type { 193 UNI_SUBADDR_NSAP = 0x0, 194 UNI_SUBADDR_ATME = 0x1, 195 UNI_SUBADDR_USER = 0x2, /* not sup */ 196}; 197enum uni_addr_pres { 198 UNI_ADDR_PRES = 0x0, 199 UNI_ADDR_RESTRICT = 0x1, 200 UNI_ADDR_NONUMBER = 0x2, 201}; 202enum uni_addr_screen { 203 UNI_ADDR_SCREEN_NOT = 0x0, 204 UNI_ADDR_SCREEN_PASSED = 0x1, 205 UNI_ADDR_SCREEN_FAILED = 0x2, 206 UNI_ADDR_SCREEN_NET = 0x3, 207}; 208 209/* don't use bitfields to get a defined structure layout */ 210struct uni_addr { 211 uint8_t type; 212 uint8_t plan; 213 uint8_t len; 214 u_char addr[UNI_ADDR_MAXLEN]; 215}; 216struct uni_subaddr { 217 enum uni_subaddr_type type; 218 u_int len; 219 u_char addr[UNI_SUBADDR_MAXLEN]; 220}; 221 222struct uni_ie_called { 223 struct uni_iehdr h; 224 struct uni_addr addr; 225}; 226 227struct uni_ie_calledsub { 228 struct uni_iehdr h; 229 struct uni_subaddr addr; 230}; 231 232struct uni_ie_calling { 233 struct uni_iehdr h; 234#define UNI_CALLING_SCREEN_P 0x0001 235 236 struct uni_addr addr; 237 enum uni_addr_pres pres; 238 enum uni_addr_screen screen; 239}; 240 241struct uni_ie_callingsub { 242 struct uni_iehdr h; 243 struct uni_subaddr addr; 244}; 245 246struct uni_ie_conned { 247 struct uni_iehdr h; 248#define UNI_CONNED_SCREEN_P 0x0001 249 250 struct uni_addr addr; 251 enum uni_addr_pres pres; 252 enum uni_addr_screen screen; 253}; 254 255struct uni_ie_connedsub { 256 struct uni_iehdr h; 257 struct uni_subaddr addr; 258}; 259 260/************************************************************************* 261 * 262 * Broadband bearer capability descriptor 263 * On reception of an old bearer descriptor, it is automatically 264 * converted to a new, legal one. 265 */ 266enum uni_bearer_class { 267 UNI_BEARER_A = 0x01, 268 UNI_BEARER_C = 0x03, 269 UNI_BEARER_X = 0x10, 270 UNI_BEARER_TVP = 0x30, 271}; 272 273enum uni_bearer_atc { 274 UNI_BEARER_ATC_CBR = 0x05, 275 UNI_BEARER_ATC_CBR1 = 0x07, 276 UNI_BEARER_ATC_VBR = 0x09, 277 UNI_BEARER_ATC_VBR1 = 0x13, 278 UNI_BEARER_ATC_NVBR = 0x0a, 279 UNI_BEARER_ATC_NVBR1 = 0x0b, 280 UNI_BEARER_ATC_ABR = 0x0c, 281 282 UNI_BEARER_ATCX_0 = 0x00, 283 UNI_BEARER_ATCX_1 = 0x01, 284 UNI_BEARER_ATCX_2 = 0x02, 285 UNI_BEARER_ATCX_4 = 0x04, 286 UNI_BEARER_ATCX_6 = 0x06, 287 UNI_BEARER_ATCX_8 = 0x08, 288}; 289 290enum uni_bearer_clip { 291 UNI_BEARER_NOCLIP = 0x0, 292 UNI_BEARER_CLIP = 0x1, 293}; 294 295enum uni_bearer_cfg { 296 UNI_BEARER_P2P = 0x0, 297 UNI_BEARER_MP = 0x1, 298}; 299 300struct uni_ie_bearer { 301 struct uni_iehdr h; 302#define UNI_BEARER_ATC_P 0x02 303 304 enum uni_bearer_class bclass; /* bearer class */ 305 enum uni_bearer_atc atc; /* ATM transfer capability */ 306 enum uni_bearer_clip clip; /* suspectibility to clipping */ 307 enum uni_bearer_cfg cfg; /* u-plane configuration */ 308}; 309 310/************************************************************************* 311 * 312 * Broadband higher layer information element 313 */ 314enum uni_bhli { 315 UNI_BHLI_ISO = 0x00, /* IDO defined */ 316 UNI_BHLI_USER = 0x01, /* user specific */ 317 UNI_BHLI_VENDOR = 0x03, /* vendor specific */ 318}; 319 320struct uni_ie_bhli { 321 struct uni_iehdr h; 322 enum uni_bhli type; 323 u_char info[8]; 324 u_int len; 325}; 326 327/************************************************************************* 328 * 329 * Boradband lower layer information element 330 */ 331enum { 332 UNI_BLLI_L1_ID = 0x1, 333 UNI_BLLI_L2_ID = 0x2, 334 UNI_BLLI_L3_ID = 0x3, 335}; 336 337enum uni_blli_l2 { 338 UNI_BLLI_L2_BASIC = 0x01, 339 UNI_BLLI_L2_Q921 = 0x02, 340 UNI_BLLI_L2_X25LL = 0x06, 341 UNI_BLLI_L2_X25ML = 0x07, 342 UNI_BLLI_L2_LABP = 0x08, 343 UNI_BLLI_L2_HDLC_ARM = 0x09, 344 UNI_BLLI_L2_HDLC_NRM = 0x0a, 345 UNI_BLLI_L2_HDLC_ABM = 0x0b, 346 UNI_BLLI_L2_LAN = 0x0c, 347 UNI_BLLI_L2_X75 = 0x0d, 348 UNI_BLLI_L2_Q922 = 0x0e, 349 UNI_BLLI_L2_USER = 0x10, 350 UNI_BLLI_L2_ISO7776 = 0x11, 351}; 352 353enum uni_blli_l2_mode { 354 UNI_BLLI_L2NORM = 0x1, 355 UNI_BLLI_L2EXT = 0x2, 356}; 357 358enum uni_blli_l3 { 359 UNI_BLLI_L3_X25 = 0x06, 360 UNI_BLLI_L3_ISO8208 = 0x07, 361 UNI_BLLI_L3_X223 = 0x08, 362 UNI_BLLI_L3_CLMP = 0x09, 363 UNI_BLLI_L3_T70 = 0x0a, 364 UNI_BLLI_L3_TR9577 = 0x0b, 365 UNI_BLLI_L3_H310 = 0x0c, 366 UNI_BLLI_L3_H321 = 0x0d, 367 UNI_BLLI_L3_USER = 0x10, 368}; 369 370enum uni_blli_l3_mode { 371 UNI_BLLI_L3NSEQ = 0x1, /* normal sequence numbering */ 372 UNI_BLLI_L3ESEQ = 0x2, /* extended sequence numbering */ 373}; 374 375enum uni_blli_l3_psiz { 376 UNI_BLLI_L3_16 = 0x4, /* 16 byte packets */ 377 UNI_BLLI_L3_32 = 0x5, /* 32 byte packets */ 378 UNI_BLLI_L3_64 = 0x6, /* 64 byte packets */ 379 UNI_BLLI_L3_128 = 0x7, /* 128 byte packets */ 380 UNI_BLLI_L3_256 = 0x8, /* 256 byte packets */ 381 UNI_BLLI_L3_512 = 0x9, /* 512 byte packets */ 382 UNI_BLLI_L3_1024 = 0xa, /* 1024 byte packets */ 383 UNI_BLLI_L3_2048 = 0xb, /* 2048 byte packets */ 384 UNI_BLLI_L3_4096 = 0xc, /* 4096 byte packets */ 385}; 386 387enum uni_blli_l3_ttype { 388 UNI_BLLI_L3_TTYPE_RECV = 0x1, /* receive only */ 389 UNI_BLLI_L3_TTYPE_SEND = 0x2, /* send only */ 390 UNI_BLLI_L3_TTYPE_BOTH = 0x3, /* both */ 391}; 392 393enum uni_blli_l3_mux { 394 UNI_BLLI_L3_MUX_NOMUX = 0, /* no multiplexing */ 395 UNI_BLLI_L3_MUX_TS = 1, /* transport stream */ 396 UNI_BLLI_L3_MUX_TSFEC = 2, /* transport stream with FEC */ 397 UNI_BLLI_L3_MUX_PS = 3, /* program stream */ 398 UNI_BLLI_L3_MUX_PSFEC = 4, /* program stream with FEC */ 399 UNI_BLLI_L3_MUX_H221 = 5, /* H.221 */ 400}; 401 402enum uni_blli_l3_tcap { 403 UNI_BLLI_L3_TCAP_NOIND = 0, /* no indication */ 404 UNI_BLLI_L3_TCAP_AAL1 = 1, /* only AAL1 */ 405 UNI_BLLI_L3_TCAP_AAL5 = 2, /* only AAL5 */ 406 UNI_BLLI_L3_TCAP_AAL15 = 3, /* AAL1 and AAL5 */ 407}; 408 409/* Value for l3_ipi: */ 410enum { 411 UNI_BLLI_L3_SNAP = 0x80, /* IEEE 802.1 SNAP */ 412}; 413 414struct uni_ie_blli { 415 struct uni_iehdr h; 416#define UNI_BLLI_L1_P 0x0001 417#define UNI_BLLI_L2_P 0x0002 418#define UNI_BLLI_L2_Q933_P 0x0004 419#define UNI_BLLI_L2_WSIZ_P 0x0008 420#define UNI_BLLI_L2_USER_P 0x0010 421#define UNI_BLLI_L3_P 0x0020 422#define UNI_BLLI_L3_MODE_P 0x0040 423#define UNI_BLLI_L3_PSIZ_P 0x0080 424#define UNI_BLLI_L3_WSIZ_P 0x0100 425#define UNI_BLLI_L3_USER_P 0x0200 426#define UNI_BLLI_L3_IPI_P 0x0400 427#define UNI_BLLI_L3_SNAP_P 0x0800 428#define UNI_BLLI_L3_TTYPE_P 0x1000 429#define UNI_BLLI_L3_MUX_P 0x2000 430 431 u_int l1:5; /* layer 1 info */ 432 433 enum uni_blli_l2 l2; /* layer 2 info */ 434 u_int l2_q933:2; /* layer 2 Q.933 use */ 435 enum uni_blli_l2_mode l2_mode; /* layer 2 HDLC mode */ 436 u_char l2_user; /* layer 2 user info */ 437 u_char l2_wsiz; /* layer 2 window size */ 438 439 enum uni_blli_l3 l3; /* layer 3 info */ 440 enum uni_blli_l3_mode l3_mode; /* layer 3 mode */ 441 enum uni_blli_l3_psiz l3_psiz; /* layer 3 default packet size */ 442 u_char l3_wsiz; /* layer 3 window size */ 443 u_char l3_user; /* layer 3 user info */ 444 u_char l3_ipi; /* IPI byte */ 445 u_int oui; /* OUI bytes */ 446 u_int pid; /* PID bytes */ 447 enum uni_blli_l3_ttype l3_ttype; /* terminal bytes */ 448 enum uni_blli_l3_tcap l3_tcap; /* terminal capability */ 449 enum uni_blli_l3_mux l3_fmux; /* forward muxing */ 450 enum uni_blli_l3_mux l3_bmux; /* forward muxing */ 451}; 452 453/************************************************************************* 454 * 455 * Transit network selection IE 456 */ 457struct uni_ie_tns { 458 struct uni_iehdr h; 459 u_char net[UNI_TNS_MAXLEN]; 460 u_int len; 461}; 462 463/************************************************************************* 464 * 465 * Call state information element 466 */ 467enum uni_callstate { 468 UNI_CALLSTATE_U0 = 0x00, 469 UNI_CALLSTATE_N0 = 0x00, 470 UNI_CALLSTATE_NN0 = 0x00, 471 472 UNI_CALLSTATE_U1 = 0x01, 473 UNI_CALLSTATE_N1 = 0x01, 474 UNI_CALLSTATE_NN1 = 0x01, 475 476 UNI_CALLSTATE_U3 = 0x03, 477 UNI_CALLSTATE_N3 = 0x03, 478 UNI_CALLSTATE_NN3 = 0x03, 479 480 UNI_CALLSTATE_U4 = 0x04, 481 UNI_CALLSTATE_N4 = 0x04, 482 UNI_CALLSTATE_NN4 = 0x04, 483 484 UNI_CALLSTATE_U6 = 0x06, 485 UNI_CALLSTATE_N6 = 0x06, 486 UNI_CALLSTATE_NN6 = 0x06, 487 488 UNI_CALLSTATE_U7 = 0x07, 489 UNI_CALLSTATE_N7 = 0x07, 490 UNI_CALLSTATE_NN7 = 0x07, 491 492 UNI_CALLSTATE_U8 = 0x08, 493 UNI_CALLSTATE_N8 = 0x08, 494 495 UNI_CALLSTATE_U9 = 0x09, 496 UNI_CALLSTATE_N9 = 0x09, 497 UNI_CALLSTATE_NN9 = 0x09, 498 499 UNI_CALLSTATE_U10 = 0x0a, 500 UNI_CALLSTATE_N10 = 0x0a, 501 UNI_CALLSTATE_NN10 = 0x0a, 502 503 UNI_CALLSTATE_U11 = 0x0b, 504 UNI_CALLSTATE_N11 = 0x0b, 505 UNI_CALLSTATE_NN11 = 0x0b, 506 507 UNI_CALLSTATE_U12 = 0x0c, 508 UNI_CALLSTATE_N12 = 0x0c, 509 UNI_CALLSTATE_NN12 = 0x0c, 510 511 UNI_CALLSTATE_REST0 = 0x00, 512 UNI_CALLSTATE_REST1 = 0x3d, 513 UNI_CALLSTATE_REST2 = 0x3e, 514 515 UNI_CALLSTATE_U13 = 0x0d, 516 UNI_CALLSTATE_N13 = 0x0d, 517 518 UNI_CALLSTATE_U14 = 0x0e, 519 UNI_CALLSTATE_N14 = 0x0e, 520}; 521 522struct uni_ie_callstate { 523 struct uni_iehdr h; 524 enum uni_callstate state; 525}; 526 527/************************************************************************* 528 * 529 * Cause information element 530 */ 531enum uni_cause_loc { 532 UNI_CAUSE_LOC_USER = 0x0, 533 UNI_CAUSE_LOC_PRIVLOC = 0x1, 534 UNI_CAUSE_LOC_PUBLOC = 0x2, 535 UNI_CAUSE_LOC_TRANSIT = 0x3, 536 UNI_CAUSE_LOC_PUBREM = 0x4, 537 UNI_CAUSE_LOC_PRIVREM = 0x5, 538 UNI_CAUSE_LOC_INTERNAT = 0x6, 539 UNI_CAUSE_LOC_BEYOND = 0x7, 540}; 541 542#define UNI_DECLARE_CAUSE_VALUES \ 543D(UNALL_NUM, 0x01 /* 1*/, COND, Q.850, "Unallocated (unassigned) number") \ 544D(NOROUTE_NET, 0x02 /* 2*/, TNS, Q.850, "No route to specified transit network") \ 545D(NOROUTE, 0x03 /* 3*/, COND, Q.850, "No route to destination") \ 546D(SPTONE, 0x04 /* 4*/, NONE, Q.850, "Send special information tone") \ 547D(BADTRUNK, 0x05 /* 5*/, NONE, Q.850, "Misdialled trunk prefix") \ 548D(BADCHAN, 0x06 /* 6*/, NONE, Q.850, "Channel unacceptable") \ 549D(CALLAWARDED, 0x07 /* 7*/, NONE, Q.850, "Call awarded and being delivered in an established channel") \ 550D(PREEMPT, 0x08 /* 8*/, NONE, Q.850, "Preemption") \ 551D(PREEMPT_RES, 0x09 /* 9*/, NONE, Q.850, "Preemption - circuit reserved for reuse") \ 552D(CLEARING, 0x10 /* 16*/, COND, Q.850, "Normal call clearing") \ 553D(BUSY, 0x11 /* 17*/, CCBS, Q.850, "User busy") \ 554D(NO_RESPONSE, 0x12 /* 18*/, NONE, Q.850, "No user responding") \ 555D(NO_RESP_ALERT,0x13 /* 19*/, NONE, Q.850, "No answer from user (user alerted)") \ 556D(ABSENT, 0x14 /* 20*/, NONE, Q.850, "Subscriber absent") \ 557D(REJECTED, 0x15 /* 21*/, REJ, Q.850, "Call rejected") \ 558D(NUMCHG, 0x16 /* 22*/, NUMBER, Q.850, "Number changed") \ 559D(REDIR, 0x17 /* 23*/, NONE, Q.850, "Redirection to new destination") \ 560N(CLIR_REJECTED,0x17 /* 23*/, NONE, UNI4.0, "User rejects call with calling line identification restriction (CLIR)") \ 561D(EXCHG_ERR, 0x19 /* 25*/, NONE, Q.850, "Exchange routing error") \ 562D(NOSEL_CLEAR, 0x1a /* 26*/, NONE, Q.850, "Non-selected user clearing") \ 563D(DST_OOO, 0x1b /* 27*/, NONE, Q.850, "Destination out of order") \ 564D(INV_ADDR, 0x1c /* 28*/, NONE, Q.850, "Invalid number format (address incomplete)") \ 565D(FAC_REJ, 0x1d /* 29*/, FAC, Q.850, "Facility rejected") \ 566D(STATUS, 0x1e /* 30*/, NONE, Q.850, "Response to STATUS ENQUIRY") \ 567D(UNSPEC, 0x1f /* 31*/, NONE, Q.850, "Normal, unspecified") \ 568D(TMY_PARTY, 0x20 /* 32*/, NONE, Q.2971, "Too many pending add party requests") \ 569D(NOCHAN, 0x22 /* 34*/, CCBS, Q.850, "No circuit/channel available") \ 570N(SOFT_NAVL, 0x22 /* 34*/, NONE, PNNI1.0,"Requested called party soft PVPC or PVCC not available")\ 571D(VPCI_NAVL, 0x23 /* 35*/, NONE, Q.2610, "Requested VPCI/VCI not available") \ 572D(VPCI_FAIL, 0x24 /* 36*/, NONE, Q.2610, "VPCI/VPI assignment failure") \ 573D(CRATE_NAVL, 0x25 /* 37*/, CRATE, Q.2610, "User cell rate not available") \ 574D(NET_OOO, 0x26 /* 38*/, NONE, Q.850, "Network out of order") \ 575D(FRAME_OOS, 0x27 /* 39*/, NONE, Q.850, "Permanent frame mode connection out of service") \ 576D(FRAME_OP, 0x28 /* 40*/, NONE, Q.850, "Permanent frame mode connection operational") \ 577D(TEMP, 0x29 /* 41*/, NONE, Q.850, "Temporary failure") \ 578D(CONG, 0x2a /* 42*/, NONE, Q.850, "Switching equipment congestion") \ 579D(ACC_DISC, 0x2b /* 43*/, IE, Q.850, "Access information discarded") \ 580D(REQNOCHAN, 0x2c /* 44*/, NONE, Q.850, "Requested circuit/channel not available") \ 581D(NOVPCI, 0x2d /* 45*/, NONE, Q.2610, "No VPCI/VCI available") \ 582D(PREC_BLOCK, 0x2e /* 46*/, NONE, Q.850, "Precedence call blocked") \ 583D(RESRC_NAVL, 0x2f /* 47*/, NONE, Q.850, "Resource unavailable, unspecified") \ 584D(QOS_NAVL, 0x31 /* 49*/, COND, Q.850, "Quality of service not available") \ 585D(FAC_NOTSUB, 0x32 /* 50*/, FAC, Q.850, "Requested facility not subscribed") \ 586D(OUT_CUG, 0x35 /* 53*/, NONE, Q.850, "Outgoing calls barred within CUG") \ 587N(PGL_CHG, 0x35 /* 53*/, NONE, PNNI1.0,"Call cleared due to change in PGL") \ 588D(IN_CUG, 0x37 /* 55*/, NONE, Q.850, "Incoming call barred within CUG") \ 589D(BEARER_NAUTH, 0x39 /* 57*/, ATTR, Q.850, "Bearer capability not authorized") \ 590D(BEARER_NAVL, 0x3a /* 58*/, ATTR, Q.850, "Bearer capability not presently available") \ 591D(INCONS, 0x3e /* 62*/, NONE, Q.850, "Inconsistency in designated outgoing access information and subscriber class") \ 592D(OPT_NAVL, 0x3f /* 63*/, NONE, Q.850, "Service or option not available, unspecified") \ 593D(BEARER_NIMPL, 0x41 /* 65*/, ATTR, Q.850, "Bearer capability not implemented") \ 594D(CHANNEL_NIMPL,0x42 /* 66*/, CHANNEL, Q.850, "Channel type not implemented") \ 595D(FAC_NIMPL, 0x45 /* 69*/, FAC, Q.850, "Requested facility not implemented") \ 596D(RESTR_DIG, 0x46 /* 70*/, NONE, Q.850, "Only restricted digital information bearer capability is available") \ 597D(TRAFFIC_UNSUP,0x49 /* 73*/, NONE, Q.2971, "Unsupported combination of traffic parameters") \ 598N(AAL_UNSUP, 0x4c /* 78*/, NONE, UNI3.1, "AAL parameters cannot be supported") \ 599D(CREF_INV, 0x51 /* 81*/, NONE, Q.850, "Invalid call reference value") \ 600D(CHANNEL_NEX, 0x52 /* 82*/, CHANID, Q.850, "Identified channel does not exist") \ 601D(SUSPENDED, 0x53 /* 83*/, NONE, Q.850, "A suspended call exists, but this call identity does not") \ 602D(CID_INUSE, 0x54 /* 84*/, NONE, Q.850, "Call identity in use") \ 603D(NOTSUSP, 0x55 /* 85*/, NONE, Q.850, "No call suspended") \ 604D(CLEARED, 0x56 /* 86*/, CAUSE, Q.850, "Call having requested call identity has been cleared") \ 605D(NOT_MEMBER, 0x57 /* 87*/, NONE, Q.850, "User not member of CUG") \ 606D(INCOMP, 0x58 /* 88*/, PARAM, Q.850, "Incompatible destination") \ 607D(ENDP_INV, 0x59 /* 89*/, IE, UNI3.1, "Invalid endpoint reference") \ 608D(NEX_CUG, 0x5a /* 90*/, NONE, Q.850, "Non-existend CUG") \ 609D(TRANSIT_INV, 0x5b /* 91*/, NONE, Q.850, "Invalid transit network selection") \ 610D(AALNOTSUPP, 0x5d /* 93*/, NONE, Q.2610, "AAL parameters cannot be supported") \ 611D(INVMSG, 0x5f /* 95*/, NONE, Q.850, "Invalid message, unspecified") \ 612D(MANDAT, 0x60 /* 96*/, IE, Q.850, "Mandatory information element is missing") \ 613D(MTYPE_NIMPL, 0x61 /* 97*/, MTYPE, Q.850, "Message type non-existent or not implemented") \ 614D(MSG_NOTCOMP, 0x62 /* 98*/, MTYPE, Q.850, "Message not compatible with call state or message type non-existent or not implemented") \ 615D(IE_NIMPL, 0x63 /* 99*/, IE, Q.850, "Information element/parameter non-existent or not implemented") \ 616D(IE_INV, 0x64 /*100*/, IE, Q.850, "Invalid information element contents") \ 617D(MSG_INCOMP, 0x65 /*101*/, MTYPE, Q.850, "Message not compatible with call state") \ 618D(RECOVER, 0x66 /*102*/, TIMER, Q.850, "Recovery on timer expiry") \ 619D(PARAM_NEX, 0x67 /*103*/, PARAM, Q.850, "Parameter non-existent or not implemented, passed on") \ 620N(BAD_LENGTH, 0x68 /*104*/, NONE, UNI3.1, "Incorrect message length") \ 621D(PARAM_UNREC, 0x6e /*110*/, PARAM, Q.850, "Message with unrecognized parameter, discarded") \ 622D(PROTO, 0x6f /*111*/, NONE, Q.850, "Protocol error, unspecified") \ 623D(INTERWORKING, 0x7f /*127*/, NONE, Q.850, "Interworking, unspecified") 624 625#define D(NAME,VAL,DIAG,STD,STR) UNI_CAUSE_##NAME = VAL, 626#define N(NAME,VAL,DIAG,STD,STR) UNI_CAUSE_##NAME = VAL, 627 628enum uni_cause { 629UNI_DECLARE_CAUSE_VALUES 630}; 631 632#undef D 633#undef N 634 635enum uni_cause_class { 636 UNI_CAUSE_CLASS_NORM = 0x0, 637 UNI_CAUSE_CLASS_NORM1 = 0x1, 638 UNI_CAUSE_CLASS_RES = 0x2, 639 UNI_CAUSE_CLASS_NAVL = 0x3, 640 UNI_CAUSE_CLASS_NIMPL = 0x4, 641 UNI_CAUSE_CLASS_INV = 0x5, 642 UNI_CAUSE_CLASS_PROTO = 0x6, 643 UNI_CAUSE_CLASS_INTER = 0x7, 644}; 645enum uni_cause_pu { 646 UNI_CAUSE_PU_PROVIDER = 0, 647 UNI_CAUSE_PU_USER = 1, 648}; 649enum uni_cause_na { 650 UNI_CAUSE_NA_NORMAL = 0, 651 UNI_CAUSE_NA_ABNORMAL = 1, 652}; 653enum uni_cause_cond { 654 UNI_CAUSE_COND_UNKNOWN = 0, 655 UNI_CAUSE_COND_PERM = 1, 656 UNI_CAUSE_COND_TRANS = 2, 657}; 658enum uni_cause_reason { 659 UNI_CAUSE_REASON_USER = 0x00, 660 UNI_CAUSE_REASON_IEMISS = 0x01, 661 UNI_CAUSE_REASON_IESUFF = 0x02, 662}; 663 664enum uni_diag { 665 UNI_DIAG_NONE, /* no diagnostics */ 666 667 UNI_DIAG_COND, /* Condition */ 668 UNI_DIAG_TNS, /* Transit Network Selector */ 669 UNI_DIAG_REJ, /* Call Rejected */ 670 UNI_DIAG_NUMBER, /* New Destination */ 671 UNI_DIAG_CRATE, /* Traffic descriptor subfield */ 672 UNI_DIAG_ATTR, /* Attribute idendity */ 673 UNI_DIAG_PARAM, /* Parameter, same as one IE */ 674 UNI_DIAG_TIMER, /* timer in ASCII */ 675 UNI_DIAG_MTYPE, /* Message type */ 676 UNI_DIAG_IE, /* Information element */ 677 UNI_DIAG_CHANID, /* VPCI/VCI */ 678 679 UNI_DIAG_CAUSE = UNI_DIAG_NONE, /* Not specified */ 680 UNI_DIAG_CHANNEL = UNI_DIAG_NONE, /* For N-ISDN */ 681 UNI_DIAG_CCBS = UNI_DIAG_NONE, /* Not used in Q.931 */ 682 UNI_DIAG_FAC = UNI_DIAG_NONE, /* Not specified */ 683}; 684 685enum { 686 UNI_CAUSE_TRAFFIC_N = 34-6, 687 UNI_CAUSE_IE_N = 34-6, 688 UNI_CAUSE_ATTR_N = (34-6)/3, 689}; 690 691struct uni_ie_cause { 692 struct uni_iehdr h; 693#define UNI_CAUSE_COND_P 0x0001 694#define UNI_CAUSE_REJ_P 0x0002 695#define UNI_CAUSE_REJ_USER_P 0x0004 696#define UNI_CAUSE_REJ_IE_P 0x0008 697#define UNI_CAUSE_IE_P 0x0010 698#define UNI_CAUSE_TRAFFIC_P 0x0020 699#define UNI_CAUSE_VPCI_P 0x0040 700#define UNI_CAUSE_MTYPE_P 0x0080 701#define UNI_CAUSE_TIMER_P 0x0100 702#define UNI_CAUSE_TNS_P 0x0200 703#define UNI_CAUSE_NUMBER_P 0x0400 704#define UNI_CAUSE_ATTR_P 0x0800 705#define UNI_CAUSE_PARAM_P 0x1000 706 707 enum uni_cause_loc loc; 708 enum uni_cause cause; 709 710 union { 711 struct { 712 enum uni_cause_pu pu; 713 enum uni_cause_na na; 714 enum uni_cause_cond cond; 715 } cond; 716 struct { 717 enum uni_cause_reason reason; 718 enum uni_cause_cond cond; 719 u_int user; 720 uint8_t ie; 721 } rej; 722 struct { 723 uint8_t ie[UNI_CAUSE_IE_N]; 724 u_int len; 725 } ie; 726 struct { 727 uint8_t traffic[UNI_CAUSE_TRAFFIC_N]; 728 u_int len; 729 } traffic; 730 struct { 731 uint16_t vpci; 732 uint16_t vci; 733 } vpci; 734 uint8_t mtype; 735 u_char timer[3]; 736 struct uni_ie_tns tns; 737 struct uni_ie_called number; /* TNS does not fit */ 738 uint8_t param; 739 struct { 740 u_int nattr; 741 u_char attr[UNI_CAUSE_ATTR_N][3]; 742 } attr; 743 } u; 744}; 745enum uni_diag uni_diag(enum uni_cause, enum uni_coding); 746 747/* return a string for the cause (NULL if the coding/cause are illegal) */ 748const char *uni_ie_cause2str(enum uni_coding, u_int); 749 750/************************************************************************* 751 * 752 * Connection identifier information element 753 */ 754enum uni_connid_type { 755 UNI_CONNID_VCI = 0, 756 UNI_CONNID_ANYVCI = 1, 757 UNI_CONNID_NOVCI = 4, 758}; 759enum uni_connid_assoc { 760 UNI_CONNID_ASSOC = 0, 761 UNI_CONNID_NONASSOC = 1, 762}; 763struct uni_ie_connid { 764 struct uni_iehdr h; 765 enum uni_connid_assoc assoc; 766 enum uni_connid_type type; 767 u_int vpci : 16; 768 u_int vci : 16; 769}; 770 771/************************************************************************* 772 * 773 * End point reference IE 774 */ 775struct uni_ie_epref { 776 struct uni_iehdr h; 777 u_int flag : 1; 778 u_int epref : 15; 779}; 780 781/************************************************************************* 782 * 783 * End point state IE 784 */ 785enum uni_epstate { 786 UNI_EPSTATE_NULL = 0x00, 787 UNI_EPSTATE_ADD_INIT = 0x01, 788 UNI_EPSTATE_ALERT_DLVD = 0x04, 789 UNI_EPSTATE_ADD_RCVD = 0x06, 790 UNI_EPSTATE_ALERT_RCVD = 0x07, 791 UNI_EPSTATE_ACTIVE = 0x0a, 792 UNI_EPSTATE_DROP_INIT = 0x0b, 793 UNI_EPSTATE_DROP_RCVD = 0x0c, 794}; 795 796struct uni_ie_epstate { 797 struct uni_iehdr h; 798 enum uni_epstate state; 799}; 800 801/************************************************************************* 802 * 803 * Q.2932 Facility IE 804 */ 805enum { 806 UNI_FACILITY_ROSE = 0x11, 807 808 UNI_FACILITY_MAXAPDU = 128, 809}; 810 811struct uni_ie_facility { 812 struct uni_iehdr h; 813 814 u_char proto; 815 u_char apdu[UNI_FACILITY_MAXAPDU]; 816 u_int len; 817}; 818 819/************************************************************************* 820 * 821 * Notification indicator 822 */ 823enum { 824 UNI_NOTIFY_MAXLEN = 128, /* maximum info length */ 825}; 826struct uni_ie_notify { 827 struct uni_iehdr h; 828 u_int len; 829 u_char notify[UNI_NOTIFY_MAXLEN]; 830}; 831 832/************************************************************************* 833 * 834 * QoS information element 835 */ 836enum uni_qos { 837 UNI_QOS_CLASS0 = 0x00, 838 UNI_QOS_CLASS1 = 0x01, 839 UNI_QOS_CLASS2 = 0x02, 840 UNI_QOS_CLASS3 = 0x03, 841 UNI_QOS_CLASS4 = 0x04, 842}; 843 844struct uni_ie_qos { 845 struct uni_iehdr h; 846 enum uni_qos fwd; 847 enum uni_qos bwd; 848}; 849 850/************************************************************************* 851 * 852 * Broadband repeat indicator information element 853 */ 854enum uni_repeat_type { 855 UNI_REPEAT_PRIDESC = 0x02, 856 UNI_REPEAT_STACK = 0x0a, /* PNNI */ 857}; 858 859struct uni_ie_repeat { 860 struct uni_iehdr h; 861 enum uni_repeat_type type; 862}; 863 864/************************************************************************* 865 * 866 * Restart indicator information element 867 */ 868enum uni_restart_type { 869 UNI_RESTART_CHANNEL = 0x0, 870 UNI_RESTART_PATH = 0x1, 871 UNI_RESTART_ALL = 0x2, 872}; 873 874struct uni_ie_restart { 875 struct uni_iehdr h; 876 enum uni_restart_type rclass; 877}; 878 879/************************************************************************* 880 * 881 * Broadband sending complete indicator information element 882 */ 883struct uni_ie_scompl { 884 struct uni_iehdr h; 885}; 886 887/************************************************************************* 888 * 889 * ATM traffic descriptor information element 890 */ 891enum { 892 UNI_TRAFFIC_FMDCR_ID = 0x00, 893 UNI_TRAFFIC_BMDCR_ID = 0x02, 894 UNI_TRAFFIC_FPCR0_ID = 0x82, 895 UNI_TRAFFIC_BPCR0_ID = 0x83, 896 UNI_TRAFFIC_FPCR1_ID = 0x84, 897 UNI_TRAFFIC_BPCR1_ID = 0x85, 898 UNI_TRAFFIC_FSCR0_ID = 0x88, 899 UNI_TRAFFIC_BSCR0_ID = 0x89, 900 UNI_TRAFFIC_FSCR1_ID = 0x90, 901 UNI_TRAFFIC_BSCR1_ID = 0x91, 902 UNI_TRAFFIC_FABR1_ID = 0x92, 903 UNI_TRAFFIC_BABR1_ID = 0x93, 904 UNI_TRAFFIC_FMBS0_ID = 0xa0, 905 UNI_TRAFFIC_BMBS0_ID = 0xa1, 906 UNI_TRAFFIC_FMBS1_ID = 0xb0, 907 UNI_TRAFFIC_BMBS1_ID = 0xb1, 908 UNI_TRAFFIC_BEST_ID = 0xbe, 909 UNI_TRAFFIC_MOPT_ID = 0xbf, 910 911 UNI_TRAFFIC_FTAG = 0x01, 912 UNI_TRAFFIC_BTAG = 0x02, 913 UNI_TRAFFIC_FDISC = 0x80, 914 UNI_TRAFFIC_BDISC = 0x40, 915 916 UNI_MINTRAFFIC_FPCR0_ID = 0x82, 917 UNI_MINTRAFFIC_BPCR0_ID = 0x83, 918 UNI_MINTRAFFIC_FPCR1_ID = 0x84, 919 UNI_MINTRAFFIC_BPCR1_ID = 0x85, 920 UNI_MINTRAFFIC_FABR1_ID = 0x92, 921 UNI_MINTRAFFIC_BABR1_ID = 0x93, 922 923 UNI_MDCR_ORIGIN_USER = 0x00, 924 UNI_MDCR_ORIGIN_NET = 0x01, 925}; 926 927#define UNI_TRAFFIC_FPCR0_P 0x0001 928#define UNI_TRAFFIC_BPCR0_P 0x0002 929#define UNI_TRAFFIC_FPCR1_P 0x0004 930#define UNI_TRAFFIC_BPCR1_P 0x0008 931#define UNI_TRAFFIC_FSCR0_P 0x0010 932#define UNI_TRAFFIC_BSCR0_P 0x0020 933#define UNI_TRAFFIC_FSCR1_P 0x0040 934#define UNI_TRAFFIC_BSCR1_P 0x0080 935#define UNI_TRAFFIC_FMBS0_P 0x0100 936#define UNI_TRAFFIC_BMBS0_P 0x0200 937#define UNI_TRAFFIC_FMBS1_P 0x0400 938#define UNI_TRAFFIC_BMBS1_P 0x0800 939#define UNI_TRAFFIC_BEST_P 0x1000 940#define UNI_TRAFFIC_MOPT_P 0x2000 941#define UNI_TRAFFIC_FABR1_P 0x4000 942#define UNI_TRAFFIC_BABR1_P 0x8000 943struct uni_xtraffic { 944 u_int fpcr0, bpcr0; 945 u_int fpcr1, bpcr1; 946 u_int fscr0, bscr0; 947 u_int fscr1, bscr1; 948 u_int fmbs0, bmbs0; 949 u_int fmbs1, bmbs1; 950 u_int fabr1, babr1; 951 u_int ftag, btag; 952 u_int fdisc, bdisc; 953}; 954 955struct uni_ie_traffic { 956 struct uni_iehdr h; 957 struct uni_xtraffic t; 958}; 959struct uni_ie_atraffic { 960 struct uni_iehdr h; 961 struct uni_xtraffic t; 962}; 963 964/* 965 * Q.2961 minimum traffic descriptor 966 */ 967struct uni_ie_mintraffic { 968 struct uni_iehdr h; 969#define UNI_MINTRAFFIC_FPCR0_P 0x0001 970#define UNI_MINTRAFFIC_BPCR0_P 0x0002 971#define UNI_MINTRAFFIC_FPCR1_P 0x0004 972#define UNI_MINTRAFFIC_BPCR1_P 0x0008 973#define UNI_MINTRAFFIC_FABR1_P 0x0010 974#define UNI_MINTRAFFIC_BABR1_P 0x0020 975 976 u_int fpcr0, bpcr0; 977 u_int fpcr1, bpcr1; 978 u_int fabr1, babr1; 979}; 980 981/* 982 * UNI4.0+ (af-cs-0147.000) Minimum Desired Cell Rate 983 */ 984struct uni_ie_mdcr { 985 struct uni_iehdr h; 986 u_int origin; 987 u_int fmdcr, bmdcr; 988}; 989 990/************************************************************************* 991 * 992 * User-user information information element 993 */ 994struct uni_ie_uu { 995 struct uni_iehdr h; 996 u_int len; 997 u_char uu[UNI_UU_MAXLEN]; 998}; 999 1000/************************************************************************* 1001 * 1002 * Generic identifier transport 1003 */ 1004enum uni_git_std { 1005 UNI_GIT_STD_DSMCC = 0x01, /* DSM-CC */ 1006 UNI_GIT_STD_H245 = 0x02, /* H.245 */ 1007}; 1008enum uni_git_type { 1009 UNI_GIT_TYPE_SESS = 0x01, /* session id */ 1010 UNI_GIT_TYPE_RES = 0x02, /* resource id */ 1011}; 1012 1013enum { 1014 UNI_GIT_MAXSESS = 20, /* max session value length */ 1015 UNI_GIT_MAXRES = 4, /* max resource value length */ 1016 1017 UNI_GIT_MAXVAL = 20, /* the maximum of the above */ 1018 UNI_GIT_MAXSUB = 2, /* maximum number of og. 6 */ 1019}; 1020 1021struct uni_ie_git { 1022 struct uni_iehdr h; 1023 1024 enum uni_git_std std; /* identifier related standard/application */ 1025 u_int numsub; 1026 struct { 1027 enum uni_git_type type; 1028 u_int len; 1029 u_char val[UNI_GIT_MAXVAL]; 1030 } sub[UNI_GIT_MAXSUB]; 1031}; 1032 1033/************************************************************************* 1034 * 1035 * End-to-end transit delay 1036 */ 1037enum { 1038 UNI_EETD_CTD_ID = 0x01, /* cumulative transit delay */ 1039 UNI_EETD_MTD_ID = 0x03, /* maximum transit delay */ 1040 UNI_EETD_NET_ID = 0x0a, /* network generated */ 1041 UNI_EETD_PMTD_ID = 0x0b, /* PNNI acceptable forward maximum ctd */ 1042 UNI_EETD_PCTD_ID = 0x11, /* PNNI cumulative forward maximum ctd */ 1043 1044 UNI_EETD_ANYMAX = 0xffff, 1045 UNI_EETD_MAXVAL = 0xffff, /* maximum value */ 1046}; 1047 1048struct uni_ie_eetd { 1049 struct uni_iehdr h; 1050#define UNI_EETD_CUM_P 0x0001 1051#define UNI_EETD_MAX_P 0x0002 1052#define UNI_EETD_NET_P 0x0004 /* UNI4.0 9.1.2.1 */ 1053#define UNI_EETD_PMTD_P 0x0008 /* PNNI1.0 6.4.5.24 */ 1054#define UNI_EETD_PCTD_P 0x0010 /* PNNI1.0 6.4.5.24 */ 1055 1056 u_int cumulative; 1057 u_int maximum; 1058 u_int pmtd; 1059 u_int pctd; 1060}; 1061 1062/************************************************************************* 1063 * 1064 * Leaf-initiated-join call identifier 1065 */ 1066enum uni_lij_idtype { 1067 UNI_LIJ_IDTYPE_ROOT = 0x0, /* root created */ 1068}; 1069 1070struct uni_ie_lij_callid { 1071 struct uni_iehdr h; 1072 1073 enum uni_lij_idtype type; 1074 u_int callid; 1075}; 1076 1077/* 1078 * LIJ parameters 1079 */ 1080enum uni_lij_screen { 1081 UNI_LIJ_SCREEN_NETJOIN = 0x0, /* without root notification */ 1082}; 1083 1084struct uni_ie_lij_param { 1085 struct uni_iehdr h; 1086 1087 enum uni_lij_screen screen; 1088}; 1089 1090/* 1091 * LIJ sequence number 1092 */ 1093struct uni_ie_lij_seqno { 1094 struct uni_iehdr h; 1095 1096 u_int seqno; 1097}; 1098 1099/************************************************************************* 1100 * 1101 * Locking/Non-locking shift not supported 1102 */ 1103struct uni_ie_lshift { 1104 struct uni_iehdr h; 1105 u_int set:3; 1106}; 1107 1108struct uni_ie_nlshift { 1109 struct uni_iehdr h; 1110 u_int set:3; 1111}; 1112 1113/************************************************************************* 1114 * 1115 * Externded QoS information element 1116 */ 1117enum { 1118 UNI_EXQOS_FACC_ID = 0x94, 1119 UNI_EXQOS_BACC_ID = 0x95, 1120 UNI_EXQOS_FCUM_ID = 0x96, 1121 UNI_EXQOS_BCUM_ID = 0x97, 1122 UNI_EXQOS_FCLR_ID = 0xa2, 1123 UNI_EXQOS_BCLR_ID = 0xa3, 1124}; 1125 1126enum uni_exqos_origin { 1127 UNI_EXQOS_USER = 0, 1128 UNI_EXQOS_NET = 1, 1129}; 1130 1131enum { 1132 UNI_EXQOS_ANY_CDV = 0xffffff, 1133 UNI_EXQOS_ANY_CLR = 0xff, 1134}; 1135 1136struct uni_ie_exqos { 1137 struct uni_iehdr h; 1138#define UNI_EXQOS_FACC_P 0x0001 1139#define UNI_EXQOS_BACC_P 0x0002 1140#define UNI_EXQOS_FCUM_P 0x0004 1141#define UNI_EXQOS_BCUM_P 0x0008 1142#define UNI_EXQOS_FCLR_P 0x0010 1143#define UNI_EXQOS_BCLR_P 0x0020 1144 1145 enum uni_exqos_origin origin; 1146 u_int facc; 1147 u_int bacc; 1148 u_int fcum; 1149 u_int bcum; 1150 u_int fclr; 1151 u_int bclr; 1152}; 1153 1154/************************************************************************* 1155 * 1156 * Additional ABR parameters 1157 * ABR setup parameters 1158 */ 1159enum { 1160 UNI_ABRADD_FADD_ID = 0xc2, 1161 UNI_ABRADD_BADD_ID = 0xc3, 1162 UNI_ABRSETUP_FICR_ID = 0xc2, 1163 UNI_ABRSETUP_BICR_ID = 0xc3, 1164 UNI_ABRSETUP_FTBE_ID = 0xc4, 1165 UNI_ABRSETUP_BTBE_ID = 0xc5, 1166 UNI_ABRSETUP_RMFRT_ID = 0xc6, 1167 UNI_ABRSETUP_FRIF_ID = 0xc8, 1168 UNI_ABRSETUP_BRIF_ID = 0xc9, 1169 UNI_ABRSETUP_FRDF_ID = 0xca, 1170 UNI_ABRSETUP_BRDF_ID = 0xcb, 1171}; 1172 1173struct uni_abr_rec { 1174 u_int present; 1175#define UNI_ABR_REC_NRM_P 0x80000000 1176#define UNI_ABR_REC_TRM_P 0x40000000 1177#define UNI_ABR_REC_CDF_P 0x20000000 1178#define UNI_ABR_REC_ADTF_P 0x10000000 1179 u_int nrm:3; 1180 u_int trm:3; 1181 u_int cdf:3; 1182 u_int adtf:10; 1183}; 1184 1185struct uni_ie_abradd { 1186 struct uni_iehdr h; 1187 struct uni_abr_rec fwd, bwd; 1188}; 1189 1190struct uni_ie_abrsetup { 1191 struct uni_iehdr h; 1192#define UNI_ABRSETUP_FICR_P 0x0001 1193#define UNI_ABRSETUP_BICR_P 0x0002 1194#define UNI_ABRSETUP_FTBE_P 0x0004 1195#define UNI_ABRSETUP_BTBE_P 0x0008 1196#define UNI_ABRSETUP_FRIF_P 0x0010 1197#define UNI_ABRSETUP_BRIF_P 0x0020 1198#define UNI_ABRSETUP_FRDF_P 0x0040 1199#define UNI_ABRSETUP_BRDF_P 0x0080 1200#define UNI_ABRSETUP_RMFRT_P 0x0100 1201 1202 u_int ficr, bicr; 1203 u_int ftbe, btbe; 1204 u_int rmfrt; 1205 u_int frif, brif; 1206 u_int frdf, brdf; 1207}; 1208 1209/************************************************************************* 1210 * 1211 * Connection scope information element 1212 */ 1213enum uni_cscope { 1214 UNI_CSCOPE_ORG = 0x01, 1215}; 1216 1217enum { 1218 UNI_CSCOPE_ORG_LOC = 0x01, 1219 UNI_CSCOPE_ORG_LOC_P1 = 0x02, 1220 UNI_CSCOPE_ORG_LOC_P2 = 0x03, 1221 UNI_CSCOPE_ORG_SITE_M1 = 0x04, 1222 UNI_CSCOPE_ORG_SITE = 0x05, 1223 UNI_CSCOPE_ORG_SITE_P1 = 0x06, 1224 UNI_CSCOPE_ORG_ORG_M1 = 0x07, 1225 UNI_CSCOPE_ORG_ORG = 0x08, 1226 UNI_CSCOPE_ORG_ORG_P1 = 0x09, 1227 UNI_CSCOPE_ORG_COMM_M1 = 0x0a, 1228 UNI_CSCOPE_ORG_COMM = 0x0b, 1229 UNI_CSCOPE_ORG_COMM_P1 = 0x0c, 1230 UNI_CSCOPE_ORG_REG = 0x0d, 1231 UNI_CSCOPE_ORG_INTER = 0x0e, 1232 UNI_CSCOPE_ORG_GLOBAL = 0x0f, 1233}; 1234 1235struct uni_ie_cscope { 1236 struct uni_iehdr h; 1237 enum uni_cscope type; 1238 u_int scope:8; 1239}; 1240 1241/************************************************************************* 1242 * 1243 * Connection scope information element 1244 */ 1245enum uni_report { 1246 UNI_REPORT_MODCONF = 0x01, 1247 UNI_REPORT_CLOCK = 0x02, 1248 UNI_REPORT_EEAVAIL = 0x04, 1249 UNI_REPORT_EEREQ = 0x05, 1250 UNI_REPORT_EECOMPL = 0x06, 1251}; 1252 1253struct uni_ie_report { 1254 struct uni_iehdr h; 1255 enum uni_report report; 1256}; 1257 1258/************************************************************************* 1259 * 1260 * PNNI Designated transit list information element 1261 */ 1262enum { 1263 UNI_DTL_LOGNP = 0x01, 1264 UNI_DTL_LOGNP_SIZE = 27, 1265}; 1266 1267struct uni_ie_dtl { 1268 struct uni_iehdr h; 1269 u_int ptr:16; 1270 u_int num; 1271 struct { 1272 u_char node_level; 1273 u_char node_id[21]; 1274 u_int port_id; 1275 } dtl[UNI_DTL_MAXNUM]; 1276}; 1277 1278/************************************************************************* 1279 * 1280 * PNNI Crankback information element 1281 */ 1282enum uni_crankback { 1283 UNI_CRANKBACK_IF = 0x02, 1284 UNI_CRANKBACK_NODE = 0x03, 1285 UNI_CRANKBACK_LINK = 0x04, 1286}; 1287 1288enum { 1289 UNI_CAUSE_NXNODE_UNREACH = 128, 1290 UNI_CAUSE_DTL_NOT_MY_ID = 160, 1291}; 1292 1293struct uni_ie_crankback { 1294 struct uni_iehdr h; 1295#define UNI_CRANKBACK_TOP_P 0x0001 1296#define UNI_CRANKBACK_TOPX_P 0x0002 1297#define UNI_CRANKBACK_QOS_P 0x0004 1298 u_int level:8; 1299 enum uni_crankback type; 1300 union { 1301 struct { 1302 u_char level; 1303 u_char id[21]; 1304 } node; 1305 struct { 1306 u_char plevel; 1307 u_char pid[21]; 1308 u_int port; 1309 u_char slevel; 1310 u_char sid[21]; 1311 } link; 1312 } id; 1313 u_int cause:8; 1314 union { 1315 struct { 1316 u_int dir:8; 1317 u_int port; 1318 u_int avcr; 1319 u_int crm; 1320 u_int vf; 1321 } top; 1322 struct { 1323 u_int ctd:1; 1324 u_int cdv:1; 1325 u_int clr:1; 1326 u_int other:1; 1327 } qos; 1328 } diag; 1329}; 1330 1331/************************************************************************* 1332 * 1333 * PNNI Call_ing/called party soft PVPC/PVCC information element 1334 */ 1335enum uni_soft_sel { 1336 UNI_SOFT_SEL_ANY = 0x00, 1337 UNI_SOFT_SEL_REQ = 0x02, 1338 UNI_SOFT_SEL_ASS = 0x04, 1339}; 1340 1341struct uni_ie_calling_soft { 1342 struct uni_iehdr h; 1343#define UNI_CALLING_SOFT_VCI_P 0x0001 1344 u_int vpi:12; 1345 u_int vci:16; 1346}; 1347struct uni_ie_called_soft { 1348 struct uni_iehdr h; 1349#define UNI_CALLED_SOFT_VPI_P 0x0001 1350#define UNI_CALLED_SOFT_VCI_P 0x0002 1351 enum uni_soft_sel sel; 1352 u_int vpi:12; 1353 u_int vci:16; 1354}; 1355 1356/*************************************************************************/ 1357 1358#include <netnatm/msg/uni_ie.h> 1359#include <netnatm/msg/uni_msg.h> 1360 1361struct uni_all { 1362 enum uni_msgtype mtype; 1363 union uni_msgall u; 1364}; 1365 1366struct uni_ie { 1367 enum uni_ietype ietype; 1368 union uni_ieall u; 1369}; 1370 1371#endif 1372