summaryrefslogtreecommitdiffstats
path: root/sys/contrib/ngatm/netnatm/msg/unistruct.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/ngatm/netnatm/msg/unistruct.h')
-rw-r--r--sys/contrib/ngatm/netnatm/msg/unistruct.h1370
1 files changed, 1370 insertions, 0 deletions
diff --git a/sys/contrib/ngatm/netnatm/msg/unistruct.h b/sys/contrib/ngatm/netnatm/msg/unistruct.h
new file mode 100644
index 0000000..fd57cf9
--- /dev/null
+++ b/sys/contrib/ngatm/netnatm/msg/unistruct.h
@@ -0,0 +1,1370 @@
+/*
+ * Copyright (c) 1996-2003
+ * Fraunhofer Institute for Open Communication Systems (FhG Fokus).
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * Author: Hartmut Brandt <harti@freebsd.org>
+ *
+ * $Begemot: libunimsg/atm/msg/unistruct.h,v 1.4 2003/09/19 11:58:16 hbb Exp $
+ *
+ * This file defines all structures that are used by
+ * API users.
+ */
+#ifndef _NETNATM_MSG_UNISTRUCT_H_
+#define _NETNATM_MSG_UNISTRUCT_H_
+
+#include <netnatm/msg/uni_config.h>
+
+/*
+ * define IE and MSG header
+ */
+#include <netnatm/msg/uni_hdr.h>
+
+/*
+ * define all IE's
+ */
+/*************************************************************************
+ *
+ * Free FORM IE
+ */
+struct uni_ie_unrec {
+ struct uni_iehdr h;
+ uint8_t id; /* ID of this IE */
+ u_int len; /* data length */
+ u_char data[128]; /* arbitrary maximum length */
+};
+
+/*************************************************************************
+ *
+ * ATM adaptation layer parameters information element
+ */
+enum {
+ UNI_AAL_SUB_ID = 0x85,
+ UNI_AAL_CBR_ID = 0x86,
+ UNI_AAL_MULT_ID = 0x87,
+ UNI_AAL_SCREC_ID = 0x88,
+ UNI_AAL_ECM_ID = 0x89,
+ UNI_AAL_BSIZE_ID = 0x8a,
+ UNI_AAL_PART_ID = 0x8b,
+ UNI_AAL_FWDCPCS_ID = 0x8c,
+ UNI_AAL_BWDCPCS_ID = 0x81,
+ UNI_AAL_MID_ID = 0x82,
+ UNI_AAL_SSCS_ID = 0x84,
+};
+
+enum uni_aal {
+ UNI_AAL_0 = 0x00, /* voice */
+ UNI_AAL_1 = 0x01,
+ UNI_AAL_2 = 0x02,
+ UNI_AAL_4 = 0x03, /* same as AAL 3 */
+ UNI_AAL_5 = 0x05,
+ UNI_AAL_USER = 0x10,
+};
+enum uni_aal1_subtype {
+ UNI_AAL1_SUB_NULL = 0x00,
+ UNI_AAL1_SUB_VOICE = 0x01,
+ UNI_AAL1_SUB_CIRCUIT = 0x02,
+ UNI_AAL1_SUB_HQAUDIO = 0x04,
+ UNI_AAL1_SUB_VIDEO = 0x05,
+};
+enum uni_aal1_cbr {
+ UNI_AAL1_CBR_64 = 0x01,
+ UNI_AAL1_CBR_1544 = 0x04,
+ UNI_AAL1_CBR_6312 = 0x05,
+ UNI_AAL1_CBR_32064 = 0x06,
+ UNI_AAL1_CBR_44736 = 0x07,
+ UNI_AAL1_CBR_97728 = 0x08,
+ UNI_AAL1_CBR_2048 = 0x10,
+ UNI_AAL1_CBR_8448 = 0x11,
+ UNI_AAL1_CBR_34368 = 0x12,
+ UNI_AAL1_CBR_139264 = 0x13,
+ UNI_AAL1_CBR_N64 = 0x40,
+ UNI_AAL1_CBR_N8 = 0x41,
+};
+enum uni_aal1_screc {
+ UNI_AAL1_SCREC_NULL = 0x00, /* synchr. circuit transport */
+ UNI_AAL1_SCREC_SRTS = 0x01, /* synchr. residual timestamp */
+ UNI_AAL1_SCREC_ACLK = 0x02, /* adaptive clock */
+};
+enum uni_aal1_ecm {
+ UNI_AAL1_ECM_NULL = 0x00, /* no error correction */
+ UNI_AAL1_ECM_LOSS = 0x01, /* for loss sensitive signals */
+ UNI_AAL1_ECM_DELAY = 0x02, /* for delay sensitive signals */
+};
+enum uni_aal_sscs {
+ UNI_AAL_SSCS_NULL = 0x00, /* Null */
+ UNI_AAL_SSCS_SSCOPA = 0x01, /* assured SSCOP */
+ UNI_AAL_SSCS_SSCOPU = 0x02, /* unassured SSCOP */
+ UNI_AAL_SSCS_FRAME = 0x04, /* frame relay */
+};
+
+struct uni_ie_aal {
+ struct uni_iehdr h;
+ enum uni_aal type; /* aal type */
+
+ union {
+#define UNI_AAL1_MULT_P 0x01
+#define UNI_AAL1_SCREC_P 0x02
+#define UNI_AAL1_ECM_P 0x04
+#define UNI_AAL1_BSIZE_P 0x08
+#define UNI_AAL1_PART_P 0x10
+ struct {
+ enum uni_aal1_subtype subtype; /* AAL1 subtype */
+ enum uni_aal1_cbr cbr_rate; /* AAL1 CBR rate */
+ u_int mult; /* AAL1 CBR mutliplier */
+ enum uni_aal1_screc screc; /* AAL1 source clock recovery */
+ enum uni_aal1_ecm ecm; /* AAL1 error correction */
+ u_int bsize; /* AAL1 SDT blocksize */
+ u_int part; /* AAL1 partial cell fill */
+ } aal1;
+
+#define UNI_AAL4_CPCS_P 0x01
+#define UNI_AAL4_MID_P 0x02
+#define UNI_AAL4_SSCS_P 0x04
+ struct {
+ u_int fwd_cpcs; /* max fwd cpcs blocksize */
+ u_int bwd_cpcs; /* max bkw cpcs blocksize */
+ u_int mid_low; /* MID low range */
+ u_int mid_high; /* MID high range */
+ enum uni_aal_sscs sscs; /* sscs type */
+ } aal4;
+
+#define UNI_AAL5_CPCS_P 0x01
+#define UNI_AAL5_SSCS_P 0x02
+ struct {
+ u_int fwd_cpcs; /* max fwd cpcs blocksize */
+ u_int bwd_cpcs; /* max bkw cpcs blocksize */
+ enum uni_aal_sscs sscs; /* sscs type */
+ } aal5;
+
+ struct {
+ u_int len; /* number of bytes */
+ u_char user[4]; /* user data */
+ } aalu;
+ } u;
+};
+
+/*************************************************************************
+ *
+ * Called party number information element
+ * Called party subaddress information element
+ * Calling party number information element
+ * Calling party subaddress information element
+ * Q.2951/UNI4.0 Connected number information element
+ * Q.2951/UNI4.0 Connected subaddress information element
+ */
+enum uni_addr_type {
+ UNI_ADDR_UNKNOWN = 0x0,
+ UNI_ADDR_INTERNATIONAL = 0x1,
+ UNI_ADDR_NATIONAL = 0x2, /* not sup */
+ UNI_ADDR_NETWORK = 0x3, /* not sup */
+ UNI_ADDR_SUBSCR = 0x4, /* not sup */
+ UNI_ADDR_ABBR = 0x6, /* not sup */
+};
+enum uni_addr_plan {
+ /* UNI_ADDR_UNKNOWN = 0x0, */ /* not sup */
+ UNI_ADDR_E164 = 0x1,
+ UNI_ADDR_ATME = 0x2,
+ UNI_ADDR_DATA = 0x3, /* not sup */
+ UNI_ADDR_PRIVATE = 0x9, /* not sup */
+};
+enum uni_subaddr_type {
+ UNI_SUBADDR_NSAP = 0x0,
+ UNI_SUBADDR_ATME = 0x1,
+ UNI_SUBADDR_USER = 0x2, /* not sup */
+};
+enum uni_addr_pres {
+ UNI_ADDR_PRES = 0x0,
+ UNI_ADDR_RESTRICT = 0x1,
+ UNI_ADDR_NONUMBER = 0x2,
+};
+enum uni_addr_screen {
+ UNI_ADDR_SCREEN_NOT = 0x0,
+ UNI_ADDR_SCREEN_PASSED = 0x1,
+ UNI_ADDR_SCREEN_FAILED = 0x2,
+ UNI_ADDR_SCREEN_NET = 0x3,
+};
+
+struct uni_addr {
+ enum uni_addr_type type;
+ enum uni_addr_plan plan;
+ u_int len;
+ u_char addr[UNI_ADDR_MAXLEN];
+};
+struct uni_subaddr {
+ enum uni_subaddr_type type;
+ u_int len;
+ u_char addr[UNI_SUBADDR_MAXLEN];
+};
+
+struct uni_ie_called {
+ struct uni_iehdr h;
+ struct uni_addr addr;
+};
+
+struct uni_ie_calledsub {
+ struct uni_iehdr h;
+ struct uni_subaddr addr;
+};
+
+struct uni_ie_calling {
+ struct uni_iehdr h;
+#define UNI_CALLING_SCREEN_P 0x0001
+
+ struct uni_addr addr;
+ enum uni_addr_pres pres;
+ enum uni_addr_screen screen;
+};
+
+struct uni_ie_callingsub {
+ struct uni_iehdr h;
+ struct uni_subaddr addr;
+};
+
+struct uni_ie_conned {
+ struct uni_iehdr h;
+#define UNI_CONNED_SCREEN_P 0x0001
+
+ struct uni_addr addr;
+ enum uni_addr_pres pres;
+ enum uni_addr_screen screen;
+};
+
+struct uni_ie_connedsub {
+ struct uni_iehdr h;
+ struct uni_subaddr addr;
+};
+
+/*************************************************************************
+ *
+ * Broadband bearer capability descriptor
+ * On reception of an old bearer descriptor, it is automatically
+ * converted to a new, legal one.
+ */
+enum uni_bearer_class {
+ UNI_BEARER_A = 0x01,
+ UNI_BEARER_C = 0x03,
+ UNI_BEARER_X = 0x10,
+ UNI_BEARER_TVP = 0x30,
+};
+
+enum uni_bearer_atc {
+ UNI_BEARER_ATC_CBR = 0x05,
+ UNI_BEARER_ATC_CBR1 = 0x07,
+ UNI_BEARER_ATC_VBR = 0x09,
+ UNI_BEARER_ATC_VBR1 = 0x13,
+ UNI_BEARER_ATC_NVBR = 0x0a,
+ UNI_BEARER_ATC_NVBR1 = 0x0b,
+ UNI_BEARER_ATC_ABR = 0x0c,
+
+ UNI_BEARER_ATCX_0 = 0x00,
+ UNI_BEARER_ATCX_1 = 0x01,
+ UNI_BEARER_ATCX_2 = 0x02,
+ UNI_BEARER_ATCX_4 = 0x04,
+ UNI_BEARER_ATCX_6 = 0x06,
+ UNI_BEARER_ATCX_8 = 0x08,
+};
+
+enum uni_bearer_clip {
+ UNI_BEARER_NOCLIP = 0x0,
+ UNI_BEARER_CLIP = 0x1,
+};
+
+enum uni_bearer_cfg {
+ UNI_BEARER_P2P = 0x0,
+ UNI_BEARER_MP = 0x1,
+};
+
+struct uni_ie_bearer {
+ struct uni_iehdr h;
+#define UNI_BEARER_ATC_P 0x02
+
+ enum uni_bearer_class bclass; /* bearer class */
+ enum uni_bearer_atc atc; /* ATM transfer capability */
+ enum uni_bearer_clip clip; /* suspectibility to clipping */
+ enum uni_bearer_cfg cfg; /* u-plane configuration */
+};
+
+/*************************************************************************
+ *
+ * Broadband higher layer information element
+ */
+enum uni_bhli {
+ UNI_BHLI_ISO = 0x00, /* IDO defined */
+ UNI_BHLI_USER = 0x01, /* user specific */
+ UNI_BHLI_VENDOR = 0x03, /* vendor specific */
+};
+
+struct uni_ie_bhli {
+ struct uni_iehdr h;
+ enum uni_bhli type;
+ u_char info[8];
+ u_int len;
+};
+
+/*************************************************************************
+ *
+ * Boradband lower layer information element
+ */
+enum {
+ UNI_BLLI_L1_ID = 0x1,
+ UNI_BLLI_L2_ID = 0x2,
+ UNI_BLLI_L3_ID = 0x3,
+};
+
+enum uni_blli_l2 {
+ UNI_BLLI_L2_BASIC = 0x01,
+ UNI_BLLI_L2_Q921 = 0x02,
+ UNI_BLLI_L2_X25LL = 0x06,
+ UNI_BLLI_L2_X25ML = 0x07,
+ UNI_BLLI_L2_LABP = 0x08,
+ UNI_BLLI_L2_HDLC_ARM = 0x09,
+ UNI_BLLI_L2_HDLC_NRM = 0x0a,
+ UNI_BLLI_L2_HDLC_ABM = 0x0b,
+ UNI_BLLI_L2_LAN = 0x0c,
+ UNI_BLLI_L2_X75 = 0x0d,
+ UNI_BLLI_L2_Q922 = 0x0e,
+ UNI_BLLI_L2_USER = 0x10,
+ UNI_BLLI_L2_ISO7776 = 0x11,
+};
+
+enum uni_blli_l2_mode {
+ UNI_BLLI_L2NORM = 0x1,
+ UNI_BLLI_L2EXT = 0x2,
+};
+
+enum uni_blli_l3 {
+ UNI_BLLI_L3_X25 = 0x06,
+ UNI_BLLI_L3_ISO8208 = 0x07,
+ UNI_BLLI_L3_X223 = 0x08,
+ UNI_BLLI_L3_CLMP = 0x09,
+ UNI_BLLI_L3_T70 = 0x0a,
+ UNI_BLLI_L3_TR9577 = 0x0b,
+ UNI_BLLI_L3_H310 = 0x0c,
+ UNI_BLLI_L3_H321 = 0x0d,
+ UNI_BLLI_L3_USER = 0x10,
+};
+
+enum uni_blli_l3_mode {
+ UNI_BLLI_L3NSEQ = 0x1, /* normal sequence numbering */
+ UNI_BLLI_L3ESEQ = 0x2, /* extended sequence numbering */
+};
+
+enum uni_blli_l3_psiz {
+ UNI_BLLI_L3_16 = 0x4, /* 16 byte packets */
+ UNI_BLLI_L3_32 = 0x5, /* 32 byte packets */
+ UNI_BLLI_L3_64 = 0x6, /* 64 byte packets */
+ UNI_BLLI_L3_128 = 0x7, /* 128 byte packets */
+ UNI_BLLI_L3_256 = 0x8, /* 256 byte packets */
+ UNI_BLLI_L3_512 = 0x9, /* 512 byte packets */
+ UNI_BLLI_L3_1024 = 0xa, /* 1024 byte packets */
+ UNI_BLLI_L3_2048 = 0xb, /* 2048 byte packets */
+ UNI_BLLI_L3_4096 = 0xc, /* 4096 byte packets */
+};
+
+enum uni_blli_l3_ttype {
+ UNI_BLLI_L3_TTYPE_RECV = 0x1, /* receive only */
+ UNI_BLLI_L3_TTYPE_SEND = 0x2, /* send only */
+ UNI_BLLI_L3_TTYPE_BOTH = 0x3, /* both */
+};
+
+enum uni_blli_l3_mux {
+ UNI_BLLI_L3_MUX_NOMUX = 0, /* no multiplexing */
+ UNI_BLLI_L3_MUX_TS = 1, /* transport stream */
+ UNI_BLLI_L3_MUX_TSFEC = 2, /* transport stream with FEC */
+ UNI_BLLI_L3_MUX_PS = 3, /* program stream */
+ UNI_BLLI_L3_MUX_PSFEC = 4, /* program stream with FEC */
+ UNI_BLLI_L3_MUX_H221 = 5, /* H.221 */
+};
+
+enum uni_blli_l3_tcap {
+ UNI_BLLI_L3_TCAP_NOIND = 0, /* no indication */
+ UNI_BLLI_L3_TCAP_AAL1 = 1, /* only AAL1 */
+ UNI_BLLI_L3_TCAP_AAL5 = 2, /* only AAL5 */
+ UNI_BLLI_L3_TCAP_AAL15 = 3, /* AAL1 and AAL5 */
+};
+
+/* Value for l3_ipi: */
+enum {
+ UNI_BLLI_L3_SNAP = 0x80, /* IEEE 802.1 SNAP */
+};
+
+struct uni_ie_blli {
+ struct uni_iehdr h;
+#define UNI_BLLI_L1_P 0x0001
+#define UNI_BLLI_L2_P 0x0002
+#define UNI_BLLI_L2_Q933_P 0x0004
+#define UNI_BLLI_L2_WSIZ_P 0x0008
+#define UNI_BLLI_L2_USER_P 0x0010
+#define UNI_BLLI_L3_P 0x0020
+#define UNI_BLLI_L3_MODE_P 0x0040
+#define UNI_BLLI_L3_PSIZ_P 0x0080
+#define UNI_BLLI_L3_WSIZ_P 0x0100
+#define UNI_BLLI_L3_USER_P 0x0200
+#define UNI_BLLI_L3_IPI_P 0x0400
+#define UNI_BLLI_L3_SNAP_P 0x0800
+#define UNI_BLLI_L3_TTYPE_P 0x1000
+#define UNI_BLLI_L3_MUX_P 0x2000
+
+ u_int l1:5; /* layer 1 info */
+
+ enum uni_blli_l2 l2; /* layer 2 info */
+ u_int l2_q933:2; /* layer 2 Q.933 use */
+ enum uni_blli_l2_mode l2_mode; /* layer 2 HDLC mode */
+ u_char l2_user; /* layer 2 user info */
+ u_char l2_wsiz; /* layer 2 window size */
+
+ enum uni_blli_l3 l3; /* layer 3 info */
+ enum uni_blli_l3_mode l3_mode; /* layer 3 mode */
+ enum uni_blli_l3_psiz l3_psiz; /* layer 3 default packet size */
+ u_char l3_wsiz; /* layer 3 window size */
+ u_char l3_user; /* layer 3 user info */
+ u_char l3_ipi; /* IPI byte */
+ u_int oui; /* OUI bytes */
+ u_int pid; /* PID bytes */
+ enum uni_blli_l3_ttype l3_ttype; /* terminal bytes */
+ enum uni_blli_l3_tcap l3_tcap; /* terminal capability */
+ enum uni_blli_l3_mux l3_fmux; /* forward muxing */
+ enum uni_blli_l3_mux l3_bmux; /* forward muxing */
+};
+
+/*************************************************************************
+ *
+ * Transit network selection IE
+ */
+struct uni_ie_tns {
+ struct uni_iehdr h;
+ u_char net[UNI_TNS_MAXLEN];
+ u_int len;
+};
+
+/*************************************************************************
+ *
+ * Call state information element
+ */
+enum uni_callstate {
+ UNI_CALLSTATE_U0 = 0x00,
+ UNI_CALLSTATE_N0 = 0x00,
+ UNI_CALLSTATE_NN0 = 0x00,
+
+ UNI_CALLSTATE_U1 = 0x01,
+ UNI_CALLSTATE_N1 = 0x01,
+ UNI_CALLSTATE_NN1 = 0x01,
+
+ UNI_CALLSTATE_U3 = 0x03,
+ UNI_CALLSTATE_N3 = 0x03,
+ UNI_CALLSTATE_NN3 = 0x03,
+
+ UNI_CALLSTATE_U4 = 0x04,
+ UNI_CALLSTATE_N4 = 0x04,
+ UNI_CALLSTATE_NN4 = 0x04,
+
+ UNI_CALLSTATE_U6 = 0x06,
+ UNI_CALLSTATE_N6 = 0x06,
+ UNI_CALLSTATE_NN6 = 0x06,
+
+ UNI_CALLSTATE_U7 = 0x07,
+ UNI_CALLSTATE_N7 = 0x07,
+ UNI_CALLSTATE_NN7 = 0x07,
+
+ UNI_CALLSTATE_U8 = 0x08,
+ UNI_CALLSTATE_N8 = 0x08,
+
+ UNI_CALLSTATE_U9 = 0x09,
+ UNI_CALLSTATE_N9 = 0x09,
+ UNI_CALLSTATE_NN9 = 0x09,
+
+ UNI_CALLSTATE_U10 = 0x0a,
+ UNI_CALLSTATE_N10 = 0x0a,
+ UNI_CALLSTATE_NN10 = 0x0a,
+
+ UNI_CALLSTATE_U11 = 0x0b,
+ UNI_CALLSTATE_N11 = 0x0b,
+ UNI_CALLSTATE_NN11 = 0x0b,
+
+ UNI_CALLSTATE_U12 = 0x0c,
+ UNI_CALLSTATE_N12 = 0x0c,
+ UNI_CALLSTATE_NN12 = 0x0c,
+
+ UNI_CALLSTATE_REST0 = 0x00,
+ UNI_CALLSTATE_REST1 = 0x3d,
+ UNI_CALLSTATE_REST2 = 0x3e,
+
+ UNI_CALLSTATE_U13 = 0x0d,
+ UNI_CALLSTATE_N13 = 0x0d,
+
+ UNI_CALLSTATE_U14 = 0x0e,
+ UNI_CALLSTATE_N14 = 0x0e,
+};
+
+struct uni_ie_callstate {
+ struct uni_iehdr h;
+ enum uni_callstate state;
+};
+
+/*************************************************************************
+ *
+ * Cause information element
+ */
+enum uni_cause_loc {
+ UNI_CAUSE_LOC_USER = 0x0,
+ UNI_CAUSE_LOC_PRIVLOC = 0x1,
+ UNI_CAUSE_LOC_PUBLOC = 0x2,
+ UNI_CAUSE_LOC_TRANSIT = 0x3,
+ UNI_CAUSE_LOC_PUBREM = 0x4,
+ UNI_CAUSE_LOC_PRIVREM = 0x5,
+ UNI_CAUSE_LOC_INTERNAT = 0x6,
+ UNI_CAUSE_LOC_BEYOND = 0x7,
+};
+
+#define UNI_DECLARE_CAUSE_VALUES \
+D(UNALL_NUM, 0x01 /* 1*/, COND, Q.850, "Unallocated (unassigned) number") \
+D(NOROUTE_NET, 0x02 /* 2*/, TNS, Q.850, "No route to specified transit network") \
+D(NOROUTE, 0x03 /* 3*/, COND, Q.850, "No route to destination") \
+D(SPTONE, 0x04 /* 4*/, NONE, Q.850, "Send special information tone") \
+D(BADTRUNK, 0x05 /* 5*/, NONE, Q.850, "Misdialled trunk prefix") \
+D(BADCHAN, 0x06 /* 6*/, NONE, Q.850, "Channel unacceptable") \
+D(CALLAWARDED, 0x07 /* 7*/, NONE, Q.850, "Call awarded and being delivered in an established channel") \
+D(PREEMPT, 0x08 /* 8*/, NONE, Q.850, "Preemption") \
+D(PREEMPT_RES, 0x09 /* 9*/, NONE, Q.850, "Preemption - circuit reserved for reuse") \
+D(CLEARING, 0x10 /* 16*/, COND, Q.850, "Normal call clearing") \
+D(BUSY, 0x11 /* 17*/, CCBS, Q.850, "User busy") \
+D(NO_RESPONSE, 0x12 /* 18*/, NONE, Q.850, "No user responding") \
+D(NO_RESP_ALERT,0x13 /* 19*/, NONE, Q.850, "No answer from user (user alerted)") \
+D(ABSENT, 0x14 /* 20*/, NONE, Q.850, "Subscriber absent") \
+D(REJECTED, 0x15 /* 21*/, REJ, Q.850, "Call rejected") \
+D(NUMCHG, 0x16 /* 22*/, NUMBER, Q.850, "Number changed") \
+D(REDIR, 0x17 /* 23*/, NONE, Q.850, "Redirection to new destination") \
+N(CLIR_REJECTED,0x17 /* 23*/, NONE, UNI4.0, "User rejects call with calling line identification restriction (CLIR)") \
+D(EXCHG_ERR, 0x19 /* 25*/, NONE, Q.850, "Exchange routing error") \
+D(NOSEL_CLEAR, 0x1a /* 26*/, NONE, Q.850, "Non-selected user clearing") \
+D(DST_OOO, 0x1b /* 27*/, NONE, Q.850, "Destination out of order") \
+D(INV_ADDR, 0x1c /* 28*/, NONE, Q.850, "Invalid number format (address incomplete)") \
+D(FAC_REJ, 0x1d /* 29*/, FAC, Q.850, "Facility rejected") \
+D(STATUS, 0x1e /* 30*/, NONE, Q.850, "Response to STATUS ENQUIRY") \
+D(UNSPEC, 0x1f /* 31*/, NONE, Q.850, "Normal, unspecified") \
+D(TMY_PARTY, 0x20 /* 32*/, NONE, Q.2971, "Too many pending add party requests") \
+D(NOCHAN, 0x22 /* 34*/, CCBS, Q.850, "No circuit/channel available") \
+N(SOFT_NAVL, 0x22 /* 34*/, NONE, PNNI1.0,"Requested called party soft PVPC or PVCC not available")\
+D(VPCI_NAVL, 0x23 /* 35*/, NONE, Q.2610, "Requested VPCI/VCI not available") \
+D(VPCI_FAIL, 0x24 /* 36*/, NONE, Q.2610, "VPCI/VPI assignment failure") \
+D(CRATE_NAVL, 0x25 /* 37*/, CRATE, Q.2610, "User cell rate not available") \
+D(NET_OOO, 0x26 /* 38*/, NONE, Q.850, "Network out of order") \
+D(FRAME_OOS, 0x27 /* 39*/, NONE, Q.850, "Permanent frame mode connection out of service") \
+D(FRAME_OP, 0x28 /* 40*/, NONE, Q.850, "Permanent frame mode connection operational") \
+D(TEMP, 0x29 /* 41*/, NONE, Q.850, "Temporary failure") \
+D(CONG, 0x2a /* 42*/, NONE, Q.850, "Switching equipment congestion") \
+D(ACC_DISC, 0x2b /* 43*/, IE, Q.850, "Access information discarded") \
+D(REQNOCHAN, 0x2c /* 44*/, NONE, Q.850, "Requested circuit/channel not available") \
+D(NOVPCI, 0x2d /* 45*/, NONE, Q.2610, "No VPCI/VCI available") \
+D(PREC_BLOCK, 0x2e /* 46*/, NONE, Q.850, "Precedence call blocked") \
+D(RESRC_NAVL, 0x2f /* 47*/, NONE, Q.850, "Resource unavailable, unspecified") \
+D(QOS_NAVL, 0x31 /* 49*/, COND, Q.850, "Quality of service not available") \
+D(FAC_NOTSUB, 0x32 /* 50*/, FAC, Q.850, "Requested facility not subscribed") \
+D(OUT_CUG, 0x35 /* 53*/, NONE, Q.850, "Outgoing calls barred within CUG") \
+N(PGL_CHG, 0x35 /* 53*/, NONE, PNNI1.0,"Call cleared due to change in PGL") \
+D(IN_CUG, 0x37 /* 55*/, NONE, Q.850, "Incoming call barred within CUG") \
+D(BEARER_NAUTH, 0x39 /* 57*/, ATTR, Q.850, "Bearer capability not authorized") \
+D(BEARER_NAVL, 0x3a /* 58*/, ATTR, Q.850, "Bearer capability not presently available") \
+D(INCONS, 0x3e /* 62*/, NONE, Q.850, "Inconsistency in designated outgoing access information and subscriber class") \
+D(OPT_NAVL, 0x3f /* 63*/, NONE, Q.850, "Service or option not available, unspecified") \
+D(BEARER_NIMPL, 0x41 /* 65*/, ATTR, Q.850, "Bearer capability not implemented") \
+D(CHANNEL_NIMPL,0x42 /* 66*/, CHANNEL, Q.850, "Channel type not implemented") \
+D(FAC_NIMPL, 0x45 /* 69*/, FAC, Q.850, "Requested facility not implemented") \
+D(RESTR_DIG, 0x46 /* 70*/, NONE, Q.850, "Only restricted digital information bearer capability is available") \
+D(TRAFFIC_UNSUP,0x49 /* 73*/, NONE, Q.2971, "Unsupported combination of traffic parameters") \
+N(AAL_UNSUP, 0x4c /* 78*/, NONE, UNI3.1, "AAL parameters cannot be supported") \
+D(CREF_INV, 0x51 /* 81*/, NONE, Q.850, "Invalid call reference value") \
+D(CHANNEL_NEX, 0x52 /* 82*/, CHANID, Q.850, "Identified channel does not exist") \
+D(SUSPENDED, 0x53 /* 83*/, NONE, Q.850, "A suspended call exists, but this call identity does not") \
+D(CID_INUSE, 0x54 /* 84*/, NONE, Q.850, "Call identity in use") \
+D(NOTSUSP, 0x55 /* 85*/, NONE, Q.850, "No call suspended") \
+D(CLEARED, 0x56 /* 86*/, CAUSE, Q.850, "Call having requested call identity has been cleared") \
+D(NOT_MEMBER, 0x57 /* 87*/, NONE, Q.850, "User not member of CUG") \
+D(INCOMP, 0x58 /* 88*/, PARAM, Q.850, "Incompatible destination") \
+D(ENDP_INV, 0x59 /* 89*/, IE, UNI3.1, "Invalid endpoint reference") \
+D(NEX_CUG, 0x5a /* 90*/, NONE, Q.850, "Non-existend CUG") \
+D(TRANSIT_INV, 0x5b /* 91*/, NONE, Q.850, "Invalid transit network selection") \
+D(AALNOTSUPP, 0x5d /* 93*/, NONE, Q.2610, "AAL parameters cannot be supported") \
+D(INVMSG, 0x5f /* 95*/, NONE, Q.850, "Invalid message, unspecified") \
+D(MANDAT, 0x60 /* 96*/, IE, Q.850, "Mandatory information element is missing") \
+D(MTYPE_NIMPL, 0x61 /* 97*/, MTYPE, Q.850, "Message type non-existent or not implemented") \
+D(MSG_NOTCOMP, 0x62 /* 98*/, MTYPE, Q.850, "Message not compatible with call state or message type non-existent or not implemented") \
+D(IE_NIMPL, 0x63 /* 99*/, IE, Q.850, "Information element/parameter non-existent or not implemented") \
+D(IE_INV, 0x64 /*100*/, IE, Q.850, "Invalid information element contents") \
+D(MSG_INCOMP, 0x65 /*101*/, MTYPE, Q.850, "Message not compatible with call state") \
+D(RECOVER, 0x66 /*102*/, TIMER, Q.850, "Recovery on timer expiry") \
+D(PARAM_NEX, 0x67 /*103*/, PARAM, Q.850, "Parameter non-existent or not implemented, passed on") \
+N(BAD_LENGTH, 0x68 /*104*/, NONE, UNI3.1, "Incorrect message length") \
+D(PARAM_UNREC, 0x6e /*110*/, PARAM, Q.850, "Message with unrecognized parameter, discarded") \
+D(PROTO, 0x6f /*111*/, NONE, Q.850, "Protocol error, unspecified") \
+D(INTERWORKING, 0x7f /*127*/, NONE, Q.850, "Interworking, unspecified")
+
+#define D(NAME,VAL,DIAG,STD,STR) UNI_CAUSE_##NAME = VAL,
+#define N(NAME,VAL,DIAG,STD,STR) UNI_CAUSE_##NAME = VAL,
+
+enum uni_cause {
+UNI_DECLARE_CAUSE_VALUES
+};
+
+#undef D
+#undef N
+
+enum uni_cause_class {
+ UNI_CAUSE_CLASS_NORM = 0x0,
+ UNI_CAUSE_CLASS_NORM1 = 0x1,
+ UNI_CAUSE_CLASS_RES = 0x2,
+ UNI_CAUSE_CLASS_NAVL = 0x3,
+ UNI_CAUSE_CLASS_NIMPL = 0x4,
+ UNI_CAUSE_CLASS_INV = 0x5,
+ UNI_CAUSE_CLASS_PROTO = 0x6,
+ UNI_CAUSE_CLASS_INTER = 0x7,
+};
+enum uni_cause_pu {
+ UNI_CAUSE_PU_PROVIDER = 0,
+ UNI_CAUSE_PU_USER = 1,
+};
+enum uni_cause_na {
+ UNI_CAUSE_NA_NORMAL = 0,
+ UNI_CAUSE_NA_ABNORMAL = 1,
+};
+enum uni_cause_cond {
+ UNI_CAUSE_COND_UNKNOWN = 0,
+ UNI_CAUSE_COND_PERM = 1,
+ UNI_CAUSE_COND_TRANS = 2,
+};
+enum uni_cause_reason {
+ UNI_CAUSE_REASON_USER = 0x00,
+ UNI_CAUSE_REASON_IEMISS = 0x01,
+ UNI_CAUSE_REASON_IESUFF = 0x02,
+};
+
+enum uni_diag {
+ UNI_DIAG_NONE, /* no diagnostics */
+
+ UNI_DIAG_COND, /* Condition */
+ UNI_DIAG_TNS, /* Transit Network Selector */
+ UNI_DIAG_REJ, /* Call Rejected */
+ UNI_DIAG_NUMBER, /* New Destination */
+ UNI_DIAG_CRATE, /* Traffic descriptor subfield */
+ UNI_DIAG_ATTR, /* Attribute idendity */
+ UNI_DIAG_PARAM, /* Parameter, same as one IE */
+ UNI_DIAG_TIMER, /* timer in ASCII */
+ UNI_DIAG_MTYPE, /* Message type */
+ UNI_DIAG_IE, /* Information element */
+ UNI_DIAG_CHANID, /* VPCI/VCI */
+
+ UNI_DIAG_CAUSE = UNI_DIAG_NONE, /* Not specified */
+ UNI_DIAG_CHANNEL = UNI_DIAG_NONE, /* For N-ISDN */
+ UNI_DIAG_CCBS = UNI_DIAG_NONE, /* Not used in Q.931 */
+ UNI_DIAG_FAC = UNI_DIAG_NONE, /* Not specified */
+};
+
+enum {
+ UNI_CAUSE_TRAFFIC_N = 34-6,
+ UNI_CAUSE_IE_N = 34-6,
+ UNI_CAUSE_ATTR_N = (34-6)/3,
+};
+
+struct uni_ie_cause {
+ struct uni_iehdr h;
+#define UNI_CAUSE_COND_P 0x0001
+#define UNI_CAUSE_REJ_P 0x0002
+#define UNI_CAUSE_REJ_USER_P 0x0004
+#define UNI_CAUSE_REJ_IE_P 0x0008
+#define UNI_CAUSE_IE_P 0x0010
+#define UNI_CAUSE_TRAFFIC_P 0x0020
+#define UNI_CAUSE_VPCI_P 0x0040
+#define UNI_CAUSE_MTYPE_P 0x0080
+#define UNI_CAUSE_TIMER_P 0x0100
+#define UNI_CAUSE_TNS_P 0x0200
+#define UNI_CAUSE_NUMBER_P 0x0400
+#define UNI_CAUSE_ATTR_P 0x0800
+#define UNI_CAUSE_PARAM_P 0x1000
+
+ enum uni_cause_loc loc;
+ enum uni_cause cause;
+
+ union {
+ struct {
+ enum uni_cause_pu pu;
+ enum uni_cause_na na;
+ enum uni_cause_cond cond;
+ } cond;
+ struct {
+ enum uni_cause_reason reason;
+ enum uni_cause_cond cond;
+ u_int user;
+ uint8_t ie;
+ } rej;
+ struct {
+ uint8_t ie[UNI_CAUSE_IE_N];
+ u_int len;
+ } ie;
+ struct {
+ uint8_t traffic[UNI_CAUSE_TRAFFIC_N];
+ u_int len;
+ } traffic;
+ struct {
+ uint16_t vpci;
+ uint16_t vci;
+ } vpci;
+ uint8_t mtype;
+ u_char timer[3];
+ struct uni_ie_tns tns;
+ struct uni_ie_called number; /* TNS does not fit */
+ uint8_t param;
+ struct {
+ u_int nattr;
+ u_char attr[UNI_CAUSE_ATTR_N][3];
+ } attr;
+ } u;
+};
+enum uni_diag uni_diag(enum uni_cause, enum uni_coding);
+
+/* return a string for the cause (NULL if the coding/cause are illegal) */
+const char *uni_ie_cause2str(enum uni_coding, u_int);
+
+/*************************************************************************
+ *
+ * Connection identifier information element
+ */
+enum uni_connid_type {
+ UNI_CONNID_VCI = 0,
+ UNI_CONNID_ANYVCI = 1,
+ UNI_CONNID_NOVCI = 4,
+};
+enum uni_connid_assoc {
+ UNI_CONNID_ASSOC = 0,
+ UNI_CONNID_NONASSOC = 1,
+};
+struct uni_ie_connid {
+ struct uni_iehdr h;
+ enum uni_connid_assoc assoc;
+ enum uni_connid_type type;
+ u_int vpci : 16;
+ u_int vci : 16;
+};
+
+/*************************************************************************
+ *
+ * End point reference IE
+ */
+struct uni_ie_epref {
+ struct uni_iehdr h;
+ u_int flag : 1;
+ u_int epref : 15;
+};
+
+/*************************************************************************
+ *
+ * End point state IE
+ */
+enum uni_epstate {
+ UNI_EPSTATE_NULL = 0x00,
+ UNI_EPSTATE_ADD_INIT = 0x01,
+ UNI_EPSTATE_ALERT_DLVD = 0x04,
+ UNI_EPSTATE_ADD_RCVD = 0x06,
+ UNI_EPSTATE_ALERT_RCVD = 0x07,
+ UNI_EPSTATE_ACTIVE = 0x0a,
+ UNI_EPSTATE_DROP_INIT = 0x0b,
+ UNI_EPSTATE_DROP_RCVD = 0x0c,
+};
+
+struct uni_ie_epstate {
+ struct uni_iehdr h;
+ enum uni_epstate state;
+};
+
+/*************************************************************************
+ *
+ * Q.2932 Facility IE
+ */
+enum {
+ UNI_FACILITY_ROSE = 0x11,
+
+ UNI_FACILITY_MAXAPDU = 128,
+};
+
+struct uni_ie_facility {
+ struct uni_iehdr h;
+
+ u_char proto;
+ u_char apdu[UNI_FACILITY_MAXAPDU];
+ u_int len;
+};
+
+/*************************************************************************
+ *
+ * Notification indicator
+ */
+enum {
+ UNI_NOTIFY_MAXLEN = 128, /* maximum info length */
+};
+struct uni_ie_notify {
+ struct uni_iehdr h;
+ u_int len;
+ u_char notify[UNI_NOTIFY_MAXLEN];
+};
+
+/*************************************************************************
+ *
+ * QoS information element
+ */
+enum uni_qos {
+ UNI_QOS_CLASS0 = 0x00,
+ UNI_QOS_CLASS1 = 0x01,
+ UNI_QOS_CLASS2 = 0x02,
+ UNI_QOS_CLASS3 = 0x03,
+ UNI_QOS_CLASS4 = 0x04,
+};
+
+struct uni_ie_qos {
+ struct uni_iehdr h;
+ enum uni_qos fwd;
+ enum uni_qos bwd;
+};
+
+/*************************************************************************
+ *
+ * Broadband repeat indicator information element
+ */
+enum uni_repeat_type {
+ UNI_REPEAT_PRIDESC = 0x02,
+ UNI_REPEAT_STACK = 0x0a, /* PNNI */
+};
+
+struct uni_ie_repeat {
+ struct uni_iehdr h;
+ enum uni_repeat_type type;
+};
+
+/*************************************************************************
+ *
+ * Restart indicator information element
+ */
+enum uni_restart_type {
+ UNI_RESTART_CHANNEL = 0x0,
+ UNI_RESTART_PATH = 0x1,
+ UNI_RESTART_ALL = 0x2,
+};
+
+struct uni_ie_restart {
+ struct uni_iehdr h;
+ enum uni_restart_type rclass;
+};
+
+/*************************************************************************
+ *
+ * Broadband sending complete indicator information element
+ */
+struct uni_ie_scompl {
+ struct uni_iehdr h;
+};
+
+/*************************************************************************
+ *
+ * ATM traffic descriptor information element
+ */
+enum {
+ UNI_TRAFFIC_FMDCR_ID = 0x00,
+ UNI_TRAFFIC_BMDCR_ID = 0x02,
+ UNI_TRAFFIC_FPCR0_ID = 0x82,
+ UNI_TRAFFIC_BPCR0_ID = 0x83,
+ UNI_TRAFFIC_FPCR1_ID = 0x84,
+ UNI_TRAFFIC_BPCR1_ID = 0x85,
+ UNI_TRAFFIC_FSCR0_ID = 0x88,
+ UNI_TRAFFIC_BSCR0_ID = 0x89,
+ UNI_TRAFFIC_FSCR1_ID = 0x90,
+ UNI_TRAFFIC_BSCR1_ID = 0x91,
+ UNI_TRAFFIC_FABR1_ID = 0x92,
+ UNI_TRAFFIC_BABR1_ID = 0x93,
+ UNI_TRAFFIC_FMBS0_ID = 0xa0,
+ UNI_TRAFFIC_BMBS0_ID = 0xa1,
+ UNI_TRAFFIC_FMBS1_ID = 0xb0,
+ UNI_TRAFFIC_BMBS1_ID = 0xb1,
+ UNI_TRAFFIC_BEST_ID = 0xbe,
+ UNI_TRAFFIC_MOPT_ID = 0xbf,
+
+ UNI_TRAFFIC_FTAG = 0x01,
+ UNI_TRAFFIC_BTAG = 0x02,
+ UNI_TRAFFIC_FDISC = 0x80,
+ UNI_TRAFFIC_BDISC = 0x40,
+
+ UNI_MINTRAFFIC_FPCR0_ID = 0x82,
+ UNI_MINTRAFFIC_BPCR0_ID = 0x83,
+ UNI_MINTRAFFIC_FPCR1_ID = 0x84,
+ UNI_MINTRAFFIC_BPCR1_ID = 0x85,
+ UNI_MINTRAFFIC_FABR1_ID = 0x92,
+ UNI_MINTRAFFIC_BABR1_ID = 0x93,
+
+ UNI_MDCR_ORIGIN_USER = 0x00,
+ UNI_MDCR_ORIGIN_NET = 0x01,
+};
+
+#define UNI_TRAFFIC_FPCR0_P 0x0001
+#define UNI_TRAFFIC_BPCR0_P 0x0002
+#define UNI_TRAFFIC_FPCR1_P 0x0004
+#define UNI_TRAFFIC_BPCR1_P 0x0008
+#define UNI_TRAFFIC_FSCR0_P 0x0010
+#define UNI_TRAFFIC_BSCR0_P 0x0020
+#define UNI_TRAFFIC_FSCR1_P 0x0040
+#define UNI_TRAFFIC_BSCR1_P 0x0080
+#define UNI_TRAFFIC_FMBS0_P 0x0100
+#define UNI_TRAFFIC_BMBS0_P 0x0200
+#define UNI_TRAFFIC_FMBS1_P 0x0400
+#define UNI_TRAFFIC_BMBS1_P 0x0800
+#define UNI_TRAFFIC_BEST_P 0x1000
+#define UNI_TRAFFIC_MOPT_P 0x2000
+#define UNI_TRAFFIC_FABR1_P 0x4000
+#define UNI_TRAFFIC_BABR1_P 0x8000
+struct uni_xtraffic {
+ u_int fpcr0, bpcr0;
+ u_int fpcr1, bpcr1;
+ u_int fscr0, bscr0;
+ u_int fscr1, bscr1;
+ u_int fmbs0, bmbs0;
+ u_int fmbs1, bmbs1;
+ u_int fabr1, babr1;
+ u_int ftag, btag;
+ u_int fdisc, bdisc;
+};
+
+struct uni_ie_traffic {
+ struct uni_iehdr h;
+ struct uni_xtraffic t;
+};
+struct uni_ie_atraffic {
+ struct uni_iehdr h;
+ struct uni_xtraffic t;
+};
+
+/*
+ * Q.2961 minimum traffic descriptor
+ */
+struct uni_ie_mintraffic {
+ struct uni_iehdr h;
+#define UNI_MINTRAFFIC_FPCR0_P 0x0001
+#define UNI_MINTRAFFIC_BPCR0_P 0x0002
+#define UNI_MINTRAFFIC_FPCR1_P 0x0004
+#define UNI_MINTRAFFIC_BPCR1_P 0x0008
+#define UNI_MINTRAFFIC_FABR1_P 0x0010
+#define UNI_MINTRAFFIC_BABR1_P 0x0020
+
+ u_int fpcr0, bpcr0;
+ u_int fpcr1, bpcr1;
+ u_int fabr1, babr1;
+};
+
+/*
+ * UNI4.0+ (af-cs-0147.000) Minimum Desired Cell Rate
+ */
+struct uni_ie_mdcr {
+ struct uni_iehdr h;
+ u_int origin;
+ u_int fmdcr, bmdcr;
+};
+
+/*************************************************************************
+ *
+ * User-user information information element
+ */
+struct uni_ie_uu {
+ struct uni_iehdr h;
+ u_int len;
+ u_char uu[UNI_UU_MAXLEN];
+};
+
+/*************************************************************************
+ *
+ * Generic identifier transport
+ */
+enum uni_git_std {
+ UNI_GIT_STD_DSMCC = 0x01, /* DSM-CC */
+ UNI_GIT_STD_H245 = 0x02, /* H.245 */
+};
+enum uni_git_type {
+ UNI_GIT_TYPE_SESS = 0x01, /* session id */
+ UNI_GIT_TYPE_RES = 0x02, /* resource id */
+};
+
+enum {
+ UNI_GIT_MAXSESS = 20, /* max session value length */
+ UNI_GIT_MAXRES = 4, /* max resource value length */
+
+ UNI_GIT_MAXVAL = 20, /* the maximum of the above */
+ UNI_GIT_MAXSUB = 2, /* maximum number of og. 6 */
+};
+
+struct uni_ie_git {
+ struct uni_iehdr h;
+
+ enum uni_git_std std; /* identifier related standard/application */
+ u_int numsub;
+ struct {
+ enum uni_git_type type;
+ u_int len;
+ u_char val[UNI_GIT_MAXVAL];
+ } sub[UNI_GIT_MAXSUB];
+};
+
+/*************************************************************************
+ *
+ * End-to-end transit delay
+ */
+enum {
+ UNI_EETD_CTD_ID = 0x01, /* cumulative transit delay */
+ UNI_EETD_MTD_ID = 0x03, /* maximum transit delay */
+ UNI_EETD_NET_ID = 0x0a, /* network generated */
+ UNI_EETD_PMTD_ID = 0x0b, /* PNNI acceptable forward maximum ctd */
+ UNI_EETD_PCTD_ID = 0x11, /* PNNI cumulative forward maximum ctd */
+
+ UNI_EETD_ANYMAX = 0xffff,
+ UNI_EETD_MAXVAL = 0xffff, /* maximum value */
+};
+
+struct uni_ie_eetd {
+ struct uni_iehdr h;
+#define UNI_EETD_CUM_P 0x0001
+#define UNI_EETD_MAX_P 0x0002
+#define UNI_EETD_NET_P 0x0004 /* UNI4.0 9.1.2.1 */
+#define UNI_EETD_PMTD_P 0x0008 /* PNNI1.0 6.4.5.24 */
+#define UNI_EETD_PCTD_P 0x0010 /* PNNI1.0 6.4.5.24 */
+
+ u_int cumulative;
+ u_int maximum;
+ u_int pmtd;
+ u_int pctd;
+};
+
+/*************************************************************************
+ *
+ * Leaf-initiated-join call identifier
+ */
+enum uni_lij_idtype {
+ UNI_LIJ_IDTYPE_ROOT = 0x0, /* root created */
+};
+
+struct uni_ie_lij_callid {
+ struct uni_iehdr h;
+
+ enum uni_lij_idtype type;
+ u_int callid;
+};
+
+/*
+ * LIJ parameters
+ */
+enum uni_lij_screen {
+ UNI_LIJ_SCREEN_NETJOIN = 0x0, /* without root notification */
+};
+
+struct uni_ie_lij_param {
+ struct uni_iehdr h;
+
+ enum uni_lij_screen screen;
+};
+
+/*
+ * LIJ sequence number
+ */
+struct uni_ie_lij_seqno {
+ struct uni_iehdr h;
+
+ u_int seqno;
+};
+
+/*************************************************************************
+ *
+ * Locking/Non-locking shift not supported
+ */
+struct uni_ie_lshift {
+ struct uni_iehdr h;
+ u_int set:3;
+};
+
+struct uni_ie_nlshift {
+ struct uni_iehdr h;
+ u_int set:3;
+};
+
+/*************************************************************************
+ *
+ * Externded QoS information element
+ */
+enum {
+ UNI_EXQOS_FACC_ID = 0x94,
+ UNI_EXQOS_BACC_ID = 0x95,
+ UNI_EXQOS_FCUM_ID = 0x96,
+ UNI_EXQOS_BCUM_ID = 0x97,
+ UNI_EXQOS_FCLR_ID = 0xa2,
+ UNI_EXQOS_BCLR_ID = 0xa3,
+};
+
+enum uni_exqos_origin {
+ UNI_EXQOS_USER = 0,
+ UNI_EXQOS_NET = 1,
+};
+
+enum {
+ UNI_EXQOS_ANY_CDV = 0xffffff,
+ UNI_EXQOS_ANY_CLR = 0xff,
+};
+
+struct uni_ie_exqos {
+ struct uni_iehdr h;
+#define UNI_EXQOS_FACC_P 0x0001
+#define UNI_EXQOS_BACC_P 0x0002
+#define UNI_EXQOS_FCUM_P 0x0004
+#define UNI_EXQOS_BCUM_P 0x0008
+#define UNI_EXQOS_FCLR_P 0x0010
+#define UNI_EXQOS_BCLR_P 0x0020
+
+ enum uni_exqos_origin origin;
+ u_int facc;
+ u_int bacc;
+ u_int fcum;
+ u_int bcum;
+ u_int fclr;
+ u_int bclr;
+};
+
+/*************************************************************************
+ *
+ * Additional ABR parameters
+ * ABR setup parameters
+ */
+enum {
+ UNI_ABRADD_FADD_ID = 0xc2,
+ UNI_ABRADD_BADD_ID = 0xc3,
+ UNI_ABRSETUP_FICR_ID = 0xc2,
+ UNI_ABRSETUP_BICR_ID = 0xc3,
+ UNI_ABRSETUP_FTBE_ID = 0xc4,
+ UNI_ABRSETUP_BTBE_ID = 0xc5,
+ UNI_ABRSETUP_RMFRT_ID = 0xc6,
+ UNI_ABRSETUP_FRIF_ID = 0xc8,
+ UNI_ABRSETUP_BRIF_ID = 0xc9,
+ UNI_ABRSETUP_FRDF_ID = 0xca,
+ UNI_ABRSETUP_BRDF_ID = 0xcb,
+};
+
+struct uni_abr_rec {
+ u_int present;
+#define UNI_ABR_REC_NRM_P 0x80000000
+#define UNI_ABR_REC_TRM_P 0x40000000
+#define UNI_ABR_REC_CDF_P 0x20000000
+#define UNI_ABR_REC_ADTF_P 0x10000000
+ u_int nrm:3;
+ u_int trm:3;
+ u_int cdf:3;
+ u_int adtf:10;
+};
+
+struct uni_ie_abradd {
+ struct uni_iehdr h;
+ struct uni_abr_rec fwd, bwd;
+};
+
+struct uni_ie_abrsetup {
+ struct uni_iehdr h;
+#define UNI_ABRSETUP_FICR_P 0x0001
+#define UNI_ABRSETUP_BICR_P 0x0002
+#define UNI_ABRSETUP_FTBE_P 0x0004
+#define UNI_ABRSETUP_BTBE_P 0x0008
+#define UNI_ABRSETUP_FRIF_P 0x0010
+#define UNI_ABRSETUP_BRIF_P 0x0020
+#define UNI_ABRSETUP_FRDF_P 0x0040
+#define UNI_ABRSETUP_BRDF_P 0x0080
+#define UNI_ABRSETUP_RMFRT_P 0x0100
+
+ u_int ficr, bicr;
+ u_int ftbe, btbe;
+ u_int rmfrt;
+ u_int frif, brif;
+ u_int frdf, brdf;
+};
+
+/*************************************************************************
+ *
+ * Connection scope information element
+ */
+enum uni_cscope {
+ UNI_CSCOPE_ORG = 0x01,
+};
+
+enum {
+ UNI_CSCOPE_ORG_LOC = 0x01,
+ UNI_CSCOPE_ORG_LOC_P1 = 0x02,
+ UNI_CSCOPE_ORG_LOC_P2 = 0x03,
+ UNI_CSCOPE_ORG_SITE_M1 = 0x04,
+ UNI_CSCOPE_ORG_SITE = 0x05,
+ UNI_CSCOPE_ORG_SITE_P1 = 0x06,
+ UNI_CSCOPE_ORG_ORG_M1 = 0x07,
+ UNI_CSCOPE_ORG_ORG = 0x08,
+ UNI_CSCOPE_ORG_ORG_P1 = 0x09,
+ UNI_CSCOPE_ORG_COMM_M1 = 0x0a,
+ UNI_CSCOPE_ORG_COMM = 0x0b,
+ UNI_CSCOPE_ORG_COMM_P1 = 0x0c,
+ UNI_CSCOPE_ORG_REG = 0x0d,
+ UNI_CSCOPE_ORG_INTER = 0x0e,
+ UNI_CSCOPE_ORG_GLOBAL = 0x0f,
+};
+
+struct uni_ie_cscope {
+ struct uni_iehdr h;
+ enum uni_cscope type;
+ u_int scope:8;
+};
+
+/*************************************************************************
+ *
+ * Connection scope information element
+ */
+enum uni_report {
+ UNI_REPORT_MODCONF = 0x01,
+ UNI_REPORT_CLOCK = 0x02,
+ UNI_REPORT_EEAVAIL = 0x04,
+ UNI_REPORT_EEREQ = 0x05,
+ UNI_REPORT_EECOMPL = 0x06,
+};
+
+struct uni_ie_report {
+ struct uni_iehdr h;
+ enum uni_report report;
+};
+
+/*************************************************************************
+ *
+ * PNNI Designated transit list information element
+ */
+enum {
+ UNI_DTL_LOGNP = 0x01,
+ UNI_DTL_LOGNP_SIZE = 27,
+};
+
+struct uni_ie_dtl {
+ struct uni_iehdr h;
+ u_int ptr:16;
+ u_int num;
+ struct {
+ u_char node_level;
+ u_char node_id[21];
+ u_int port_id;
+ } dtl[UNI_DTL_MAXNUM];
+};
+
+/*************************************************************************
+ *
+ * PNNI Crankback information element
+ */
+enum uni_crankback {
+ UNI_CRANKBACK_IF = 0x02,
+ UNI_CRANKBACK_NODE = 0x03,
+ UNI_CRANKBACK_LINK = 0x04,
+};
+
+enum {
+ UNI_CAUSE_NXNODE_UNREACH = 128,
+ UNI_CAUSE_DTL_NOT_MY_ID = 160,
+};
+
+struct uni_ie_crankback {
+ struct uni_iehdr h;
+#define UNI_CRANKBACK_TOP_P 0x0001
+#define UNI_CRANKBACK_TOPX_P 0x0002
+#define UNI_CRANKBACK_QOS_P 0x0004
+ u_int level:8;
+ enum uni_crankback type;
+ union {
+ struct {
+ u_char level;
+ u_char id[21];
+ } node;
+ struct {
+ u_char plevel;
+ u_char pid[21];
+ u_int port;
+ u_char slevel;
+ u_char sid[21];
+ } link;
+ } id;
+ u_int cause:8;
+ union {
+ struct {
+ u_int dir:8;
+ u_int port;
+ u_int avcr;
+ u_int crm;
+ u_int vf;
+ } top;
+ struct {
+ u_int ctd:1;
+ u_int cdv:1;
+ u_int clr:1;
+ u_int other:1;
+ } qos;
+ } diag;
+};
+
+/*************************************************************************
+ *
+ * PNNI Call_ing/called party soft PVPC/PVCC information element
+ */
+enum uni_soft_sel {
+ UNI_SOFT_SEL_ANY = 0x00,
+ UNI_SOFT_SEL_REQ = 0x02,
+ UNI_SOFT_SEL_ASS = 0x04,
+};
+
+struct uni_ie_calling_soft {
+ struct uni_iehdr h;
+#define UNI_CALLING_SOFT_VCI_P 0x0001
+ u_int vpi:12;
+ u_int vci:16;
+};
+struct uni_ie_called_soft {
+ struct uni_iehdr h;
+#define UNI_CALLED_SOFT_VPI_P 0x0001
+#define UNI_CALLED_SOFT_VCI_P 0x0002
+ enum uni_soft_sel sel;
+ u_int vpi:12;
+ u_int vci:16;
+};
+
+/*************************************************************************/
+
+#include <netnatm/msg/uni_ie.h>
+#include <netnatm/msg/uni_msg.h>
+
+struct uni_all {
+ enum uni_msgtype mtype;
+ union uni_msgall u;
+};
+
+struct uni_ie {
+ enum uni_ietype ietype;
+ union uni_ieall u;
+};
+
+#endif
OpenPOWER on IntegriCloud