882 lines
18 KiB
C
882 lines
18 KiB
C
/*-
|
|
* ===================================
|
|
* HARP | Host ATM Research Platform
|
|
* ===================================
|
|
*
|
|
*
|
|
* This Host ATM Research Platform ("HARP") file (the "Software") is
|
|
* made available by Network Computing Services, Inc. ("NetworkCS")
|
|
* "AS IS". NetworkCS does not provide maintenance, improvements or
|
|
* support of any kind.
|
|
*
|
|
* NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
|
|
* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
* AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
|
|
* SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
|
|
* In no event shall NetworkCS be responsible for any damages, including
|
|
* but not limited to consequential damages, arising from or relating to
|
|
* any use of the Software or related support.
|
|
*
|
|
* Copyright 1994-1998 Network Computing Services, Inc.
|
|
*
|
|
* Copies of this Software may be made, however, the above copyright
|
|
* notice must be reproduced on all copies.
|
|
*/
|
|
|
|
/*
|
|
* ATM Forum UNI 3.0/3.1 Signalling Manager
|
|
* ----------------------------------------
|
|
*
|
|
* Print Q.2931 messages
|
|
*/
|
|
|
|
#include <sys/cdefs.h>
|
|
__FBSDID("$FreeBSD$");
|
|
|
|
#include <sys/param.h>
|
|
#include <sys/types.h>
|
|
#include <sys/systm.h>
|
|
#include <sys/time.h>
|
|
#include <sys/socket.h>
|
|
#include <net/if.h>
|
|
#include <netatm/port.h>
|
|
#include <netatm/queue.h>
|
|
#include <netatm/atm.h>
|
|
#include <netatm/atm_sys.h>
|
|
#include <netatm/atm_cm.h>
|
|
#include <netatm/atm_vc.h>
|
|
#include <netatm/atm_sigmgr.h>
|
|
|
|
#include <netatm/uni/unisig_var.h>
|
|
#include <netatm/uni/unisig_msg.h>
|
|
#include <netatm/uni/unisig_print.h>
|
|
|
|
/*
|
|
* Local declarations
|
|
*/
|
|
struct type_name {
|
|
char *name;
|
|
u_char type;
|
|
};
|
|
|
|
|
|
/*
|
|
* Local functions
|
|
*/
|
|
static char * find_type(struct type_name *, u_char);
|
|
static void usp_print_atm_addr(Atm_addr *);
|
|
static void usp_print_ie(struct ie_generic *);
|
|
static void usp_print_ie_aalp(struct ie_generic *);
|
|
static void usp_print_ie_clrt(struct ie_generic *);
|
|
static void usp_print_ie_bbcp(struct ie_generic *);
|
|
static void usp_print_ie_bhli(struct ie_generic *);
|
|
static void usp_print_ie_blli(struct ie_generic *);
|
|
static void usp_print_ie_clst(struct ie_generic *);
|
|
static void usp_print_ie_cdad(struct ie_generic *);
|
|
static void usp_print_ie_cdsa(struct ie_generic *);
|
|
static void usp_print_ie_cgad(struct ie_generic *);
|
|
static void usp_print_ie_cgsa(struct ie_generic *);
|
|
static void usp_print_ie_caus(struct ie_generic *);
|
|
static void usp_print_ie_cnid(struct ie_generic *);
|
|
static void usp_print_ie_qosp(struct ie_generic *);
|
|
static void usp_print_ie_brpi(struct ie_generic *);
|
|
static void usp_print_ie_rsti(struct ie_generic *);
|
|
static void usp_print_ie_blsh(struct ie_generic *);
|
|
static void usp_print_ie_bnsh(struct ie_generic *);
|
|
static void usp_print_ie_bsdc(struct ie_generic *);
|
|
static void usp_print_ie_trnt(struct ie_generic *);
|
|
static void usp_print_ie_eprf(struct ie_generic *);
|
|
static void usp_print_ie_epst(struct ie_generic *);
|
|
|
|
|
|
/*
|
|
* Values for Q.2931 message type.
|
|
*/
|
|
static struct type_name msg_types[] = {
|
|
{ "Call proceeding", 0x02 },
|
|
{ "Connect", 0x07 },
|
|
{ "Connect ACK", 0x0F },
|
|
{ "Setup", 0x05 },
|
|
{ "Release", 0x4D },
|
|
{ "Release complete", 0x5A },
|
|
{ "Restart", 0x46 },
|
|
{ "Restart ACK", 0x4E },
|
|
{ "Status", 0x7D },
|
|
{ "Status enquiry", 0x75 },
|
|
{ "Add party", 0x80 },
|
|
{ "Add party ACK", 0x81 },
|
|
{ "Add party reject", 0x82 },
|
|
{ "Drop party", 0x83 },
|
|
{ "Drop party ACK", 0x84 },
|
|
{0, 0}
|
|
};
|
|
|
|
|
|
/*
|
|
* Values for information element identifier.
|
|
*/
|
|
static struct type_name ie_types[] = {
|
|
{ "Cause", 0x08 },
|
|
{ "Call state", 0x14 },
|
|
{ "Endpoint reference", 0x54 },
|
|
{ "Endpoint state", 0x55 },
|
|
{ "ATM AAL parameters", 0x58 },
|
|
{ "ATM user cell rate", 0x59 },
|
|
{ "Connection ID", 0x5A },
|
|
{ "QoS parameter", 0x5C },
|
|
{ "Broadband high layer info", 0x5D },
|
|
{ "Broadband bearer capability", 0x5E },
|
|
{ "Broadband low layer info", 0x5F },
|
|
{ "Broadband locking shift", 0x60 },
|
|
{ "Broadband non-locking shift", 0x61 },
|
|
{ "Broadband sending complete", 0x62 },
|
|
{ "Broadband repeat indicator", 0x63 },
|
|
{ "Calling party number", 0x6C },
|
|
{ "Calling party subaddress", 0x6D },
|
|
{ "Called party number", 0x70 },
|
|
{ "Called party subaddress", 0x71 },
|
|
{ "Transit net selection", 0x78 },
|
|
{ "Restart indicator", 0x79 },
|
|
{ 0, 0 }
|
|
};
|
|
|
|
|
|
/*
|
|
* Search a name - type translation table
|
|
*
|
|
* Arguments:
|
|
* tbl a pointer to the table to search
|
|
* type the type to look for
|
|
*
|
|
* Returns:
|
|
* name a pointer to a character string with the name
|
|
*
|
|
*/
|
|
static char *
|
|
find_type(tbl, type)
|
|
struct type_name *tbl;
|
|
u_char type;
|
|
{
|
|
while (type != tbl->type && tbl->name)
|
|
tbl++;
|
|
|
|
if (tbl->name)
|
|
return(tbl->name);
|
|
else
|
|
return("-");
|
|
}
|
|
|
|
|
|
/*
|
|
* Print an ATM address
|
|
*
|
|
* Arguments:
|
|
* p pointer to an Atm_address
|
|
*
|
|
* Returns:
|
|
* none
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_atm_addr(p)
|
|
Atm_addr *p;
|
|
{
|
|
char *cp;
|
|
|
|
cp = unisig_addr_print(p);
|
|
printf("%s", cp);
|
|
}
|
|
|
|
|
|
/*
|
|
* Print a Q.2931 message structure
|
|
*
|
|
* Arguments:
|
|
* msg pointer to the message to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
void
|
|
usp_print_msg(msg, dir)
|
|
struct unisig_msg *msg;
|
|
int dir;
|
|
{
|
|
char *name;
|
|
int i;
|
|
struct ie_generic *ie, *inxt;
|
|
|
|
name = find_type(msg_types, msg->msg_type);
|
|
switch (dir) {
|
|
case UNISIG_MSG_IN:
|
|
printf("Received ");
|
|
break;
|
|
case UNISIG_MSG_OUT:
|
|
printf("Sent ");
|
|
break;
|
|
}
|
|
printf("message: %s (%x)\n", name, msg->msg_type);
|
|
printf(" Call reference: 0x%x\n", msg->msg_call_ref);
|
|
#ifdef LONG_PRINT
|
|
printf(" Message type flag: 0x%x\n", msg->msg_type_flag);
|
|
printf(" Message type action: 0x%x\n", msg->msg_type_action);
|
|
printf(" Message length: %d\n", msg->msg_length);
|
|
for (i=0; i<UNI_MSG_IE_CNT; i++) {
|
|
ie = msg->msg_ie_vec[i];
|
|
while (ie) {
|
|
inxt = ie->ie_next;
|
|
usp_print_ie(ie);
|
|
ie = inxt;
|
|
}
|
|
}
|
|
#else
|
|
for (i=0; i<UNI_MSG_IE_CNT; i++)
|
|
{
|
|
ie = msg->msg_ie_vec[i];
|
|
while (ie) {
|
|
inxt = ie->ie_next;
|
|
name = find_type(ie_types, ie->ie_ident);
|
|
if (ie->ie_ident == UNI_IE_CAUS ||
|
|
ie->ie_ident == UNI_IE_RSTI ||
|
|
ie->ie_ident == UNI_IE_CLST) {
|
|
usp_print_ie(ie);
|
|
} else {
|
|
printf(" Information element: %s (0x%x)\n",
|
|
name, ie->ie_ident);
|
|
}
|
|
ie = inxt;
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
|
|
|
|
/*
|
|
* Print a Q.2931 information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
char *name;
|
|
|
|
while (ie) {
|
|
name = find_type(ie_types, ie->ie_ident);
|
|
printf(" Information element: %s (0x%x)\n",
|
|
name, ie->ie_ident);
|
|
#ifdef LONG_PRINT
|
|
printf(" Coding: 0x%x\n",
|
|
ie->ie_coding);
|
|
printf(" Flag: 0x%x\n", ie->ie_flag);
|
|
printf(" Action: 0x%x\n",
|
|
ie->ie_action);
|
|
printf(" Length: %d\n", ie->ie_length);
|
|
#endif
|
|
|
|
switch (ie->ie_ident) {
|
|
case UNI_IE_AALP:
|
|
usp_print_ie_aalp(ie);
|
|
break;
|
|
case UNI_IE_CLRT:
|
|
usp_print_ie_clrt(ie);
|
|
break;
|
|
case UNI_IE_BBCP:
|
|
usp_print_ie_bbcp(ie);
|
|
break;
|
|
case UNI_IE_BHLI:
|
|
usp_print_ie_bhli(ie);
|
|
break;
|
|
case UNI_IE_BLLI:
|
|
usp_print_ie_blli(ie);
|
|
break;
|
|
case UNI_IE_CLST:
|
|
usp_print_ie_clst(ie);
|
|
break;
|
|
case UNI_IE_CDAD:
|
|
usp_print_ie_cdad(ie);
|
|
break;
|
|
case UNI_IE_CDSA:
|
|
usp_print_ie_cdsa(ie);
|
|
break;
|
|
case UNI_IE_CGAD:
|
|
usp_print_ie_cgad(ie);
|
|
break;
|
|
case UNI_IE_CGSA:
|
|
usp_print_ie_cgsa(ie);
|
|
break;
|
|
case UNI_IE_CAUS:
|
|
usp_print_ie_caus(ie);
|
|
break;
|
|
case UNI_IE_CNID:
|
|
usp_print_ie_cnid(ie);
|
|
break;
|
|
case UNI_IE_QOSP:
|
|
usp_print_ie_qosp(ie);
|
|
break;
|
|
case UNI_IE_BRPI:
|
|
usp_print_ie_brpi(ie);
|
|
break;
|
|
case UNI_IE_RSTI:
|
|
usp_print_ie_rsti(ie);
|
|
break;
|
|
case UNI_IE_BLSH:
|
|
usp_print_ie_blsh(ie);
|
|
break;
|
|
case UNI_IE_BNSH:
|
|
usp_print_ie_bnsh(ie);
|
|
break;
|
|
case UNI_IE_BSDC:
|
|
usp_print_ie_bsdc(ie);
|
|
break;
|
|
case UNI_IE_TRNT:
|
|
usp_print_ie_trnt(ie);
|
|
break;
|
|
case UNI_IE_EPRF:
|
|
usp_print_ie_eprf(ie);
|
|
break;
|
|
case UNI_IE_EPST:
|
|
usp_print_ie_epst(ie);
|
|
break;
|
|
}
|
|
ie = ie->ie_next;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
* Print an AAL parameters information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_aalp(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
printf(" AAL type: %d\n", ie->ie_aalp_aal_type);
|
|
switch(ie->ie_aalp_aal_type) {
|
|
case UNI_IE_AALP_AT_AAL1:
|
|
printf(" Subtype: 0x%x\n",
|
|
ie->ie_aalp_1_subtype);
|
|
printf(" CBR rate: 0x%x\n",
|
|
ie->ie_aalp_1_cbr_rate);
|
|
printf(" Multiplier: 0x%x\n",
|
|
ie->ie_aalp_1_multiplier);
|
|
printf(" Clock rcvry: 0x%x\n",
|
|
ie->ie_aalp_1_clock_recovery);
|
|
printf(" Err corr: 0x%x\n",
|
|
ie->ie_aalp_1_error_correction);
|
|
printf(" Struct data: 0x%x\n",
|
|
ie->ie_aalp_1_struct_data_tran);
|
|
printf(" Partial cells: 0x%x\n",
|
|
ie->ie_aalp_1_partial_cells);
|
|
break;
|
|
case UNI_IE_AALP_AT_AAL3:
|
|
printf(" Fwd max SDU: %d\n",
|
|
ie->ie_aalp_4_fwd_max_sdu);
|
|
printf(" Bkwd max SDU: %d\n",
|
|
ie->ie_aalp_4_bkwd_max_sdu);
|
|
printf(" MID range: %d\n",
|
|
ie->ie_aalp_4_mid_range);
|
|
printf(" Mode: 0x%x\n",
|
|
ie->ie_aalp_4_mode);
|
|
printf(" SSCS type: 0x%x\n",
|
|
ie->ie_aalp_4_sscs_type);
|
|
break;
|
|
case UNI_IE_AALP_AT_AAL5:
|
|
printf(" Fwd max SDU: %d\n",
|
|
ie->ie_aalp_5_fwd_max_sdu);
|
|
printf(" Bkwd max SDU: %d\n",
|
|
ie->ie_aalp_5_bkwd_max_sdu);
|
|
printf(" Mode: 0x%x\n",
|
|
ie->ie_aalp_5_mode);
|
|
printf(" SSCS type: 0x%x\n",
|
|
ie->ie_aalp_5_sscs_type);
|
|
break;
|
|
case UNI_IE_AALP_AT_AALU:
|
|
printf(" User info: 0x%x %x %x %x\n",
|
|
ie->ie_aalp_user_info[0],
|
|
ie->ie_aalp_user_info[1],
|
|
ie->ie_aalp_user_info[2],
|
|
ie->ie_aalp_user_info[3]);
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
* Print a user cell rate information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_clrt(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
printf(" Forward peak: %d\n", ie->ie_clrt_fwd_peak);
|
|
printf(" Backward peak: %d\n", ie->ie_clrt_bkwd_peak);
|
|
printf(" Fwd peak 01: %d\n", ie->ie_clrt_fwd_peak_01);
|
|
printf(" Bkwd peak 01: %d\n", ie->ie_clrt_bkwd_peak_01);
|
|
printf(" Fwd sust: %d\n", ie->ie_clrt_fwd_sust);
|
|
printf(" Bkwd sust: %d\n", ie->ie_clrt_bkwd_sust);
|
|
printf(" Fwd sust 01: %d\n", ie->ie_clrt_fwd_sust_01);
|
|
printf(" Bkwd sust 01: %d\n", ie->ie_clrt_bkwd_sust_01);
|
|
printf(" Fwd burst: %d\n", ie->ie_clrt_fwd_burst);
|
|
printf(" Bkwd burst: %d\n", ie->ie_clrt_bkwd_burst);
|
|
printf(" Fwd burst 01: %d\n", ie->ie_clrt_fwd_burst_01);
|
|
printf(" Bkwd burst 01: %d\n",
|
|
ie->ie_clrt_bkwd_burst_01);
|
|
printf(" Best effort: %d\n", ie->ie_clrt_best_effort);
|
|
printf(" TM optons: 0x%x\n",
|
|
ie->ie_clrt_tm_options);
|
|
}
|
|
|
|
|
|
/*
|
|
* Print a broadband bearer capability information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_bbcp(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
printf(" Bearer class: 0x%x\n",
|
|
ie->ie_bbcp_bearer_class);
|
|
printf(" Traffic type: 0x%x\n",
|
|
ie->ie_bbcp_traffic_type);
|
|
printf(" Timing req: 0x%x\n",
|
|
ie->ie_bbcp_timing_req);
|
|
printf(" Clipping: 0x%x\n", ie->ie_bbcp_clipping);
|
|
printf(" Conn config: 0x%x\n",
|
|
ie->ie_bbcp_conn_config);
|
|
}
|
|
|
|
|
|
/*
|
|
* Print a broadband high layer information information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_bhli(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
int i;
|
|
|
|
printf(" Type: 0x%x\n", ie->ie_bhli_type);
|
|
printf(" HL info: 0x");
|
|
for (i=0; i<ie->ie_length-1; i++) {
|
|
printf("%x ", ie->ie_bhli_info[i]);
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
|
|
/*
|
|
* Print a broadband low-layer information information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_blli(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
printf(" Layer 1 ID: 0x%x\n", ie->ie_blli_l1_id);
|
|
printf(" Layer 2 ID: 0x%x\n", ie->ie_blli_l2_id);
|
|
printf(" Layer 2 mode: 0x%x\n", ie->ie_blli_l2_mode);
|
|
printf(" Layer 2 Q.933: 0x%x\n",
|
|
ie->ie_blli_l2_q933_use);
|
|
printf(" Layer 2 win: 0x%x\n",
|
|
ie->ie_blli_l2_window);
|
|
printf(" Layer 2 user: 0x%x\n",
|
|
ie->ie_blli_l2_user_proto);
|
|
printf(" Layer 3 ID: 0x%x\n", ie->ie_blli_l3_id);
|
|
printf(" Layer 3 mode: 0x%x\n", ie->ie_blli_l3_mode);
|
|
printf(" Layer 3 pkt: 0x%x\n",
|
|
ie->ie_blli_l3_packet_size);
|
|
printf(" Layer 3 win: 0x%x\n",
|
|
ie->ie_blli_l3_window);
|
|
printf(" Layer 3 user: 0x%x\n",
|
|
ie->ie_blli_l3_user_proto);
|
|
printf(" Layer 3 IPI: 0x%x\n", ie->ie_blli_l3_ipi);
|
|
printf(" Layer 3 SNAP: 0x%x\n",
|
|
ie->ie_blli_l3_snap_id);
|
|
printf(" Layer 3 OUI: 0x%x %x %x\n",
|
|
ie->ie_blli_l3_oui[0],
|
|
ie->ie_blli_l3_oui[1],
|
|
ie->ie_blli_l3_oui[2]);
|
|
printf(" Layer 3 PID: 0x%x %x\n",
|
|
ie->ie_blli_l3_pid[0],
|
|
ie->ie_blli_l3_pid[1]);
|
|
}
|
|
|
|
|
|
/*
|
|
* Print a call state information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_clst(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
printf(" Call state: %d\n",
|
|
ie->ie_clst_state);
|
|
}
|
|
|
|
|
|
/*
|
|
* Print a called party number information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_cdad(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
printf(" ATM addr: ");
|
|
usp_print_atm_addr(&ie->ie_cdad_addr);
|
|
printf("\n");
|
|
}
|
|
|
|
|
|
/*
|
|
* Print a called party subaddress information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_cdsa(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
printf(" ATM subaddr: ");
|
|
usp_print_atm_addr(&ie->ie_cdsa_addr);
|
|
printf("\n");
|
|
}
|
|
|
|
|
|
/*
|
|
* Print a calling party number information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_cgad(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
printf(" ATM addr: ");
|
|
usp_print_atm_addr(&ie->ie_cgad_addr);
|
|
printf("\n");
|
|
}
|
|
|
|
|
|
/*
|
|
* Print a calling party subaddress information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_cgsa(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
printf(" ATM subaddr: ");
|
|
usp_print_atm_addr(&ie->ie_cgsa_addr);
|
|
printf("\n");
|
|
}
|
|
|
|
|
|
/*
|
|
* Print a cause information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_caus(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
int i;
|
|
|
|
printf(" Location: %d\n", ie->ie_caus_loc);
|
|
printf(" Cause: %d\n", ie->ie_caus_cause);
|
|
switch(ie->ie_caus_cause) {
|
|
case UNI_IE_CAUS_IECONTENT:
|
|
printf(" Flagged IEs: ");
|
|
for (i=0; ie->ie_caus_diagnostic[i]; i++) {
|
|
printf("0x%x ", ie->ie_caus_diagnostic[i]);
|
|
}
|
|
printf("\n");
|
|
break;
|
|
case UNI_IE_CAUS_TIMER:
|
|
printf(" Timer ID: %c%c%c\n",
|
|
ie->ie_caus_diagnostic[0],
|
|
ie->ie_caus_diagnostic[1],
|
|
ie->ie_caus_diagnostic[2]);
|
|
break;
|
|
default:
|
|
printf(" Diag length: %d\n",
|
|
ie->ie_caus_diag_len);
|
|
printf(" Diagnostic: ");
|
|
for (i=0; i<ie->ie_caus_diag_len; i++) {
|
|
printf("0x%x ", ie->ie_caus_diagnostic[i]);
|
|
}
|
|
printf("\n");
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
* Print a connection identifier information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_cnid(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
printf(" VP assoc sig: 0x%x\n", ie->ie_cnid_vp_sig);
|
|
printf(" Pref/excl: 0x%x\n",
|
|
ie->ie_cnid_pref_excl);
|
|
printf(" VPCI: %d\n", ie->ie_cnid_vpci);
|
|
printf(" VCI: %d\n", ie->ie_cnid_vci);
|
|
}
|
|
|
|
|
|
/*
|
|
* Print a quality of service parameter information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_qosp(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
printf(" QoS fwd: 0x%x\n",
|
|
ie->ie_qosp_fwd_class);
|
|
printf(" QoS bkwd: 0x%x\n",
|
|
ie->ie_qosp_bkwd_class);
|
|
}
|
|
|
|
|
|
/*
|
|
* Print a broadband repeat indicator information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_brpi(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
printf(" Indicator: 0x%x\n", ie->ie_brpi_ind);
|
|
}
|
|
|
|
|
|
/*
|
|
* Print a restart indicator information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_rsti(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
printf(" Class: 0x%x\n", ie->ie_rsti_class);
|
|
}
|
|
|
|
|
|
/*
|
|
* Print a broadband locking shift information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_blsh(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
}
|
|
|
|
|
|
/*
|
|
* Print a broadband non-locking shift information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_bnsh(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
}
|
|
|
|
|
|
/*
|
|
* Print a broadband sending complete information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_bsdc(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
printf(" Indication: 0x%x\n", ie->ie_bsdc_ind);
|
|
}
|
|
|
|
|
|
/*
|
|
* Print a transit net selection information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_trnt(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
#ifdef NOTDEF
|
|
struct ie_generic ie_trnt_hdr;
|
|
u_char ie_trnt_id_type;
|
|
u_char ie_trnt_id_plan;
|
|
Atm_addr ie_trnt_id;
|
|
#endif
|
|
}
|
|
|
|
|
|
/*
|
|
* Print an endpoint reference information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_eprf(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
printf(" Ref type: 0x%x\n",
|
|
ie->ie_eprf_type);
|
|
printf(" Endpt ref: 0x%x\n",
|
|
ie->ie_eprf_id);
|
|
}
|
|
|
|
|
|
/*
|
|
* Print an endpoint state information element
|
|
*
|
|
* Arguments:
|
|
* ie pointer to the IE to print
|
|
*
|
|
* Returns:
|
|
* None
|
|
*
|
|
*/
|
|
static void
|
|
usp_print_ie_epst(ie)
|
|
struct ie_generic *ie;
|
|
{
|
|
printf(" Endpt state: %d\n",
|
|
ie->ie_epst_state);
|
|
}
|