The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/ngatm/netnatm/msg/unistruct.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    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  */
   51 struct 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  */
   62 enum {
   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 
   76 enum 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 };
   84 enum 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 };
   91 enum 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 };
  105 enum 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 };
  110 enum 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 };
  115 enum 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 
  122 struct 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  */
  177 enum 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 };
  185 enum 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 };
  192 enum uni_subaddr_type {
  193         UNI_SUBADDR_NSAP        = 0x0,
  194         UNI_SUBADDR_ATME        = 0x1,
  195         UNI_SUBADDR_USER        = 0x2,  /* not sup */
  196 };
  197 enum uni_addr_pres {
  198         UNI_ADDR_PRES           = 0x0,
  199         UNI_ADDR_RESTRICT       = 0x1,
  200         UNI_ADDR_NONUMBER       = 0x2,
  201 };
  202 enum 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 */
  210 struct uni_addr {
  211         uint8_t                 type;
  212         uint8_t                 plan;
  213         uint8_t                 len;
  214         u_char                  addr[UNI_ADDR_MAXLEN];
  215 };
  216 struct uni_subaddr {
  217         enum uni_subaddr_type   type;
  218         u_int                   len;
  219         u_char                  addr[UNI_SUBADDR_MAXLEN];
  220 };
  221 
  222 struct uni_ie_called {
  223         struct uni_iehdr        h;
  224         struct uni_addr addr;
  225 };
  226 
  227 struct uni_ie_calledsub {
  228         struct uni_iehdr        h;
  229         struct uni_subaddr      addr;
  230 };
  231 
  232 struct 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 
  241 struct uni_ie_callingsub {
  242         struct uni_iehdr        h;
  243         struct uni_subaddr      addr;
  244 };
  245 
  246 struct 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 
  255 struct 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  */
  266 enum 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 
  273 enum 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 
  290 enum uni_bearer_clip {
  291         UNI_BEARER_NOCLIP       = 0x0,
  292         UNI_BEARER_CLIP         = 0x1,
  293 };
  294 
  295 enum uni_bearer_cfg {
  296         UNI_BEARER_P2P          = 0x0,
  297         UNI_BEARER_MP           = 0x1,
  298 };
  299 
  300 struct 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  */
  314 enum 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 
  320 struct 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  */
  331 enum {
  332         UNI_BLLI_L1_ID          = 0x1,
  333         UNI_BLLI_L2_ID          = 0x2,
  334         UNI_BLLI_L3_ID          = 0x3,
  335 };
  336 
  337 enum 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 
  353 enum uni_blli_l2_mode {
  354         UNI_BLLI_L2NORM         = 0x1,
  355         UNI_BLLI_L2EXT          = 0x2,
  356 };
  357 
  358 enum 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 
  370 enum uni_blli_l3_mode {
  371         UNI_BLLI_L3NSEQ         = 0x1,  /* normal sequence numbering */
  372         UNI_BLLI_L3ESEQ         = 0x2,  /* extended sequence numbering */
  373 };
  374 
  375 enum 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 
  387 enum 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 
  393 enum 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 
  402 enum 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: */
  410 enum {
  411         UNI_BLLI_L3_SNAP        = 0x80, /* IEEE 802.1 SNAP */
  412 };
  413 
  414 struct 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  */
  457 struct 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  */
  467 enum 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 
  522 struct uni_ie_callstate {
  523         struct uni_iehdr        h;
  524         enum uni_callstate      state;
  525 };
  526 
  527 /*************************************************************************
  528  *
  529  * Cause information element
  530  */
  531 enum 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 \
  543 D(UNALL_NUM,    0x01 /*  1*/, COND,     Q.850,  "Unallocated (unassigned) number") \
  544 D(NOROUTE_NET,  0x02 /*  2*/, TNS,      Q.850,  "No route to specified transit network") \
  545 D(NOROUTE,      0x03 /*  3*/, COND,     Q.850,  "No route to destination") \
  546 D(SPTONE,       0x04 /*  4*/, NONE,     Q.850,  "Send special information tone") \
  547 D(BADTRUNK,     0x05 /*  5*/, NONE,     Q.850,  "Misdialled trunk prefix") \
  548 D(BADCHAN,      0x06 /*  6*/, NONE,     Q.850,  "Channel unacceptable") \
  549 D(CALLAWARDED,  0x07 /*  7*/, NONE,     Q.850,  "Call awarded and being delivered in an established channel") \
  550 D(PREEMPT,      0x08 /*  8*/, NONE,     Q.850,  "Preemption") \
  551 D(PREEMPT_RES,  0x09 /*  9*/, NONE,     Q.850,  "Preemption - circuit reserved for reuse") \
  552 D(CLEARING,     0x10 /* 16*/, COND,     Q.850,  "Normal call clearing") \
  553 D(BUSY,         0x11 /* 17*/, CCBS,     Q.850,  "User busy") \
  554 D(NO_RESPONSE,  0x12 /* 18*/, NONE,     Q.850,  "No user responding") \
  555 D(NO_RESP_ALERT,0x13 /* 19*/, NONE,     Q.850,  "No answer from user (user alerted)") \
  556 D(ABSENT,       0x14 /* 20*/, NONE,     Q.850,  "Subscriber absent") \
  557 D(REJECTED,     0x15 /* 21*/, REJ,      Q.850,  "Call rejected") \
  558 D(NUMCHG,       0x16 /* 22*/, NUMBER,   Q.850,  "Number changed") \
  559 D(REDIR,        0x17 /* 23*/, NONE,     Q.850,  "Redirection to new destination") \
  560 N(CLIR_REJECTED,0x17 /* 23*/, NONE,     UNI4.0, "User rejects call with calling line identification restriction (CLIR)") \
  561 D(EXCHG_ERR,    0x19 /* 25*/, NONE,     Q.850,  "Exchange routing error") \
  562 D(NOSEL_CLEAR,  0x1a /* 26*/, NONE,     Q.850,  "Non-selected user clearing") \
  563 D(DST_OOO,      0x1b /* 27*/, NONE,     Q.850,  "Destination out of order") \
  564 D(INV_ADDR,     0x1c /* 28*/, NONE,     Q.850,  "Invalid number format (address incomplete)") \
  565 D(FAC_REJ,      0x1d /* 29*/, FAC,      Q.850,  "Facility rejected") \
  566 D(STATUS,       0x1e /* 30*/, NONE,     Q.850,  "Response to STATUS ENQUIRY") \
  567 D(UNSPEC,       0x1f /* 31*/, NONE,     Q.850,  "Normal, unspecified") \
  568 D(TMY_PARTY,    0x20 /* 32*/, NONE,     Q.2971, "Too many pending add party requests") \
  569 D(NOCHAN,       0x22 /* 34*/, CCBS,     Q.850,  "No circuit/channel available") \
  570 N(SOFT_NAVL,    0x22 /* 34*/, NONE,     PNNI1.0,"Requested called party soft PVPC or PVCC not available")\
  571 D(VPCI_NAVL,    0x23 /* 35*/, NONE,     Q.2610, "Requested VPCI/VCI not available") \
  572 D(VPCI_FAIL,    0x24 /* 36*/, NONE,     Q.2610, "VPCI/VPI assignment failure") \
  573 D(CRATE_NAVL,   0x25 /* 37*/, CRATE,    Q.2610, "User cell rate not available") \
  574 D(NET_OOO,      0x26 /* 38*/, NONE,     Q.850,  "Network out of order") \
  575 D(FRAME_OOS,    0x27 /* 39*/, NONE,     Q.850,  "Permanent frame mode connection out of service") \
  576 D(FRAME_OP,     0x28 /* 40*/, NONE,     Q.850,  "Permanent frame mode connection operational") \
  577 D(TEMP,         0x29 /* 41*/, NONE,     Q.850,  "Temporary failure") \
  578 D(CONG,         0x2a /* 42*/, NONE,     Q.850,  "Switching equipment congestion") \
  579 D(ACC_DISC,     0x2b /* 43*/, IE,       Q.850,  "Access information discarded") \
  580 D(REQNOCHAN,    0x2c /* 44*/, NONE,     Q.850,  "Requested circuit/channel not available") \
  581 D(NOVPCI,       0x2d /* 45*/, NONE,     Q.2610, "No VPCI/VCI available") \
  582 D(PREC_BLOCK,   0x2e /* 46*/, NONE,     Q.850,  "Precedence call blocked") \
  583 D(RESRC_NAVL,   0x2f /* 47*/, NONE,     Q.850,  "Resource unavailable, unspecified") \
  584 D(QOS_NAVL,     0x31 /* 49*/, COND,     Q.850,  "Quality of service not available") \
  585 D(FAC_NOTSUB,   0x32 /* 50*/, FAC,      Q.850,  "Requested facility not subscribed") \
  586 D(OUT_CUG,      0x35 /* 53*/, NONE,     Q.850,  "Outgoing calls barred within CUG") \
  587 N(PGL_CHG,      0x35 /* 53*/, NONE,     PNNI1.0,"Call cleared due to change in PGL") \
  588 D(IN_CUG,       0x37 /* 55*/, NONE,     Q.850,  "Incoming call barred within CUG") \
  589 D(BEARER_NAUTH, 0x39 /* 57*/, ATTR,     Q.850,  "Bearer capability not authorized") \
  590 D(BEARER_NAVL,  0x3a /* 58*/, ATTR,     Q.850,  "Bearer capability not presently available") \
  591 D(INCONS,       0x3e /* 62*/, NONE,     Q.850,  "Inconsistency in designated outgoing access information and subscriber class") \
  592 D(OPT_NAVL,     0x3f /* 63*/, NONE,     Q.850,  "Service or option not available, unspecified") \
  593 D(BEARER_NIMPL, 0x41 /* 65*/, ATTR,     Q.850,  "Bearer capability not implemented") \
  594 D(CHANNEL_NIMPL,0x42 /* 66*/, CHANNEL,  Q.850,  "Channel type not implemented") \
  595 D(FAC_NIMPL,    0x45 /* 69*/, FAC,      Q.850,  "Requested facility not implemented") \
  596 D(RESTR_DIG,    0x46 /* 70*/, NONE,     Q.850,  "Only restricted digital information bearer capability is available") \
  597 D(TRAFFIC_UNSUP,0x49 /* 73*/, NONE,     Q.2971, "Unsupported combination of traffic parameters") \
  598 N(AAL_UNSUP,    0x4c /* 78*/, NONE,     UNI3.1, "AAL parameters cannot be supported") \
  599 D(CREF_INV,     0x51 /* 81*/, NONE,     Q.850,  "Invalid call reference value") \
  600 D(CHANNEL_NEX,  0x52 /* 82*/, CHANID,   Q.850,  "Identified channel does not exist") \
  601 D(SUSPENDED,    0x53 /* 83*/, NONE,     Q.850,  "A suspended call exists, but this call identity does not") \
  602 D(CID_INUSE,    0x54 /* 84*/, NONE,     Q.850,  "Call identity in use") \
  603 D(NOTSUSP,      0x55 /* 85*/, NONE,     Q.850,  "No call suspended") \
  604 D(CLEARED,      0x56 /* 86*/, CAUSE,    Q.850,  "Call having requested call identity has been cleared") \
  605 D(NOT_MEMBER,   0x57 /* 87*/, NONE,     Q.850,  "User not member of CUG") \
  606 D(INCOMP,       0x58 /* 88*/, PARAM,    Q.850,  "Incompatible destination") \
  607 D(ENDP_INV,     0x59 /* 89*/, IE,       UNI3.1, "Invalid endpoint reference") \
  608 D(NEX_CUG,      0x5a /* 90*/, NONE,     Q.850,  "Non-existend CUG") \
  609 D(TRANSIT_INV,  0x5b /* 91*/, NONE,     Q.850,  "Invalid transit network selection") \
  610 D(AALNOTSUPP,   0x5d /* 93*/, NONE,     Q.2610, "AAL parameters cannot be supported") \
  611 D(INVMSG,       0x5f /* 95*/, NONE,     Q.850,  "Invalid message, unspecified") \
  612 D(MANDAT,       0x60 /* 96*/, IE,       Q.850,  "Mandatory information element is missing") \
  613 D(MTYPE_NIMPL,  0x61 /* 97*/, MTYPE,    Q.850,  "Message type non-existent or not implemented") \
  614 D(MSG_NOTCOMP,  0x62 /* 98*/, MTYPE,    Q.850,  "Message not compatible with call state or message type non-existent or not implemented") \
  615 D(IE_NIMPL,     0x63 /* 99*/, IE,       Q.850,  "Information element/parameter non-existent or not implemented") \
  616 D(IE_INV,       0x64 /*100*/, IE,       Q.850,  "Invalid information element contents") \
  617 D(MSG_INCOMP,   0x65 /*101*/, MTYPE,    Q.850,  "Message not compatible with call state") \
  618 D(RECOVER,      0x66 /*102*/, TIMER,    Q.850,  "Recovery on timer expiry") \
  619 D(PARAM_NEX,    0x67 /*103*/, PARAM,    Q.850,  "Parameter non-existent or not implemented, passed on") \
  620 N(BAD_LENGTH,   0x68 /*104*/, NONE,     UNI3.1, "Incorrect message length") \
  621 D(PARAM_UNREC,  0x6e /*110*/, PARAM,    Q.850,  "Message with unrecognized parameter, discarded") \
  622 D(PROTO,        0x6f /*111*/, NONE,     Q.850,  "Protocol error, unspecified") \
  623 D(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 
  628 enum uni_cause {
  629 UNI_DECLARE_CAUSE_VALUES
  630 };
  631 
  632 #undef D
  633 #undef N
  634 
  635 enum 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 };
  645 enum uni_cause_pu {
  646         UNI_CAUSE_PU_PROVIDER   = 0,
  647         UNI_CAUSE_PU_USER       = 1,
  648 };
  649 enum uni_cause_na {
  650         UNI_CAUSE_NA_NORMAL     = 0,
  651         UNI_CAUSE_NA_ABNORMAL   = 1,
  652 };
  653 enum uni_cause_cond {
  654         UNI_CAUSE_COND_UNKNOWN  = 0,
  655         UNI_CAUSE_COND_PERM     = 1,
  656         UNI_CAUSE_COND_TRANS    = 2,
  657 };
  658 enum uni_cause_reason {
  659         UNI_CAUSE_REASON_USER   = 0x00,
  660         UNI_CAUSE_REASON_IEMISS = 0x01,
  661         UNI_CAUSE_REASON_IESUFF = 0x02,
  662 };
  663 
  664 enum 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 
  685 enum {
  686         UNI_CAUSE_TRAFFIC_N     = 34-6,
  687         UNI_CAUSE_IE_N          = 34-6,
  688         UNI_CAUSE_ATTR_N        = (34-6)/3,
  689 };
  690 
  691 struct 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 };
  745 enum 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) */
  748 const char *uni_ie_cause2str(enum uni_coding, u_int);
  749 
  750 /*************************************************************************
  751  *
  752  * Connection identifier information element
  753  */
  754 enum uni_connid_type {
  755         UNI_CONNID_VCI          = 0,
  756         UNI_CONNID_ANYVCI       = 1,
  757         UNI_CONNID_NOVCI        = 4,
  758 };
  759 enum uni_connid_assoc {
  760         UNI_CONNID_ASSOC        = 0,
  761         UNI_CONNID_NONASSOC     = 1,
  762 };
  763 struct 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  */
  775 struct 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  */
  785 enum 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 
  796 struct uni_ie_epstate {
  797         struct uni_iehdr h;
  798         enum uni_epstate state;
  799 };
  800 
  801 /*************************************************************************
  802  *
  803  * Q.2932 Facility IE
  804  */
  805 enum {
  806         UNI_FACILITY_ROSE       = 0x11,
  807 
  808         UNI_FACILITY_MAXAPDU    = 128,
  809 };
  810 
  811 struct 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  */
  823 enum {
  824         UNI_NOTIFY_MAXLEN       = 128,  /* maximum info length */
  825 };
  826 struct 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  */
  836 enum 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 
  844 struct 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  */
  854 enum uni_repeat_type {
  855         UNI_REPEAT_PRIDESC      = 0x02,
  856         UNI_REPEAT_STACK        = 0x0a,         /* PNNI */
  857 };
  858 
  859 struct uni_ie_repeat {
  860         struct uni_iehdr h;
  861         enum uni_repeat_type type;
  862 };
  863 
  864 /*************************************************************************
  865  *
  866  * Restart indicator information element
  867  */
  868 enum uni_restart_type {
  869         UNI_RESTART_CHANNEL     = 0x0,
  870         UNI_RESTART_PATH        = 0x1,
  871         UNI_RESTART_ALL         = 0x2,
  872 };
  873 
  874 struct 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  */
  883 struct uni_ie_scompl {
  884         struct uni_iehdr h;
  885 };
  886 
  887 /*************************************************************************
  888  *
  889  * ATM traffic descriptor information element
  890  */
  891 enum {
  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
  943 struct 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 
  955 struct uni_ie_traffic {
  956         struct uni_iehdr h;
  957         struct uni_xtraffic t;
  958 };
  959 struct uni_ie_atraffic {
  960         struct uni_iehdr h;
  961         struct uni_xtraffic t;
  962 };
  963 
  964 /*
  965  * Q.2961 minimum traffic descriptor
  966  */
  967 struct 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  */
  984 struct 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  */
  994 struct 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  */
 1004 enum uni_git_std {
 1005         UNI_GIT_STD_DSMCC       = 0x01, /* DSM-CC */
 1006         UNI_GIT_STD_H245        = 0x02, /* H.245 */
 1007 };
 1008 enum uni_git_type {
 1009         UNI_GIT_TYPE_SESS       = 0x01, /* session id */
 1010         UNI_GIT_TYPE_RES        = 0x02, /* resource id */
 1011 };
 1012 
 1013 enum {
 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 
 1021 struct 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  */
 1037 enum {
 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 
 1048 struct 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  */
 1066 enum uni_lij_idtype {
 1067         UNI_LIJ_IDTYPE_ROOT     = 0x0,  /* root created */
 1068 };
 1069 
 1070 struct 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  */
 1080 enum uni_lij_screen {
 1081         UNI_LIJ_SCREEN_NETJOIN  = 0x0,  /* without root notification */
 1082 };
 1083 
 1084 struct uni_ie_lij_param {
 1085         struct uni_iehdr        h;
 1086 
 1087         enum uni_lij_screen     screen;
 1088 };
 1089 
 1090 /*
 1091  * LIJ sequence number
 1092  */
 1093 struct 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  */
 1103 struct uni_ie_lshift {
 1104         struct uni_iehdr h;
 1105         u_int           set:3;
 1106 };
 1107 
 1108 struct uni_ie_nlshift {
 1109         struct uni_iehdr h;
 1110         u_int           set:3;
 1111 };
 1112 
 1113 /*************************************************************************
 1114  *
 1115  * Externded QoS information element
 1116  */
 1117 enum {
 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 
 1126 enum uni_exqos_origin {
 1127         UNI_EXQOS_USER  = 0,
 1128         UNI_EXQOS_NET   = 1,
 1129 };
 1130 
 1131 enum {
 1132         UNI_EXQOS_ANY_CDV       = 0xffffff,
 1133         UNI_EXQOS_ANY_CLR       = 0xff,
 1134 };
 1135 
 1136 struct 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  */
 1159 enum {
 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 
 1173 struct 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 
 1185 struct uni_ie_abradd {
 1186         struct uni_iehdr        h;
 1187         struct uni_abr_rec      fwd, bwd;
 1188 };
 1189 
 1190 struct 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  */
 1213 enum uni_cscope {
 1214         UNI_CSCOPE_ORG  = 0x01,
 1215 };
 1216 
 1217 enum {
 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 
 1235 struct 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  */
 1245 enum 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 
 1253 struct 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  */
 1262 enum {
 1263         UNI_DTL_LOGNP   = 0x01,
 1264         UNI_DTL_LOGNP_SIZE = 27,
 1265 };
 1266 
 1267 struct 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  */
 1282 enum uni_crankback {
 1283         UNI_CRANKBACK_IF        = 0x02,
 1284         UNI_CRANKBACK_NODE      = 0x03,
 1285         UNI_CRANKBACK_LINK      = 0x04,
 1286 };
 1287 
 1288 enum {
 1289         UNI_CAUSE_NXNODE_UNREACH = 128,
 1290         UNI_CAUSE_DTL_NOT_MY_ID = 160,
 1291 };
 1292 
 1293 struct 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  */
 1335 enum uni_soft_sel {
 1336         UNI_SOFT_SEL_ANY        = 0x00,
 1337         UNI_SOFT_SEL_REQ        = 0x02,
 1338         UNI_SOFT_SEL_ASS        = 0x04,
 1339 };
 1340 
 1341 struct 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 };
 1347 struct 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 
 1361 struct uni_all {
 1362         enum uni_msgtype        mtype;
 1363         union uni_msgall        u;
 1364 };
 1365 
 1366 struct uni_ie {
 1367         enum uni_ietype         ietype;
 1368         union uni_ieall         u;
 1369 };
 1370 
 1371 #endif

Cache object: 3d85f83b6111edfea1a0e7c957e52f59


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.