freebsd-dev/sys/contrib/ngatm/netnatm/msg/unistruct.h
2004-08-11 12:21:36 +00:00

1372 lines
36 KiB
C

/*
* Copyright (c) 1996-2003
* Fraunhofer Institute for Open Communication Systems (FhG Fokus).
* All rights reserved.
*
* Author: Hartmut Brandt <harti@freebsd.org>
*
* 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.
*
* $Begemot: libunimsg/netnatm/msg/unistruct.h,v 1.7 2004/07/16 18:42:22 brandt 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,
};
/* don't use bitfields to get a defined structure layout */
struct uni_addr {
uint8_t type;
uint8_t plan;
uint8_t 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