/* packet-c15ch.c
 * Routines for C15 Call History Protocol dissection
 * Copyright 2015, Christopher Sheldahl for GENBAND <christopher.sheldahl@genband.com>
 *
 * Wireshark - Network traffic analyzer
 * By Gerald Combs <gerald@wireshark.org>
 * Copyright 1998 Gerald Combs
 *
 * SPDX-License-Identifier: GPL-2.0-or-later
 */

#include "config.h"

#include <epan/packet.h>
#include <epan/etypes.h>
#include <epan/wmem/wmem.h>

void proto_register_c15ch_hbeat(void);
void proto_register_c15ch(void);
void proto_reg_handoff_c15ch_hbeat(void);
void proto_reg_handoff_c15ch(void);

/* main C15 subtypes : int variable containing one of these values is passed along to second level dissector */
#define C15_CP_STATE_CH     1
#define C15_CP_EVENT        2
#define C15_ISUP            3
#define C15_NITN_XLATE      4
#define C15_SCCP            5
#define C15_CP_ORIG         6
#define C15_CONN            7
#define C15_NTWK_CONN       8
#define C15_MK_BRK          9
#define C15_PATH_FIND      10
#define C15_PATH_IDLE      11
#define C15_DEST_DIGITS    12
#define C15_TWC_RSWCH      13
#define C15_SRCE_DEST      14
#define C15_ROUTE          15
#define C15_INC_GWE        16
#define C15_OUT_GWE        17
#define C15_OUT_GWE_BC     18
#define C15_Q931           19
#define C15_AMA            20
#define C15_QOS            21
#define C15_ECHO_CANCEL    22
#define C15_TONE           23
#define C15_ENCAP_ISUP     24
#define C15_TCAP           25
#define C15_CLLI           26
#define C15_INFO           27

#define HEADER_SZ 36 /* length of complete c15ch header in bytes */
#define MAX_LEN_CONCAT_STRING 100
#define MAX_LEN_DESC_STRING 20
#define MAX_LEN_LOC_STRING 50 /* includes null char */

static const char * C15_LABEL = "C15";
/* Heartbeat Protocol : distinct from normal c15 type */
static int proto_c15ch_hbeat = -1;

/* Subtrees */
static gint ett_c15ch_hbeat = -1;

/* Fields */
static int hf_c15ch_hbeat_clli = -1;
static int hf_c15ch_hbeat_primary = -1;
static int hf_c15ch_hbeat_secondary = -1;
static int hf_c15ch_hbeat_interface = -1;

/* C15 base Protocol */
static int proto_c15ch = -1;

/* Dissector Table */
static dissector_table_t c15ch_dissector_table;

/* Fields */
static int hf_c15ch_version = -1;
static int hf_c15ch_msgtype = -1;
static int hf_c15ch_size = -1;
static int hf_c15ch_call_ref = -1;

static int hf_c15ch_srce_ni = -1;
static int hf_c15ch_srce_tn = -1;
static int hf_c15ch_dest_ni = -1;
static int hf_c15ch_dest_tn = -1;

static int hf_c15ch_srce_ni_tn = -1;
static int hf_c15ch_dest_ni_tn = -1;
static int hf_c15ch_realtime = -1;

/* Subtrees */
static gint ett_c15ch = -1;
static gint ett_src_ni_tn = -1;
static gint ett_dest_ni_tn = -1;

/* for msg_type field ...*/
static const value_string c15_msg_types[] = {
    { C15_CP_STATE_CH, "CP_STATE_CH" },
    { C15_CP_EVENT, "CP_EVENT" },
    { C15_ISUP, "ISUP" },
    { C15_NITN_XLATE, "NITN_XLATE" },
    { C15_SCCP, "SCCP" },
    { C15_CP_ORIG, "CP_ORIG" },
    { C15_CONN, "CONN" },
    { C15_NTWK_CONN, "NTWK_CONN" },
    { C15_MK_BRK, "MK_BRK" },
    { C15_PATH_FIND, "PATH_FIND" },
    { C15_PATH_IDLE, "PATH_IDLE" },
    { C15_DEST_DIGITS, "DEST_DIGITS" },
    { C15_TWC_RSWCH, "TWC_RSWCH" },
    { C15_SRCE_DEST, "SRCE_DEST" },
    { C15_ROUTE, "ROUTE" },
    { C15_INC_GWE, "INC_GWE" },
    { C15_OUT_GWE, "OUT_GWE" },
    { C15_OUT_GWE_BC, "OUT_GWE_BC" },
    { C15_Q931, "Q931" },
    { C15_AMA, "AMA" },
    { C15_QOS, "QOS" },
    { C15_ECHO_CANCEL, "ECHO_CANCEL" },
    { C15_TONE, "TONE" },
    { C15_ENCAP_ISUP, "ENCAP_ISUP" },
    { C15_TCAP, "TCAP" },
    { C15_CLLI, "CLLI" },
    { C15_INFO, "C15_INFO" },
    { 0, NULL }
};
static value_string_ext c15_msg_types_ext = VALUE_STRING_EXT_INIT(c15_msg_types);

/* Second Level */
static gint ett_c15ch_second_level = -1;
static gint ett_c15ch_second_level_sub1 = -1;
static gint ett_c15ch_second_level_sub2 = -1;
static gint ett_c15ch_second_level_sub3 = -1;
static gint ett_c15ch_second_level_sub4 = -1;
static int proto_c15ch_second_level = -1;

static dissector_handle_t general_sccp_handle  = NULL;
static dissector_handle_t general_isup_handle  = NULL;
static dissector_handle_t general_q931_handle  = NULL;
/* ama */

/* Fields */
static int hf_c15ch_ama = -1;
static int hf_c15ch_ama_call_code = -1;
static int hf_c15ch_ama_orig_digits = -1;
static int hf_c15ch_ama_num_dialed_digits = -1;
static int hf_c15ch_ama_br_prefix = -1;
static int hf_c15ch_ama_dialed_digits = -1;
static int hf_c15ch_ama_start_hour = -1;
static int hf_c15ch_ama_start_minute = -1;
static int hf_c15ch_ama_start_second = -1;
static int hf_c15ch_ama_start_tenth_second = -1;
static int hf_c15ch_ama_start_day = -1;
static int hf_c15ch_ama_start_month = -1;
static int hf_c15ch_ama_start_year = -1;
static int hf_c15ch_ama_answered = -1;
static int hf_c15ch_ama_elapsed_time = -1; /*elapsed time in millisec*/
static int hf_c15ch_ama_call_type = -1;


/* br_prefix labels */
static const value_string ama_br_prefix_types[] = {
    { 0, "PFX_NONE" },
    { 1, "PFX_1" },
    { 2, "PFX_0" },
    { 3, "PFX_01" },
    { 4, "PFX_011" },
    { 5, "PFX_ANY" },
    /* 6 is unused */
    { 7, "PFX_ANY" },
    { 0, NULL }
};

/* call_type labels */
static const value_string ama_call_types[] = {
    { 0, "NONE" },
    { 1, "FAIL" },
    { 2, "TEST" },
    { 3, "DDD" },
    { 4, "IDDD" },
    { 5, "EMERG" },
    { 6, "DA" },
    { 7, "LCDR" },
    { 8, "INWATS" },
    { 9, "OWATS" },
    { 10, "SLUS" },
    { 11, "TRAF" },
    { 12, "TMSG" },
    { 13, "UMSG" },
    { 14, "DAL" },
    { 15, "DAT" },
    { 16, "OFGA" },
    { 17, "TFGA" },
    { 18, "ILSP" },
    { 19, "ILOW" },
    { 20, "TLATA" },
    { 21, "CCSA" },
    { 22, "MISC" }, /* used for USCCF */
    { 23, "FREE" },
    { 24, "ICNS" },
    { 25, "TELC" },
    { 26, "ACB" },
    { 27, "AR" },
    { 28, "CNDB" },
    { 29, "SLE" },
    { 30, "COT" },
    { 31, "CLID" },
    { 32, "IPTS" },
    { 33, "CNAB" },
    { 34, "CIDS" },
    { 35, "ACR" },
    { 36, "SW56" },
    { 37, "ILSW56" },
    { 38, "TLSW56" },
    { 39, "CMCO" },
    { 40, "CMCT" },
    { 41, "TSLS" },
    { 42, "OFGB" },
    { 43, "TFGB" },
    { 44, "AIN" },
    { 45, "ISUS" },
    { 46, "ISTS" },
    { 47, "CNA" },
    { 48, "TGMO" },
    { 49, "TGMT" },
    { 0, NULL }
};
static value_string_ext ama_call_types_ext = VALUE_STRING_EXT_INIT(ama_call_types);
/* c15 info */
/* Fields */
static int hf_c15ch_c15_info = -1;
static int hf_c15ch_c15_info_code = -1;
static int hf_c15ch_c15_info_level = -1;
static int hf_c15ch_c15_info_text = -1;


/* labels for level */
static const value_string c15ch_c15_info_level_types[] = {
    { 0, "NONE" },
    { 1, "MIN" },
    { 2, "MAJ" },
    { 3, "CAT" },
    { 0, NULL }
};

/* clli */

/* Fields */
static int hf_c15ch_clli = -1;
static int hf_c15ch_clli_clli_string = -1;
static int hf_c15ch_clli_active_core = -1;
static int hf_c15ch_clli_inactive_core = -1;
static int hf_c15ch_clli_interface_string = -1;
static int hf_c15ch_clli_seconds = -1;
static int hf_c15ch_clli_microseconds = -1;


/* conn */

/* Fields */
static int hf_c15ch_conn = -1;
static int hf_c15ch_conn_connfrom = -1;
static int hf_c15ch_conn_conntype = -1;
static int hf_c15ch_conn_perphtype = -1;
static int hf_c15ch_conn_intra = -1;
static int hf_c15ch_conn_srceni = -1;
static int hf_c15ch_conn_srcenitn = -1;
static int hf_c15ch_conn_srcetn = -1;
static int hf_c15ch_conn_destni = -1;
static int hf_c15ch_conn_destnitn = -1;
static int hf_c15ch_conn_desttn = -1;
static int hf_c15ch_conn_interlinknum = -1;
static int hf_c15ch_conn_fromport = -1;
static int hf_c15ch_conn_fromslot = -1;
static int hf_c15ch_conn_toport = -1;
static int hf_c15ch_conn_toslot = -1;
static int hf_c15ch_conn_hubcallid = -1;

/* value_string arrays to label fields */
/* for connfrom field ...*/
static const value_string c15_conn_from_types[] = {
    { 1, "LOCAL_OTHER" },
    { 2, "LOCAL_RLCM" },
    { 3, "PATH_LOCAL_IDLE" },
    { 4, "PATH_SRCE_DEST" },
    { 0, NULL }
};

/* call proc state */


/* Fields */
static int hf_c15ch_cp_state_ch = -1;
static int hf_c15ch_cp_state_ch_oldpm = -1;
static int hf_c15ch_cp_state_ch_newpm = -1;
static int hf_c15ch_cp_state_ch_subpm = -1;
static int hf_c15ch_cp_state_ch_trkpm = -1;
static int hf_c15ch_cp_state_ch_slepm = -1;
static int hf_c15ch_cp_state_ch_flags = -1;
static int hf_c15ch_cp_state_ch_oldrtetype = -1;
static int hf_c15ch_cp_state_ch_oldrteidx = -1;
static int hf_c15ch_cp_state_ch_newrtetype = -1;
static int hf_c15ch_cp_state_ch_newrteidx = -1;

/* value_string arrays to label fields */
static const value_string c15_cp_state_pm_types[] = {
    { 0, "ORIG" },
    { 1, "DSTM" },
    { 2, "RVRT" },
    { 3, "ORDT" },
    { 4, "ORWS" },
    { 5, "ORDD" },
    { 6, "ORID" },
    { 7, "#TST" },
    { 8, "DLNG" },
    { 9, "RBLT" },
    { 10, "CFWR" },
    { 11, "RTE" },
    { 12, "RLIN" },
    { 13, "MTCE" },
    { 14, "AUXT" },
    { 15, "NOLR" },
    { 16, "ITTK" },
    { 17, "ALSD" },
    { 18, "ANSP" },
    { 19, "TRNK" },
    { 20, "LINE" },
    { 21, "NOCP" },
    { 22, "3WC" },
    { 23, "3WCH" },
    { 24, "CWT" },
    { 25, "CWTH" },
    { 26, "UPSC" },
    { 27, "ORSD" },
    { 28, "CFRT" },
    { 29, "CFWB" },
    { 30, "CFW" },
    { 31, "CFWD" },
    { 32, "RCFW" },
    { 33, "ROTL" },
    { 34, "CHDT" },
    { 35, "CHD" },
    { 36, "CHLD" },
    { 37, "3WCH" },
    { 38, "3WCW" },
    { 39, "CSLT" },
    { 40, "DGTX" },
    { 41, "NAIL" },
    { 42, "DCBI" },
    { 43, "RGCF" },
    { 44, "RGCP" },
    { 45, "E800" },
    { 46, "CFRA" },
    { 47, "MWID" },
    { 48, "ACCP" },
    { 49, "ACRR" },
    { 50, "ACAN" },
    { 51, "SLE" },
    { 52, "PCOT" },
    { 53, "CLID" },
    { 54, "XPML" },
    { 55, "MWIL" },
    { 56, "LDBS" },
    { 57, "ACR" },
    { 58, "CPRK" },
    { 59, "CRCL" },
    { 60, "CFF" },
    { 61, "BERT" },
    { 62, "AIN" },
    { 63, "ASIT" },
    { 64, "ARTG" },
    { 65, "BNAL" },
    { 66, "DNAL" },
    { 67, "TRVR" },
    { 68, "EKTS" },
    { 69, "ALT" },
    { 70, "CALE" },
    { 71, "SRNG" },
    { 72, "LTA" },
    { 73, "HGQ" },
    { 74, "IDLE" },
    { 75, "SIG" },
    { 76, "SIGD" },
    { 0, NULL }
};
static value_string_ext c15_cp_state_pm_types_ext = VALUE_STRING_EXT_INIT(c15_cp_state_pm_types);
/* dest digits */

/* Fields */
static int hf_c15ch_dest_digits = -1;
static int hf_c15ch_dest_digits_digits = -1;


/* echo cancel */

/* Fields */
static int hf_c15ch_echo_cancel = -1;
static int hf_c15ch_echo_cancel_ni = -1;
static int hf_c15ch_echo_cancel_tn = -1;
static int hf_c15ch_echo_cancel_ni_tn = -1;
static int hf_c15ch_echo_cancel_old_l2_mode = -1;
static int hf_c15ch_echo_cancel_old_channel_mode = -1;
static int hf_c15ch_echo_cancel_old_ecan_mode = -1;
static int hf_c15ch_echo_cancel_new_l2_mode = -1;
static int hf_c15ch_echo_cancel_new_channel_mode = -1;
static int hf_c15ch_echo_cancel_new_ecan_mode = -1;
static int hf_c15ch_echo_cancel_tone_id = -1;
static int hf_c15ch_echo_cancel_pm = -1;
static int hf_c15ch_echo_cancel_pc = -1;
static int hf_c15ch_echo_cancel_loop = -1;
static int hf_c15ch_echo_cancel_slot = -1;
static int hf_c15ch_echo_cancel_location = -1;



/* value_string arrays to label fields */
enum C15_EC_L2_MODE
{
    C15_EC_L2_MODE_VOICE,
    C15_EC_L2_MODE_VBD,
    C15_EC_L2_MODE_VBD_ECANOFF
};

static const value_string c15_echo_cancel_l2_mode_types[] = {
    {C15_EC_L2_MODE_VOICE, "L2_MODE_VOICE"},
    {C15_EC_L2_MODE_VBD, "L2_MODE_VBD"},
    {C15_EC_L2_MODE_VBD_ECANOFF, "L2_MODE_VBD_ECANOFF"},
    {0, NULL}
};

enum C15_EC_CHANNEL_MODE
{
    C15_EC_VOICE_CHANNEL_MODE,
    C15_EC_VBD_CHANNEL_MODE,
    C15_EC_CHANNEL_MODE_INVALID
};


static const value_string c15_echo_cancel_channel_mode_types[] = {
    {C15_EC_VOICE_CHANNEL_MODE, "VOICE"},
    {C15_EC_VBD_CHANNEL_MODE, "VBD"},
    {0, NULL}
};

enum C15_EC_ECAN_MODE
{
    C15_EC_OFF_ECAN_MODE,
    C15_EC_ON_ECAN_MODE,
    C15_EC_ECAN_MODE_INVALID
};

static const value_string c15_echo_cancel_ecan_mode_types[] = {
    {C15_EC_OFF_ECAN_MODE, "OFF"},
    {C15_EC_ON_ECAN_MODE, "ON"},
    {0, NULL}
};

/* encapsulated isup */

/* Fields */
static int hf_c15ch_encap_isup = -1;
static int hf_c15ch_encap_isup_direction = -1;
static int hf_c15ch_encap_isup_isup_msg_length = -1;


/* isup ( not encapsulated )*/

/* Fields */
static int hf_c15ch_isup = -1;
static int hf_c15ch_isup_direction = -1;
static int hf_c15ch_isup_msgtype = -1;
static int hf_c15ch_isup_cic = -1;
static int hf_c15ch_isup_opcmember = -1;
static int hf_c15ch_isup_opccluster = -1;
static int hf_c15ch_isup_opcnetwork = -1;
static int hf_c15ch_isup_dpcmember = -1;
static int hf_c15ch_isup_dpccluster = -1;
static int hf_c15ch_isup_dpcnetwork = -1;
static int hf_c15ch_isup_level3index = -1;
static int hf_c15ch_isup_ni = -1;
static int hf_c15ch_isup_tn = -1;
static int hf_c15ch_isup_ni_tn = -1;
static int hf_c15ch_isup_c15hdr = -1;
static int hf_c15ch_isup_layer2hdr = -1;
static int hf_c15ch_isup_layer3hdr = -1;
static int hf_c15ch_isup_iptime = -1;


/* value_string arrays to label fields */
/* labels for msgtype : non-contiguous integers*/
static const value_string c15_isup_types[] = {
    {1, "Initial Address"},
    {5, "Continuity"},
    {6, "Address Complete"},
    {9, "Answer"},
    {12, "Release"},
    {13, "Suspend"},
    {14, "Resume"},
    {16, "Release Complete"},
    {17, "Continuity Recheck Request"},
    {18, "Reset"},
    {19, "Blocking"},
    {20, "Unblocking"},
    {21, "Blocking Ack"},
    {22, "Unblocking Ack"},
    {23, "Group Reset"},
    {24, "Circuit Group Blocking"},
    {25, "Circuit Group Unblocking"},
    {26, "Circuit Group Blocking Ack"},
    {27, "Circuit Group Unblocking Ack"},
    {36, "Loop Back Ack"},
    {41, "Group Reset Ack"},
    {42, "Circuit Query"},
    {43, "Circuit Query Response"},
    {44, "Call Progress"},
    {46, "Unidentified Circuit ID Code"},
    {47, "Confusion"},
    {51, "Facility"},
    {233, "Circuit Reservation Ack"},
    {234, "Circuit Reservation"},
    {235, "Circuit Validation Response"},
    {236, "Circuit Validation Test"},
    {237, "Exit"},
    { 0, NULL}
};
static value_string_ext c15_isup_types_ext = VALUE_STRING_EXT_INIT(c15_isup_types);
static const value_string c15_isup_direction_types[] = {
    { 0, "Incoming" },
    { 1, "Outgoing" },
    { 0, NULL}
};

/* mkbrk */


/* Fields */
static int hf_c15ch_mkbrk = -1;
static int hf_c15ch_mkbrk_makebreak = -1;
static int hf_c15ch_mkbrk_nshlf = -1;
static int hf_c15ch_mkbrk_stm = -1;
static int hf_c15ch_mkbrk_caddr = -1;
static int hf_c15ch_mkbrk_cdata = -1;


/* nitn xlate */

/* Fields */
static int hf_c15ch_nitnxlate = -1;
static int hf_c15ch_nitnxlate_ni = -1;
static int hf_c15ch_nitnxlate_tn = -1;
static int hf_c15ch_nitnxlate_ni_tn = -1;
static int hf_c15ch_nitnxlate_equiptype = -1;
static int hf_c15ch_nitnxlate_concat_string = -1;
static int hf_c15ch_nitnxlate_sitestring = -1;
static int hf_c15ch_nitnxlate_subsitestring = -1;
static int hf_c15ch_nitnxlate_equipname = -1;
static int hf_c15ch_nitnxlate_gw_type = -1;
static int hf_c15ch_nitnxlate_parm_1 = -1;
static int hf_c15ch_nitnxlate_parm_2 = -1;
static int hf_c15ch_nitnxlate_parm_3 = -1;
static int hf_c15ch_nitnxlate_parm_4 = -1;
static int hf_c15ch_nitnxlate_key = -1;
static int hf_c15ch_nitnxlate_user_tid = -1;
static int hf_c15ch_nitnxlate_host = -1;
static int hf_c15ch_nitnxlate_tg_num = -1;
static int hf_c15ch_nitnxlate_mgcp_line_id = -1;
static int hf_c15ch_nitnxlate_gateway = -1;
static int hf_c15ch_nitnxlate_line = -1;
static int hf_c15ch_nitnxlate_bay = -1;
static int hf_c15ch_nitnxlate_shelf = -1;
static int hf_c15ch_nitnxlate_lsg = -1;
static int hf_c15ch_nitnxlate_idt_rdt = -1;
static int hf_c15ch_nitnxlate_pm = -1;
static int hf_c15ch_nitnxlate_channel = -1;
static int hf_c15ch_nitnxlate_ptrk = -1;
static int hf_c15ch_nitnxlate_pc_sts1 = -1;
static int hf_c15ch_nitnxlate_port_vt15 = -1;


static const value_string ett_c15ch_nitnxlate_gwe_types[] = {
    { 0, "NONE" },
    { 1, "H248_TRK" },
    { 2, "SIP_LN" },
    { 3, "MGCP_LN" },
    { 4, "H248_LN" },
    { 5, "NCS_LN" },
    { 0, NULL }
};

/* labels for equip (location) */
/* non-contiguous integers */
static const value_string ett_c15ch_nitnxlate_equip_types[] = {
    {   4, "UNIT" },
    {  57, "LCM_LINE" },
    {  78, "RSLM_UNIT" },
    {  79, "RSLM_LINE" },
    {  80, "4T12" },
    {  81, "RSLM_LSG" },
    {  82, "RSLM_DRAWER" },
    {  91, "ESA" },
    { 115, "RSCS_DTRK" },
    { 119, "DS1_CHANNEL" },
    { 122, "LOC_IDC" },
    { 131, "IDTL" },
    { 136, "HUB_LINE" },
    { 138, "UMP" },
    { 139, "HUB_DS1L" },
    { 145, "VLIN" },
    { 149, "GW_LINE" },
    { 151, "PTRK" },
    { 154, "GW_TRUNK" },
    { 155, "RDT" },
    { 0, NULL }
};
static value_string_ext ett_c15ch_nitnxlate_equip_types_ext = VALUE_STRING_EXT_INIT(ett_c15ch_nitnxlate_equip_types);
/* ntwk conn */

/* Fields */
static int hf_c15ch_ntwk_conn = -1;
static int hf_c15ch_ntwk_conn_pathtype = -1;
static int hf_c15ch_ntwk_conn_conntype = -1;
static int hf_c15ch_ntwk_conn_fromoptimized = -1;
static int hf_c15ch_ntwk_conn_fromsite = -1;
static int hf_c15ch_ntwk_conn_frompm = -1;
static int hf_c15ch_ntwk_conn_frompc = -1;
static int hf_c15ch_ntwk_conn_fromloop = -1;
static int hf_c15ch_ntwk_conn_fromslot = -1;
static int hf_c15ch_ntwk_conn_fromlocation = -1;
static int hf_c15ch_ntwk_conn_fromcnx = -1;
static int hf_c15ch_ntwk_conn_fromntwkni = -1;
static int hf_c15ch_ntwk_conn_fromntwktn = -1;
static int hf_c15ch_ntwk_conn_fromntwknitn = -1;
static int hf_c15ch_ntwk_conn_mbshold = -1;
static int hf_c15ch_ntwk_conn_tooptimized = -1;
static int hf_c15ch_ntwk_conn_tosite = -1;
static int hf_c15ch_ntwk_conn_topm = -1;
static int hf_c15ch_ntwk_conn_topc = -1;
static int hf_c15ch_ntwk_conn_toloop = -1;
static int hf_c15ch_ntwk_conn_toslot = -1;
static int hf_c15ch_ntwk_conn_tolocation = -1;
static int hf_c15ch_ntwk_conn_tocnx = -1;


static const value_string ett_c15ch_ntwk_conn_path_types[] = {
    { 0, "BRDCAST" },
    { 1, "1WAY" },
    { 2, "2WAY" },
    { 3, "BC_SPFC" },
    { 4, "1WAY_SPFC" },
    { 5, "BC_CMBND" },
    { 6, "1WAY_CMBND" },
    { 7, "NWLB" },
    { 8, "1WAY_2_UTR" },
    { 9, "2WAY_LB" },
    { 10, "2WAY_LSG" },
    { 0, NULL }
};

static const value_string ett_c15ch_ntwk_conn_conn_types[] = {
    { 0, "CONN_FULL" },
    { 1, "CONN_PRT_SRCE" },
    { 2, "CONN_PRT_DEST" },
    { 3, "CONN_PRT_SRDS" },
    { 4, "DISC_FULL" },
    { 5, "DISC_PRT_SRCE" },
    { 6, "DISC_PRT_DEST" },
    { 7, "DISC_PRT_SRDS" },
    { 0, NULL }
};

/* orig */

/* Fields */
static int hf_c15ch_orig = -1;
static int hf_c15ch_orig_tnblocktype = -1;
static int hf_c15ch_orig_ni = -1;
static int hf_c15ch_orig_tn = -1;
static int hf_c15ch_orig_ni_tn = -1;

static int hf_c15ch_orig_dndigits = -1;

static int hf_c15ch_orig_nidscrn = -1;
static int hf_c15ch_orig_nidaddrtype = -1;
static int hf_c15ch_orig_nidnmbrplan = -1;
static int hf_c15ch_orig_nidprivind = -1;
static int hf_c15ch_orig_upnsaved = -1;

static int hf_c15ch_orig_upndigits = -1;

static int hf_c15ch_orig_upnscrn = -1;
static int hf_c15ch_orig_upnaddrtype = -1;
static int hf_c15ch_orig_upnnmbrplan = -1;
static int hf_c15ch_orig_upnprivind = -1;
static int hf_c15ch_orig_rnpsaved = -1;

static int hf_c15ch_orig_rnpdigits = -1;

static int hf_c15ch_orig_rnpscrn = -1;
static int hf_c15ch_orig_rnpaddrtype = -1;
static int hf_c15ch_orig_rnpnmbrplan = -1;
static int hf_c15ch_orig_rnpprivind = -1;
static int hf_c15ch_orig_iptime = -1;


/* labels for blocktype */
static const value_string c15ch_orig_block_types[] = {
    {0, "CALL_REG_BUF"},
    {1, "MUX_LOOP"},
    {2, "DS30_LOOP"},
    {3, "DVCE_REG"},
    {4, "SHLF_BLOCK_DCM"},
    {5, "NSHLF_BLOCK"},
    {6, "DILOOP_BLOCK"},
    {7, "SHLF_BLOCK"},
    {8, "TIMER2_BLOCK"},
    {9, "DIGIT_BUFFER"},
    {10, "CARD_SPL"},
    {11, "CARD_8PL"},
    {12, "CARD_PPCL"},
    {13, "CARD_MISC"},
    {14, "CARD_2PL"},
    {15, "CARD_EMTRK"},
    {16, "CARD_DGT"},
    {17, "CARD_MF"},
    {18, "CARD_NOLLER"},
    {19, "CARD_PMA"},
    {20, "TRVR_REG"},
    {21, "CARD_TONE_TEST"},
    {22, "CARD_PC1"},
    {23, "CARD_EMTRK_2W"},
    {24, "CARD_ITTK"},
    {25, "CARD_LTT"},
    {26, "CARD_AUX_TONE"},
    {27, "MSG_BUF_REG"},
    {28, "TTY_PCB_REG"},
    {29, "TAPE_PCB_REG"},
    {30, "Q_INFO_BLOCK"},
    {31, "CARD_OTG_LPTRK"},
    {32, "CARD_MISC_LPTRK"},
    {33, "CARD_MF2PL"},
    {34, "CARD_CPSC"},
    {35, "CARD_PSC1"},
    {36, "CARD_ER2PL"},
    {37, "CARD_EMT_PAD_SW"},
    {38, "REM_BLOCK"},
    {39, "BR_BUFFER"},
    {40, "CARD_DTRK"},
    {41, "CARD_DMTC"},
    {42, "MTU_PCB_REG"},
    {43, "CARD_2PL_ZDB"},
    {44, "CARD_MISC_ZDB"},
    {45, "CARD_PPCL_ZDB"},
    {46, "CARD_PE_PROC"},
    {47, "CARD_SRL_ZDB"},
    {48, "CARD_ER8PL"},
    {49, "TWC_LINK_ORIG"},
    {50, "TWC_LINK_ADDED"},
    {51, "CWT_LINK_ORIG"},
    {52, "CWT_LINK_WTNG"},
    {53, "CARD_SPL_ZDB"},
    {54, "MAINT_REG"},
    {55, "CARD_MF4PL"},
    {56, "DAS_PCB_REG"},
    {57, "CARD_ESB_ZDB"},
    {58, "CARD_RCT_SPL"},
    {59, "CARD_RCT_UVSL"},
    {60, "CARD_RCT_FSR"},
    {61, "CARD_RCT_SIMP"},
    {62, "CARD_RCT_COIN"},
    {63, "SCM_BLOCK"},
    {64, "CARD_RMB_SHU"},
    {65, "CARD_ACT"},
    {66, "PMS"},
    {67, "CARD_8PL_ZDB"},
    {68, "TWC_LINK_HOLD"},
    {69, "CWT_LINK_HOLD"},
    {70, "XFER_LINK_ORIG"},
    {71, "XFER_LINK_ADDED"},
    {72, "CHD_LINK_HOLD"},
    {73, "CHD_LINK_ACT"},
    /* 74 IS UNUSED */
    {75, "TERM_IFACE"},
    {76, "SVCE_IFACE"},
    {77, "CONF_IFACE"},
    {78, "DRA_IFACE"},
    {79, "LCM_BLOCK"},
    {80, "CARD_LCML_A"},
    {81, "CARD_LCML_B"},
    {82, "LSG_BLOCK"},
    {83, "CARD_LCM_KEY"},
    {84, "CARD_LCM_ESB"},
    {85, "CARD_DRA_TRK"},
    {86, "IOID_IOBLOCK"},
    {87, "IOI_IOBLOCK"},
    {88, "UTR_BLOCK"},
    {89, "CARD_DLC_BRD"},
    {90, "DLC_PORT_REG"},
    {91, "DLC_BUF_REG"},
    {92, "AMA_RECORD_BUF"},
    {93, "SSO_BULK_BUF"},
    {94, "DLC_PORT_DBLK"},
    {95, "CARD_LCM_PWR"},
    {96, "SLC_BLOCK"},
    {97, "CARD_SLC_SPL"},
    {98, "CARD_SLC_SIMP"},
    {99, "CARD_SLC_COIN"},
    {100, "CARD_SLC_KEY"},
    {101, "CARD_SLC_PBX"},
    {102, "SLC_SHLF_BLOCK"},
    {103, "SCI_BLOCK"},
    {104, "DS1_LINK_BLOCK"},
    {105, "SRLK_IFACE_DBLK"},
    {106, "CARD_RLCM_LCT"},
    {107, "RMM_BLOCK"},
    {108, "CARD_RMPK"},
    {109, "BCU_BLOCK"},
    {110, "CARD_RSLM_RMP"},
    {111, "ESA_BLOCK"},
    {112, "CARD_RMP_ITTK"},
    {113, "SFTR_BUFFER"},
    {114, "LFTR_BUFFER"},
    {115, "LAN_LCI_BLOCK"},
    {116, "LAN_LSHF_BLOCK"},
    {117, "LAN_LSC_BLOCK"},
    {118, "LEVEL3_BLOCK"},
    {119, "LVL3_MTCE_REG"},
    {120, "CCS_SNLS_BLOCK"},
    {121, "CCS_SNL_BLOCK"},
    {122, "CCS_SNRS_BLOCK"},
    {123, "CCS_SNR_BLOCK"},
    {124, "CCS_MTCE_REG"},
    {125, "CARD_RMM_DTR"},
    {126, "SMDI_PCB_REG"},
    {127, "XLFTR_BUFFER"},
    {128, "CARD_RCU_POTS"},
    {129, "CARD_RCU_MF"},
    {130, "CARD_RCU_COIN"},
    {131, "CARD_RCU_FXB"},
    {132, "CARD_RCU_MP"},
    {133, "CARD_RCU_EPOT"},
    {134, "CARD_RCU_KEY"},
    {135, "CARD_RCU_EMF"},
    {136, "CARD_RCU_FX_KEY"},
    {137, "RCU_BLOCK"},
    {138, "CARD_RCU_ESB"},
    {139, "CARD_IBERT"},
    {140, "CARD_DPX" },
    {141, "CARD_LCML_C" },
    {142, "MBS_REG_BLK"},
    {143, "CARD_FXS"},
    {144, "CARD_FXo"},
    {145, "CARD_PBX_CELL"},
    {146, "RSCS_BLOCK"},
    {147, "RSC_D30L_BLOCK"},
    {148, "RSC_DS1_REM_BLK"},
    {149, "RSC_DS1_TRK_BLK"},
    {150, "CARD_RSCS_DTRK" },
    {151, "CARD_6X71_DATL"},
    {152, "LOOP_DS30_LBK"},
    {153, "LOOP_MLI_LBK"},
    {154, "CARD_BX27"},
    {155, "ISDN_REG_BLK"},
    {156, "IDC_BLOCK"},
    {157, "DS1_BLOCK"},
    {158, "VDS30_LOOP"},
    {159, "ISDN_PARDLD_BLK"},
    {160, "ISDN_BD_CH_BLK"},
    {161, "SMA_BLOCK"},
    {162, "IDT_BLOCK"},
    {163, "RDT_ISDN_CARD"},
    {164, "RDT_P_PHONE"},
    {165, "EDCH_BLOCK"},
    {166, "ESMA_DS1L_BLOCK"},
    {167, "TRANSACT_REG"},
    {168, "CARD_IDTL_SPL"},
    {169, "CARD_IDTL_SIMP"},
    {170, "CARD_IDTL_COIN"},
    {171, "CARD_IDTL_KEY"},
    {172, "CARD_IDTL_PBX"},
    {173, "TAFFI_DATA_BLK"},
    {174, "ISG_BLOCK"},
    {175, "ISG_DCH_BLOCK"},
    {176, "ISG_BCH_BLOCK"},
    {177, "TMC0_BLOCK"},
    {178, "EOC0_BLOCK"},
    {179, "TMC1_BLOCK"},
    {180, "EOC1_BLOCK"},
    {181, "HUB_BLOCK"},
    {182, "CARD_HUB_UMP"},
    {183, "CARD_UMP_ITTK"},
    {184, "CARD_UMP_TEST"},
    {185, "CARD_PRI_MTCE"},
    {186, "CARD_PRI_CHAN"},
    {187, "CARD_EX17_A"},
    {188, "RLD_BLOCK"},
    {189, "CARD_LMU_TEST"},
    {190, "HUB_DS1L_BLOCK"},
    {191, "PELP_BLOCK"},
    {192, "SIMRING_BLOCK"},
    {193, "CARD_VIRTUAL_LINE"},
    {194, "CARD_H248_SPL"},
    {195, "CARD_H248_COIN"},
    {196, "CARD_H248_PBX"},
    {197, "PGI_BLOCK"},
    {198, "GW1_BLOCK"},
    {199, "GW2_BLOCK"},
    {200, "GW_BLOCK"},
    {201, "CARD_SIP_SPL"},
    {202, "CARD_PTRK"},
    {203, "PTRK_IFACE_BLK"},
    {204, "PC_BLOCK"},
    {205, "CARD_H248_DTRK"},
    {206, "DS1_LOOP_BLK"},
    {207, "DS3_BLOCK"},
    {208, "RDT_BLOCK"},
    {209, "RDT_DS1L_BLOCK"},
    {210, "CARD_MGCP_SPL"},
    {211, "CARD_NCS_SPL"},
    {212, "SUBS_REG"},
    {213, "CARD_SIP_PBX"},
    {214, "OC3_BLOCK"},
    {215, "CCFN_LINK_BLK"},
    {216, "EMCC_BLOCK"},
    {217, "AGIF_BLOCK"},
    { 0, NULL}
};
static value_string_ext c15ch_orig_block_types_ext = VALUE_STRING_EXT_INIT(c15ch_orig_block_types);
/* out gwe bc */

/* Fields */
static int hf_c15ch_outgwebc = -1;
static int hf_c15ch_outgwebc_pbc_conn_ni = -1;
static int hf_c15ch_outgwebc_pbc_conn_tn = -1;
static int hf_c15ch_outgwebc_pbc_conn_ni_tn = -1;
static int hf_c15ch_outgwebc_pbc_conn_num = -1;
static int hf_c15ch_outgwebc_pbc_conn_type = -1;
static int hf_c15ch_outgwebc_bc_msg_type = -1;
static int hf_c15ch_outgwebc_op_bc_sdp_ip = -1;
static int hf_c15ch_outgwebc_op_bc_sdp_port = -1;
static int hf_c15ch_outgwebc_pbc_mdrp_mode = -1;
static int hf_c15ch_outgwebc_pbc_tst_flags = -1;


/* pathfind */
/* Fields */
static int hf_c15ch_pathfind = -1;
static int hf_c15ch_pathfind_vds30 = -1;

static int hf_c15ch_pathfind_fromgweni = -1;
static int hf_c15ch_pathfind_fromgwetn = -1;
static int hf_c15ch_pathfind_fromgwenitn = -1;
static int hf_c15ch_pathfind_fromoptimized = -1;
static int hf_c15ch_pathfind_fromsite = -1;
static int hf_c15ch_pathfind_frompm = -1;
static int hf_c15ch_pathfind_frompc = -1;
static int hf_c15ch_pathfind_fromloop = -1;
static int hf_c15ch_pathfind_fromslot = -1;
static int hf_c15ch_pathfind_fromcnx = -1;
static int hf_c15ch_pathfind_fromni = -1;
static int hf_c15ch_pathfind_fromtn = -1;
static int hf_c15ch_pathfind_fromnitn = -1;
static int hf_c15ch_pathfind_togweni = -1;
static int hf_c15ch_pathfind_togwetn = -1;
static int hf_c15ch_pathfind_togwenitn = -1;
static int hf_c15ch_pathfind_tooptimized = -1;
static int hf_c15ch_pathfind_tosite = -1;
static int hf_c15ch_pathfind_topm = -1;
static int hf_c15ch_pathfind_topc = -1;
static int hf_c15ch_pathfind_toloop = -1;
static int hf_c15ch_pathfind_toslot = -1;
static int hf_c15ch_pathfind_tocnx = -1;
static int hf_c15ch_pathfind_toni = -1;
static int hf_c15ch_pathfind_totn = -1;
static int hf_c15ch_pathfind_tonitn = -1;

/* value_string arrays to label fields */
/* for vds30 field ...*/
static const value_string c15ch_pathfind_vds30_types[] = {
    { 0, "NOT_VDS30" },
    { 1, "NEWSLOT_0" },
    { 2, "NEWSLOT_1_ADD_0" },
    { 3, "NEWSLOT_1_ADD_1" },
    { 4, "IDLE" },
    { 0, NULL }
};

/* pathidle */

/* Fields */
static int hf_c15ch_pathidle = -1;
static int hf_c15ch_pathidle_vds30 = -1;
static int hf_c15ch_pathidle_idlecode = -1;
static int hf_c15ch_pathidle_pathtype = -1;

static int hf_c15ch_pathidle_fromgweni = -1;
static int hf_c15ch_pathidle_fromgwenitn = -1;
static int hf_c15ch_pathidle_fromgwetn = -1;
static int hf_c15ch_pathidle_fromsite = -1;
static int hf_c15ch_pathidle_frompm = -1;
static int hf_c15ch_pathidle_frompc = -1;
static int hf_c15ch_pathidle_fromloop = -1;
static int hf_c15ch_pathidle_fromslot = -1;
static int hf_c15ch_pathidle_fromcnx = -1;
static int hf_c15ch_pathidle_fromni = -1;
static int hf_c15ch_pathidle_fromnitn = -1;
static int hf_c15ch_pathidle_fromtn = -1;

static int hf_c15ch_pathidle_togweni = -1;
static int hf_c15ch_pathidle_togwenitn = -1;
static int hf_c15ch_pathidle_togwetn = -1;
static int hf_c15ch_pathidle_tosite = -1;
static int hf_c15ch_pathidle_topm = -1;
static int hf_c15ch_pathidle_topc = -1;
static int hf_c15ch_pathidle_toloop = -1;
static int hf_c15ch_pathidle_toslot = -1;
static int hf_c15ch_pathidle_tocnx = -1;
static int hf_c15ch_pathidle_toni = -1;
static int hf_c15ch_pathidle_tonitn = -1;
static int hf_c15ch_pathidle_totn = -1;


/* for vds30 field */
static const value_string c15ch_pathidle_vds30_types[] = {
    { 0, "NOT_VDS30" },
    { 1, "NEWSLOT_0" },
    { 2, "NEWSLOT_1_ADD_0" },
    { 3, "NEWSLOT_1_ADD_1" },
    { 4, "IDLE" },
    { 0, NULL }
};

/* for pathtype field */
static const value_string c15ch_pathidle_path_types[] = {
    { 0, "BRDCST" },
    { 1, "1WAY" },
    { 2, "2WAY" },
    { 3, "BC_SPFC" },
    { 4, "1WAY_SPFC" },
    { 5, "BC_CMBND" },
    { 6, "1WAY_CMBND" },
    { 7, "NWLB" },
    { 8, "1WAY_2_UTR" },
    { 9, "2WAY_LB" },
    {10, "2WAY_LSG" },
    { 0, NULL }
};

/* for idlecode field */
static const value_string c15ch_pathidle_idle_types[] = {
    { 0, "FULL" },
    { 1, "PRT_SRCE" },
    { 2, "PRT_DEST" },
    { 3, "PRT_SRDS" },
    { 0, NULL }
};

/* q931 */

/* Fields */
static int hf_c15ch_q931 = -1;
static int hf_c15ch_q931_direction = -1;
static int hf_c15ch_q931_ni = -1;
static int hf_c15ch_q931_tn = -1;
static int hf_c15ch_q931_ni_tn = -1;
static int hf_c15ch_q931_msglength = -1;


/* value_string arrays to label fields */
/* for direction field */
static const value_string c15ch_q931_direction_types[] = {
    { 0, "Incoming" },
    { 1, "Outgoing" },
    { 0, NULL }
};

/* quality of service (qos) */

/* Fields */
static int hf_c15ch_qos = -1;
static int hf_c15ch_qos_ni = -1;
static int hf_c15ch_qos_tn = -1;
static int hf_c15ch_qos_ni_tn = -1;
static int hf_c15ch_qos_rtcp_call_id = -1;
static int hf_c15ch_qos_register_type = -1;
static int hf_c15ch_qos_tg_num = -1;
static int hf_c15ch_qos_trk_type = -1;
static int hf_c15ch_qos_status = -1;
static int hf_c15ch_qos_codec = -1;
static int hf_c15ch_qos_given_ip = -1;
static int hf_c15ch_qos_real_ip = -1;
static int hf_c15ch_qos_local_ip = -1;
static int hf_c15ch_qos_tx_pkts = -1;
static int hf_c15ch_qos_lost_pkts = -1;
static int hf_c15ch_qos_lost_pct = -1;
static int hf_c15ch_qos_jitter = -1;
static int hf_c15ch_qos_rtt = -1;
static int hf_c15ch_qos_avg_rtt = -1;
static int hf_c15ch_qos_duration = -1;
static int hf_c15ch_qos_mos = -1;
static int hf_c15ch_qos_ep_type = -1;
static int hf_c15ch_qos_dn_or_tg = -1;
static int hf_c15ch_qos_pm = -1;
static int hf_c15ch_qos_pc = -1;
static int hf_c15ch_qos_hour = -1;
static int hf_c15ch_qos_min = -1;
static int hf_c15ch_qos_sec = -1;
static int hf_c15ch_qos_tenth_sec = -1;
static int hf_c15ch_qos_year = -1;
static int hf_c15ch_qos_month = -1;
static int hf_c15ch_qos_day = -1;
static int hf_c15ch_qos_day_of_week = -1;


/* value_string arrays to label fields */
static const value_string ett_c15ch_qos_status_types[] = {
    { 1, "NO : No RTCP received from End" },
    { 2, "LO : Listener Only" },
    { 4, "CV : Conversation" },
    { 8, "NAT : NAT Connection" },
    { 16, "RTU : RTCP terminated by RTU" },
    { 32, "EPERR : Endpoint providing erroneous data" },
    { 64, "INACT : Inactive" },
    { 0, NULL }
};

/* route */

/* Fields */
static int hf_c15ch_route = -1;
static int hf_c15ch_route_number = -1;
static int hf_c15ch_route_type = -1;
static int hf_c15ch_route_subpm = -1;
static int hf_c15ch_route_trkpm = -1;
static int hf_c15ch_route_strtaindo = -1;
static int hf_c15ch_route_cr_rte_adv = -1;
static int hf_c15ch_route_cause = -1;


/* field labels */
/* for strtaindo field */
static const value_string c15_route_strt_ain_do_types[] = {
    { 0, "START" },
    { 1, "AIN" },
    { 2, "PROGRESS" },
    { 3, "RTADV" },
    { 0, NULL }
};

static const value_string c15_route_types[] = {
    { 0, "TONE" },
    { 1, "AUDICHRON" },
    { 2, "INTERCEPT" },
    { 3, "EAS" },
    { 4, "TIE_LINE" },
    { 5, "CAMA" },
    { 6, "CAMA_2" },
    { 7, "TSPS" },
    { 8, "AMR" },
    { 9, "STN_RING" },
    { 10, "VAXS" },
    { 11, "ROTL" },
    { 12, "TEST_LINE" },
    { 13, "ALM_CHK" },
    { 14, "DST" },
    { 15, "ESB" },
    { 16, "EQA" },
    { 17, "OS" },
    { 18, "LEAS" },
    { 19, "VDRA" },
    { 20, "ISUP" },
    { 21, "IDAL" },
    { 22, "EAOSS" },
    { 23, "LTRK" },
    { 24, "PRI" },
    { 25, "SIPT" },
    { 0, NULL }
};
static value_string_ext c15_route_types_ext = VALUE_STRING_EXT_INIT(c15_route_types);

/* Fields */
static int hf_c15ch_sccp = -1;
static int hf_c15ch_sccp_direction = -1;
static int hf_c15ch_sccp_msgtype = -1;
static int hf_c15ch_sccp_hopcount = -1;
static int hf_c15ch_sccp_transactionnum = -1;
static int hf_c15ch_sccp_opcmember = -1;
static int hf_c15ch_sccp_opccluster = -1;
static int hf_c15ch_sccp_opcnetwork = -1;
static int hf_c15ch_sccp_dpcmember = -1;
static int hf_c15ch_sccp_dpccluster = -1;
static int hf_c15ch_sccp_dpcnetwork = -1;
static int hf_c15ch_sccp_ni = -1;
static int hf_c15ch_sccp_ni_tn = -1;
static int hf_c15ch_sccp_tn = -1;
static int hf_c15ch_sccp_sls = -1;
static int hf_c15ch_sccp_iptime = -1;
static int hf_c15ch_sccp_level3index = -1;


static const value_string c15ch_sccp_direction_types[] = {
    { 0, "Incoming" },
    { 1, "Outgoing" },
    { 0, NULL }
};

static const value_string c15ch_sccp_msg_types[] = {
    { 9, "UDT" },
    { 10, "UDTS" },
    { 17, "XUDT" },
    { 18, "XUDTS" },
    { 0, NULL }
};

/* srcedest */

/* Fields */
static int hf_c15ch_srcedest = -1;
static int hf_c15ch_srcedest_conntype = -1;
static int hf_c15ch_srcedest_pathtype = -1;
static int hf_c15ch_srcedest_pathdirect = -1;


/* field labels */
/* for conntype field */
static const value_string c15_srcedest_conn_types[] = {
    { 0, "CONN_FULL" },
    { 1, "CONN_PRT_SRCE" },
    { 2, "CONN_PRT_DEST" },
    { 3, "CONN_PRT_SRDS" },
    { 4, "DISC_FULL" },
    { 5, "DISC_PRT_SRCE" },
    { 6, "DISC_PRT_DEST" },
    { 7, "DISC_PRT_SRDS" },
    { 0, NULL }
};


/* for pathtype field */
static const value_string c15_srcedest_path_types[] = {
    { 0, "BRDCST" },
    { 1, "1WAY" },
    { 2, "2WAY" },
    { 3, "BC_SPFC" },
    { 4, "1WAY_SPFC" },
    { 5, "BC_CMBND" },
    { 6, "1WAY_CMBND" },
    { 7, "NWLB" },
    { 8, "1WAY_2_UTR" },
    { 9, "2WAY_LB" },
    {10, "2WAY_LSG" },
    { 0, NULL }
};

/* tcap */
/* Fields */
static int hf_c15ch_tcap = -1;
static int hf_c15ch_tcap_direction = -1;
static int hf_c15ch_tcap_action = -1;
static int hf_c15ch_tcap_package_type = -1;
static int hf_c15ch_tcap_ssn = -1;
static int hf_c15ch_tcap_local_ssn = -1;
static int hf_c15ch_tcap_result_err_code = -1;
static int hf_c15ch_tcap_return_reason = -1;
static int hf_c15ch_tcap_feat_id = -1;
static int hf_c15ch_tcap_feat_req = -1;
static int hf_c15ch_tcap_cl_comp_result = -1;
static int hf_c15ch_tcap_release_bit = -1;
static int hf_c15ch_tcap_term_cl_request = -1;
static int hf_c15ch_tcap_opc_index = -1;
static int hf_c15ch_tcap_dpc_mem = -1;
static int hf_c15ch_tcap_dpc_clus = -1;
static int hf_c15ch_tcap_dpc_net = -1;
static int hf_c15ch_tcap_cp_id = -1;

/* value strings */
static const value_string c15ch_tcap_action_types[] = {
    { 0, "Invalid" },
    { 1, "Output Msg" },
    { 2, "Abort Query" },
    { 3, "Timeout" },
    { 4, "Input Msg" },
    { 5, "Msg Ret on Err" },
    { 0, NULL }
};

static const value_string c15ch_tcap_package_types[] = {
    { 0, "Invalid" },
    { 1, "Unidirectional" },
    { 2, "Query W Perm" },
    { 3, "Query WO Perm" },
    { 4, "Response" },
    { 5, "Conv W Perm" },
    { 6, "Conv WO Perm" },
    { 16, "Abort Package" },
    { 0, NULL }
};

static const value_string c15ch_tcap_rel_bit_types[] = {
    { 0, "Hold Buffer" },
    { 1, "Release Buffer" },
    { 0, NULL }
};

static const value_string c15ch_tcap_ret_reason_types[] = {
    { 0, "GTT Trans" },
    { 1, "GTT Addr" },
    { 2, "Subsys Cong" },
    { 3, "Subsys Fail" },
    { 4, "Unequip User" },
    { 5, "Ntwk Fail" },
    { 6, "Ntwrk Cong" },
    { 0, NULL }
};

static const value_string c15ch_tcap_err_code_types[] = {
    { 0, "Class Succ" },
    { 1, "Cl Ret Err" },
    { 2, "T5 Timeout" },
    { 3, "SW Error" },
    { 4, "No Resource" },
    { 5, "CCS7 Unas" },
    { 6, "Acg Block" },
    { 7, "Abort Rcvd" },
    { 8, "Protocol" },
    { 9, "Application" },
    { 10, "T1 Timeout" },
    { 11, "Return Err" },
    { 12, "Reject" },
    { 13, "MWI T1 TO" },
    { 0, NULL }
};

static const value_string c15ch_tcap_feat_req_types[] = {
    { 0, "Invalid" },
    { 1, "Init Query" },
    { 2, "Send Notify" },
    { 3, "Busy Idle" },
    { 4, "Cancel" },
    { 5, "Dequeue" },
    { 6, "Abort" },
    { 7, "Report Err" },
    { 8, "Rsrc Clr" },
    { 9, "Update Data" },
    { 10, "EDP Cont" },
    { 11, "Term Notif" },
    { 12, "Update" },
    { 13, "Query Request" },
    { 0, NULL }
};

static const value_string c15ch_tcap_feat_id_types[] = {
    { 0, "Invalid" },
    { 1, "Acb Act" },
    { 2, "Ar 1Act" },
    { 3, "Ar 2Act 1st" },
    { 4, "Ar 2Act 2nd" },
    { 5, "Acb Deact" },
    { 6, "Ar Deact" },
    { 7, "SCREJ" },
    { 8, "SCFWD" },
    { 9, "SCACC" },
    { 10, "SC RNG CFWD" },
    { 11, "CNAM" },
    { 12, "AIN" },
    { 13, "MDSI" },
    { 0, NULL }
};


static const value_string c15ch_tcap_direction_types[] = {
    { 0, "In Orig" },
    { 1, "Out Orig" },
    { 2, "In Term" },
    { 3, "Out Term" },
    { 0, NULL }
};

static const value_string c15ch_tcap_local_ssn_types[] = {
    { 0, "NO_SUBSYSTEM" },
    { 1, "SCCP_NTWK" },
    { 2, "CLAS_SUBSYS" },
    { 3, "CNAM_SUBSYS" },
    { 4, "LDMG_SUBSYS" },
    /* 5 is unused */
    { 6, "E800_SUBSYS1" },
    { 7, "E800_SUBSYS2" },
    { 8, "E800_SUBSYS3" },
    { 9, "E800_SUBSYS4" },
    { 10, "E800_SUBSYS5" },
    { 11, "E800_SUBSYS6" },
    { 12, "E800_SUBSYS7" },
    { 13, "E800_SUBSYS8" },
    { 14, "AIN_SUBSYS" },
    { 15, "MDSI_SUBSYS" },
    { 0, NULL }
};

/* twc rswch */

/* Fields */
static int hf_c15ch_twc_rswch = -1;
static int hf_c15ch_twc_rswch_pm = -1;
static int hf_c15ch_twc_rswch_subpm = -1;
static int hf_c15ch_twc_rswch_trkpm = -1;
static int hf_c15ch_twc_rswch_devid = -1;
static int hf_c15ch_twc_rswch_event = -1;
static int hf_c15ch_twc_rswch_parm = -1;
static int hf_c15ch_twc_rswch_iptime = -1;


/* cp event */


/* Fields */
static int hf_c15ch_cp_event = -1;
static int hf_c15ch_cp_event_pm = -1;
static int hf_c15ch_cp_event_subpm = -1;
static int hf_c15ch_cp_event_trkpm = -1;
static int hf_c15ch_cp_event_dig_ckt_test_trkpm = -1;
static int hf_c15ch_cp_event_devid = -1;
static int hf_c15ch_cp_event_event = -1;
static int hf_c15ch_cp_event_parm = -1;
static int hf_c15ch_cp_event_iptime = -1;
static int hf_c15ch_cp_event_subpm_orig = -1;
static int hf_c15ch_cp_event_subpm_disc_time = -1;
static int hf_c15ch_cp_event_subpm_revert = -1;
static int hf_c15ch_cp_event_subpm_orig_dt = -1;
static int hf_c15ch_cp_event_subpm_orig_ws = -1;
static int hf_c15ch_cp_event_subpm_orig_dd = -1;
static int hf_c15ch_cp_event_subpm_orig_id = -1;
static int hf_c15ch_cp_event_subpm_no_test = -1;
static int hf_c15ch_cp_event_subpm_dialing = -1;
static int hf_c15ch_cp_event_subpm_rebuilt = -1;
static int hf_c15ch_cp_event_subpm_acfw_reac = -1;
static int hf_c15ch_cp_event_subpm_process_route = -1;
static int hf_c15ch_cp_event_subpm_rte_line = -1;
static int hf_c15ch_cp_event_subpm_mtce = -1;
static int hf_c15ch_cp_event_subpm_aux_tone = -1;
static int hf_c15ch_cp_event_subpm_noller = -1;
static int hf_c15ch_cp_event_subpm_ittk = -1;
static int hf_c15ch_cp_event_subpm_alm_send = -1;
static int hf_c15ch_cp_event_subpm_ani_spill = -1;
static int hf_c15ch_cp_event_subpm_trunk_term = -1;
static int hf_c15ch_cp_event_subpm_line_term = -1;
static int hf_c15ch_cp_event_subpm_non_cp = -1;
static int hf_c15ch_cp_event_subpm_3wc = -1;
static int hf_c15ch_cp_event_subpm_held_3wc = -1;
static int hf_c15ch_cp_event_subpm_cwt = -1;
static int hf_c15ch_cp_event_subpm_held_cwt = -1;
static int hf_c15ch_cp_event_subpm_update_sc = -1;
static int hf_c15ch_cp_event_subpm_orig_spdt = -1;
static int hf_c15ch_cp_event_subpm_acfw_retm = -1;
static int hf_c15ch_cp_event_subpm_cfw_busy = -1;
static int hf_c15ch_cp_event_subpm_cfw = -1;
static int hf_c15ch_cp_event_subpm_cfw_deact = -1;
static int hf_c15ch_cp_event_subpm_rcfw = -1;
static int hf_c15ch_cp_event_subpm_rotl_tp = -1;
static int hf_c15ch_cp_event_subpm_chdt = -1;
static int hf_c15ch_cp_event_subpm_chd = -1;
static int hf_c15ch_cp_event_subpm_cheld = -1;
static int hf_c15ch_cp_event_subpm_3wch = -1;
static int hf_c15ch_cp_event_subpm_3wcw = -1;
static int hf_c15ch_cp_event_subpm_cslt = -1;
static int hf_c15ch_cp_event_subpm_dig_ckt_test = -1;

static int hf_c15ch_cp_event_dig_ckt_test_subpm_sp = -1;
static int hf_c15ch_cp_event_dig_ckt_test_subpm_mp = -1;
static int hf_c15ch_cp_event_dig_ckt_test_subpm_coin = -1;
static int hf_c15ch_cp_event_dig_ckt_test_subpm_isdn = -1;
static int hf_c15ch_cp_event_dig_ckt_test_subpm_trc = -1;
static int hf_c15ch_cp_event_dig_ckt_test_subpm_disc = -1;

static int hf_c15ch_cp_event_subpm_nail = -1;
static int hf_c15ch_cp_event_subpm_dcbi = -1;
static int hf_c15ch_cp_event_subpm_rag_confirm = -1;
static int hf_c15ch_cp_event_subpm_rag_process = -1;
static int hf_c15ch_cp_event_subpm_e800 = -1;
static int hf_c15ch_cp_event_subpm_cfra = -1;
static int hf_c15ch_cp_event_subpm_mwi_deac = -1;
static int hf_c15ch_cp_event_subpm_acar_cp = -1;
static int hf_c15ch_cp_event_subpm_acar_rering = -1;
static int hf_c15ch_cp_event_subpm_acar_ann = -1;
static int hf_c15ch_cp_event_subpm_sle = -1;
static int hf_c15ch_cp_event_subpm_perform_cot = -1;
static int hf_c15ch_cp_event_subpm_clid = -1;
static int hf_c15ch_cp_event_subpm_xpm = -1;
static int hf_c15ch_cp_event_subpm_mwil = -1;
static int hf_c15ch_cp_event_subpm_ldbs = -1;
static int hf_c15ch_cp_event_subpm_acr = -1;
static int hf_c15ch_cp_event_subpm_call_park = -1;
static int hf_c15ch_cp_event_subpm_camp_on_recall = -1;
static int hf_c15ch_cp_event_subpm_cff = -1;
static int hf_c15ch_cp_event_subpm_ibert = -1;
static int hf_c15ch_cp_event_subpm_ain = -1;
static int hf_c15ch_cp_event_subpm_ain_sit = -1;
static int hf_c15ch_cp_event_subpm_ain_rtg = -1;
static int hf_c15ch_cp_event_subpm_nail_bcon = -1;
static int hf_c15ch_cp_event_subpm_nail_dcon = -1;
static int hf_c15ch_cp_event_subpm_qtrn_trvr = -1;
static int hf_c15ch_cp_event_subpm_ekts = -1;
static int hf_c15ch_cp_event_subpm_alt = -1;
static int hf_c15ch_cp_event_subpm_calea = -1;
static int hf_c15ch_cp_event_subpm_sim_ring = -1;
static int hf_c15ch_cp_event_subpm_lta = -1;
static int hf_c15ch_cp_event_subpm_hgq = -1;
static int hf_c15ch_cp_event_subpm_idle = -1;
static int hf_c15ch_cp_event_subpm_sig = -1;
static int hf_c15ch_cp_event_subpm_sig_dest = -1;
static int hf_c15ch_cp_event_subpm_agl_splrg = -1;


/*static const guint32 MIN_PM_VAL = 0; */
static const guint32 MAX_PM_VAL = 77;
static int * subpm_table[] = {
    /* one entry for each PM type */
    &hf_c15ch_cp_event_subpm_orig,            /* MIN_PM_VAL */
    &hf_c15ch_cp_event_subpm_disc_time,
    &hf_c15ch_cp_event_subpm_revert,
    &hf_c15ch_cp_event_subpm_orig_dt,
    &hf_c15ch_cp_event_subpm_orig_ws,
    &hf_c15ch_cp_event_subpm_orig_dd,
    &hf_c15ch_cp_event_subpm_orig_id,
    &hf_c15ch_cp_event_subpm_no_test,
    &hf_c15ch_cp_event_subpm_dialing,
    &hf_c15ch_cp_event_subpm_rebuilt,
    &hf_c15ch_cp_event_subpm_acfw_reac,
    &hf_c15ch_cp_event_subpm_process_route,
    &hf_c15ch_cp_event_subpm_rte_line,
    &hf_c15ch_cp_event_subpm_mtce,
    &hf_c15ch_cp_event_subpm_aux_tone,
    &hf_c15ch_cp_event_subpm_noller,
    &hf_c15ch_cp_event_subpm_ittk,
    &hf_c15ch_cp_event_subpm_alm_send,
    &hf_c15ch_cp_event_subpm_ani_spill,
    &hf_c15ch_cp_event_subpm_trunk_term,
    &hf_c15ch_cp_event_subpm_line_term,
    &hf_c15ch_cp_event_subpm_non_cp,
    &hf_c15ch_cp_event_subpm_3wc,
    &hf_c15ch_cp_event_subpm_held_3wc,
    &hf_c15ch_cp_event_subpm_cwt,
    &hf_c15ch_cp_event_subpm_held_cwt,
    &hf_c15ch_cp_event_subpm_update_sc,
    &hf_c15ch_cp_event_subpm_orig_spdt,
    &hf_c15ch_cp_event_subpm_acfw_retm,
    &hf_c15ch_cp_event_subpm_cfw_busy,
    &hf_c15ch_cp_event_subpm_cfw,
    &hf_c15ch_cp_event_subpm_cfw_deact,
    &hf_c15ch_cp_event_subpm_rcfw,
    &hf_c15ch_cp_event_subpm_rotl_tp,
    &hf_c15ch_cp_event_subpm_chdt,
    &hf_c15ch_cp_event_subpm_chd,
    &hf_c15ch_cp_event_subpm_cheld,
    &hf_c15ch_cp_event_subpm_3wch,
    &hf_c15ch_cp_event_subpm_3wcw,
    &hf_c15ch_cp_event_subpm_cslt,
    &hf_c15ch_cp_event_subpm_dig_ckt_test,    /* default variable for dig ckt pm*/
    &hf_c15ch_cp_event_subpm_nail,
    &hf_c15ch_cp_event_subpm_dcbi,
    &hf_c15ch_cp_event_subpm_rag_confirm,
    &hf_c15ch_cp_event_subpm_rag_process,
    &hf_c15ch_cp_event_subpm_e800,
    &hf_c15ch_cp_event_subpm_cfra,
    &hf_c15ch_cp_event_subpm_mwi_deac,
    &hf_c15ch_cp_event_subpm_acar_cp,
    &hf_c15ch_cp_event_subpm_acar_rering,
    &hf_c15ch_cp_event_subpm_acar_ann,
    &hf_c15ch_cp_event_subpm_sle,
    &hf_c15ch_cp_event_subpm_perform_cot,
    &hf_c15ch_cp_event_subpm_clid,
    &hf_c15ch_cp_event_subpm_xpm,
    &hf_c15ch_cp_event_subpm_mwil,
    &hf_c15ch_cp_event_subpm_ldbs,
    &hf_c15ch_cp_event_subpm_acr,
    &hf_c15ch_cp_event_subpm_call_park,
    &hf_c15ch_cp_event_subpm_camp_on_recall,
    &hf_c15ch_cp_event_subpm_cff,
    &hf_c15ch_cp_event_subpm_ibert,
    &hf_c15ch_cp_event_subpm_ain,
    &hf_c15ch_cp_event_subpm_ain_sit,
    &hf_c15ch_cp_event_subpm_ain_rtg,
    &hf_c15ch_cp_event_subpm_nail_bcon,
    &hf_c15ch_cp_event_subpm_nail_dcon,
    &hf_c15ch_cp_event_subpm_qtrn_trvr,
    &hf_c15ch_cp_event_subpm_ekts,
    &hf_c15ch_cp_event_subpm_alt,
    &hf_c15ch_cp_event_subpm_calea,
    &hf_c15ch_cp_event_subpm_sim_ring,
    &hf_c15ch_cp_event_subpm_lta,
    &hf_c15ch_cp_event_subpm_hgq,
    &hf_c15ch_cp_event_subpm_idle,
    &hf_c15ch_cp_event_subpm_sig,
    &hf_c15ch_cp_event_subpm_sig_dest,
    &hf_c15ch_cp_event_subpm_agl_splrg
    /* MAX_PM_VAL */
};
static const guint32 DIG_CKT_TEST_PM_VALUE = 40;

/* special table to look up subpm for pm_val = DIG_CKT_TEST__PM_VALUE */
/* this table is indexed by trunk pm numbers */
/*static const guint32 MIN_DIG_CKT_TEST_TRKPM_VAL = 0; */
static const guint32 MAX_DIG_CKT_TEST_TRKPM_VAL = 5;
static int * dig_ckt_test_subpm_table[] = {
    /* one entry for each TRKPM value in the expected range */
    &hf_c15ch_cp_event_dig_ckt_test_subpm_sp,            /* MIN_DIG_CKT_TEST_TRKPM_VAL */
    &hf_c15ch_cp_event_dig_ckt_test_subpm_mp,
    &hf_c15ch_cp_event_dig_ckt_test_subpm_coin,
    &hf_c15ch_cp_event_dig_ckt_test_subpm_isdn,
    &hf_c15ch_cp_event_dig_ckt_test_subpm_trc,
    &hf_c15ch_cp_event_dig_ckt_test_subpm_disc            /* MAX_DIG_CKT_TEST_TRKPM_VAL */
};

static const value_string dig_ckt_test_subpm_sp_types[] = {
/* a value_string_ext for this has not been defined because it is a member of array dig_ckt_test_subpm_name_tables
and the other members of that array all have less than 20 items */
    {0, "CRD_MSNG_TEST"},
    {1, "SET_UP"},
    {2, "HNDL_MODE_2"},
    {3, "WAIT_CTU_SCA"},
    {4, "WAIT_ACM_CON"},
    {5, "RDT_OFFHOOK"},
    {6, "SEND_ECHO_TONE"},
    {7, "ECHO_TONE_RESP"},
    {8, "SEND_ECHO_MEAS"},
    {9, "ECHO_MEAS_RESP"},
    {10, "SEND_STOP_ECHO_TONE"},
    {11, "STOP_ECHO_TONE_RESP"},
    {12, "RDT_ONHOOK"},
    {13, "RDT_SPRING"},
    {14, "POTS_OR_COIN"},
    {15, "RMOV_ASORB_P"},
    {16, "RFLEC_TERM"},
    {17, "SEND_LOSS_TONE"},
    {18, "LOSS_TONE_RESP"},
    {19, "SEND_LOSS_MEAS"},
    {20, "LOSS_MEAS_RESP"},
    {21, "SEND_QUIET_TONE"},
    {22, "QUIET_TONE_RESP"},
    {23, "SEND_IDLE_MEAS"},
    {24, "IDLE_MEAS_RESP"},
    {25, "RMOV_RFLC"},
    {0, NULL}
};

static const value_string dig_ckt_test_subpm_mp_types[] = {
    {0, "START_MP"},
    {1, "NEG_S_TONE"},
    {2, "NEG_S_MEAS"},
    {3, "ANI_RESP"},
    {4, "RMOV_NTPI"},
    {5, "ABSORB_TERM"},
    {6, "POS_S_TONE"},
    {7, "POS_S_MEAS"},
    {8, "POS_S_ANI"},
    {9, "ABSO_RMOV"},
    {10, "PTPI_TERM"},
    {11, "POS_T_TONE"},
    {12, "POS_T_MEAS"},
    {13, "RDT_NTPR"},
    {14, "RDT_PRPR"},
    {15, "RDT_PTPR"},
    {0, NULL}
};

static const value_string dig_ckt_test_subpm_coin_types[] = {
    {0, "START_COIN"},
    {1, "POS_C_TONE"},
    {2, "POS_C_MEAS"},
    {3, "COIN_PRES"},
    {4, "RMOV_PTPI"},
    {5, "RFL_NTPI_TRM"},
    {6, "NEG_C_TONE"},
    {7, "NEG_C_MEAS"},
    {8, "NEG_C_RSP"},
    {9, "RFL_NTPI_RMV"},
    {10, "POS_C_TERM"},
    {11, "POS_C_TONE2"},
    {12, "POS_C_MEAS2"},
    {13, "LOOP_DLY"},
    {14, "LOOP_MEAS"},
    {15, "RDT_C_CLCT"},
    {16, "RDT_C_RV_BT"},
    {17, "RDT_C_RET"},
    {0, NULL}
};

static const value_string dig_ckt_test_subpm_isdn_types[] = {
    {0, "CRD_MSNG_TEST"},
    {1, "SZ_LN_MTCE"},
    {2, "LC_RSTR_TEST"},
    {3, "U_CNT_TEST"},
    {4, "NT1_RSTR_TST"},
    {5, "NT1_STAT_TEST"},
    {6, "NEBE_TEST"},
    {7, "FEBE_TEST"},
    {8, "RLS_LN_MTCE"},
    {0, NULL}
};

static const value_string dig_ckt_test_subpm_trc_types[] = {
    {0, NULL}
};

static const value_string dig_ckt_test_subpm_disc_types[] = {
    {0, NULL}
};

static const value_string * dig_ckt_test_subpm_name_tables[] = {
    /* one entry for each TRKPM value in the expected range */
    dig_ckt_test_subpm_sp_types,
    dig_ckt_test_subpm_mp_types,
    dig_ckt_test_subpm_coin_types,
    dig_ckt_test_subpm_isdn_types,
    dig_ckt_test_subpm_trc_types,
    dig_ckt_test_subpm_disc_types
};

/* valid indexes run from MIN_DIG_CKT_TEST__TRKPM_VAL to MAX_DIG_CKT_TEST__TRKPM_VAL */
static const value_string trkpm_dig_ckt_test_types[] = {
    {0, "TEST_SP"},
    {1, "TEST_MP"},
    {2, "TEST_COIN"},
    {3, "TEST_ISDN"},
    {4, "WAIT_TRC_RESP"},
    {5, "WAIT_DISC_CONN"},
    {0, NULL}
};

/* various subpm tables */
static const value_string subpm_orig_types[] = {
    {0, "SET_UP"},
    {1, "SCM_CHANNEL"},
    {2, "P409_GRD_SRT"},
    {3, "ANI_TEST"},
    {4, "WAIT_RMB"},
    {5, "WAIT_FX_HIT"},
    {6, "WAIT_RSRC"},
    {7, "WAIT_ICOT_RSRC"},
    {8, "WAIT_LPA"},
    {9, "WAIT_COT_MSG"},
    {10, "WT_COT_RCHK"},
    {11, "WT_MADN_TONE"},
    {12, "MADN_TONE"},
    {13, "MADN_NOTONE"},
    {14, "FX_DIAL_DLAY"},
    {15, "WAIT_BD_RPY"},
    {16, "DELAY_IDTL_LKOT"},
    {17, "WT_H248_CTX1D"},
    {18, "WAIT_MSDN_PCA"},
    {19, "WT_H248_CTXAV"},
    {0, NULL}
};


static const value_string subpm_disc_time_types[] = {
    {0, "SET_UP"},
    {1, "WAIT_DISC"},
    {2, "HOLD_IDLE"},
    {3, "LOOP_DISC"},
    {4, "LOOP_TIME"},
    {5, "WAIT_FX0_DSC"},
    {0, NULL}
};

static const value_string subpm_revert_types[] = {
    {0, "SET_UP"},
    {1, "AWAIT_RSRC"},
    {2, "AWAIT_DIGIT"},
    {3, "BUSY_TONE"},
    {4, "INFORM_CLG"},
    {5, "WAIT_ONHK"},
    {6, "WAIT_TCAP"},
    {7, "RINGING"},
    {8, "INFORM_CLD"},
    {9, "TALKING"},
    {10, "RING_FAIL"},
    {11, "ANI_TEST"},
    {0, NULL}
};

static const value_string subpm_orig_dt_types[] = {
    {0, "SET_UP"},
    {1, "WAIT_DT"},
    {2, "DIAL_TONE"},
    {3, "FX_DIAL_DLAY"},
    {4, "WAIT_DT_PCA"},
    {0, NULL}
};

static const value_string subpm_orig_ws_types[] = {
    {0, "SET_UP"},
    {1, "WAIT_RCVR"},
    {2, "FX_DIAL_DLAY"},
    {0, NULL}
};

static const value_string subpm_orig_dd_types[] = {
    {0, "SET_UP"},
    {1, "WAIT_HIT_DELAY"},
    {2, "WAIT_FOR_RCVR"},
    {0, NULL}
};

static const value_string subpm_orig_id_types[] = {
    {0, "SET_UP"},
    {1, "WAIT_FOR_RCVR"},
    {0, NULL}
};

static const value_string subpm_no_test_types[] = {
    {0, NULL}
};

static const value_string subpm_dialing_types[] = {
    {0, "SET_UP"},
    {1, "DP_DGT_FIRST"},
    {2, "DP_DGT_DIAL"},
    {3, "WAIT_FOR_KP"},
    {4, "MF_DIALING"},
    {5, "COLL_GIC_DIG"},
    {6, "CPW_PROG_1ST"},
    {7, "CPW_PROG_NXT"},
    {8, "COLL_SC_INDX"},
    {9, "CONFIRM_TONE"},
    {10, "WAIT_CONFIRM"},
    {11, "FX_SND_DLNG"},
    {12, "AUD_PROG_1ST"},
    {13, "AUD_PROG_NXT"},
    {14, "ISDN_FA_DLNG"},
    {15, "ISDN_CFW_NXT"},
    {16, "CLD_SCFW_FA"},
    {17, "WAIT_CNFR_PCA"},
    {0, NULL}
};

static const value_string subpm_rebuilt_types[] = {
    {0, "REBILT_NORM"},
    {1, "REBILT_QUE"},
    {2, "REBILT_TIMIN"},
    {3, "REBILT_Q_T"},
    {0, NULL}
};

static const value_string subpm_acfw_reac_types[] = {
    {0, "REAC_SETUP"},
    {1, "WAIT_SPDT"},
    {2, "PROVIDE_SPDT"},
    {3, "COLLECT_DIGS"},
    {4, "WAIT_ACT_CFM"},
    {5, "PROV_ACT_CFM"},
    {0, NULL}
};

static const value_string subpm_process_route_types[] = {
    {0, NULL}
};

static const value_string subpm_rte_line_types[] = {
/* a value_string_ext has not been defined for this because it is a member of the array subpm_name_tables.
This is the longest member of that array.  There are also two members with 30-40 items. */
    {0, "SET_UP"},
    {1, "SRCE_CNTRL"},
    {2, "ANI_TEST"},
    {3, "CPSC_SELECT"},
    {4, "CPSC_TERM"},
    {5, "HUNT_SLICE"},
    {6, "SCM_CHNL"},
    {7, "PRERNG_TST"},
    {8, "SRCE_TEST"},
    {9, "RINGING_LINE"},
    {10, "DEST_TEST"},
    {11, "ANSWER_TIME"},
    {12, "WAIT_TIMING"},
    {13, "WAIT_INC_COT"},
    {14, "WAIT_LCM_CLI"},
    {15, "WAIT_CNAM_RS"},
    {16, "WAIT_ACR_RES"},
    {17, "DPX_SEIZE"},
    {18, "DPX_ANSWR"},
    {19, "MADN_SLICE"},
    {20, "LTRK_SELECT"},
    {21, "FXS_DIAL_OPL"},
    {22, "LTRK_OPL_DLY"},
    {23, "LTRK_OPLSING"},
    {24, "LTRK_WT_ANS"},
    {25, "ISDN_RT_BRK"},
    {26, "ISDN_PRESENT"},
    {27, "ISDN_PROCDG"},
    {28, "ISDN_ALERTING"},
    {29, "PROGRESS_CLR"},
    {30, "WAIT_SCP_RSP"},
    {31, "EKTS_SLICE"},
    {32, "EKTS_OFFERED"},
    {33, "TELE_WAIT_TCAP"},
    {34, "TELE_WAIT_COT_OR_TCAP"},
    {35, "TELE_TCAP_WAIT_COT"},
    {36, "TELE_WAIT_RCVR"},
    {37, "TELE_WAIT_ON_WINK"},
    {38, "TELE_WAIT_ON_COT"},
    {39, "TELE_VRDA_TRUNKS_BUSY"},
    {40, "TELE_OUTPULSE_BUSY"},
    {41, "TELE_WAIT_START"},
    {42, "TELE_COLLECT_DIG"},
    {43, "SRNG_NO_PDN"},
    {44, "WT_PKTCONN"},
    {45, "MADN_H248_WAIT_CNXID"},
    {46, "MADN_ANS_WAIT_PCA"},
    {47, "TELE_WAIT_RCVR_PCA"},
    {48, "WAIT_CTXID"},
    {0, NULL}
};

static const value_string subpm_mtce_types[] = {
    {27, "ISUP_MAINT"},
    {28, "QPL_MAINT"},
    {0, NULL}
};

static const value_string subpm_aux_tone_types[] = {
    {0, "SETUP"},
    {1, "SEIZED"},
    {2, "WAIT_FOR_TONE"},
    {3, "APPLY_TONE"},
    {0, NULL}
};

static const value_string subpm_noller_types[] = {
    {0, "SET_UP"},
    {1, "IDLE"},
    {2, "WAIT_MF_RCVR1"},
    {3, "DIALING_DN"},
    {4, "OVFLW_TONE"},
    {5, "VERIFY_CONN"},
    {6, "WAIT_MF_RCVR2"},
    {7, "DIALING_TC"},
    {8, "TEST_CONN"},
    {9, "WAIT_TIMING"},
    {0, NULL}
};

static const value_string subpm_ittk_types[] = {
    {0, "SET_UP"},
    {1, "WAIT_STRT_DLNG"},
    {2, "WAIT_FOR_RCVR"},
    {3, "TR_REV_DELAY"},
    {4, "WTBG_DIAL"},
    {5, "DN_DIALING"},
    {6, "DP_DIAL"},
    {7, "WAIT_END_DLNG"},
    {8, "NRML_SUPRVSN"},
    {9, "BUSY_MONITOR"},
    {10, "BM_TEMP"},
    {11, "NO_MONITOR"},
    {12, "NM_TEMP"},
    {13, "BUSY_TONE"},
    {14, "OUT_TEST"},
    {15, "IN_TEST__ID"},
    {16, "TT_TEST"},
    {17, "INTERCEPT_ID"},
    {18, "OVERFLOW"},
    {19, "CK_TRUE_DISC"},
    {20, "WAIT_BI_SET"},
    {21, "WAIT_BYPASS_CONN"},
    {22, "WAIT_BI_CLR"},
    {23, "SLC_OUT_TEST"},
    {24, "WAIT_BURSTS"},
    {25, "WAIT_TONE"},
    {26, "FIRST_TONE_ON"},
    {27, "FIRST_TONE_OFF"},
    {28, "SECOND_TONE_ON"},
    {29, "SECOND_TONE_OFF"},
    {30, "THIRD_TONE_ON"},
    {31, "WAIT_SLEEVE"},
    {32, "WAIT_VLCM"},
    {33, "WAIT_IDT/IDT_TO_MMB"},
    {34, "IDT_BYPASS"},
    {35, "WAIT_IDT_BPS"},
    {36, "TEST_IDT"},
    {0, NULL}
};

static const value_string subpm_alm_send_types[] = {
    {0, NULL}
};

static const value_string subpm_ani_spill_types[] = {
    {0, "SET_UP"},
    {1, "WAIT_MF_RCVR"},
    {2, "WAIT_ANI_KP"},
    {3, "WAIT_ANI_ID"},
    {4, "COLLECT_CLG_DIG"},
    {5, "WT_ONI_ANIF_ST"},
    {6, "ANI_TIMEOUT"},
    {7, "WAIT_DELAY"},
    {0, NULL}
};

static const value_string subpm_trunk_term_types[] = {
    {0, "SET_UP"},
    {1, "NORM_TALK"},
    {2, "DISC_TIMING"},
    {3, "COIN_COLLECT"},
    {4, "COIN_RETURN"},
    {5, "DEST_TONE"},
    {6, "WT_DEST_RCVR"},
    {7, "WT_SRCE_RCVR"},
    {8, "INBAND_DEST"},
    {9, "INBAND_SRCE"},
    {10, "HWL_INTR_RBK"},
    {11, "WT_HW_IT_RBK"},
    {12, "INTR_RGBK"},
    {13, "OS_FROM_DEST"},
    {14, "OS_FROM_SRCE"},
    {15, "TIME_CHG_CTL"},
    {16, "WAIT_CC_COL"},
    {17, "WAIT_CC_RET"},
    {18, "OVFL_RGBK"},
    {19, "WAIT_CC_MFST"},
    {20, "WAIT_CC_ENBL"},
    {21, "WAIT_CC_DSBL"},
    {22, "OS_HOLD"},
    {23, "CBARA_COL"},
    {24, "CBARA_RTN"},
    {25, "CBARA_RLSE"},
    {26, "WT_TLNK_HSHK"},
    {27, "WT_TLNK_SYNC"},
    {28, "WAIT_OUTPULSE_END"},
    {29, "WAIT_ALDP_TONE"},
    {30, "WAIT_OUTPULSE_DELAY"},
    {31, "WAIT_OSNC_CC"},
    {32, "WT_REPL_PCAV_TRK"},
    {0, NULL}
};

static const value_string subpm_line_term_types[] = {
    {0, "SET_UP"},
    {1, "NORM_TALKING"},
    {2, "DISC_TIMING"},
    {3, "COIN_COLLECT"},
    {4, "COIN_RETURN"},
    {5, "WAIT_RCVR"},
    {6, "INBAND_SIG"},
    {7, "HWL_INTR_RRG"},
    {8, "WT_HW_IT_RRG"},
    {9, "INTR_RERING"},
    {10, "SOURCE_TONE"},
    {11, "OVFL_RERING"},
    {12, "WAIT_BI_TONE"},
    {13, "BI_TONE_ON"},
    {14, "DCBI_3WC_Z"},
    {15, "TIME_CHG_CTL"},
    {16, "WAIT_DTR"},
    {17, "WT_TLNK_DLY"},
    {18, "WT_TLNK_HSHK"},
    {19, "WT_TLNK_SYNC"},
    {20, "WAIT_ALDP_TONE"},
    {21, "WT_PCAV_DCBI"},
    {22, "WT_REPL_PCAV"},
    {0, NULL}
};

static const value_string subpm_non_cp_types[] = {
    {0, "CR_SUB_PM_ZERO"},
    {1, "ONHK_TEST_PED"},
    {2, "ONHK_TEST_RES"},
    {3, "PEPR_MTCE_STATE"},
    {4, "GEN_TIMING_REG"},
    {5, "CPT_CONNECTION"},
    {6, "OFHK_TEST_PED"},
    {7, "OFHK_TEST_RES"},
    {8, "CR_TIMING_TEST"},
    {9, "CR_SUB_PM_INVLD"},
    {0, NULL}
};

static const value_string subpm_twc_types[] = {
    {0, "SET_UP"},
    {1, "CONN_ADDED"},
    {2, "TALK_3WAY"},
    {3, "RESW_Y_HELD"},
    {4, "RESW_Y_TALK"},
    {5, "RESW_ADDED"},
    {6, "CONNZ_YGONE"},
    {7, "CSLT_ORG"},
    {8, "CSLT_TALK_Y"},
    {9, "TRANSFER"},
    {10, "RESW_TRNSFER"},
    {11, "CSLT_XYGONE"},
    {12, "CSLT_XZGONE"},
    {13, "TALKY_XYGONE"},
    {14, "TALKY_XZGONE"},
    {15, "X_CLASS_ONLY"},
    {16, "RESW_XYGONE"},
    {0, NULL}
};

static const value_string subpm_held_3wc_types[] = {
    {0, "CR_SUB_PM_ZERO"},
    {1, "ONHK_TEST_PED"},
    {2, "ONHK_TEST_RES"},
    {3, "PEPR_MTCE_STATE"},
    {0, NULL}
};

static const value_string subpm_cwt_types[] = {
    {0, NULL}
};

static const value_string subpm_held_cwt_types[] = {
    {0, NULL}
};

static const value_string subpm_update_sc_types[] = {
    {0, "SETUP"},
    {1, "WAIT_SPDT"},
    {2, "HAVE_SPDT"},
    {3, "GET_INDEX"},
    {4, "GET_DIGITS"},
    {5, "WAIT_CONFRM"},
    {6, "HAVE_CONFRM"},
    {7, "WAIT_SPDT_PCA"},
    {8, "WAIT_CNFM_PCA"},
    {9, "WT_H248_CTXID"},
    {0, NULL}
};

static const value_string subpm_acfw_retm_types[] = {
    {0, "RETM_SETUP"},
    {1, "RETIMING"},
    {0, NULL}
};

static const value_string subpm_cfw_busy_types[] = {
    {0, "SETUP"},
    {1, "BUSY_TIMING"},
    {0, NULL}
};

static const value_string subpm_cfw_types[] = {
    {0, "SET_UP"},
    {1, "RT_BREAK"},
    {2, "REMIND_RING"},
    {3, "SCM_CHNL"},
    {0, NULL}
};

static const value_string subpm_cfw_deact_types[] = {
    {0, "DEACT_SETUP"},
    {1, "WAIT_DE_CPM"},
    {2, "PROV_DE_CPM"},    /* note that values are not continuous */
    {8, "WAIT_CNFR_PCA"},
    {0, NULL}
};

static const value_string subpm_rcfw_types[] = {
    {0, "SET_UP"},
    {1, "SRCE_CNTRL"},
    {2, "WAIT_COT"},
    {0, NULL}
};

static const value_string subpm_rotl_tp_types[] = {
    {0, "SET_UP"},
    {1, "FIRST_DIGIT"},
    {2, "SEC_DIGIT"},
    {3, "THIRD_DIGIT"},
    {4, "COL_TRK_INFO"},
    {5, "COL_DN_INFO"},
    {6, "END_OUTPULSE"},
    {7, "WAIT_COT"},
    {8, "WAIT_ACM"},
    {9, "WAIT_ANM"},
    {10, "ANS_SUPV"},
    {11, "LTBT_CONN"},
    {12, "TEST_CONN"},
    {13, "COL_ID_DIGIT"},
    {14, "WAIT_SIGNAL"},
    {15, "WAIT_ST_SIG"},
    {16, "WAIT_ANI_SIG"},
    {17, "END_ANI_SPILL"},
    {18, "ROTLTP_ONHK"},
    {19, "COL_TG_INFO"},
    {20, "WAIT_TO_SEND"},
    {21, "WAIT_CONN_APR"},
    {0, NULL}
};

static const value_string subpm_chdt_types[] = {
    {0, "SETUP"},
    {1, "WAIT_CFT"},
    {2, "CFT"},
    {3, "WAIT_DT"},
    {4, "DIAL_TONE"},
    {5, "WAIT_SPDT"},
    {6, "SPDT"},
    {0, NULL}
};

static const value_string subpm_chd_types[] = {
    {0, "SETUP"},
    {1, "CONN_ACT"},
    {2, "SRCE_RERING"},
    {3, "DEST_RERING"},
    {4, "SILENCE"},
    {5, "SIL_W_GONE"},
    {0, NULL}
};

static const value_string subpm_cheld_types[] = {
    {0, "SETUP"},
    {1, "NVP"},
    {0, NULL}
};

static const value_string subpm_dig_ckt_test_types[] = {
    {0, NULL}
};

static const value_string subpm_nail_types[] = {
    {0, NULL}
};

static const value_string subpm_dcbi_types[] = {
    {0, "DCBI_SETUP"},
    {1, "DCBI_CNTRL"},
    {2, "DCBI_RESW_XY"},
    {3, "DCBI_RESW_YZ"},
    {0, NULL}
};

static const value_string subpm_rag_confirm_types[] = {
    {0, "SETUP"},
    {1, "WAIT"},
    {2, "ON"},
    {0, NULL}
};

static const value_string subpm_rag_process_types[] = {
    {0, "SETUP"},
    {1, "SEARCH"},
    {2, "SCM_CHANNEL"},
    {3, "PRERNG_TEST"},
    {4, "WAIT_TCAP"},
    {5, "RERING"},
    {6, "MBS_RERING"},
    {7, "DELAY_CONN"},
    {8, "WT_H248_CTXID"},
    {0, NULL}
};

static const value_string subpm_e800_types[] = {
    {0, "SET_UP"},
    {1, "COLLECT_DIG"},
    {2, "WT_FGD_DIG"},
    {3, "WT_COR_RCVR"},
    {4, "WT_FGID_II"},
    {5, "WT_FGD_ANI"},
    {6, "WT_FGD_CLDKP"},
    {7, "WT_FGD_CLED"},
    {8, "WAIT_RESP"},
    {9, "CLCT_AT_DIG"},
    {10, "DLY_2ND_STG"},
    {11, "DLY_B4_ACK"},
    {0, NULL}
};

static const value_string subpm_cfra_types[] = {
    {0, "SET_UP"},
    {1, "SRCE_CNTRL"},
    {2, "WAIT_COT"},
    {3, "ANI_TEST"},
    {4, "CPSC_SELECT"},
    {5, "CAMA_OPR"},
    {6, "WAIT_RGBK"},
    {7, "RBT"},
    {8, "WAIT_TIMER"},
    {9, "WAIT_SPDT"},
    {10, "WAIT_ANS"},
    {11, "SPDT1"},
    {12, "DN_COLLECT"},
    {13, "PIN_COLLECT"},
    {14, "SPDT2"},
    {15, "ACT_DACT_COL"},
    {16, "SPDT3"},
    {17, "FWD_TO_COLL"},
    {18, "WT_DACT_CNFR"},
    {19, "WT_ACT_CNFR"},
    {20, "CNFR_TONE"},
    {0, NULL}
};

static const value_string subpm_mwi_deac_types[] = {
    {0, "SETUP_CONFRM"},
    {1, "WAIT_CONFRM"},
    {2, "HAVE_CONFRM"},
    {0, NULL}
};

static const value_string subpm_acar_cp_types[] = {
    {0, "SET_UP"},
    {1, "WAIT_I_BSP"},
    {2, "ACAR_CALL_PMS"},
    {0, NULL}
};

static const value_string subpm_acar_rering_types[] = {
    {0, "SET_UP"},
    {1, "SCM_CHANNEL"},
    {2, "WAIT_TCAP"},
    {3, "RERING_LOCL"},
    {4, "WAIT_FINAL_Q"},
    {5, "WT_H248_CTXID"},
    {0, NULL}
};

static const value_string subpm_acar_ann_types[] = {
    {0, "SET_UP"},
    {1, "DRA_BUSY"},
    {2, "DRA_WAIT"},
    {3, "DRA_MSG_BUSY"},
    {4, "DRA_MSG_WAIT"},
    {5, "DRA_MSG_ACT"},
    {6, "DRA_MSG_DIAL"},
    {7, "DRA_END_DLY"},
    {8, "WT_TCAP_RESP"},
    {9, "GET_CONF_DIG"},
    {10, "WAIT_RCVR_PCA"},
    {0, NULL}
};

static const value_string subpm_sle_types[] = {
    {0, "SETUP"},
    {1, "LIST_EDIT"},
    {2, "LIST_ADD"},
    {3, "LIST_DELETE"},
    {4, "LIST_REVIEW"},
    {5, "CHG_STATUS"},
    {6, "LISTEN_ERR"},
    {7, "EXIT"},
    {8, "DEL_ALL"},
    {9, "DEL_ALL_PRV"},
    {10, "REPEAT_ANNC"},
    {11, "LCP"},
    {12, "CA_FA_CNFRM"},
    {13, "INVALID_CMD"},
    {0, NULL}
};

static const value_string subpm_perform_cot_types[] = {
    {0, "SET_UP"},
    {1, "DRA_BUSY"},
    {2, "DRA_WAIT"},
    {3, "DRA_MSG_BUSY"},
    {4, "DRA_MSG_WAIT"},
    {5, "DRA_MSG_ACT"},
    {6, "DRA_MSG_DIAL"},
    {7, "DRA_END_DLY"},
    {8, "CMD_GET_DIG"},
    {9, "WAIT_RCVR"},
    {10, "WAIT_RCVR_PCA"},
    {0, NULL}
};

static const value_string subpm_clid_types[] = {
    {0, "SETUP"},
    {1, "TRK_RETRY"},
    {2, "WAIT_DRA"},
    {3, "WAIT_RSRC"},
    {4, "WAIT_ANNOC"},
    {5, "WAIT_END"},
    {6, "WAIT_CONFIRM"},
    {7, "WAIT_SRCE_DS"},
    {8, "WAIT_CNFR_PCA"},
    {0, NULL}
};

static const value_string subpm_xpm_types[] = {
    {0, NULL}
};

static const value_string subpm_mwil_types[] = {
    {0, "SETUP"},
    {1, "SEND"},
    {2, "WAIT"},
    {3, "CPM_CON"},
    {4, "CPM_WT"},
    {5, "BKGD"},
    {6, "WT_CNXID"},
    {7, "RDT_WAIT"},
    {0, NULL}
};

static const value_string subpm_ldbs_types[] = {
    {0, "SET_UP"},
    {1, "COLLECT_DIG"},
    {2, "WAIT_QUERY"},
    {3, "WAIT_DELAY"},
    {0, NULL}
};

static const value_string subpm_acr_types[] = {
    {0, "SETUP"},
    {1, "TRK_RETRY"},
    {2, "WAIT_DRA"},
    {3, "WAIT_RSRC"},
    {4, "WAIT_ANNOC"},
    {5, "WAIT_END"},
    {6, "WAIT_CONFIRM"},
    {7, "WAIT_SRCE_DS"},
    {0, NULL}
};

static const value_string subpm_call_park_types[] = {
    {0, "SET_UP"},
    {1, "COLL_1ST_DIG"},
    {2, "COLL_NTH_DIG"},
    {3, "X_WT_SPDT"},
    {4, "TONE_CONN_XY"},
    {5, "Y_PARKED"},
    {6, "YPARK_WT_RBK"},
    {7, "YPARK_XRERNG"},
    {8, "X_WT_CONFIRM"},
    {9, "X_CONFIRM"},
    {10, "DELAY_CONN"},
    {11, "ISDN_RERING"},
    {12, "WT_PCAV_CXID"},
    {0, NULL}
};

static const value_string subpm_camp_on_recall_types[] = {
    {0, NULL}
};

static const value_string subpm_cff_types[] = {
    {0, "SET_UP"},
    {1, "WAIT_CNFRM"},
    {2, "PROVIDE_CNFRM"},
    {3, "WAIT_CNFR_PCA"},
    {0, NULL}
};

static const value_string subpm_ibert_types[] = {
    {0, "SETUP"},
    {1, "WT_RESP_1"},
    {2, "WT_RESP_2"},
    {3, "CNT_CLR_ACK"},
    {4, "WT_STP_TEST"},
    {5, "RSET_CNT_ACK"},
    {6, "FND_PT_2_TST"},
    {7, "TEST_PATH"},
    {8, "WT_STAT_RSLT"},
    {9, "EFS_RSLT"},
    {10, "WAIT_DS1"},
    {11, "WT_RTS"},
    {12, "WT_TCM_SYNC"},
    {0, NULL}
};

static const value_string subpm_ain_types[] = {
    {0, "SET_UP"},
    {1, "WAIT_COT"},
    {2, "WAIT_SCP"},
    {3, "WAIT_DGT"},
    {4, "DRA_WAIT"},
    {5, "DRA_BUSY"},
    {6, "DRA_MSG_BUSY"},
    {7, "DRA_MSG_WAIT"},
    {8, "DRA_MSG_PLAY"},
    {9, "DRA_COL_DIGS"},
    {10, "WAIT_RCVR_PCA"},
    {0, NULL}
};

static const value_string subpm_ain_sit_types[] = {
    {0, "SET_UP"},
    {1, "DLY_B4_1ST_WINK"},
    {2, "WAIT_FOR_RCVR"},
    {3, "WAIT_FOR_1ST_KP"},
    {4, "WAIT_FOR_II"},
    {5, "WAIT_FOR_ANI"},
    {6, "WAIT_FOR_CLD_KP"},
    {7, "WAIT_FOR_CLD"},
    {8, "DLY_B4_2ND_WINK"},
    {0, NULL}
};

static const value_string subpm_ain_rtg_types[] = {
    {0, "SETUP"},
    {1, "REAL_TIME_BR"},
    {0, NULL}
};

static const value_string subpm_nail_bcon_types[] = {
    {0, "START_NAIL_CONN"},
    {1, "WAIT_SCM_RESP"},
    {2, "FINISH_NAIL_CONN"},
    {0, NULL}
};

static const value_string subpm_nail_dcon_types[] = {
    {0, "START_NAIL_CONN"},
    {1, "WAIT_SCM_RESP"},
    {2, "FINISH_NAIL_CONN"},
    {0, NULL}
};

static const value_string subpm_qtrn_trvr_types[] = {
    {0, NULL}
};

static const value_string subpm_ekts_types[] = {
    {0, "SET_UP"},
    {1, "KEY_SETUP"},
    {2, "PROGRESS"},
    {3, "RINGBACK"},
    {4, "CONNECT"},
    {5, "KEY_HOLD"},
    {6, "NOTIFY"},
    {7, "CLEARING"},
    {8, "FT_SEARCH"},
    {9, "FT_UPDATE"},
    {10, "REM_RING"},
    {11, "DNLD_REQ"},
    {12, "RETRIEVE"},
    {13, "DROP_EKTS"},
    {0, NULL}
};

static const value_string subpm_alt_types[] = {
    {0, "IDLE"},
    {1, "PERM"},
    {2, "BRIDGE"},
    {0, NULL}
};

static const value_string subpm_calea_types[] = {
    {0, NULL}
};

static const value_string subpm_sim_ring_types[] = {
    {0, "SET_UP"},
    {1, "GO_XLATE_NPMDN"},
    {2, "GO_DISC_NPMDN"},
    {0, NULL}
};

static const value_string subpm_lta_types[] = {
    {0, "SETUP"},
    {1, "WAIT_CONN_SLACC"},
    {2, "WAIT_MTA_CONN"},
    {3, "SEND_LOOPARND_RMV"},
    {4, "WAIT_MTA_LOOPARND_RMV"},
    {5, "MTA_ACCESS"},
    {6, "TL1_MSG_RSP_DLY"},
    {7, "CHG_DIR_RSP_DLY"},
    {8, "WAIT_MTA_DISC_RSP"},
    {9, "WAIT_MTA_REPSTAT_RPLY"},
    {10, "WAIT_BYPASS"},
    {11, "IDT_TO_MMB"},
    {12, "IDT_BYPASS"},
    {13, "WAIT_IDT_BPS"},
    {14, "TEST_IDT"},
    /* 15 is undefined */
    {16, "TL1_RESP_DELY"},
    {17, "WAIT_CU_TEST_FINISH"},
    {18, "WAIT_MTA_THEN_BREAK_CONN"},
    {19, "IDT_VIRT_WAIT_MMB"},
    {20, "IDT_VIRT_TRC_CONNECT"},
    {21, "IDT_VIRT_TRC_RSP_WAIT"},
    {22, "IDT_VIRT_TRC_DISC_WAIT"},
    {0, NULL}
};

static const value_string subpm_hgq_types[] = {
    {0, NULL}
};

static const value_string subpm_idle_types[] = {
    {0, NULL}
};

static const value_string subpm_sig_types[] = {
    {0, "SETUP"},
    {1, "PSIS_SETUP"},
    {2, "PSiM_SETUP"},
    {3, "WT_CNAM_RESP"},
    {4, "WT_DSIG_CONN"},
    {5, "WT_XMIT_TONE"},
    {6, "INTERCOM"},
    {7, "WT_DSIG_DISC"},
    {8, "WT_DISC"},
    {9, "WT_STD_RTE"},
    {0, NULL}
};

static const value_string subpm_sig_dest_types[] = {
    {0, "SETUP"},
    {1, "WT_RT_BREAK"},
    {2, "WT_PKT_CONN"},
    {3, "WT_DEST_CONN"},
    {4, "WT_DST_INTERCOM"},
    {5, "WT_DISC"},
    {0, NULL}
};

static const value_string subpm_agl_splrg_types[] = {
    {0, "SET_UP"},
    {1, "REMIND_RING"},
    {2, "WT_H248_CTXID"},
    {0, NULL}
};

static const value_string * subpm_name_tables[] = {
    subpm_orig_types,
    subpm_disc_time_types,
    subpm_revert_types,
    subpm_orig_dt_types,
    subpm_orig_ws_types,
    subpm_orig_dd_types,
    subpm_orig_id_types,
    subpm_no_test_types,
    subpm_dialing_types,
    subpm_rebuilt_types,
    subpm_acfw_reac_types,
    subpm_process_route_types,
    subpm_rte_line_types,
    subpm_mtce_types,
    subpm_aux_tone_types,
    subpm_noller_types,
    subpm_ittk_types,
    subpm_alm_send_types,
    subpm_ani_spill_types,
    subpm_trunk_term_types,
    subpm_line_term_types,
    subpm_non_cp_types,
    subpm_twc_types, /*index 22 : this is the same as at index 37 and index 38 */
    subpm_held_3wc_types, /*index 23 : this is the same as at index 39  */
    subpm_cwt_types,
    subpm_held_cwt_types,
    subpm_update_sc_types,
    subpm_orig_dt_types, /* index 27 : this is the same as at index 3 */
    subpm_acfw_retm_types,
    subpm_cfw_busy_types,
    subpm_cfw_types, /* index 30 */
    subpm_cfw_deact_types,
    subpm_rcfw_types,
    subpm_rotl_tp_types,
    subpm_chdt_types,
    subpm_chd_types,
    subpm_cheld_types,
    subpm_twc_types, /*index 37 : this is the same as at index 22 and index 38 */
    subpm_twc_types, /*index 38 : this is the same as at index 22 and index 37 */
    subpm_held_3wc_types, /*index 39 : this is the same as at index 23  */
    subpm_dig_ckt_test_types,    /* default for dig_ckt */
    subpm_nail_types,
    subpm_dcbi_types,
    subpm_rag_confirm_types,
    subpm_rag_process_types,
    subpm_e800_types,
    subpm_cfra_types,
    subpm_mwi_deac_types,
    subpm_acar_cp_types,
    subpm_acar_rering_types,
    subpm_acar_ann_types,    /* index 50 */
    subpm_sle_types,
    subpm_perform_cot_types,
    subpm_clid_types,
    subpm_xpm_types,
    subpm_mwil_types,
    subpm_ldbs_types,
    subpm_acr_types,
    subpm_call_park_types,
    subpm_camp_on_recall_types,
    subpm_cff_types,    /* index 60 */
    subpm_ibert_types,
    subpm_ain_types,
    subpm_ain_sit_types,
    subpm_ain_rtg_types,
    subpm_nail_bcon_types,
    subpm_nail_dcon_types,
    subpm_qtrn_trvr_types,
    subpm_ekts_types,
    subpm_alt_types,
    subpm_calea_types,    /* index 70 */
    subpm_sim_ring_types,
    subpm_lta_types,
    subpm_hgq_types,
    subpm_idle_types,
    subpm_sig_types,
    subpm_sig_dest_types,
    subpm_agl_splrg_types
};

/* for pm field ...*/
static const value_string c15_pm_types[] = {
    { 0, "ORIG" },
    { 1, "DSTM" },
    { 2, "RVRT" },
    { 3, "ORDT" },
    { 4, "ORWS" },
    { 5, "ORDD" },
    { 6, "ORID" },
    { 7, "#TST" },
    { 8, "DLNG" },
    { 9, "RBLT" },
    { 10, "CFWR" },
    { 11, "RTE" },
    { 12, "RLIN" },
    { 13, "MTCE" },
    { 14, "AUXT" },
    { 15, "NOLR" },
    { 16, "ITTK" },
    { 17, "ALSD" },
    { 18, "ANSP" },
    { 19, "TRNK" },
    { 20, "LINE" },
    { 21, "NOCP" },
    { 22, "3WC" },
    { 23, "3WCH" },
    { 24, "CWT" },
    { 25, "CWTH" },
    { 26, "UPSC" },
    { 27, "ORSD" },
    { 28, "CFRT" },
    { 29, "CFWB" },
    { 30, "CFW" },
    { 31, "CFWD" },
    { 32, "RCFW" },
    { 33, "ROTL" },
    { 34, "CHDT" },
    { 35, "CHD" },
    { 36, "CHLD" },
    { 37, "3WCH" },
    { 38, "3WCW" },
    { 39, "CSLT" },
    { 40, "DGTX" },
    { 41, "NAIL" },
    { 42, "DCBI" },
    { 43, "RGCF" },
    { 44, "RGCP" },
    { 45, "E800" },
    { 46, "CFRA" },
    { 47, "MWID" },
    { 48, "ACCP" },
    { 49, "ACRR" },
    { 50, "ACAN" },
    { 51, "SLE" },
    { 52, "PCOT" },
    { 53, "CLID" },
    { 54, "XPML" },
    { 55, "MWIL" },
    { 56, "LDBS" },
    { 57, "ACR" },
    { 58, "CPRK" },
    { 59, "CRCL" },
    { 60, "CFF" },
    { 61, "BERT" },
    { 62, "AIN" },
    { 63, "ASIT" },
    { 64, "ARTG" },
    { 65, "BNAL" },
    { 66, "DNAL" },
    { 67, "TRVR" },
    { 68, "EKTS" },
    { 69, "ALT" },
    { 70, "CALE" },
    { 71, "SRNG" },
    { 72, "LTA" },
    { 73, "HGQ" },
    { 74, "IDLE" },
    { 75, "SIG" },
    { 76, "SIGD" },
    { 77, "SPRG" },
    { 0, NULL }
};
static value_string_ext c15_pm_types_ext = VALUE_STRING_EXT_INIT(c15_pm_types);

static const value_string c15_dev_types[] = {
    { 0, "CR" },
    { 1, "SRCE" },
    { 2, "DEST" },
    { 3, "TS" },
    { 4, "RS" },
    { 5, "TD" },
    { 6, "RD" },
    { 7, "CLBF" },
    { 8, "TMP1" },
    { 9, "TMP2" },
    { 10, "PPS" },
    { 11, "PPD" },
    { 12, "BR1" },
    { 13, "BR2" },
    { 14, "BR3" },
    { 15, "BR4" },
    { 16, "BR5" },
    { 17, "BR6" },
    { 18, "ACFW" },
    { 19, "CATR" },
    { 20, "DATR" },
    { 21, "MR" },
    { 22, "TSMS" },
    { 23, "VFG" },
    { 24, "SFTR" },
    { 25, "ETOE" },
    { 26, "DST2" },
    { 27, "TD2" },
    { 28, "AINR" },
    { 29, "STRB" },
    { 30, "AXBF" },
    { 0, NULL }
};
static value_string_ext c15_dev_types_ext = VALUE_STRING_EXT_INIT(c15_dev_types);
static const value_string c15_event_types[] = {
    { 0, "DISC" },
    { 1, "CONN" },
    { 2, "DIGT" },
    { 3, "TO" },
    { 4, "RGFL" },
    { 5, "FLSH" },
    { 6, "WINK" },
    { 7, "NONE" },
    { 8, "COIN" },
    { 9, "ANI" },
    { 10, "OPLS" },
    { 11, "RSRC" },
    { 12, "PBLK" },
    { 13, "SOW" },
    { 14, "RGON" },
    { 15, "RGOF" },
    { 16, "LOW" },
    { 17, "LITTI" },
    { 18, "AUXT" },
    { 19, "NLRS" },
    { 20, "NLRE" },
    { 21, "ITTK" },
    { 22, "DSPL" },
    { 23, "MLWK" },
    { 24, "CONT" },
    { 25, "ROW" },
    { 26, "CPSC" },
    { 27, "PEPR" },
    { 28, "DST" },
    { 29, "PLSN" },
    { 30, "CHNL" },
    { 31, "HMPE" },
    { 32, "LTBT" },
    { 33, "MMB" },
    { 34, "FLTY" },
    { 35, "VAXS" },
    { 36, "MTCE" },
    { 37, "TSON" },
    { 38, "TSNO" },
    { 39, "TMAP" },
    { 40, "RMOV" },
    { 41, "CTU" },
    /* 42 unused */
    { 43, "COMP" },
    /* 44 unused */
    { 45, "TNPL" },
    { 46, "SCP" },
    { 47, "ACRT" },
    { 48, "CPST" },
    { 49, "ACM" },
    { 50, "ANM" },
    { 51, "BLO" },
    { 52, "CCRI" },
    { 53, "CCRO" },
    { 54, "COTP" },
    { 55, "COTF" },
    { 56, "COTT" },
    { 57, "CRA" },
    { 58, "CVR" },
    { 59, "EXM" },
    { 60, "IAM" },
    { 61, "LPA" },
    { 62, "REL" },
    { 63, "RES" },
    { 64, "RLC" },
    { 65, "RSC" },
    { 66, "SUS" },
    { 67, "UCIC" },
    { 68, "CLID" },
    { 69, "MONY" },
    { 70, "XPML" },
    { 71, "OVLT" },
    { 72, "SLET" },
    { 73, "CNAT" },
    { 74, "KEY" },
    { 75, "HOLD" },
    { 76, "RTRV" },
    { 77, "COT8" },
    { 78, "DATL" },
    { 79, "FKEY" },
    { 80, "ABRT" },
    { 81, "TCAP" },
    { 82, "SETP" },
    { 83, "FACT" },
    { 84, "PROC" },
    { 85, "ALRT" },
    { 86, "HDAK" },
    { 87, "HDRJ" },
    { 88, "KSAC" },
    { 89, "RTAK" },
    { 90, "RTRJ" },
    { 91, "STAT" },
    { 92, "ISFC" },
    { 93, "CPG" },
    { 94, "ALTW" },
    { 95, "ALTD" },
    { 96, "ALTN" },
    { 97, "ALTP" },
    { 98, "ALTQ" },
    { 99, "FACW" },
    { 100, "PROG" },
    { 101, "BRDG" },
    { 102, "AIU" },
    { 103, "FAC" },
    { 104, "SRNG" },
    { 105, "PCAV" },
    { 106, "CXID" },
    { 107, "INVT" },
    { 108, "REFR" },
    { 109, "SVND" },
    { 110, "TL1D" },
    { 111, "INDG" },
    { 112, "TL1M" },
    { 113, "INVR" },
    {   0, NULL}
};
static value_string_ext c15_event_types_ext = VALUE_STRING_EXT_INIT(c15_event_types);

#define C15_INC_GWE_NONE       0
#define C15_INC_GWE_REPLY      1
#define C15_INC_GWE_BC_PGI     2
#define C15_INC_GWE_MGCP_DLCX  3
#define C15_INC_GWE_H248_DIGIT    4
#define C15_INC_GWE_VOIP_COT      5
#define C15_INC_GWE_NOTIFY        6
#define C15_INC_GWE_ADMN_UPDT_REC 7
#define C15_INC_GWE_CL_SETUP      8
#define C15_INC_GWE_PTRK_SETUP    9
#define C15_INC_GWE_CL_PROG      10
#define C15_INC_GWE_CL_ANS       11
#define C15_INC_GWE_CL_REL       12
#define C15_INC_GWE_NTWK_MOD     13
#define C15_INC_GWE_RV_AVAIL     14
#define C15_INC_GWE_CL_REDIR     15
#define C15_INC_GWE_CL_REFER     16
#define C15_INC_GWE_CHG_HDL      17
#define C15_INC_GWE_SUBS_CHG_HDL 18
#define C15_INC_GWE_INFO         19
#define C15_INC_GWE_INV_REPL     20
#define C15_INC_GWE_ADMN_DN      21
#define C15_INC_GWE_SUA_REPLY    22
#define C15_INC_GWE_SUA_HNDL     23
#define C15_INC_GWE_SUA_TGH_STAT 24


/* Dissector Table */
static dissector_table_t c15ch_inc_gwe_dissector_table;

/* Fields */
static int hf_c15ch_inc_gwe = -1;
static int hf_c15ch_inc_gwe_ni = -1;
static int hf_c15ch_inc_gwe_tn = -1;
static int hf_c15ch_inc_gwe_ni_tn = -1;
static int hf_c15ch_inc_gwe_taskid = -1;
static int hf_c15ch_inc_gwe_fiatid_invalid = -1;
static int hf_c15ch_inc_gwe_fiatid_bc = -1;
static int hf_c15ch_inc_gwe_fiatid_mtce = -1;
static int hf_c15ch_inc_gwe_fiatid_om = -1;
static int hf_c15ch_inc_gwe_fiatid_h248 = -1;
static int hf_c15ch_inc_gwe_fiatid_sua = -1;
static int hf_c15ch_inc_gwe_fiatid_mgcp = -1;
static int hf_c15ch_inc_gwe_fiatid_sip_notify = -1;
static int hf_c15ch_inc_gwe_fiatid_admn = -1;
static int hf_c15ch_inc_gwe_datatype = -1;


/* labels */


static int * fiatid_table[] = {
    /* one entry for each Task type */
    &hf_c15ch_inc_gwe_fiatid_invalid,
    &hf_c15ch_inc_gwe_fiatid_bc,
    &hf_c15ch_inc_gwe_fiatid_mtce,
    &hf_c15ch_inc_gwe_fiatid_om,
    &hf_c15ch_inc_gwe_fiatid_h248,
    &hf_c15ch_inc_gwe_fiatid_sua,
    &hf_c15ch_inc_gwe_fiatid_mgcp,
    &hf_c15ch_inc_gwe_fiatid_sip_notify,
    &hf_c15ch_inc_gwe_fiatid_admn
};

/*static const guint8 FIRST_TASK_TYPE_INDEX = 0;*/
static const guint8  LAST_TASK_TYPE_INDEX = 8;


static const value_string c15inc_gwe_task_types[] = {
    { 0, "GWE_TK_INVALID" },
    { 1, "GWE_TK_BC" },
    { 2, "GWE_TK_MTCE" },
    { 3, "GWE_TK_OM" },
    { 4, "GWE_TK_H248" },
    { 5, "GWE_TK_SUA" },
    { 6, "GWE_TK_MGCP" },
    { 7, "GWE_TK_SIP_NOTIFY" },
    { 8, "GWE_TK_ADMN" },
    { 0, NULL }
};

#if 0
static const guint8 INVALID_TASK_TYPE_VAL = 0;
#endif

static const value_string c15inc_gwe_bc_fiat_types[] = {
    { 0, "GW_FT_INVALID" },
    { 1, "GWE_FT_REPLY" },
    { 2, "GWE_FT_BC_PGI" },
    { 3, "GWE_FT_MGCP_DLCX" },
    { 0, NULL }
};

static const value_string c15inc_gwe_mtce_fiat_types[] = {
    { 0, "GW_FT_INVALID" },
    { 1, "GWE_FT_REPLY" },
    { 2, "GWE_FT_GRACEFUL" },
    { 3, "GWE_FT_FORCED" },
    { 4, "GWE_FT_RESTART" },
    { 5, "GWE_FT_DISCNCT" },
    { 6, "GWE_FT_HANDOFF" },
    { 7, "GWE_FT_FAILOVER" },
    { 8, "GWE_FT_LN_DLCX" },
    { 9, "GWE_FT_LN_GRCFL" },
    { 10, "GWE_FT_LN_FRCD" },
    { 11, "GWE_FT_LN_RSTRT" },
    { 12, "GWE_FT_DS1_GRCFL" },
    { 13, "GWE_FT_DS1_FRCD" },
    { 14, "GWE_FT_DS1_RSTRT" },
    { 15, "GWE_FT_TRK_GRCFL" },
    { 16, "GWE_FT_TRK_FRCD" },
    { 17, "GWE_FT_TRK_RSTRT" },
    { 18, "GWE_FT_ALLDS1_GRCL" },
    { 19, "GWE_FT_ALLDS1_FRCD" },
    { 20, "GWE_FT_ALLDS1_GRCFL" },
    { 21, "GWE_FT_LN_DISCNCT" },
    { 0, NULL }
};

static const value_string c15inc_gwe_om_fiat_types[] = {
    { 0, "GW_FT_INVALID" },
    { 1, "GWE_FT_REPLY" },
    { 0, NULL }
};

static const value_string c15inc_gwe_h248_fiat_types[] = {
    { 0, "GW_FT_INVALID" },
    { 1, "GWE_FT_REPLY" },
    { 2, "GWE_FT_OFHK" },
    { 3, "GWE_FT_ONHK" },
    { 4, "GWE_FT_DIGIT" },
    { 5, "GWE_FT_FLASH" },
    { 6, "GWE_FT_COT" },
    { 7, "GWE_FT_FAX_NTFY" },
    { 8, "GWE_FT_MDM_NTFY" },
    { 0, NULL }
};

static const value_string c15inc_gwe_mgcp_fiat_types[] = {
    { 0, "GW_FT_INVALID" },
    { 1, "GWE_FT_REPLY" },
    { 2, "GWE_FT_OFHK" },
    { 3, "GWE_FT_ONHK" },
    { 4, "GWE_FT_DIGIT" },
    { 5, "GWE_FT_FLASH" },
    { 6, "GWE_FT_COT" },
    { 7, "GWE_FT_FAX_NTFY" },
    { 8, "GWE_FT_MDM_NTFY" },
    { 0, NULL }
};

static const value_string c15inc_gwe_sua_fiat_types[] = {
    { 0, "GW_FT_INVALID" },
    { 1, "GWE_FT_REPLY" },
    { 2, "GWE_FT_OFHK" },
    { 3, "GWE_FT_ONHK" },
    { 4, "GWE_FT_CL_SETUP" },
    { 5, "GWE_FT_CL_PROG" },
    { 6, "GWE_FT_CL_ANS" },
    { 7, "GWE_FT_CL_REL" },
    { 8, "GWE_FT_NTWK_MOD" },
    { 9, "GWE_FT_RV_AVAIL" },
    { 10, "GWE_FT_CL_REDIR" },
    { 11, "GWE_FT_CL_REFER" },
    { 12, "GWE_FT_PTRK_CL_SETUP" },
    { 13, "GWE_FT_CHG_HDL" },
    { 14, "GWE_FT_SUBS_CHG_HDL" },
    { 15, "GWE_FT_INFO" },
    { 16, "GWE_FT_INV_REPL" },
    { 17, "GWE_FT_TGH_STAT" },
    { 0, NULL }
};

static const value_string c15inc_gwe_sip_notify_fiat_types[] = {
    { 0, "GWE_FT_MWI_NOTIFY" },
    { 1, "GWE_FT_REMINDER_NOTIFY" },
    { 2, "GWE_FT_REFER_NOTIFY" },
    { 0, NULL }
};

static const value_string c15inc_gwe_admn_fiat_types[] = {
    { 0, "GWE_FT_INVALID" },
    { 1, "GWE_FT_ADMN_SUBS" },
    { 2, "GWE_FT_ADMN_UNSUBS" },
    { 3, "GWE_FT_ADMN_UPDT_REC_ADDR" },
    { 4, "GWE_FT_ADMN_UA_RESP" },
    { 0, NULL }
};

static const value_string * fiat_name_tables[] = {
    /* correspond to members of c15inc_gwe_task_types */
    NULL, /* corresponds to c15inc_gwe_task_types[0] i.e. GWE_TK_INVALID */
    c15inc_gwe_bc_fiat_types,
    c15inc_gwe_mtce_fiat_types,
    c15inc_gwe_om_fiat_types,
    c15inc_gwe_h248_fiat_types,
    c15inc_gwe_sua_fiat_types,
    c15inc_gwe_mgcp_fiat_types,
    c15inc_gwe_sip_notify_fiat_types,
    c15inc_gwe_admn_fiat_types
};
static const guint8 FIRST_FIAT_NAME_TABLE_INDEX  = 1;  /* First valid index. */
static const guint8 LAST_FIAT_NAME_TABLE_INDEX = 8;

static const value_string c15inc_gwe_types[] = {
    { C15_INC_GWE_NONE, "IN_DATA_NONE" },
    { C15_INC_GWE_REPLY, "REPLY" },
    { C15_INC_GWE_BC_PGI, "BC_PGI" },
    { C15_INC_GWE_MGCP_DLCX, "MGCP_DLCX" },
    { C15_INC_GWE_H248_DIGIT, "H248_DIGIT" },
    { C15_INC_GWE_VOIP_COT, "VOIP_COT" },
    { C15_INC_GWE_NOTIFY, "NOTIFY" },
    { C15_INC_GWE_ADMN_UPDT_REC, "ADMN_UPDT_REC" },
    { C15_INC_GWE_CL_SETUP, "CL_SETUP" },
    { C15_INC_GWE_PTRK_SETUP, "PTRK_SETUP" },
    { C15_INC_GWE_CL_PROG, "CL_PROG" },
    { C15_INC_GWE_CL_ANS, "CL_ANS" },
    { C15_INC_GWE_CL_REL, "CL_REL" },
    { C15_INC_GWE_NTWK_MOD, "NTWK_MOD" },
    { C15_INC_GWE_RV_AVAIL, "RV_AVAIL" },
    { C15_INC_GWE_CL_REDIR, "CL_REDIR" },
    { C15_INC_GWE_CL_REFER, "CL_REFER" },
    { C15_INC_GWE_CHG_HDL, "CHG_HDL" },
    { C15_INC_GWE_SUBS_CHG_HDL, "SUBS_CHG_HDL" },
    { C15_INC_GWE_INFO, "INFO" },
    { C15_INC_GWE_INV_REPL, "INV_REPL" },
    { C15_INC_GWE_ADMN_DN, "ADMN_DN" },
    { C15_INC_GWE_SUA_REPLY, "INC_SUA_REPLY" },
    { C15_INC_GWE_SUA_HNDL, "INC_SUA_HANDL" },
    { C15_INC_GWE_SUA_TGH_STAT, "INC_SUA_TGH_STAT" },
    { 0, NULL }
};
static value_string_ext c15inc_gwe_types_ext = VALUE_STRING_EXT_INIT(c15inc_gwe_types);

/* Protocol for all third-level Inc GWE dissection */
static int proto_c15ch_third_level_inc_gwe = -1;

static int ett_c15ch_third_level_inc_gwe = -1;
static int ett_c15ch_third_level_inc_gwe_sub1 = -1;


/* Fields */
static int hf_c15ch_inc_gwe_admn_dn = -1;
static int hf_c15ch_inc_gwe_admn_dn_ip_gwe_sua_hndl = -1;
static int hf_c15ch_inc_gwe_admn_dn_ip_gwe_digits = -1;


/* Fields */
static int hf_c15ch_inc_gwe_admn_updt = -1;
static int hf_c15ch_inc_gwe_admn_updt_ip_gwe_med_ni = -1;
static int hf_c15ch_inc_gwe_admn_updt_ip_gwe_med_tn = -1;
static int hf_c15ch_inc_gwe_admn_updt_ip_gwe_med_ni_tn = -1;
static int hf_c15ch_inc_gwe_admn_updt_ip_ns_iface = -1;
static int hf_c15ch_inc_gwe_admn_updt_ip_ns_terminal = -1;
static int hf_c15ch_inc_gwe_admn_updt_ip_gwe_new_rec_addr = -1;

/* Fields */
static int hf_c15ch_inc_gwe_bc_pgi = -1;
static int hf_c15ch_inc_gwe_bc_pgi_pbc_conn_num = -1;
static int hf_c15ch_inc_gwe_bc_pgi_pbc_conn_type = -1;
static int hf_c15ch_inc_gwe_bc_pgi_pbc_msg_type = -1;
static int hf_c15ch_inc_gwe_bc_pgi_bc_mode = -1;
static int hf_c15ch_inc_gwe_bc_pgi_bc_pgi_sdp = -1;
static int hf_c15ch_inc_gwe_bc_pgi_bc_pgi_m_port = -1;
static int hf_c15ch_inc_gwe_bc_pgi_pbc_tst_flags = -1;

/* Field Labels */
static const value_string c15_inc_gwe_bc_pgi_pbc_conn_types[] = {
    { 1, "TDM Internetworking" },
    { 2, "Media Portal" },
    { 3, "Conference" },
    { 4, "Optimized Conn" },
    { 0, NULL }
};

/* Subtree */
#if 0
static gint ett_c15ch_inc_gwe_bc_pgi = -1;
#endif

/* Fields */
static int hf_c15ch_inc_gwe_chg_hndl = -1;
static int hf_c15ch_inc_gwe_chg_hndl_ip_gwe_sua_hndl = -1;
static int hf_c15ch_inc_gwe_chg_hndl_ip_gwe_new_hndl = -1;


/* Fields */
static int hf_c15ch_inc_gwe_cl_ans = -1;
static int hf_c15ch_inc_gwe_cl_ans_ip_gwe_sua_hndl = -1;
static int hf_c15ch_inc_gwe_cl_ans_ip_gwe_conn_num= -1;
static int hf_c15ch_inc_gwe_cl_ans_ip_cl_ans_lsdp = -1;
static int hf_c15ch_inc_gwe_cl_ans_ip_cl_ans_m_port = -1;
static int hf_c15ch_inc_gwe_cl_ans_encap_isup = -1;

/* Fields */
static int hf_c15ch_inc_gwe_cl_prog = -1;
static int hf_c15ch_inc_gwe_cl_prog_ip_gwe_sua_hndl = -1;
static int hf_c15ch_inc_gwe_cl_prog_ip_gwe_conn_num= -1;
static int hf_c15ch_inc_gwe_cl_prog_ip_cl_prog_lsdp = -1;
static int hf_c15ch_inc_gwe_cl_prog_ip_cl_prog_m_port = -1;
static int hf_c15ch_inc_gwe_cl_prog_ip_gwe_stat_code = -1;
static int hf_c15ch_inc_gwe_cl_prog_encap_isup = -1;

/* Fields */
static int hf_c15ch_inc_gwe_cl_redir = -1;
static int hf_c15ch_inc_gwe_cl_redir_ip_gwe_sua_hndl = -1;
static int hf_c15ch_inc_gwe_cl_redir_ip_gwe_conn_num = -1;
static int hf_c15ch_inc_gwe_cl_redir_ip_gwe_redir_digits = -1;


/* Fields */
static int hf_c15ch_inc_gwe_cl_refer = -1;
static int hf_c15ch_inc_gwe_cl_refer_ip_gwe_sua_hndl = -1;
static int hf_c15ch_inc_gwe_cl_refer_ip_gwe_conn_num = -1;
static int hf_c15ch_inc_gwe_cl_refer_ip_gwe_trgt_digits = -1;
static int hf_c15ch_inc_gwe_cl_refer_ip_gwe_trgt_ni = -1;
static int hf_c15ch_inc_gwe_cl_refer_ip_gwe_trgt_tn = -1;
static int hf_c15ch_inc_gwe_cl_refer_ip_gwe_trgt_ni_tn = -1;


/* Fields */
static int hf_c15ch_inc_gwe_cl_rel = -1;
static int hf_c15ch_inc_gwe_cl_rel_ip_gwe_sua_hndl = -1;
static int hf_c15ch_inc_gwe_cl_rel_ip_gwe_conn_num = -1;
static int hf_c15ch_inc_gwe_cl_rel_ip_gwe_stat_code = -1;
static int hf_c15ch_inc_gwe_cl_rel_encap_isup = -1;



/* Fields */
static int hf_c15ch_inc_gwe_cl_setup = -1;
static int hf_c15ch_inc_gwe_cl_setup_ip_gwe_sua_hndl = -1;
static int hf_c15ch_inc_gwe_cl_setup_ip_gwe_cled_digits = -1;
static int hf_c15ch_inc_gwe_cl_setup_ip_cl_setup_lsdp = -1;
static int hf_c15ch_inc_gwe_cl_setup_ip_cl_setup_m_port = -1;


/* Fields */
static int hf_c15ch_inc_gwe_h248_digit = -1;
static int hf_c15ch_inc_gwe_h248_digit_ip_gwe_digit = -1;
static int hf_c15ch_inc_gwe_h248_digit_ip_gwe_digit_method = -1;


/* Fields */
static int hf_c15ch_inc_gwe_info = -1;
static int hf_c15ch_inc_gwe_info_ip_gwe_sua_hndl = -1;
static int hf_c15ch_inc_gwe_info_ip_gwe_info_type = -1;
static int hf_c15ch_inc_gwe_info_ip_gwe_info_digit = -1;
static int hf_c15ch_inc_gwe_info_encap_isup_msg_type = -1;

/* value_string arrays to label fields */
/* These two encapsulated isup message types are the only valid ones for this field. */
static const value_string c15ch_inc_gwe_info_encap_isup_msg_types[] = {
    { 13, "Suspend Message" },
    { 14, "Resume Message" },
    { 0, NULL }
};

/* Fields */
static int hf_c15ch_inc_gwe_inv_repl = -1;
static int hf_c15ch_inc_gwe_inv_repl_ip_gwe_sua_hndl = -1;
static int hf_c15ch_inc_gwe_inv_repl_ip_gwe_conn_num = -1;
static int hf_c15ch_inc_gwe_inv_repl_ip_inv_repl_rsdp_ip = -1;
static int hf_c15ch_inc_gwe_inv_repl_ip_inv_repl_rsdp_port = -1;

/* Fields */
static int hf_c15ch_inc_gwe_mgcp_dlcx = -1;
static int hf_c15ch_inc_gwe_mgcp_dlcx_err_code = -1;

/* Fields */
static int hf_c15ch_inc_gwe_notify = -1;
static int hf_c15ch_inc_gwe_notify_ip_gwe_mwi_stat = -1;
static int hf_c15ch_inc_gwe_notify_ip_gwe_digits = -1;

/* Fields */
static int hf_c15ch_inc_gwe_ntwk_mod  = -1;
static int hf_c15ch_inc_gwe_ntwk_mod_ip_gwe_sua_hndl = -1;
static int hf_c15ch_inc_gwe_ntwk_mod_ip_gwe_conn_num= -1;
static int hf_c15ch_inc_gwe_ntwk_mod_ip_ntwk_mod_lsdp = -1;
static int hf_c15ch_inc_gwe_ntwk_mod_ip_ntwk_mod_l_m_port = -1;
static int hf_c15ch_inc_gwe_ntwk_mod_ip_ntwk_mod_rsdp = -1;
static int hf_c15ch_inc_gwe_ntwk_mod_ip_ntwk_mod_r_m_port = -1;
static int hf_c15ch_inc_gwe_ntwk_mod_ip_gwe_stat_code = -1;


/* Fields */
static int hf_c15ch_inc_gwe_ptrk_setup = -1;
static int hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_sua_hndl = -1;
static int hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_cled_digits = -1;
static int hf_c15ch_inc_gwe_ptrk_setup_ip_cl_setup_lsdp = -1;
static int hf_c15ch_inc_gwe_ptrk_setup_ip_cl_setup_m_port = -1;
static int hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_clid_pri = -1;
static int hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_clng_digits = -1;
static int hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_clng_ton = -1;
static int hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_clng_np = -1;
static int hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_alert_info = -1;
static int hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_redir_digits = -1;
static int hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_redir_ton = -1;
static int hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_redir_np = -1;
static int hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_ocn_digits = -1;
static int hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_chrg_digits = -1;
static int hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_chrg_noa = -1;
static int hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_chrg_npi = -1;
static int hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_npdi = -1;
static int hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_rn_digits = -1;
static int hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_cic_digits = -1;
static int hf_c15ch_inc_gwe_ptrk_setup_encap_isup = -1;

/* Fields */
static int hf_c15ch_inc_gwe_reply = -1;
static int hf_c15ch_inc_gwe_reply_ip_gwe_msg_type = -1;
static int hf_c15ch_inc_gwe_reply_ip_gwe_stat_code = -1;
static int hf_c15ch_inc_gwe_reply_ip_gwe_conn_num = -1;
static int hf_c15ch_inc_gwe_reply_nw_mdcn_lsdp_ip = -1;
static int hf_c15ch_inc_gwe_reply_nw_mdcn_lsdp_port = -1;
static int hf_c15ch_inc_gwe_reply_nw_mdcn_rsdp_ip = -1;
static int hf_c15ch_inc_gwe_reply_nw_mdcn_rsdp_port = -1;

/* Fields */
static int hf_c15ch_inc_gwe_rv_avail = -1;
static int hf_c15ch_inc_gwe_rv_avail_ip_gwe_sua_hndl = -1;
static int hf_c15ch_inc_gwe_rv_avail_ip_gwe_conn_num = -1;
static int hf_c15ch_inc_gwe_rv_avail_ip_gwe_info_len = -1;

/* Fields */
static int hf_c15ch_inc_gwe_sua_hndl = -1;
static int hf_c15ch_inc_gwe_sua_hndl_ip_gwe_sua_hndl = -1;

/* Fields */
static int hf_c15ch_inc_gwe_sua_reply = -1;
static int hf_c15ch_inc_gwe_sua_reply_ip_gwe_sua_hndl = -1;
static int hf_c15ch_inc_gwe_sua_reply_ip_gwe_msg_type = -1;
static int hf_c15ch_inc_gwe_sua_reply_ip_gwe_stat_code = -1;
static int hf_c15ch_inc_gwe_sua_reply_ip_gwe_conn_num = -1;
static int hf_c15ch_inc_gwe_sua_reply_nw_mdcn_lsdp_ip = -1;
static int hf_c15ch_inc_gwe_sua_reply_nw_mdcn_lsdp_port = -1;
static int hf_c15ch_inc_gwe_sua_reply_nw_mdcn_rsdp_ip = -1;
static int hf_c15ch_inc_gwe_sua_reply_nw_mdcn_rsdp_port = -1;

/* Fields */
static int hf_c15ch_inc_gwe_subs_chg_hndl = -1;
static int hf_c15ch_inc_gwe_subs_chg_hndl_ip_gwe_sua_hndl = -1;
static int hf_c15ch_inc_gwe_subs_chg_hndl_ip_gwe_new_hndl = -1;
static int hf_c15ch_inc_gwe_subs_chg_hndl_ip_gwe_med_ni = -1;
static int hf_c15ch_inc_gwe_subs_chg_hndl_ip_gwe_med_tn = -1;
static int hf_c15ch_inc_gwe_subs_chg_hndl_ip_gwe_med_ni_tn = -1;

/* Fields */
static int hf_c15ch_inc_gwe_tgh_stat = -1;
static int hf_c15ch_inc_gwe_tgh_stat_ip_gwe_sua_hndl = -1;
static int hf_c15ch_inc_gwe_tgh_stat_ip_gwe_tgh_state = -1;

/* value_string arrays to label fields */

static const value_string tgh_state_types[] = {
    { 0, "In-Service" },
    { 1, "Acquiring" },
    { 2, "Out-of-Service" },
    { 0, NULL }
};

/* Fields */
static int hf_c15ch_inc_gwe_voip_cot = -1;
static int hf_c15ch_inc_gwe_voip_cot_ip_gwe_pass_code = -1;

/* Field Labels */
const true_false_string c15_inc_gwe_voip_cot_ip_gwe_pass_code_types = {
       "Success", /*string for 1*/
       "Failure"  /*string for 0*/
};

#if 0
/* Subtree */
static gint ett_c15ch_inc_gwe_voip_cot = -1;
#endif

/* out gwe */

#define C15_OUT_GWE_NONE       0
#define C15_OUT_GWE_DIGIT_SCAN 1
#define C15_OUT_GWE_CONN_NUM   2
#define C15_OUT_GWE_MK_CONN    3
#define C15_OUT_GWE_MD_CONN    4
#define C15_OUT_GWE_CALL_ANS   5
#define C15_OUT_GWE_CALL_SETUP 6
#define C15_OUT_GWE_CALL_PROG  7
#define C15_OUT_GWE_CALL_NOTIFY 8
#define C15_OUT_GWE_CALL_REL    9
#define C15_OUT_GWE_UPDT_NI_TN 10
#define C15_OUT_GWE_PCM_DATA   11
#define C15_OUT_GWE_BLF_DATA   12
#define C15_OUT_GWE_COT        13
#define C15_OUT_GWE_RING_LINE  14
#define C15_OUT_GWE_AUDIT_CONN 15
#define C15_OUT_GWE_SAC_SUB_VALID  16
#define C15_OUT_GWE_SAC_NOTIFY     17
#define C15_OUT_GWE_SAC_LIST_ENTRY 18
#define C15_OUT_GWE_RV_SUBS_DATA   19
#define C15_OUT_GWE_UPDT_REC_ADDR  20
#define C15_OUT_GWE_DEL_SUBS_UA    21
#define C15_OUT_GWE_LINE_SPRVSN    22
#define C15_OUT_GWE_SIP_INFO       23
#define C15_OUT_GWE_SIP_REFER      24

static int ett_c15ch_third_level_out_gwe = -1;
static int ett_c15ch_third_level_out_gwe_sub1 = -1;
static int ett_c15ch_third_level_out_gwe_sub2 = -1;

static int proto_c15ch_third_level_out_gwe = -1;

/* Dissector Table */
static dissector_table_t c15ch_out_gwe_dissector_table;

/* Fields */
static int hf_c15ch_out_gwe = -1;
static int hf_c15ch_out_gwe_ni = -1;
static int hf_c15ch_out_gwe_tn = -1;
static int hf_c15ch_out_gwe_ni_tn = -1;
static int hf_c15ch_out_gwe_op_gwe_msg_type = -1;
static int hf_c15ch_out_gwe_op_gwe_protocol = -1;
static int hf_c15ch_out_gwe_op_sua_hndl = -1;
static int hf_c15ch_out_gwe_gwe_data_type = -1;

#if 0
/* Subtree */
static gint ett_c15ch_out_gwe = -1;
static gint ett_c15ch_out_gwe_sub_ni_tn = -1;
#endif

/* value labels for fields*/
static const value_string c15_out_gwe_data_types[] = {
    { C15_OUT_GWE_NONE, "OUT_DATA_NONE" },
    { C15_OUT_GWE_DIGIT_SCAN, "DIGIT_SCAN" },
    { C15_OUT_GWE_CONN_NUM, "CONN_NUM" },
    { C15_OUT_GWE_MK_CONN, "MK_CONN" },
    { C15_OUT_GWE_MD_CONN, "MD_CONN" },
    { C15_OUT_GWE_CALL_ANS, "CALL_ANS" },
    { C15_OUT_GWE_CALL_SETUP, "CALL_SETUP" },
    { C15_OUT_GWE_CALL_PROG, "CALL_PROG" },
    { C15_OUT_GWE_CALL_NOTIFY, "CALL_NOTIFY" },
    { C15_OUT_GWE_CALL_REL, "CALL_REL" },
    { C15_OUT_GWE_UPDT_NI_TN, "UPDT_NI_TN" },
    { C15_OUT_GWE_PCM_DATA, "PCM_DATA" },
    { C15_OUT_GWE_BLF_DATA, "BLF_DATA" },
    { C15_OUT_GWE_COT, "GWE_OUT_COT" },
    { C15_OUT_GWE_RING_LINE, "RING_LINE" },
    { C15_OUT_GWE_AUDIT_CONN, "AUDIT_CONN" },
    { C15_OUT_GWE_SAC_SUB_VALID, "SAC_SUB_VALID" },
    { C15_OUT_GWE_SAC_NOTIFY, "SAC_NOTIFY" },
    { C15_OUT_GWE_SAC_LIST_ENTRY, "SAC_LIST_ENTRY" },
    { C15_OUT_GWE_RV_SUBS_DATA, "RV_SUBS_DATA" },
    { C15_OUT_GWE_UPDT_REC_ADDR, "UPDT_REC_ADDR" },
    { C15_OUT_GWE_DEL_SUBS_UA, "DEL_SUBS_UA" },
    { C15_OUT_GWE_LINE_SPRVSN, "LINE_SPRVSN" },
    { C15_OUT_GWE_SIP_INFO, "SIP_INFO" },
    { C15_OUT_GWE_SIP_REFER, "SIP_REFER" },
    { 0, NULL }
};
static value_string_ext c15_out_gwe_data_types_ext = VALUE_STRING_EXT_INIT(c15_out_gwe_data_types);

static const value_string c15_out_gwe_protocol_types[] = {
    { 0, "H248" },
    { 1, "SIP" },
    { 2, "MGCP" },
    { 3, "NCS" },
    { 0, NULL }
};

static const value_string c15_out_gwe_msg_types[] = {
    { 0, "GWE_MSG_INVALID" },
    { 1, "GWE_DIGIT_SCAN" },
    { 2, "GWE_RING_LINE" },
    { 3, "GWE_LINE_SPRVSN" },
    { 4, "GWE_APPLY_TONE" },
    { 5, "GWE_REMOVE_TONE" },
    { 6, "GWE_PHYS_MK_CONN" },
    { 7, "GWE_PHYS_BK_CONN" },
    { 8, "GWE_PHYS_MV_CONN" },
    { 9, "GWE_PHYS_MD_CONN" },
    { 10, "GWE_NTWK_MK_CONN" },
    { 11, "GWE_NTWK_BK_CONN" },
    { 12, "GWE_NTWK_MD_CONN" },
    { 13, "GWE_NODE_SVC_CHG" },
    { 14, "GWE_LINE_SVC_CHG" },
    { 15, "GWE_SEND_RESP" },
    { 16, "GWE_AUDIT_LINE" },
    { 17, "GWE_MSG_PASSTHRU" },
    { 18, "GWE_CALL_ANS" },
    { 19, "GWE_CALL_SETUP" },
    { 20, "GWE_CALL_PROG" },
    { 21, "GWE_CALL_REL" },
    { 22, "GWE_GET_RV_INFO" },
    { 23, "GWE_PUT_RV_INFO" },
    { 24, "GWE_CALL_NOTIFY" },
    { 25, "GWE_UPDT_NI_TN" },
    { 26, "GWE_UA_INFO_XFER" },
    { 27, "GWE_PUT_PCM_DATA" },
    { 28, "GWE_REBUILD_OK" },
    { 29, "GWE_TRK_SVC_CHG" },
    { 30, "GWE_STRT_COT" },
    { 31, "GWE_STOP_COT" },
    { 32, "GWE_RECV_COT" },
    { 33, "GWE_SUBTRACT_ALL" },
    { 34, "GWE_AUDIT_TRK" },
    { 35, "GWE_AUDIT_GW" },
    { 36, "GWE_AUDIT_ROOT" },
    { 37, "GWE_WC_LINE_OFHK" },
    { 38, "GWE_AUD_ROOT_CXTS" },
    { 39, "GWE_SUB_ALL_CXT" },
    { 40, "GWE_SAC_SUB_VALID" },
    { 41, "GWE_SAC_NOTIFY" },
    { 42, "GWE_DEL_NONE" },
    { 43, "GWE_AUDIT_CONN" },
    { 44, "GWE_SAC_LIST_ENTRY" },
    { 45, "GWE_PUT_BLF_DATA" },
    { 46, "GWE_PUT_RV_SUBS_DATA" },
    { 47, "GWE_GET_RV_SUBS_DATA" },
    { 48, "GWE_STORE_RV_SUBS_DATA" },
    { 49, "GWE_DEL_RV_SUBS_DATA" },
    { 50, "GWE_UPDT_REC_ADDR" },
    { 51, "GWE_MGCP_DLCX" },
    { 52, "GWE_DEL_SUBS_UA" },
    { 53, "GWE_SUBS_UA_QUE" },
    { 54, "GWE_SIP_INFO" },
    { 55, "GWE_SIP_REFER" },
    { 56, "GWE_UPDT_SDP" },
    { 0, NULL }
};
static value_string_ext c15_out_gwe_msg_types_ext = VALUE_STRING_EXT_INIT(c15_out_gwe_msg_types);

/* Fields */
static int hf_c15ch_out_gwe_audit_conn = -1;
static int hf_c15ch_out_gwe_audit_conn_ni = -1;
static int hf_c15ch_out_gwe_audit_conn_tn = -1;
static int hf_c15ch_out_gwe_audit_conn_ni_tn = -1;
static int hf_c15ch_out_gwe_audit_conn_context = -1;

/* Fields */
static int hf_c15ch_out_gwe_blf_data = -1;
static int hf_c15ch_out_gwe_blf_data_rb_ua_handle = -1;
static int hf_c15ch_out_gwe_blf_data_rb_type = -1;
static int hf_c15ch_out_gwe_blf_data_med_ni = -1;
static int hf_c15ch_out_gwe_blf_data_med_tn = -1;
static int hf_c15ch_out_gwe_blf_data_med_ni_tn = -1;
static int hf_c15ch_out_gwe_blf_data_rb_ni = -1;
static int hf_c15ch_out_gwe_blf_data_rb_tn = -1;
static int hf_c15ch_out_gwe_blf_data_rb_ni_tn = -1;


/* Fields */
static int hf_c15ch_out_gwe_call_ans = -1;
static int hf_c15ch_out_gwe_call_ans_conn_num = -1;
static int hf_c15ch_out_gwe_call_ans_op_cl_ans_rsdp_ip = -1;
static int hf_c15ch_out_gwe_call_ans_op_cl_ans_rsdp_port = -1;
static int hf_c15ch_out_gwe_call_ans_encap_isup = -1;

/* Fields */
static int hf_c15ch_out_gwe_call_notify = -1;
static int hf_c15ch_out_gwe_call_notify_op_gwe_mwi = -1;
static int hf_c15ch_out_gwe_call_notify_status_code = -1;


/* Fields */
static int hf_c15ch_out_gwe_call_prog = -1;
static int hf_c15ch_out_gwe_call_prog_conn_num = -1;
static int hf_c15ch_out_gwe_call_prog_op_gwe_stat_code = -1;
static int hf_c15ch_out_gwe_call_prog_encap_isup = -1;

/* Fields */
static int hf_c15ch_out_gwe_call_rel = -1;
static int hf_c15ch_out_gwe_call_rel_status_code = -1;
static int hf_c15ch_out_gwe_call_rel_encap_isup = -1;

/* Fields */
static int hf_c15ch_out_gwe_call_setup = -1;
static int hf_c15ch_out_gwe_call_setup_conn_num = -1;
static int hf_c15ch_out_gwe_call_setup_op_cl_ans_rsdp_ip = -1;
static int hf_c15ch_out_gwe_call_setup_op_cl_ans_rsdp_port = -1;

static int hf_c15ch_out_gwe_call_setup_op_gwe_redir_digits = -1;

static int hf_c15ch_out_gwe_call_setup_op_gwe_rdir_ton = -1;
static int hf_c15ch_out_gwe_call_setup_op_gwe_rdir_np = -1;

static int hf_c15ch_out_gwe_call_setup_op_gwe_ocn_digits = -1;

static int hf_c15ch_out_gwe_call_setup_op_gwe_chrg_digits = -1;

static int hf_c15ch_out_gwe_call_setup_op_gwe_chrg_noa = -1;
static int hf_c15ch_out_gwe_call_setup_op_gwe_chrg_npi = -1;

static int hf_c15ch_out_gwe_call_setup_encap_isup = -1;


/* Fields */
static int hf_c15ch_out_gwe_conn_num = -1;
static int hf_c15ch_out_gwe_conn_num_out_gwe_conn_num = -1;


/* Fields */
static int hf_c15ch_out_gwe_del_subs_ua = -1;
static int hf_c15ch_out_gwe_del_subs_ua_op_sip_ua_hndl = -1;


/* Fields */
static int hf_c15ch_out_gwe_digit_scan = -1;
static int hf_c15ch_out_gwe_digit_scan_voip_dgmp_override = -1;
static int hf_c15ch_out_gwe_digit_scan_actv_dgmp = -1;
static int hf_c15ch_out_gwe_digit_scan_op_gwe_digit_scan_tone = -1;
static int hf_c15ch_out_gwe_digit_scan_op_gwe_tone_type = -1;
static int hf_c15ch_out_gwe_digit_scan_op_gwe_tone_to = -1;
static int hf_c15ch_out_gwe_digit_scan_op_gwe_digit_flash = -1;

/* Fields */
static int hf_c15ch_out_gwe_line_sprvsn = -1;
static int hf_c15ch_out_gwe_line_sprvsn_op_gwe_ofhk_event = -1;
static int hf_c15ch_out_gwe_line_sprvsn_op_gwe_onhk_event = -1;
static int hf_c15ch_out_gwe_line_sprvsn_op_gwe_flhk_event = -1;


/* Fields */
static int hf_c15ch_out_gwe_md_conn = -1;
static int hf_c15ch_out_gwe_md_conn_conn_num = -1;
static int hf_c15ch_out_gwe_md_conn_status_code = -1;
static int hf_c15ch_out_gwe_md_conn_op_gwe_mode = -1;

/* Fields */
static int hf_c15ch_out_gwe_mk_conn = -1;
static int hf_c15ch_out_gwe_mk_conn_conn_num = -1;
static int hf_c15ch_out_gwe_mk_conn_op_mk_conn_rsdp_ip = -1;
static int hf_c15ch_out_gwe_mk_conn_op_mk_conn_rsdp_port = -1;

/* Fields */
static int hf_c15ch_out_gwe_out_cot = -1;
static int hf_c15ch_out_gwe_out_cot_ni = -1;
static int hf_c15ch_out_gwe_out_cot_tn = -1;
static int hf_c15ch_out_gwe_out_cot_ni_tn = -1;


/* Fields */
static int hf_c15ch_out_gwe_pcm_data = -1;
static int hf_c15ch_out_gwe_pcm_data_rb_ua_handle_near = -1;
static int hf_c15ch_out_gwe_pcm_data_rb_ua_handle_far  = -1;

/* Fields */
static int hf_c15ch_out_gwe_ring_line = -1;
static int hf_c15ch_out_gwe_ring_line_op_gwe_display = -1;
static int hf_c15ch_out_gwe_ring_line_op_gwe_display_chars = -1;


/* Fields */
static int hf_c15ch_out_gwe_rv_subs_data = -1;
static int hf_c15ch_out_gwe_rv_subs_data_rb_fe_ni = -1;
static int hf_c15ch_out_gwe_rv_subs_data_rb_fe_tn = -1;
static int hf_c15ch_out_gwe_rv_subs_data_rb_fe_ni_tn = -1;


/* Fields */
static int hf_c15ch_out_gwe_sac_list_entry = -1;
static int hf_c15ch_out_gwe_sac_list_entry_op_gwe_med_uri = -1;


/* Fields */
static int hf_c15ch_out_gwe_sac_notify = -1;
static int hf_c15ch_out_gwe_sac_notify_op_gwe_blf_state = -1;
static int hf_c15ch_out_gwe_sac_notify_op_gwe_subs_state = -1;


/* Fields */
static int hf_c15ch_out_gwe_sac_sub_valid = -1;
static int hf_c15ch_out_gwe_sac_sub_valid_op_gwe_subs_valid = -1;
static int hf_c15ch_out_gwe_sac_sub_valid_op_gwe_num_list_items = -1;


/* Fields */
static int hf_c15ch_out_gwe_sip_info = -1;
static int hf_c15ch_out_gwe_sip_info_op_gwe_sip_info = -1;
static int hf_c15ch_out_gwe_sip_info_op_gwe_sip_info_type = -1;

/* Fields */
static int hf_c15ch_out_gwe_sip_refer = -1;
static int hf_c15ch_out_gwe_sip_refer_op_gwe_refer_ua_hndl = -1;

/* Fields */
static int hf_c15ch_out_gwe_update_ni_tn = -1;
static int hf_c15ch_out_gwe_update_ni_tn_ni = -1;
static int hf_c15ch_out_gwe_update_ni_tn_tn = -1;
static int hf_c15ch_out_gwe_update_ni_tn_ni_tn = -1;


/* Fields */
static int hf_c15ch_out_gwe_update_rec_addr = -1;
static int hf_c15ch_out_gwe_update_rec_addr_op_new_rec_addr = -1;

/* tone */

#define C15_TONE_TONE_CONTROL 1
#define C15_TONE_GIVE_TONE    2
#define C15_TONE_OPLS         3
#define C15_TONE_COT          4
#define C15_TONE_CPM          5
#define C15_TONE_RCVR         6
#define C15_TONE_MADN_RING    7
#define C15_TONE_TIMEOUT      8

static const value_string tone_types[] = {
    { 0, "None" },
    { 1, "Rgbk" },
    { 2, "Ovflw" },
    { 3, "Dial" },
    { 4, "Howler/Rcvr Off Hook" },
    { 5, "Busy" },
    { 6, "Drop" },
    { 7, "COS_H" },
    { 8, "COS_L" },
    { 9, "Short Howl/Short Rcvr Off Hook" },
    { 10, "Con Rgbk" },
    { 11, "Low" },
    { 12, "High" },
    { 13, "Short Busy" },
    { 14, "Short Ovflw" },
    { 15, "Short Dial" },
    { 16, "Test 5 Sec" },
    { 17, "Test 9 Sec" },
    { 18, "Quiet" },
    { 19, "Quiet 1 Sec" },
    { 20, "Short Rgbk" },
    { 21, "Code2 Rgbk" },
    { 22, "Spec Dial" },
    { 23, "Confirmation" },
    { 24, "Call Waiting" },
    { 25, "1 Blip (Dial Speed Test)" },
    { 26, "2 Blips (Dial Speed Test)" },
    { 27, "3 Blips (Dial Speed Test)" },
    { 28, "ESB Ovflw" },
    { 29, "Src ROH" },
    { 30, "Con Busy" },
    { 31, "Con Rgbk" },
    { 32, "Short Rgbk" },
    { 33, "SWT" },
    { 34, "DWT" },
    { 35, "DROH" },
    { 36, "OPLSR" },
    { 37, "Barge-In" },
    { 38, "Stutter" },
    { 39, "CLID" },
    { 40, "NIC Dime A" },
    { 41, "QRT Doll A" },
    { 42, "NIC Dime B" },
    { 43, "QRT Doll B" },
    { 44, "DRCWT CAS" },
    { 45, "CWT CAS" },
    { 46, "Delay DT" },
    { 47, "P-Phone Norm Ring" },
    { 48, "P-Phone Distinct Ring" },
    { 49, "CWID QT" },
    { 50, "Teen CWT" },
    { 51, "TN2 CWT" },
    { 52, "SDR CWT" },
    { 53, "Teen CAS" },
    { 54, "TN2 CAS" },
    { 55, "SDR CAS" },
    { 56, "P-Phone Cont Ring (First Dnld Tone)" },
    { 57, "P-Phone DTMF Dig 1" },
    { 58, "P-Phone DTMF Dig 2" },
    { 59, "P-Phone DTMF Dig 3" },
    { 60, "P-Phone DTMF Dig 4" },
    { 61, "P-Phone DTMF Dig 5" },
    { 62, "P-Phone DTMF Dig 6" },
    { 63, "P-Phone DTMF Dig 7" },
    { 64, "P-Phone DTMF Dig 8" },
    { 65, "P-Phone DTMF Dig 9" },
    { 66, "P-Phone DTMF *" },
    { 67, "P-Phone DTMF Dig 0" },
    { 68, "P-Phone DTMF #" },
    { 69, "CAS" },
    { 70, "Cust (CTN1)" },
    { 71, "Cust (CTN2)" },
    { 72, "Cust (CTN3)" },
    { 73, "Cust (CTN4)" },
    { 74, "Cust (CTN5)" },
    { 0, NULL }
};
static value_string_ext tone_types_ext = VALUE_STRING_EXT_INIT(tone_types);


/* Dissector Table */
static dissector_table_t c15ch_tone_dissector_table;

/* Fields */
static int hf_c15ch_tone = -1;
static int hf_c15ch_tone_msg_type = -1;

/* Subtree */
static gint ett_c15ch_third_level_tone = -1; /* for third level dissection */
static gint ett_c15ch_third_level_tone_sub1 = -1;

/* Protocol */
static int proto_c15ch_third_level_tone = -1;
/* Fields */
static int hf_c15ch_tone_cot_control = -1;
static int hf_c15ch_tone_cot_control_device_id = -1;
static int hf_c15ch_tone_cot_control_cot_task = -1;
static int hf_c15ch_tone_cot_control_dest_h248 = -1;
static int hf_c15ch_tone_cot_control_srce_h248 = -1;
static int hf_c15ch_tone_cot_control_svc_channel = -1;

/* value labels for fields*/
static const value_string c15_tone_msg_types[] = {
    { C15_TONE_TONE_CONTROL, "TONE_CONTROL" },
    { C15_TONE_GIVE_TONE, "GIVE_TONE" },
    { C15_TONE_OPLS, "OPLS" },
    { C15_TONE_COT, "COT" },
    { C15_TONE_CPM, "CPM" },
    { C15_TONE_RCVR, "RCVR" },
    { C15_TONE_MADN_RING, "MADN_RING" },
    { C15_TONE_TIMEOUT, "TIMEOUT" },
    { 0, NULL }
};

/* Fields */
static int hf_c15ch_tone_cpm = -1;
static int hf_c15ch_tone_cpm_loop_type = -1;
static int hf_c15ch_tone_cpm_device_id = -1;
static int hf_c15ch_tone_cpm_tone_type = -1;


#if 0
/* Subtree */
static gint ett_c15ch_tone_cpm = -1;
#endif

/* labels for loop type */
static const value_string loop_types[] = {
    { 0, "INVALID" },
    { 1, "PE" },
    { 2, "REM" },
    { 3, "DCM" },
    { 4, "SCM" },
    { 5, "LCM" },
    { 6, "SCI" },
    { 7, "SCU" },
    { 8, "VDS30" },
    { 9, "RSCS" },
    { 10, "DS1" },
    { 11, "SMA" },
    { 12, "HUB" },
    { 13, "PRI" },
    { 14, "PGI" },
    { 15, "GWE" },
    { 0, NULL }
};

/* labels for device type */
static const value_string device_types[] = {
    { 0, "CALL_REG" },
    { 1, "SRCE" },
    { 2, "DEST" },
    { 3, "TONE_SRCE" },
    { 4, "RCVR_SRCE" },
    { 5, "TONE_DEST" },
    { 6, "RCVR_DEST" },
    { 7, "CLNG_NUM_BUF" },
    { 8, "TEMP_ID1" },
    { 9, "TEMP_ID2" },
    { 10, "PEPR_SRCE" },
    { 11, "PEPR_DEST" },
    { 12, "BILLING_REG_1" },
    { 13, "BILLING_REG_2" },
    { 14, "BILLING_REG_3" },
    { 15, "BILLING_REG_4" },
    { 16, "BILLING_REG_5" },
    { 17, "BILLING_REG_6" },
    { 18, "ACFW_DIG_BUFF" },
    { 19, "CR_ATR" },
    { 20, "DR_ATR" },
    { 21, "DEV_MAIN_REG" },
    { 22, "TSMS_BUFFER" },
    { 23, "VFG_REG" },
    { 24, "SFTR_BUFF" },
    { 25, "END_TO_END_DIG" },
    { 26, "DEST2" },
    { 27, "TONE_DEST2" },
    { 28, "AIN_REGISTER" },
    { 29, "AIN_STR_BUFFER" },
    { 30, "AUX_BUFF" },
    { 0, NULL },
};
static value_string_ext device_types_ext = VALUE_STRING_EXT_INIT(device_types);


/* Fields */
static int hf_c15ch_tone_give_tone = -1;
static int hf_c15ch_tone_give_tone_tone_id = -1;
static int hf_c15ch_tone_give_tone_tone_type = -1;

/* Fields */
static int hf_c15ch_tone_madn_ring = -1;
static int hf_c15ch_tone_madn_ring_device_id = -1;
static int hf_c15ch_tone_madn_ring_tone_type = -1;

/* Fields */
static int hf_c15ch_tone_opls = -1;
static int hf_c15ch_tone_opls_svce_from_ni = -1;
static int hf_c15ch_tone_opls_svce_to_ni = -1;
static int hf_c15ch_tone_opls_svce_to_ni_tn = -1;
static int hf_c15ch_tone_opls_svce_to_tn = -1;
static int hf_c15ch_tone_opls_digits = -1;


/* Fields */
static int hf_c15ch_tone_rcvr = -1;
static int hf_c15ch_tone_rcvr_rcvr_id = -1;
static int hf_c15ch_tone_rcvr_conn_to_ni = -1;
static int hf_c15ch_tone_rcvr_conn_to_ni_tn = -1;
static int hf_c15ch_tone_rcvr_conn_to_tn = -1;


/* Fields */
static int hf_c15ch_tone_timeout = -1;
static int hf_c15ch_tone_timeout_device_id = -1;
static int hf_c15ch_tone_timeout_service_pm = -1;
static int hf_c15ch_tone_timeout_service_ni = -1;
static int hf_c15ch_tone_timeout_service_ni_tn = -1;
static int hf_c15ch_tone_timeout_service_tn = -1;
static int hf_c15ch_tone_timeout_gw_provided = -1;
static int hf_c15ch_tone_timeout_gw_service_tone_type_or_from_ni = -1;


/* Fields */
static int hf_c15ch_tone_tone_control = -1;
static int hf_c15ch_tone_tone_control_device_id = -1;
static int hf_c15ch_tone_tone_control_tone_type = -1;


/* util functions */
/* static void add_digits_string(int hf, tvbuff_t *tvb, proto_tree *tree,
                    guint first_offset, guint num_digits, guint max_num_digits,
                    guint offset_from_digits_to_consume )
    Function: Add a string of telephony digits, read from a tvbuff_t as a field to a
              given proto_tree.
              The number of digits in the string is typically given in a number before the
              start of the digits.
    Parameters:
    hf is the field number of the proto_tree corresponding to storage for the digits.
    tvb is the tvbuff_t containing the data to be added.
    tree is the proto_tree to be modified.
    first_offset is the offset from the beginning of the tvbuff_t where the telephony digits
        actually begin.  If (first_offset >= tvb_length(tvb)) then the function does nothing.
    num_digits is the number of digits that were actually stored in the relevant part of tvb
       This value was probably determined by reading the field in the tvb just before where the
       string of digits begins.    This will be used to actually allocate storage for the string.
       max_num_digits is the maximum number of digits that the protocol indicates the
       string of digits could be.

      max_num_digits is used in a call to proto_tree_add_string().

    offset_from_digits_to_consume: This number is substracted from first_offset to give the location
        where the num_digits field was read e.g.
        offset_from_digits_to_consume == 1 if length is given in one byte just before digits
        offset_from_digits_to_consume == 4 if length is given in four bytes just before digits
        offset_from_digits_to_consume == 0 if no bytes before the digits are to be consumed
        Note that the offset_from_digits_to_consume method is used in order to properly indicate where
        the data came from that was used to determine the digits field.
        If (offset_from_digits_to_consume > first_offset), then the offset parameter is
        ignored and the display will indicate that the data used began at first_offset (equivalent
        to offset_from_digits_to_consume of 0).
*/
static void add_digits_string(int hf, tvbuff_t *tvb, proto_tree *tree,
                    guint first_offset, guint num_digits, guint max_num_digits, guint offset_from_digits_to_consume )
{
    char * ch_buff = NULL;
    guint curr_offset;
    guint buff_index;
    guint curr_digit;
    const char ZERO_C = '0';
    if (max_num_digits < num_digits)
    {
        return;
    }

    if (first_offset < offset_from_digits_to_consume)
    {
        offset_from_digits_to_consume = 0;
    }
    ch_buff = (char *) wmem_alloc(wmem_packet_scope(), num_digits + 1); /*include space for terminating null*/
    for ( curr_offset = first_offset, buff_index = 0; buff_index < num_digits; curr_offset++, buff_index++ )
    {
        curr_digit = tvb_get_guint8(tvb, curr_offset);

        if ( curr_digit < 10 )
        {
            /* decimal digit case */
            ch_buff[ buff_index ] = ZERO_C + curr_digit;
        }
        else
            {
                switch( curr_digit )
                {
                    case(10):
                        ch_buff[ buff_index ] = 'A';
                        break;
                    case(11):
                        ch_buff[ buff_index ] = '*';
                        break;
                    case(12):
                        ch_buff[ buff_index ] = '#';
                        break;
                    case(15):
                        ch_buff[ buff_index ] = 'D';
                        break;
                    default: /* includes 13 and 14 */
                        ch_buff[ buff_index ] = '?';
                }
            }
    }
    ch_buff[ num_digits ] = '\0';
    /* we are consuming all data from (first_offset - offset_from_start_to_consume) to (first_offset + max_num_digits) */

    proto_tree_add_string(tree, hf,
                tvb, first_offset - offset_from_digits_to_consume, max_num_digits + 1, ch_buff);
}


/* static void add_digits_string_info_col( tvbuff_t *tvb, guint first_offset,
                                    guint num_digits, packet_info *pinfo );
    Function: Append a string of telephony digits, read from a tvbuff_t, to the
              string displayed in COL_INFO, for pinfo.
    Parameters:
        tvb: tvbuff_t containing the digit data.
        first_offset: The offset from the beginning of the tvb where the digits begin.

        num_digits : number of digits to be read from tvb and put into the INFO column.



        pinfo : the packet_info structure containing the INFO column to be modified.
    */
static void add_digits_string_info_col(tvbuff_t *tvb,
                    guint first_offset, guint num_digits,
                    packet_info *pinfo)
{
    /* first_offset is where the list of digits actually begins in the packet */
    /* num_digits is the actual number of digits in the string */
    char * ch_buff;
    guint i;
    const char ZERO_C = '0';

    tvb_ensure_bytes_exist(tvb, first_offset, num_digits);
    ch_buff = (char *) wmem_alloc(wmem_packet_scope(), num_digits + 1); /*include space for terminating null*/
    for ( i = 0; i < num_digits; i++ )
    {
        guint curr_digit = tvb_get_guint8(tvb, i + first_offset);

        if ( curr_digit < 10 )
        {
            /* decimal digit case */
            ch_buff[ i ] = ZERO_C + curr_digit;
        }
        else
        {
            switch( curr_digit )
            {
                case(10):
                    ch_buff[ i ] = 'A';
                    break;
                case(11):
                    ch_buff[ i ] = '*';
                    break;
                case(12):
                    ch_buff[ i ] = '#';
                    break;
                case(15):
                    ch_buff[ i ] = 'D';
                    break;
                default: /* includes 13 and 14 */
                    ch_buff[ i ] = '?';
            }
        }
    }
    ch_buff[ num_digits ] = '\0';
    col_append_str(pinfo->cinfo, COL_INFO, ch_buff);
}

/* static void add_string_field( proto_tree * p_tree, tvbuff_t * tvb,
                                guint str_start, guint max_str_len,
                                int hf_num )

   Function: add an ascii string, read from a tvbuff_t, as a field to a given proto_tree

   Parameters:
   p_tree is the proto_tree to be added to

   tvb is the tvbuff_t containing the data to be placed into a string field of p_tree

   str_start is the position in tvb where the string data begins.




   hf_num is the field number for p_tree which is used for the string
*/
static void add_string_field( proto_tree * p_tree, tvbuff_t * tvb,
                                guint str_start, guint max_str_len,
                                int hf_num )
{
    guchar *field_stringz;
    guint len;

    if (max_str_len == 0)
    {
        max_str_len = 1;
    }


    field_stringz = tvb_get_stringz_enc(wmem_packet_scope(), tvb, str_start, &len, ENC_ASCII);
    if ( len <= 1 )
    {
        proto_tree_add_string(p_tree, hf_num,
            tvb, str_start, max_str_len, " ");
    }
    else
    {
        if ( len > max_str_len )
        {
            field_stringz[ max_str_len - 1 ] = '\0';
        }
        proto_tree_add_string(p_tree, hf_num,
                tvb, str_start, max_str_len, field_stringz);
    }
}

/* dissect functions */
/* heartbeat is its own distinct dissector with a distinct ethertype */
static int dissect_c15ch_hbeat(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_hbeat_tree = NULL;
    col_clear(pinfo->cinfo, COL_INFO);

    col_set_str(pinfo->cinfo, COL_PROTOCOL, "C15CH_HBEAT");

    if (tree)
    {
        ti = proto_tree_add_item(tree, proto_c15ch_hbeat, tvb, 0, 62, ENC_NA);
        c15ch_hbeat_tree = proto_item_add_subtree(ti, ett_c15ch_hbeat);
        add_string_field( c15ch_hbeat_tree, tvb, 10, 25, hf_c15ch_hbeat_clli );
        proto_tree_add_item(c15ch_hbeat_tree, hf_c15ch_hbeat_primary,  tvb, 35, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_hbeat_tree, hf_c15ch_hbeat_secondary,  tvb, 36, 1, ENC_BIG_ENDIAN);
        add_string_field( c15ch_hbeat_tree, tvb, 37, 25, hf_c15ch_hbeat_interface );
    }

    /* Return the amount of data this dissector was able to dissect */
    return tvb_reported_length(tvb);
}

/* base dissector : first one called for all non-heartbeat packets */
/* These packets share a common ethertype */
static int dissect_c15ch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_tree = NULL;
    proto_tree * src_ni_tn_tree = NULL;
    proto_tree * dest_ni_tn_tree = NULL;
    guint32 msg_type = 0;
    guint32 packet_length = 0;
    guint32 payload_length = 0;
    guint32 retv = 0;

    tvbuff_t * next_tvb;
    col_clear(pinfo->cinfo, COL_INFO);

    msg_type = tvb_get_ntohl(tvb, 4);
    packet_length = tvb_get_ntohl(tvb, 8);
    if (packet_length < HEADER_SZ)
    {
        return 0;
    }
    payload_length = packet_length - HEADER_SZ;

    col_set_str(pinfo->cinfo, COL_PROTOCOL, C15_LABEL);

    col_add_fstr(pinfo->cinfo, COL_INFO, "Type: %s",
        val_to_str_ext(msg_type, &c15_msg_types_ext, "Unknown Type: %d") );

    if (tree) /* we are being asked for details... */
    {
        ti = proto_tree_add_item(tree, proto_c15ch, tvb, 0, 36, ENC_NA);
        proto_item_append_text(ti, ", Type: %s",
            val_to_str_ext(msg_type, &c15_msg_types_ext, "Unknown Type: %d"));
        c15ch_tree = proto_item_add_subtree(ti, ett_c15ch);
        proto_tree_add_item(c15ch_tree, hf_c15ch_version,  tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tree, hf_c15ch_msgtype,  tvb, 4, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tree, hf_c15ch_size,     tvb, 8, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tree, hf_c15ch_call_ref, tvb, 12, 4, ENC_BIG_ENDIAN);
        /* src ni/tn */
        ti = proto_tree_add_item(c15ch_tree, hf_c15ch_srce_ni_tn, tvb, 16, 8, ENC_BIG_ENDIAN);
        src_ni_tn_tree = proto_item_add_subtree (ti, ett_src_ni_tn);

        proto_tree_add_item(src_ni_tn_tree, hf_c15ch_srce_ni, tvb, 16, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(src_ni_tn_tree, hf_c15ch_srce_tn, tvb, 20, 4, ENC_BIG_ENDIAN);

        /* dest ni/tn */
        ti = proto_tree_add_item(c15ch_tree, hf_c15ch_dest_ni_tn, tvb, 24, 8, ENC_BIG_ENDIAN);

        dest_ni_tn_tree = proto_item_add_subtree (ti, ett_dest_ni_tn);

        proto_tree_add_item(dest_ni_tn_tree, hf_c15ch_dest_ni, tvb, 24, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(dest_ni_tn_tree, hf_c15ch_dest_tn, tvb, 28, 4, ENC_BIG_ENDIAN);

        proto_tree_add_item(c15ch_tree, hf_c15ch_realtime, tvb, 32, 4, ENC_BIG_ENDIAN);
    }

    next_tvb = tvb_new_subset_length_caplen(tvb, HEADER_SZ, -1, payload_length);
    /* call dissector to dissect the rest of the packet, based on msg_type */
    retv = HEADER_SZ + dissector_try_uint(c15ch_dissector_table, msg_type, next_tvb, pinfo, tree);
    return retv;
}


static int dissect_c15ch_ama(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_ama_tree = NULL;

    guint8 call_type_val = 0;
    guint8 dialed_num_digits;

    call_type_val = tvb_get_guint8(tvb, 40);
    col_append_fstr(pinfo->cinfo, COL_INFO, ", Call Type: %s",
        val_to_str_ext(call_type_val, &ama_call_types_ext, "Unknown %d"));
    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_ama, tvb, 0, 41, ENC_NA);
        c15ch_ama_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);
        dialed_num_digits = tvb_get_guint8(tvb, 11);
        proto_tree_add_item(c15ch_ama_tree, hf_c15ch_ama_call_code,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        add_digits_string(hf_c15ch_ama_orig_digits, tvb, c15ch_ama_tree,
                        1, 10, 10, 0);
        proto_tree_add_item(c15ch_ama_tree, hf_c15ch_ama_num_dialed_digits,
                            tvb, 11, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_ama_tree, hf_c15ch_ama_br_prefix,
                            tvb, 12, 1, ENC_BIG_ENDIAN);
        add_digits_string(hf_c15ch_ama_dialed_digits, tvb, c15ch_ama_tree,
                        13, dialed_num_digits, 15, 0);
        proto_tree_add_item(c15ch_ama_tree, hf_c15ch_ama_start_hour,
                            tvb, 28, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_ama_tree, hf_c15ch_ama_start_minute,
                            tvb, 29, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_ama_tree, hf_c15ch_ama_start_second,
                            tvb, 30, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_ama_tree, hf_c15ch_ama_start_tenth_second,
                            tvb, 31, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_ama_tree, hf_c15ch_ama_start_day,
                            tvb, 32, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_ama_tree, hf_c15ch_ama_start_month,
                            tvb, 33, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_ama_tree, hf_c15ch_ama_start_year,
                            tvb, 34, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_ama_tree, hf_c15ch_ama_answered,
                            tvb, 35, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_ama_tree, hf_c15ch_ama_elapsed_time,
                            tvb, 36, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_ama_tree, hf_c15ch_ama_call_type,
                            tvb, 40, 1, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}

static int dissect_c15ch_c15_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_c15_info_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item( tree, hf_c15ch_c15_info, tvb, 0, 266, ENC_NA );
        c15ch_c15_info_tree = proto_item_add_subtree( ti, ett_c15ch_second_level );
        proto_tree_add_item( c15ch_c15_info_tree, hf_c15ch_c15_info_level, tvb, 0, 1, ENC_BIG_ENDIAN );
        add_string_field( c15ch_c15_info_tree, tvb, 1, 9, hf_c15ch_c15_info_code );
        add_string_field( c15ch_c15_info_tree, tvb, 10, 256, hf_c15ch_c15_info_text );
    }

    return tvb_reported_length(tvb);
}

static int dissect_c15ch_clli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_clli_tree = NULL;

    gint clli_siz;
    guchar * clli_string;
    clli_string = tvb_get_stringz_enc(wmem_packet_scope(), tvb, 0, &clli_siz, ENC_ASCII );
    if ( (clli_siz > 1) && (clli_siz <= 25 ) )
    {
        col_clear(pinfo->cinfo, COL_INFO);
        col_append_fstr(pinfo->cinfo, COL_INFO, "Type: CLLI, %s", clli_string);
    }
    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_clli, tvb, 0, 60, ENC_NA);
        c15ch_clli_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);
        add_string_field( c15ch_clli_tree, tvb, 0, 25, hf_c15ch_clli_clli_string );
        proto_tree_add_item(c15ch_clli_tree, hf_c15ch_clli_active_core,  tvb, 25, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_clli_tree, hf_c15ch_clli_inactive_core,  tvb, 26, 1, ENC_BIG_ENDIAN);
        add_string_field( c15ch_clli_tree, tvb, 27, 25, hf_c15ch_clli_interface_string );
        proto_tree_add_item(c15ch_clli_tree, hf_c15ch_clli_seconds,  tvb, 52, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_clli_tree, hf_c15ch_clli_microseconds,  tvb, 56, 4, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_conn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_conn_tree = NULL;
    proto_tree * srce_ni_tn_tree = NULL;
    proto_tree * dest_ni_tn_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_conn, tvb, 0, 53, ENC_NA);
        c15ch_conn_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);
        proto_tree_add_item(c15ch_conn_tree, hf_c15ch_conn_connfrom,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_conn_tree, hf_c15ch_conn_conntype,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_conn_tree, hf_c15ch_conn_perphtype,
                            tvb, 8, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_conn_tree, hf_c15ch_conn_intra,
                            tvb, 12, 1, ENC_BIG_ENDIAN);
        ti = proto_tree_add_item(c15ch_conn_tree, hf_c15ch_conn_srcenitn,
                            tvb, 13, 8, ENC_BIG_ENDIAN);
        srce_ni_tn_tree = proto_item_add_subtree(ti, ett_c15ch_second_level_sub1);
        proto_tree_add_item(srce_ni_tn_tree, hf_c15ch_conn_srceni,
                            tvb, 13, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(srce_ni_tn_tree, hf_c15ch_conn_srcetn,
                            tvb, 17, 4, ENC_BIG_ENDIAN);

        ti = proto_tree_add_item(c15ch_conn_tree, hf_c15ch_conn_destnitn,
                            tvb, 21, 8, ENC_BIG_ENDIAN);
        dest_ni_tn_tree = proto_item_add_subtree(ti, ett_c15ch_second_level_sub2);
        proto_tree_add_item(dest_ni_tn_tree, hf_c15ch_conn_destni,
                            tvb, 21, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(dest_ni_tn_tree, hf_c15ch_conn_desttn,
                            tvb, 25, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_conn_tree, hf_c15ch_conn_interlinknum,
                            tvb, 29, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_conn_tree, hf_c15ch_conn_fromport,
                            tvb, 33, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_conn_tree, hf_c15ch_conn_fromslot,
                            tvb, 37, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_conn_tree, hf_c15ch_conn_toport,
                            tvb, 41, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_conn_tree, hf_c15ch_conn_toslot,
                            tvb, 45, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_conn_tree, hf_c15ch_conn_hubcallid,
                            tvb, 49, 4, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_cp_state_ch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{

    proto_item * ti = NULL;
    proto_tree * c15ch_cp_state_ch_tree = NULL;

    guint32 oldpm_value = 0;
    guint32 newpm_value = 0;
    col_clear(pinfo->cinfo, COL_INFO);
    oldpm_value = tvb_get_ntohl(tvb, 0);
    newpm_value = tvb_get_ntohl(tvb, 4);

    col_add_fstr(pinfo->cinfo, COL_INFO, "Type: CP_STATE_CH, %s --> ",
        val_to_str_ext(oldpm_value, &c15_cp_state_pm_types_ext, "Unknown") );

    col_append_str(pinfo->cinfo, COL_INFO,
        val_to_str_ext(newpm_value, &c15_cp_state_pm_types_ext, "Unknown") );

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_cp_state_ch, tvb, 0, 40, ENC_NA);
        proto_item_append_text(ti, ", Old PM Type: %s",
            val_to_str_ext(oldpm_value, &c15_cp_state_pm_types_ext, "Unknown"));
        proto_item_append_text(ti, ", New PM Type: %s",
            val_to_str_ext(newpm_value, &c15_cp_state_pm_types_ext, "Unknown"));

        c15ch_cp_state_ch_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);
        proto_tree_add_item(c15ch_cp_state_ch_tree, hf_c15ch_cp_state_ch_oldpm,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_cp_state_ch_tree, hf_c15ch_cp_state_ch_newpm,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_cp_state_ch_tree, hf_c15ch_cp_state_ch_subpm,
                            tvb, 8, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_cp_state_ch_tree, hf_c15ch_cp_state_ch_trkpm,
                            tvb, 12, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_cp_state_ch_tree, hf_c15ch_cp_state_ch_slepm,
                            tvb, 16, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_cp_state_ch_tree, hf_c15ch_cp_state_ch_flags,
                            tvb, 20, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_cp_state_ch_tree, hf_c15ch_cp_state_ch_oldrtetype,
                            tvb, 24, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_cp_state_ch_tree, hf_c15ch_cp_state_ch_oldrteidx,
                            tvb, 28, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_cp_state_ch_tree, hf_c15ch_cp_state_ch_newrtetype,
                            tvb, 32, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_cp_state_ch_tree, hf_c15ch_cp_state_ch_newrteidx,
                            tvb, 36, 4, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_dest_digits(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_dest_digits_tree = NULL;

    guint32 num_digits;
    num_digits = tvb_get_ntohl(tvb, 0);
    col_append_str(pinfo->cinfo, COL_INFO, ", ");
    add_digits_string_info_col( tvb, 4, num_digits, pinfo);
    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_dest_digits, tvb, 0, 36, ENC_NA);
        c15ch_dest_digits_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);
        add_digits_string(hf_c15ch_dest_digits_digits, tvb, c15ch_dest_digits_tree, 4, num_digits, 32, 4);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_echo_cancel(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_echo_cancel_tree = NULL;
    proto_tree * sub_ni_tn_tree = NULL;
    proto_tree * loc_tree = NULL;
    proto_tree * old_tree = NULL;
    proto_tree * new_tree = NULL;

    guint8 valid_tone_id = 0;
    guint8 old_l2_mode_val, new_l2_mode_val;
    enum C15_EC_CHANNEL_MODE old_channel_mode, new_channel_mode;
    enum C15_EC_ECAN_MODE old_ecan_mode, new_ecan_mode;
    guint32 pm_val, pc_val, loop_val, slot_val;

    char * loc_string = NULL;


    old_l2_mode_val = tvb_get_guint8(tvb, 8);
    new_l2_mode_val = tvb_get_guint8(tvb, 9);

    switch( old_l2_mode_val )
    {
        case C15_EC_L2_MODE_VOICE:
            {
                old_channel_mode = C15_EC_VOICE_CHANNEL_MODE;
                old_ecan_mode = C15_EC_ON_ECAN_MODE;
            }
            break;
        case C15_EC_L2_MODE_VBD:
            {
                old_channel_mode = C15_EC_VBD_CHANNEL_MODE;
                old_ecan_mode = C15_EC_ON_ECAN_MODE;
            }
            break;
        case C15_EC_L2_MODE_VBD_ECANOFF:
            {
                old_channel_mode = C15_EC_VBD_CHANNEL_MODE;
                old_ecan_mode = C15_EC_OFF_ECAN_MODE;
            }
            break;
        default:
            {
                old_channel_mode = C15_EC_CHANNEL_MODE_INVALID;
                old_ecan_mode = C15_EC_ECAN_MODE_INVALID;
            }
            break;
    }

    switch( new_l2_mode_val )
    {
        case C15_EC_L2_MODE_VOICE:
            {
                new_channel_mode = C15_EC_VOICE_CHANNEL_MODE;
                new_ecan_mode = C15_EC_ON_ECAN_MODE;
            }
            break;
        case C15_EC_L2_MODE_VBD:
            {
                new_channel_mode = C15_EC_VBD_CHANNEL_MODE;
                new_ecan_mode = C15_EC_ON_ECAN_MODE;
            }
            break;
        case C15_EC_L2_MODE_VBD_ECANOFF:
            {
                new_channel_mode = C15_EC_VBD_CHANNEL_MODE;
                new_ecan_mode = C15_EC_OFF_ECAN_MODE;
            }
            break;
        default:
            {
                new_channel_mode = C15_EC_CHANNEL_MODE_INVALID;
                new_ecan_mode = C15_EC_ECAN_MODE_INVALID;
            }
            break;
    }

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_echo_cancel, tvb, 0, 31, ENC_NA);
        c15ch_echo_cancel_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);
        ti = proto_tree_add_item(c15ch_echo_cancel_tree, hf_c15ch_echo_cancel_ni_tn,
                            tvb, 0, 8, ENC_BIG_ENDIAN);
        sub_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub1);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_echo_cancel_ni,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_echo_cancel_tn,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
        valid_tone_id = tvb_get_guint8( tvb, 10 );
        if ( valid_tone_id )
        {
            proto_tree_add_item(c15ch_echo_cancel_tree, hf_c15ch_echo_cancel_tone_id, tvb, 11, 4, ENC_BIG_ENDIAN);
        }
        ti = proto_tree_add_item(c15ch_echo_cancel_tree, hf_c15ch_echo_cancel_old_l2_mode,
                            tvb, 8, 1, ENC_BIG_ENDIAN);
        old_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub2);
        proto_tree_add_uint(old_tree, hf_c15ch_echo_cancel_old_channel_mode, tvb, 8, 1, (guint32)old_channel_mode);
        proto_tree_add_uint(old_tree, hf_c15ch_echo_cancel_old_ecan_mode, tvb, 8, 1, (guint32)old_ecan_mode);

        ti = proto_tree_add_item(c15ch_echo_cancel_tree, hf_c15ch_echo_cancel_new_l2_mode,
                            tvb, 9, 1, ENC_BIG_ENDIAN);
        new_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub3);
        proto_tree_add_uint(new_tree, hf_c15ch_echo_cancel_new_channel_mode,
                            tvb, 9, 1, (guint32)new_channel_mode);
        proto_tree_add_uint(new_tree, hf_c15ch_echo_cancel_new_ecan_mode,
                            tvb, 9, 1, (guint32)new_ecan_mode);

        /* location : pm, pc, loop, slot */
        pm_val = tvb_get_ntohl( tvb, 15 );
        pc_val = tvb_get_ntohl( tvb, 19 );
        loop_val = tvb_get_ntohl( tvb, 23 );
        slot_val = tvb_get_ntohl( tvb, 27 );
        loc_string = (char *) wmem_alloc0(wmem_packet_scope(), MAX_LEN_LOC_STRING); /* init to all NULL */
        g_snprintf( loc_string, MAX_LEN_LOC_STRING, "%d  %d  %d  %d", pm_val, pc_val, loop_val, slot_val );
        ti = proto_tree_add_string(c15ch_echo_cancel_tree, hf_c15ch_echo_cancel_location, tvb, 15, (27 + 4 - 15) + 1, loc_string);
        loc_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub4);

        proto_tree_add_item(loc_tree, hf_c15ch_echo_cancel_pm, tvb, 15, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(loc_tree, hf_c15ch_echo_cancel_pc, tvb, 19, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(loc_tree, hf_c15ch_echo_cancel_loop, tvb, 23, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(loc_tree, hf_c15ch_echo_cancel_slot, tvb, 27, 4, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}

static int dissect_c15ch_encap_isup(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_encap_isup_tree = NULL;
    tvbuff_t * next_tvb;

    if (tree)
    {

        ti = proto_tree_add_item(tree, hf_c15ch_encap_isup, tvb, 0, 273, ENC_NA);
        c15ch_encap_isup_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);
        proto_tree_add_item(c15ch_encap_isup_tree, hf_c15ch_encap_isup_direction,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_encap_isup_tree, hf_c15ch_encap_isup_isup_msg_length,
                            tvb, 1, 4, ENC_BIG_ENDIAN);

        /*length of ISUP portion == expected length == 268 */
        next_tvb = tvb_new_subset_length_caplen(tvb, 5, 268, 268);
        call_dissector(general_isup_handle, next_tvb, pinfo, tree);
    }

    col_set_str(pinfo->cinfo, COL_PROTOCOL, C15_LABEL);
    col_clear(pinfo->cinfo, COL_INFO);
    col_add_fstr(pinfo->cinfo, COL_INFO, "Type: ISUP");

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_isup(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_isup_tree = NULL;
    proto_tree * c15ch_sub_hdr_tree = NULL;
    proto_tree * sub_ni_tn_tree = NULL;
    guint8 msgtype_value = 0;
    tvbuff_t * next_tvb;

    msgtype_value = tvb_get_guint8(tvb, 1);

    col_clear(pinfo->cinfo, COL_INFO);
    col_append_fstr(pinfo->cinfo, COL_INFO, ", Msg Type: %s",
        val_to_str_ext(msgtype_value, &c15_isup_types_ext, "Unknown"));

    if (tree)
    {

        ti = proto_tree_add_item(tree, hf_c15ch_isup, tvb, 0, 324, ENC_NA);
        proto_item_append_text(ti, ", Msg Type: %s",
            val_to_str_ext(msgtype_value, &c15_isup_types_ext, "Unknown"));
        c15ch_isup_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);
        proto_tree_add_item(c15ch_isup_tree, hf_c15ch_isup_direction,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_isup_tree, hf_c15ch_isup_msgtype,
                            tvb, 1, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_isup_tree, hf_c15ch_isup_cic,
                            tvb, 2, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_isup_tree, hf_c15ch_isup_opcmember,
                            tvb, 6, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_isup_tree, hf_c15ch_isup_opccluster,
                            tvb, 7, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_isup_tree, hf_c15ch_isup_opcnetwork,
                            tvb, 8, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_isup_tree, hf_c15ch_isup_dpcmember,
                            tvb, 9, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_isup_tree, hf_c15ch_isup_dpccluster,
                            tvb, 10, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_isup_tree, hf_c15ch_isup_dpcnetwork,
                            tvb, 11, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_isup_tree, hf_c15ch_isup_level3index,
                            tvb, 12, 1, ENC_BIG_ENDIAN);
        ti = proto_tree_add_item(c15ch_isup_tree, hf_c15ch_isup_ni_tn,
                            tvb, 13, 8, ENC_BIG_ENDIAN);
        sub_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub1);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_isup_ni,
                            tvb, 13, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_isup_tn,
                            tvb, 17, 4, ENC_BIG_ENDIAN);

        proto_tree_add_item(c15ch_isup_tree, hf_c15ch_isup_iptime,
                            tvb, 320, 4, ENC_BIG_ENDIAN);

        c15ch_sub_hdr_tree = proto_tree_add_subtree(c15ch_isup_tree,
                           tvb, 21, 28, ett_c15ch_second_level_sub2, NULL, "Raw Header Data");
        proto_tree_add_item(c15ch_sub_hdr_tree, hf_c15ch_isup_c15hdr,
                            tvb, 21, 18, ENC_NA);
        proto_tree_add_item(c15ch_sub_hdr_tree, hf_c15ch_isup_layer2hdr,
                            tvb, 39, 2, ENC_NA);
        proto_tree_add_item(c15ch_sub_hdr_tree, hf_c15ch_isup_layer3hdr,
                            tvb, 41, 8, ENC_NA);

        /*length of ISUP portion == expected length == 271 */
        next_tvb = tvb_new_subset_length_caplen(tvb, 49, 271, 271);
        call_dissector(general_isup_handle, next_tvb, pinfo, tree);
    }

    col_set_str(pinfo->cinfo, COL_PROTOCOL, C15_LABEL);
    col_clear(pinfo->cinfo, COL_INFO);
    col_add_fstr(pinfo->cinfo, COL_INFO, "Type: ISUP, Msg Type: %s",
        val_to_str_ext(msgtype_value, &c15_isup_types_ext, "Unknown Type") );

    return tvb_reported_length(tvb);
}

static int dissect_c15ch_mkbrk(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_mkbrk_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_mkbrk, tvb, 0, 11, ENC_NA);
        c15ch_mkbrk_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);
        proto_tree_add_item(c15ch_mkbrk_tree, hf_c15ch_mkbrk_makebreak,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_mkbrk_tree, hf_c15ch_mkbrk_nshlf,
                            tvb, 1, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_mkbrk_tree, hf_c15ch_mkbrk_stm,
                            tvb, 2, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_mkbrk_tree, hf_c15ch_mkbrk_caddr,
                            tvb, 3, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_mkbrk_tree, hf_c15ch_mkbrk_cdata,
                            tvb, 7, 4, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_nitnxlate(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{

    proto_item * ti = NULL;
    proto_tree * c15ch_nitnxlate_tree = NULL;
    proto_tree * sub_ni_tn_tree = NULL;
    proto_tree * concat_tree = NULL;
    char * concat_string = NULL;
    guchar * site_string;
    guchar * subsite_string;
    guchar * equipname_string;
    char * desc_string = NULL;
    gint str_start;
    gint max_str_len;
    gint site_str_len, subsite_str_len, equipname_str_len;
    guint32 gwtype_val;
    guint32 frame_val, shelf_val, lsg_val, unit_val;
    guint32 key_val;
    concat_string = (char *) wmem_alloc0(wmem_packet_scope(), MAX_LEN_CONCAT_STRING); /* init to all NULL */
    desc_string = (char *) wmem_alloc0(wmem_packet_scope(), MAX_LEN_DESC_STRING);
    /* sitestring */
    str_start = 12;
    max_str_len = 5;
    site_string = tvb_get_stringz_enc(wmem_packet_scope(), tvb, str_start, &site_str_len, ENC_ASCII);
    if ( site_str_len > max_str_len )
    {
        site_string[ max_str_len - 1] = '\0';
    }

    /* subsitestring */
    str_start = 17;
    max_str_len = 5;
    subsite_string = tvb_get_stringz_enc(wmem_packet_scope(), tvb, str_start, &subsite_str_len, ENC_ASCII);
    if ( subsite_str_len > max_str_len )
    {
        subsite_string[ max_str_len - 1] = '\0';
    }

    /* equipname */
    str_start = 22;
    max_str_len = 5;
    equipname_string = tvb_get_stringz_enc(wmem_packet_scope(), tvb, str_start, &equipname_str_len, ENC_ASCII);
    if ( equipname_str_len > max_str_len )
    {
        equipname_string[ max_str_len - 1] = '\0';
    }

    frame_val = tvb_get_ntohl( tvb, 31 );
    shelf_val = tvb_get_ntohl( tvb, 35 );
    lsg_val = tvb_get_ntohl( tvb, 39 );
    unit_val = tvb_get_ntohl( tvb, 43 );
    key_val = tvb_get_ntohl( tvb, 47 );
    /* desc_string contains for site, subsite, equip, any of which may be null */
    /* don't want to print "NULL" or similar in the output string on any platform */
    if ( ( site_str_len > 1 ) && ( subsite_str_len > 1 ) && ( equipname_str_len > 1 ) )
    {
        /* 1) none of site, subsite, or equip is null */
        g_snprintf( desc_string, MAX_LEN_DESC_STRING, "%s %s %s ", site_string, subsite_string, equipname_string );
    }
    else
        if ( ( site_str_len < 2 ) && ( subsite_str_len > 1 ) && ( equipname_str_len > 1 ) )
        {
            /* 2) only site is null */
            g_snprintf( desc_string, MAX_LEN_DESC_STRING, "%s %s ", subsite_string, equipname_string );
        }
        else
            if ( ( site_str_len > 1 ) && ( subsite_str_len < 2 ) && ( equipname_str_len > 1 ) )
            {
                /* 3) only subsite is null */
                g_snprintf( desc_string, MAX_LEN_DESC_STRING, "%s %s ", site_string, equipname_string);
            }
            else
                if ( ( site_str_len > 1 ) && ( subsite_str_len > 1 ) && ( equipname_str_len < 2 ) )
                {
                    /* 4) only equip is null */
                    g_snprintf( desc_string, MAX_LEN_DESC_STRING, "%s %s ", site_string, subsite_string);
                }
                else
                    if ( ( site_str_len < 2 ) && ( subsite_str_len < 2 ) && ( equipname_str_len > 1 ) )
                    {
                        /* 5) site and subsite are null but equip is non-null */
                        g_snprintf( desc_string, MAX_LEN_DESC_STRING, "%s ", equipname_string );
                    }
                    else
                        if ( ( site_str_len < 2 ) && ( subsite_str_len > 1 ) && ( equipname_str_len < 2 ) )
                        {
                            /* 6) site and equip are null but subsite is not-null */
                            g_snprintf( desc_string, MAX_LEN_DESC_STRING, "%s ", subsite_string );
                        }
                        else
                            if ( ( site_str_len > 1 ) && ( subsite_str_len < 2 ) && ( equipname_str_len < 2 ) )
                            {
                                /* 7) subsite and equip are null but site is not-null */
                                g_snprintf( desc_string, MAX_LEN_DESC_STRING, "%s ", site_string );
                            }
                            /* else site, subsite, equip are all null */
    if ( key_val )
    {
        if ( strlen( desc_string ) )
        {
            g_snprintf( concat_string, MAX_LEN_CONCAT_STRING, "%s%d %d %d %d %d",
                desc_string, frame_val, shelf_val, lsg_val, unit_val, key_val );
        }
        else
        {
            g_snprintf( concat_string, MAX_LEN_CONCAT_STRING, "%d %d %d %d %d",
                    frame_val, shelf_val, lsg_val, unit_val, key_val );
        }
    }
    else
    {
        if ( strlen( desc_string) )
        {
            if ( (g_strcmp0( "VLIN", equipname_string) == 0) ||
                 (g_strcmp0( "PTRK", equipname_string) == 0) )
            {
                g_snprintf( concat_string, MAX_LEN_CONCAT_STRING, "%s%d",
                        desc_string, frame_val );
            }
            else
                if ( (g_strcmp0( "GWE", equipname_string ) == 0) ||
                 (g_strcmp0( "IDE", equipname_string ) == 0) )
                {
                    g_snprintf( concat_string, MAX_LEN_CONCAT_STRING, "%s%d %d",
                        desc_string, frame_val, shelf_val );
                }
            else
                g_snprintf( concat_string, MAX_LEN_CONCAT_STRING, "%s%d %d %d %d",
                    desc_string, frame_val, shelf_val, lsg_val, unit_val);
        } /* if ( strlen( desc_string ) ) */
        else
        {
            g_snprintf( concat_string, MAX_LEN_CONCAT_STRING, "%d %d %d %d",
                    frame_val, shelf_val, lsg_val, unit_val);
        }
    }
    col_append_fstr(pinfo->cinfo, COL_INFO, ", %s", concat_string);
    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_nitnxlate, tvb, 0, 190, ENC_NA);
        c15ch_nitnxlate_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);

        ti = proto_tree_add_item(c15ch_nitnxlate_tree, hf_c15ch_nitnxlate_ni_tn, tvb, 0, 8, ENC_BIG_ENDIAN);
        sub_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub1);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_nitnxlate_ni,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_nitnxlate_tn,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
        /* equiptype */
        proto_tree_add_item(c15ch_nitnxlate_tree, hf_c15ch_nitnxlate_equiptype,
                            tvb, 8, 4, ENC_BIG_ENDIAN);


        ti = proto_tree_add_string(c15ch_nitnxlate_tree, hf_c15ch_nitnxlate_concat_string, tvb, 12, 40 /*length*/,
                                concat_string);
        concat_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub2);
        if ( site_str_len > 1 )
        {
            str_start = 12;
            max_str_len = 5;
            add_string_field( concat_tree, tvb, str_start, max_str_len, hf_c15ch_nitnxlate_sitestring );
        }
        if ( subsite_str_len > 1 )
        {
            str_start = 17;
            max_str_len = 5;
            add_string_field( concat_tree, tvb, str_start, max_str_len, hf_c15ch_nitnxlate_subsitestring );
        }
        if ( equipname_str_len > 1 )
        {
            str_start = 22;
            max_str_len = 5;
            add_string_field( concat_tree, tvb, str_start, max_str_len, hf_c15ch_nitnxlate_equipname );
        }
        if ( g_strcmp0( "GWE", equipname_string) == 0 )
        {
            proto_tree_add_item(concat_tree, hf_c15ch_nitnxlate_gateway,
                            tvb, 31, 4, ENC_BIG_ENDIAN);

            proto_tree_add_item(concat_tree, hf_c15ch_nitnxlate_line,
                            tvb, 35, 4, ENC_BIG_ENDIAN);
        }
        else
            if ( g_strcmp0( "IDE", equipname_string ) == 0 )
            {
                proto_tree_add_item(concat_tree, hf_c15ch_nitnxlate_idt_rdt,
                            tvb, 31, 4, ENC_BIG_ENDIAN);

                proto_tree_add_item(concat_tree, hf_c15ch_nitnxlate_line,
                            tvb, 35, 4, ENC_BIG_ENDIAN);
            }
        else
            if ( g_strcmp0( "VLIN", equipname_string ) == 0 )
            {
                proto_tree_add_item(concat_tree, hf_c15ch_nitnxlate_line,
                            tvb, 31, 4, ENC_BIG_ENDIAN);
            }
        else
            if ( g_strcmp0( "PTRK", equipname_string ) == 0 )
            {
                proto_tree_add_item(concat_tree, hf_c15ch_nitnxlate_ptrk,
                            tvb, 31, 4, ENC_BIG_ENDIAN);
            }
        else
            if ( (g_strcmp0( "LCE", equipname_string ) == 0) ||
                 (g_strcmp0( "RSE", equipname_string ) == 0) ||
                 (g_strcmp0( "RSC", equipname_string ) == 0) ||
                 (g_strcmp0( "HUBE", equipname_string) == 0) )
            {
                proto_tree_add_item(concat_tree, hf_c15ch_nitnxlate_bay,
                            tvb, 31, 4, ENC_BIG_ENDIAN);
                proto_tree_add_item(concat_tree, hf_c15ch_nitnxlate_shelf,
                            tvb, 35, 4, ENC_BIG_ENDIAN);
                proto_tree_add_item(concat_tree, hf_c15ch_nitnxlate_lsg,
                            tvb, 39, 4, ENC_BIG_ENDIAN);
                proto_tree_add_item(concat_tree, hf_c15ch_nitnxlate_line,
                            tvb, 43, 4, ENC_BIG_ENDIAN);
                if ( key_val )
                {
                    proto_tree_add_item(concat_tree, hf_c15ch_nitnxlate_key,
                            tvb, 47, 4, ENC_BIG_ENDIAN);
                }
            }
        else
            if (equipname_str_len <= 1)
            {
                proto_tree_add_item(concat_tree, hf_c15ch_nitnxlate_pm,
                            tvb, 31, 4, ENC_BIG_ENDIAN);
                proto_tree_add_item(concat_tree, hf_c15ch_nitnxlate_pc_sts1,
                            tvb, 35, 4, ENC_BIG_ENDIAN); /* either pc or sts1 */
                proto_tree_add_item(concat_tree, hf_c15ch_nitnxlate_port_vt15,
                            tvb, 39, 4, ENC_BIG_ENDIAN); /* either port or vt15 */
                proto_tree_add_item(concat_tree, hf_c15ch_nitnxlate_channel,
                            tvb, 43, 4, ENC_BIG_ENDIAN);
            }
        else /* default case : label generically as parms  */
        {
            proto_tree_add_item(concat_tree, hf_c15ch_nitnxlate_parm_1,
                            tvb, 31, 4, ENC_BIG_ENDIAN);

            proto_tree_add_item(concat_tree, hf_c15ch_nitnxlate_parm_2,
                            tvb, 35, 4, ENC_BIG_ENDIAN);

            proto_tree_add_item(concat_tree, hf_c15ch_nitnxlate_parm_3,
                            tvb, 39, 4, ENC_BIG_ENDIAN);
            proto_tree_add_item(concat_tree, hf_c15ch_nitnxlate_parm_4,
                            tvb, 43, 4, ENC_BIG_ENDIAN);
            if ( key_val )
            {
                proto_tree_add_item(concat_tree, hf_c15ch_nitnxlate_key,
                            tvb, 47, 4, ENC_BIG_ENDIAN);
            }
        }
        /* gw type */
        proto_tree_add_item(c15ch_nitnxlate_tree, hf_c15ch_nitnxlate_gw_type,
                            tvb, 27, 4, ENC_BIG_ENDIAN);
        /* user_tid */
        if ( g_strcmp0( "GWE", equipname_string ) == 0 )
        {
            str_start = 51;
            max_str_len = 65;
            add_string_field( c15ch_nitnxlate_tree, tvb, str_start, max_str_len, hf_c15ch_nitnxlate_user_tid );
        }
        /* host */
        str_start = 116;
        max_str_len = 65;
        gwtype_val = tvb_get_ntohl( tvb, 27 );
        if ( gwtype_val )
        {
            add_string_field( c15ch_nitnxlate_tree, tvb, str_start, max_str_len, hf_c15ch_nitnxlate_host );
        }

        /* target group number */
        if ( g_strcmp0( "PTRK", equipname_string ) == 0 )
        {
            proto_tree_add_item(c15ch_nitnxlate_tree, hf_c15ch_nitnxlate_tg_num,
                            tvb, 181, 4, ENC_BIG_ENDIAN);
        }


         add_string_field( c15ch_nitnxlate_tree, tvb, 185, 5, hf_c15ch_nitnxlate_mgcp_line_id);

    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_ntwk_conn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_ntwk_conn_tree = NULL;
    proto_tree * sub_ni_tn_tree = NULL;
    proto_tree * old_loc_tree = NULL;
    proto_tree * new_loc_tree = NULL;

    guint8 from_pm_val, from_pc_val, from_loop_val, from_slot_val;
    char * from_loc_string = NULL;

    guint8 to_pm_val, to_pc_val, to_loop_val, to_slot_val;
    char * to_loc_string = NULL;

    guint8 path_type_val = 0;
    guint8 conn_type_val = 0;
    path_type_val = tvb_get_guint8(tvb, 0);
    conn_type_val = tvb_get_guint8(tvb, 1);
    col_append_fstr(pinfo->cinfo, COL_INFO, ", Path Type: %s",
        val_to_str(path_type_val, ett_c15ch_ntwk_conn_path_types, "Unknown %d") );
    col_append_fstr(pinfo->cinfo, COL_INFO, ", Conn Type: %s",
        val_to_str(conn_type_val, ett_c15ch_ntwk_conn_conn_types, "Unknown %d") );
    if (tree)
    {
        gint str_start;
        gint max_str_len;
        ti = proto_tree_add_item(tree, hf_c15ch_ntwk_conn, tvb, 0, 39, ENC_NA);
        c15ch_ntwk_conn_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);

        /* misc. fields */
        proto_tree_add_item(c15ch_ntwk_conn_tree, hf_c15ch_ntwk_conn_pathtype,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_ntwk_conn_tree, hf_c15ch_ntwk_conn_conntype,
                            tvb, 1, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_ntwk_conn_tree, hf_c15ch_ntwk_conn_fromoptimized,
                            tvb, 2, 1, ENC_BIG_ENDIAN);

        /* fromsite */
        str_start = 3;
        max_str_len = 5;
        add_string_field( c15ch_ntwk_conn_tree, tvb, str_start, max_str_len, hf_c15ch_ntwk_conn_fromsite );

        /* old location and pm, pc, slot, loop*/
        from_pm_val = tvb_get_guint8( tvb, 8 );
        from_pc_val = tvb_get_guint8( tvb, 9 );
        from_loop_val = tvb_get_guint8( tvb, 10 );
        from_slot_val = tvb_get_guint8( tvb, 11 );
        from_loc_string = (char *) wmem_alloc0(wmem_packet_scope(), MAX_LEN_LOC_STRING); /* init to all NULL */
        g_snprintf( from_loc_string, MAX_LEN_LOC_STRING, "%d  %d  %d  %d", from_pm_val, from_pc_val, from_loop_val, from_slot_val );
        ti = proto_tree_add_string(c15ch_ntwk_conn_tree, hf_c15ch_ntwk_conn_fromlocation, tvb, 8, (11 - 8) + 1,
                                from_loc_string);
        old_loc_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub1);
        proto_tree_add_item(old_loc_tree, hf_c15ch_ntwk_conn_frompm,
                            tvb, 8, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(old_loc_tree, hf_c15ch_ntwk_conn_frompc,
                            tvb, 9, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(old_loc_tree, hf_c15ch_ntwk_conn_fromloop,
                            tvb, 10, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(old_loc_tree, hf_c15ch_ntwk_conn_fromslot,
                            tvb, 11, 1, ENC_BIG_ENDIAN);

        /* misc. fields */
        proto_tree_add_item(c15ch_ntwk_conn_tree, hf_c15ch_ntwk_conn_fromcnx,
                            tvb, 12, 4, ENC_BIG_ENDIAN);

        ti = proto_tree_add_item(c15ch_ntwk_conn_tree, hf_c15ch_ntwk_conn_fromntwknitn,
                            tvb, 16, 8, ENC_BIG_ENDIAN);
        sub_ni_tn_tree = proto_item_add_subtree (ti,ett_c15ch_second_level_sub2);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_ntwk_conn_fromntwkni,
                            tvb, 16, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_ntwk_conn_fromntwktn,
                            tvb, 20, 4, ENC_BIG_ENDIAN);


        proto_tree_add_item(c15ch_ntwk_conn_tree, hf_c15ch_ntwk_conn_mbshold,
                            tvb, 24, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_ntwk_conn_tree, hf_c15ch_ntwk_conn_tooptimized,
                            tvb, 25, 1, ENC_BIG_ENDIAN);
        /* tosite */
        str_start = 26;
        max_str_len = 5;
        add_string_field( c15ch_ntwk_conn_tree, tvb, str_start, max_str_len, hf_c15ch_ntwk_conn_tosite );

        /* new location and pm, pc, slot, loop*/
        to_pm_val = tvb_get_guint8( tvb, 31 );
        to_pc_val = tvb_get_guint8( tvb, 32 );
        to_loop_val = tvb_get_guint8( tvb, 33 );
        to_slot_val = tvb_get_guint8( tvb, 34 );
        to_loc_string = (char *) wmem_alloc0(wmem_packet_scope(), MAX_LEN_LOC_STRING); /* init to all NULL */
        g_snprintf( to_loc_string, MAX_LEN_LOC_STRING, "%d  %d  %d  %d", to_pm_val, to_pc_val, to_loop_val, to_slot_val );
        ti = proto_tree_add_string(c15ch_ntwk_conn_tree, hf_c15ch_ntwk_conn_tolocation, tvb, 31, (34 - 31) + 1,
                                to_loc_string);
        new_loc_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub3);
        proto_tree_add_item(new_loc_tree, hf_c15ch_ntwk_conn_topm,
                            tvb, 31, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(new_loc_tree, hf_c15ch_ntwk_conn_topc,
                            tvb, 32, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(new_loc_tree, hf_c15ch_ntwk_conn_toloop,
                            tvb, 33, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(new_loc_tree, hf_c15ch_ntwk_conn_toslot,
                            tvb, 34, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_ntwk_conn_tree, hf_c15ch_ntwk_conn_tocnx,
                            tvb, 35, 4, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_orig(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_orig_tree = NULL;
    proto_tree * sub_ni_tn_tree = NULL;

    guint8 num_dn_digits;
    guint8 num_upn_digits;
    guint8 num_rnp_digits;

    num_dn_digits = tvb_get_guint8(tvb, 12);

    col_append_str(pinfo->cinfo, COL_INFO, ", DN: ");
    add_digits_string_info_col( tvb, 13, num_dn_digits, pinfo);

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_orig, tvb, 0, 73, ENC_NA);
        c15ch_orig_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);
        num_upn_digits = tvb_get_guint8(tvb, 28);
        num_rnp_digits = tvb_get_guint8(tvb, 49);
        proto_tree_add_item(c15ch_orig_tree, hf_c15ch_orig_tnblocktype,
                            tvb, 0, 4, ENC_BIG_ENDIAN);

        ti = proto_tree_add_item(c15ch_orig_tree, hf_c15ch_orig_ni_tn, tvb, 4, 8, ENC_BIG_ENDIAN);

        sub_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub1);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_orig_ni,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_orig_tn,
                            tvb, 8, 4, ENC_BIG_ENDIAN);

        add_digits_string(hf_c15ch_orig_dndigits,tvb,c15ch_orig_tree, 13, num_dn_digits, 10, 1);

        proto_tree_add_item(c15ch_orig_tree, hf_c15ch_orig_nidscrn,
                            tvb, 23, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_orig_tree, hf_c15ch_orig_nidaddrtype,
                            tvb, 24, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_orig_tree, hf_c15ch_orig_nidnmbrplan,
                            tvb, 25, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_orig_tree, hf_c15ch_orig_nidprivind,
                            tvb, 26, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_orig_tree, hf_c15ch_orig_upnsaved,
                            tvb, 27, 1, ENC_BIG_ENDIAN);

        add_digits_string(hf_c15ch_orig_upndigits,tvb,c15ch_orig_tree, 29, num_upn_digits, 15, 1);

        proto_tree_add_item(c15ch_orig_tree, hf_c15ch_orig_upnscrn,
                            tvb, 44, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_orig_tree, hf_c15ch_orig_upnaddrtype,
                            tvb, 45, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_orig_tree, hf_c15ch_orig_upnnmbrplan,
                            tvb, 46, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_orig_tree, hf_c15ch_orig_upnprivind,
                            tvb, 47, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_orig_tree, hf_c15ch_orig_rnpsaved,
                            tvb, 48, 1, ENC_BIG_ENDIAN);

        add_digits_string(hf_c15ch_orig_rnpdigits,tvb,c15ch_orig_tree, 50, num_rnp_digits, 15, 1);

        proto_tree_add_item(c15ch_orig_tree, hf_c15ch_orig_rnpscrn,
                            tvb, 65, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_orig_tree, hf_c15ch_orig_rnpaddrtype,
                            tvb, 66, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_orig_tree, hf_c15ch_orig_rnpnmbrplan,
                            tvb, 67, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_orig_tree, hf_c15ch_orig_rnpprivind,
                            tvb, 68, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_orig_tree, hf_c15ch_orig_iptime,
                            tvb, 69, 4, ENC_BIG_ENDIAN);

    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_outgwebc(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_outgwebc_tree = NULL;
    proto_tree * sub_ni_tn_tree = NULL;


    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_outgwebc, tvb, 0, 27, ENC_NA);
        c15ch_outgwebc_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);

        ti = proto_tree_add_item(c15ch_outgwebc_tree, hf_c15ch_outgwebc_pbc_conn_ni_tn,
                            tvb, 0, 8, ENC_BIG_ENDIAN);
        sub_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub1);

        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_outgwebc_pbc_conn_ni,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_outgwebc_pbc_conn_tn,
                            tvb, 4, 4, ENC_BIG_ENDIAN);

        proto_tree_add_item(c15ch_outgwebc_tree, hf_c15ch_outgwebc_pbc_conn_num,
                            tvb, 8, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_outgwebc_tree, hf_c15ch_outgwebc_pbc_conn_type,
                            tvb, 12, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_outgwebc_tree, hf_c15ch_outgwebc_bc_msg_type,
                            tvb, 13, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_outgwebc_tree, hf_c15ch_outgwebc_op_bc_sdp_ip,
                            tvb, 14, 4, ENC_LITTLE_ENDIAN);
        proto_tree_add_item(c15ch_outgwebc_tree, hf_c15ch_outgwebc_op_bc_sdp_port,
                            tvb, 18, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_outgwebc_tree, hf_c15ch_outgwebc_pbc_mdrp_mode,
                            tvb, 22, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_outgwebc_tree, hf_c15ch_outgwebc_pbc_tst_flags,
                            tvb, 23, 4, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_pathfind(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_pathfind_tree = NULL;
    proto_tree * fromgwe_ni_tn_tree = NULL;
    proto_tree * from_ni_tn_tree = NULL;
    proto_tree * togwe_ni_tn_tree = NULL;
    proto_tree * to_ni_tn_tree = NULL;
    gint str_start;
    gint max_str_len;

    if (tree)
    {
        ti = proto_tree_add_item(tree,  hf_c15ch_pathfind, tvb, 0, 73, ENC_NA);
        c15ch_pathfind_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);
        proto_tree_add_item(c15ch_pathfind_tree, hf_c15ch_pathfind_vds30,
                            tvb, 0, 1, ENC_BIG_ENDIAN);

        ti = proto_tree_add_item(c15ch_pathfind_tree, hf_c15ch_pathfind_fromgwenitn, tvb, 1, 8, ENC_BIG_ENDIAN);
        fromgwe_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub1);
        proto_tree_add_item(fromgwe_ni_tn_tree, hf_c15ch_pathfind_fromgweni,
                            tvb, 1, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(fromgwe_ni_tn_tree, hf_c15ch_pathfind_fromgwetn,
                            tvb, 5, 4, ENC_BIG_ENDIAN);

        proto_tree_add_item(c15ch_pathfind_tree, hf_c15ch_pathfind_fromoptimized,
                            tvb, 9, 1, ENC_BIG_ENDIAN);
        /* fromsite */
        str_start = 10;
        max_str_len = 5;
        add_string_field( c15ch_pathfind_tree, tvb, str_start, max_str_len, hf_c15ch_pathfind_fromsite );

        proto_tree_add_item(c15ch_pathfind_tree, hf_c15ch_pathfind_frompm,
                            tvb, 15, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_pathfind_tree, hf_c15ch_pathfind_frompc,
                            tvb, 16, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_pathfind_tree, hf_c15ch_pathfind_fromloop,
                            tvb, 17, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_pathfind_tree, hf_c15ch_pathfind_fromslot,
                            tvb, 21, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_pathfind_tree, hf_c15ch_pathfind_fromcnx,
                            tvb, 25, 4, ENC_BIG_ENDIAN);

        ti = proto_tree_add_item(c15ch_pathfind_tree, hf_c15ch_pathfind_fromnitn,
                            tvb, 29, 8, ENC_BIG_ENDIAN);
        from_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub2);
        proto_tree_add_item(from_ni_tn_tree, hf_c15ch_pathfind_fromni,
                            tvb, 29, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(from_ni_tn_tree, hf_c15ch_pathfind_fromtn,
                            tvb, 33, 4, ENC_BIG_ENDIAN);

        ti = proto_tree_add_item(c15ch_pathfind_tree, hf_c15ch_pathfind_togwenitn,
                            tvb, 37, 8, ENC_BIG_ENDIAN);
        togwe_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub3);
        proto_tree_add_item(togwe_ni_tn_tree, hf_c15ch_pathfind_togweni,
                            tvb, 37, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(togwe_ni_tn_tree, hf_c15ch_pathfind_togwetn,
                            tvb, 41, 4, ENC_BIG_ENDIAN);

        proto_tree_add_item(c15ch_pathfind_tree, hf_c15ch_pathfind_tooptimized,
                            tvb, 45, 1, ENC_BIG_ENDIAN);
        /* tosite */
        str_start = 46;
        max_str_len = 5;
        add_string_field( c15ch_pathfind_tree, tvb, str_start, max_str_len, hf_c15ch_pathfind_tosite );

        proto_tree_add_item(c15ch_pathfind_tree, hf_c15ch_pathfind_topm,
                            tvb, 51, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_pathfind_tree, hf_c15ch_pathfind_topc,
                            tvb, 52, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_pathfind_tree, hf_c15ch_pathfind_toloop,
                            tvb, 53, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_pathfind_tree, hf_c15ch_pathfind_toslot,
                            tvb, 57, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_pathfind_tree, hf_c15ch_pathfind_tocnx,
                            tvb, 61, 4, ENC_BIG_ENDIAN);

        ti = proto_tree_add_item(c15ch_pathfind_tree, hf_c15ch_pathfind_tonitn,
                            tvb, 65, 8, ENC_BIG_ENDIAN);
        to_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub4);
        proto_tree_add_item(to_ni_tn_tree, hf_c15ch_pathfind_toni,
                            tvb, 65, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(to_ni_tn_tree, hf_c15ch_pathfind_totn,
                            tvb, 69, 4, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_pathidle(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_pathidle_tree = NULL;
    proto_tree * fromgwe_ni_tn_tree = NULL;
    proto_tree * from_ni_tn_tree = NULL;
    proto_tree * togwe_ni_tn_tree = NULL;
    proto_tree * to_ni_tn_tree = NULL;
    gint str_start;
    gint max_str_len;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_pathidle, tvb, 0, 73, ENC_NA);
        c15ch_pathidle_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);
        proto_tree_add_item(c15ch_pathidle_tree, hf_c15ch_pathidle_vds30,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_pathidle_tree, hf_c15ch_pathidle_idlecode,
                            tvb, 1, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_pathidle_tree, hf_c15ch_pathidle_pathtype,
                            tvb, 2, 1, ENC_BIG_ENDIAN);

        ti = proto_tree_add_item(c15ch_pathidle_tree, hf_c15ch_pathidle_fromgwenitn,
                            tvb, 3, 8, ENC_BIG_ENDIAN);
        fromgwe_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub1);
        proto_tree_add_item(fromgwe_ni_tn_tree, hf_c15ch_pathidle_fromgweni,
                            tvb, 3, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(fromgwe_ni_tn_tree, hf_c15ch_pathidle_fromgwetn,
                            tvb, 7, 4, ENC_BIG_ENDIAN);
        /* fromsite */
        str_start = 11;
        max_str_len = 5;
        add_string_field( c15ch_pathidle_tree, tvb, str_start, max_str_len, hf_c15ch_pathidle_fromsite );

        proto_tree_add_item(c15ch_pathidle_tree, hf_c15ch_pathidle_frompm,
                            tvb, 16, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_pathidle_tree, hf_c15ch_pathidle_frompc,
                            tvb, 17, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_pathidle_tree, hf_c15ch_pathidle_fromloop,
                            tvb, 18, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_pathidle_tree, hf_c15ch_pathidle_fromslot,
                            tvb, 22, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_pathidle_tree, hf_c15ch_pathidle_fromcnx,
                            tvb, 26, 4, ENC_BIG_ENDIAN);

        ti = proto_tree_add_item(c15ch_pathidle_tree, hf_c15ch_pathidle_fromnitn,
                            tvb, 30, 8, ENC_BIG_ENDIAN);
        from_ni_tn_tree = proto_item_add_subtree(ti, ett_c15ch_second_level_sub2);
        proto_tree_add_item(from_ni_tn_tree, hf_c15ch_pathidle_fromni,
                            tvb, 30, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(from_ni_tn_tree, hf_c15ch_pathidle_fromtn,
                            tvb, 34, 4, ENC_BIG_ENDIAN);

        ti = proto_tree_add_item(c15ch_pathidle_tree, hf_c15ch_pathidle_togwenitn,
                            tvb, 38, 8, ENC_BIG_ENDIAN);
        togwe_ni_tn_tree = proto_item_add_subtree(ti, ett_c15ch_second_level_sub3);
        proto_tree_add_item(togwe_ni_tn_tree, hf_c15ch_pathidle_togweni,
                            tvb, 38, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(togwe_ni_tn_tree, hf_c15ch_pathidle_togwetn,
                            tvb, 42, 4, ENC_BIG_ENDIAN);
        /* tosite */
        str_start = 46;
        max_str_len = 5;
        add_string_field( c15ch_pathidle_tree, tvb, str_start, max_str_len, hf_c15ch_pathidle_tosite );

        proto_tree_add_item(c15ch_pathidle_tree, hf_c15ch_pathidle_topm,
                            tvb, 51, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_pathidle_tree, hf_c15ch_pathidle_topc,
                            tvb, 52, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_pathidle_tree, hf_c15ch_pathidle_toloop,
                            tvb, 53, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_pathidle_tree, hf_c15ch_pathidle_toslot,
                            tvb, 57, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_pathidle_tree, hf_c15ch_pathidle_tocnx,
                            tvb, 61, 4, ENC_BIG_ENDIAN);

        ti = proto_tree_add_item(c15ch_pathidle_tree, hf_c15ch_pathidle_tonitn, tvb, 65, 8, ENC_BIG_ENDIAN);
        to_ni_tn_tree = proto_item_add_subtree(ti, ett_c15ch_second_level_sub4);
        proto_tree_add_item(to_ni_tn_tree, hf_c15ch_pathidle_toni,
                            tvb, 65, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(to_ni_tn_tree, hf_c15ch_pathidle_totn,
                            tvb, 69, 4, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_q931(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_q931_tree = NULL;
    proto_tree * sub_ni_tn_tree = NULL;
    guint32 q931_msg_len;
    guint8 direction;
    tvbuff_t * next_tvb;
    guint8 bytes_to_skip;

    direction = tvb_get_guint8(tvb, 0);

    if (direction > 1)
    {
        bytes_to_skip = 0; /* signifies invalid direction: q931 dissector will not be called */
    }
    else
        if ( ! direction )
        {
            /* direction == 0 */
            bytes_to_skip = 13;
        }
        else
        {
            /* direction == 1 */
            bytes_to_skip = 10;
        }


    if (tree)
    {

        ti = proto_tree_add_item(tree, hf_c15ch_q931, tvb, 0, 13, ENC_NA);
        c15ch_q931_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);
        proto_tree_add_item(c15ch_q931_tree, hf_c15ch_q931_direction,
                            tvb, 0, 1, ENC_BIG_ENDIAN);

        q931_msg_len = tvb_get_ntohl(tvb, 9);

        ti = proto_tree_add_item(c15ch_q931_tree, hf_c15ch_q931_ni_tn,
                            tvb, 1, 8, ENC_BIG_ENDIAN);
        sub_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub1);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_q931_ni,
                            tvb, 1, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_q931_tn,
                            tvb, 5, 4, ENC_BIG_ENDIAN);

        proto_tree_add_item(c15ch_q931_tree, hf_c15ch_q931_msglength,
                            tvb, 9, 4, ENC_BIG_ENDIAN);
        if (q931_msg_len && bytes_to_skip)
        {
            next_tvb = tvb_new_subset_length_caplen(tvb, 13 + bytes_to_skip, q931_msg_len - bytes_to_skip, q931_msg_len - bytes_to_skip);
            call_dissector(general_q931_handle, next_tvb, pinfo, tree);
        }
    }

    col_set_str(pinfo->cinfo, COL_PROTOCOL, C15_LABEL);
    col_clear(pinfo->cinfo, COL_INFO);
    col_add_fstr(pinfo->cinfo, COL_INFO, "Type: Q931, Direction: %s",
                val_to_str(direction, c15ch_q931_direction_types, "Unknown Direction Subtype: %d")  );

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_qos(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_qos_tree = NULL;
    proto_tree * sub_ni_tn_tree = NULL;

    guint32 year_val = (guint32)0;
    gfloat mos = (gfloat)0.0;

    mos = tvb_get_ntohl(tvb, 72) / (gfloat) (100.0);
    col_append_fstr(pinfo->cinfo, COL_INFO, ", MOS: %.2f", mos);
    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_qos, tvb, 0, 100, ENC_NA);
        c15ch_qos_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);

        ti = proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_ni_tn, tvb, 0, 8, ENC_BIG_ENDIAN);

        sub_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub1);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_qos_ni,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_qos_tn,
                            tvb, 4, 4, ENC_BIG_ENDIAN);

        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_rtcp_call_id,
                            tvb, 8, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_register_type,
                            tvb, 12, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_tg_num,
                            tvb, 16, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_trk_type,
                            tvb, 20, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_status,
                            tvb, 24, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_codec,
                            tvb, 28, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_given_ip,
                            tvb, 32, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_real_ip,
                            tvb, 36, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_local_ip,
                            tvb, 40, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_tx_pkts,
                            tvb, 44, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_lost_pkts,
                            tvb, 48, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_lost_pct,
                            tvb, 52, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_jitter,
                            tvb, 56, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_rtt,
                            tvb, 60, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_avg_rtt,
                            tvb, 64, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_duration,
                            tvb, 68, 4, ENC_BIG_ENDIAN);
        proto_tree_add_float(c15ch_qos_tree, hf_c15ch_qos_mos,
                            tvb, 72, 4, mos);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_ep_type,
                            tvb, 76, 1, ENC_BIG_ENDIAN);
        add_string_field( c15ch_qos_tree, tvb, 77, 13, hf_c15ch_qos_dn_or_tg );
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_pm,
                            tvb, 90, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_pc,
                            tvb, 91, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_hour,
                            tvb, 92, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_min,
                            tvb, 93, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_sec,
                            tvb, 94, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_tenth_sec,
                            tvb, 95, 1, ENC_BIG_ENDIAN);
        year_val = 2000 + ( (guint32) tvb_get_guint8( tvb, 96 ) ) ;
        proto_tree_add_uint(c15ch_qos_tree, hf_c15ch_qos_year, tvb, 96, 1, year_val);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_month,
                            tvb, 97, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_day,
                            tvb, 98, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_qos_tree, hf_c15ch_qos_day_of_week,
                            tvb, 99, 1, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_route(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_route_tree = NULL;

    guint32 route_num_val = 0;

    route_num_val = tvb_get_ntohl(tvb, 0);
    col_append_fstr(pinfo->cinfo, COL_INFO, ", Route Number: %d", route_num_val);
    if (tree)
    {
        ti = proto_tree_add_item(tree,hf_c15ch_route, tvb, 0, 17, ENC_NA);
        c15ch_route_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);
        proto_tree_add_item(c15ch_route_tree, hf_c15ch_route_number,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_route_tree, hf_c15ch_route_type,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_route_tree, hf_c15ch_route_subpm,
                            tvb, 8, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_route_tree, hf_c15ch_route_trkpm,
                            tvb, 12, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_route_tree, hf_c15ch_route_strtaindo,
                            tvb, 16, 1, ENC_BIG_ENDIAN);
        if ( tvb_reported_length(tvb) >= 25 )
        {
            proto_tree_add_item(c15ch_route_tree, hf_c15ch_route_cr_rte_adv,
                            tvb, 17, 4, ENC_BIG_ENDIAN);
            proto_tree_add_item(c15ch_route_tree, hf_c15ch_route_cause,
                            tvb, 21, 4, ENC_BIG_ENDIAN);
        }
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_sccp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{

    proto_item * ti = NULL;
    proto_tree * c15ch_sccp_tree = NULL;
    proto_tree * sub_ni_tn_tree = NULL;
    guint8 direction;
    tvbuff_t * next_tvb;

    direction = tvb_get_guint8(tvb, 0);
    if (tree)
    {

        ti = proto_tree_add_item(tree, hf_c15ch_sccp, tvb, 0, 302, ENC_NA);
        c15ch_sccp_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);
        proto_tree_add_item(c15ch_sccp_tree, hf_c15ch_sccp_direction,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_sccp_tree, hf_c15ch_sccp_msgtype,
                            tvb, 1, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_sccp_tree, hf_c15ch_sccp_hopcount,
                            tvb, 2, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_sccp_tree, hf_c15ch_sccp_transactionnum,
                            tvb, 3, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_sccp_tree, hf_c15ch_sccp_opcmember,
                            tvb, 7, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_sccp_tree, hf_c15ch_sccp_opccluster,
                            tvb, 8, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_sccp_tree, hf_c15ch_sccp_opcnetwork,
                            tvb, 9, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_sccp_tree, hf_c15ch_sccp_dpcmember,
                            tvb, 10, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_sccp_tree, hf_c15ch_sccp_dpccluster,
                            tvb, 11, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_sccp_tree, hf_c15ch_sccp_dpcnetwork,
                            tvb, 12, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_sccp_tree, hf_c15ch_sccp_level3index,
                            tvb, 13, 1, ENC_BIG_ENDIAN);
        /* NI/TN */
        ti = proto_tree_add_item(c15ch_sccp_tree, hf_c15ch_sccp_ni_tn, tvb, 14, 8, ENC_BIG_ENDIAN);
        sub_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub1);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_sccp_ni,
                            tvb, 14, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_sccp_tn,
                            tvb, 18, 4, ENC_BIG_ENDIAN);

        proto_tree_add_item(c15ch_sccp_tree, hf_c15ch_sccp_sls,
                            tvb, 22, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_sccp_tree, hf_c15ch_sccp_iptime,
                            tvb, 298, 4, ENC_BIG_ENDIAN);

        /* skip bytes to get to SCCP message type */
        next_tvb = tvb_new_subset_length_caplen(tvb, 23 + 2,
                                    275 - 2, 275 - 2);

        /* sccp dissector call */
        call_dissector(general_sccp_handle, next_tvb, pinfo, tree);
    }
    col_set_str(pinfo->cinfo, COL_PROTOCOL, C15_LABEL);
    col_clear(pinfo->cinfo, COL_INFO);
    col_add_fstr(pinfo->cinfo, COL_INFO, "Type: SCCP, Direction: %s",
                val_to_str(direction, c15ch_sccp_direction_types, "Unknown Direction Subtype: %d")  );
    return tvb_reported_length(tvb);
}

static int dissect_c15ch_srcedest(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_srcedest_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_srcedest, tvb, 0, 3, ENC_NA);
        c15ch_srcedest_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);
        proto_tree_add_item(c15ch_srcedest_tree, hf_c15ch_srcedest_conntype,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_srcedest_tree, hf_c15ch_srcedest_pathtype,
                            tvb, 1, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_srcedest_tree, hf_c15ch_srcedest_pathdirect,
                            tvb, 2, 1, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_tcap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_tcap_tree = NULL;

    guint8 local_ssn_val = 0;

    local_ssn_val = tvb_get_guint8(tvb, 4);
    col_append_fstr(pinfo->cinfo, COL_INFO, ", Local SSN: %s",
        val_to_str(local_ssn_val, c15ch_tcap_local_ssn_types, "Unknown %d"));
    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_tcap, tvb, 0, 20, ENC_NA);
        c15ch_tcap_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);
        proto_tree_add_item(c15ch_tcap_tree, hf_c15ch_tcap_direction,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tcap_tree, hf_c15ch_tcap_action,
                            tvb, 1, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tcap_tree, hf_c15ch_tcap_package_type,
                            tvb, 2, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tcap_tree, hf_c15ch_tcap_ssn,
                            tvb, 3, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tcap_tree, hf_c15ch_tcap_local_ssn,
                            tvb, 4, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tcap_tree, hf_c15ch_tcap_result_err_code,
                            tvb, 5, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tcap_tree, hf_c15ch_tcap_return_reason,
                            tvb, 6, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tcap_tree, hf_c15ch_tcap_feat_id,
                            tvb, 7, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tcap_tree, hf_c15ch_tcap_feat_req,
                            tvb, 8, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tcap_tree, hf_c15ch_tcap_cl_comp_result,
                            tvb, 9, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tcap_tree, hf_c15ch_tcap_release_bit,
                            tvb, 10, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tcap_tree, hf_c15ch_tcap_term_cl_request,
                            tvb, 11, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tcap_tree, hf_c15ch_tcap_opc_index,
                            tvb, 12, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tcap_tree, hf_c15ch_tcap_dpc_mem,
                            tvb, 13, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tcap_tree, hf_c15ch_tcap_dpc_clus,
                            tvb, 14, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tcap_tree, hf_c15ch_tcap_dpc_net,
                            tvb, 15, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tcap_tree, hf_c15ch_tcap_cp_id,
                            tvb, 16, 4, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_twc_rswch(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_twc_rswch_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_twc_rswch, tvb, 0, 28, ENC_NA);
        c15ch_twc_rswch_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);
        proto_tree_add_item(c15ch_twc_rswch_tree, hf_c15ch_twc_rswch_pm,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_twc_rswch_tree, hf_c15ch_twc_rswch_subpm,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_twc_rswch_tree, hf_c15ch_twc_rswch_trkpm,
                            tvb, 8, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_twc_rswch_tree, hf_c15ch_twc_rswch_devid,
                            tvb, 12, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_twc_rswch_tree, hf_c15ch_twc_rswch_event,
                            tvb, 16, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_twc_rswch_tree, hf_c15ch_twc_rswch_parm,
                            tvb, 20, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_twc_rswch_tree, hf_c15ch_twc_rswch_iptime,
                            tvb, 24, 4, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}

static int dissect_c15ch_cp_event(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_cp_event_tree = NULL;

    guint32 pm_value = 0;
    guint32 event_value = 0;
    guint32 parm_value = 0;
    guint32 subpm_value = 0;
    guint32 trkpm_value = 0;
    if (tvb_reported_length(tvb) < 28)
    {
        return 0;
    }
    pm_value = tvb_get_ntohl(tvb, 0);
    subpm_value = tvb_get_ntohl(tvb, 4);
    trkpm_value = tvb_get_ntohl(tvb, 8);
    event_value = tvb_get_ntohl(tvb, 16);
    parm_value = tvb_get_ntohl(tvb, 20);
    col_clear(pinfo->cinfo, COL_INFO);

    col_add_fstr(pinfo->cinfo, COL_INFO, "Type: CP_EVENT, PM Type: %s",
        val_to_str_ext(pm_value, &c15_pm_types_ext, "Unknown %d") );

    if ( ( pm_value <= MAX_PM_VAL ) && ( pm_value != DIG_CKT_TEST_PM_VALUE ) )
    {
        col_append_fstr(pinfo->cinfo, COL_INFO, ", Sub PM: %s",
                val_to_str(subpm_value, subpm_name_tables[ pm_value ], "%d"));
    }
    else
    {
        if ( pm_value == DIG_CKT_TEST_PM_VALUE )
        {
            col_append_fstr(pinfo->cinfo, COL_INFO, ", Trk PM: %s",
                    val_to_str(trkpm_value, trkpm_dig_ckt_test_types, "%d"));
            if ( trkpm_value > MAX_DIG_CKT_TEST_TRKPM_VAL  )
            {
                col_append_fstr(pinfo->cinfo, COL_INFO, ", Sub PM: %d", subpm_value);
            }
            else
            {
                col_append_fstr(pinfo->cinfo, COL_INFO, ", Sub PM: %s",
                    val_to_str(subpm_value, dig_ckt_test_subpm_name_tables[ trkpm_value ], "%d"));
            }
        }
        else    /* (pm_value < MIN_PM_VAL) || (pm_value > MAX_PM_VAL) */
        {
            col_append_fstr(pinfo->cinfo, COL_INFO, ", Sub PM: %d", subpm_value);
        }
    }

    col_append_fstr(pinfo->cinfo, COL_INFO, ", Event Type: %s, Parm: %d",
        val_to_str_ext(event_value, &c15_event_types_ext, "Unknown %d"), parm_value);


    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_cp_event, tvb, 0, 28, ENC_NA);

        proto_item_append_text(ti, ", PM Type: %s",
            val_to_str_ext(pm_value, &c15_pm_types_ext, "Unknown"));
        proto_item_append_text(ti, ", Event Type: %s",
            val_to_str_ext(event_value, &c15_event_types_ext, "Unknown"));
        c15ch_cp_event_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);

        proto_tree_add_item(c15ch_cp_event_tree, hf_c15ch_cp_event_pm,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        if ( pm_value > MAX_PM_VAL )
        {
            /* Unknown Type */
            proto_tree_add_item(c15ch_cp_event_tree, hf_c15ch_cp_event_subpm,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
        }
        else
        {
            /* pm_value is within expected range */
            if ( pm_value != DIG_CKT_TEST_PM_VALUE )
            {
                /*a normal pm type */
                proto_tree_add_item(c15ch_cp_event_tree, *(subpm_table[ pm_value ] ),
                            tvb, 4, 4, ENC_BIG_ENDIAN);
            }
            else
            {
                /* special case for labeling subpm values of dig_ckt pm type */
                if ( trkpm_value > MAX_DIG_CKT_TEST_TRKPM_VAL )
                {
                    /* this is a dig_ckt pm type, but the trkpm value is out of range */
                    /* use the default dig_ckt subpm field from the subpm_table */
                    proto_tree_add_item(c15ch_cp_event_tree, *(subpm_table[ pm_value ] ),
                            tvb, 4, 4, ENC_BIG_ENDIAN);
                }
                else
                {
                    /* dig_ckt pm type, with the trkpm value in the expected range */
                    proto_tree_add_item(c15ch_cp_event_tree, *(dig_ckt_test_subpm_table[ trkpm_value ] ),
                            tvb, 4, 4, ENC_BIG_ENDIAN);
                }
            }
        }

        if (pm_value !=  DIG_CKT_TEST_PM_VALUE)
        {
            proto_tree_add_item(c15ch_cp_event_tree, hf_c15ch_cp_event_trkpm,
                            tvb, 8, 4, ENC_BIG_ENDIAN);
        }
        else
        {
            proto_tree_add_item(c15ch_cp_event_tree, hf_c15ch_cp_event_dig_ckt_test_trkpm,
                            tvb, 8, 4, ENC_BIG_ENDIAN);
        }
        proto_tree_add_item(c15ch_cp_event_tree, hf_c15ch_cp_event_devid,
                            tvb, 12, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_cp_event_tree, hf_c15ch_cp_event_event,
                            tvb, 16, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_cp_event_tree, hf_c15ch_cp_event_parm,
                            tvb, 20, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_cp_event_tree, hf_c15ch_cp_event_iptime,
                            tvb, 24, 4, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}

/* second level dissection code : called after header is dissected */
static int dissect_c15ch_inc_gwe(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_tree = NULL;
    proto_tree * sub_ni_tn_tree = NULL;

    int retv = 0;
    guint8 task_num;
    guint8 type_num;
    guint8 fiat_num;
    tvbuff_t * next_tvb;
    gboolean task_in_range = TRUE;
    gboolean fiat_index_in_range = TRUE;

    task_num = tvb_get_guint8(tvb,  8);
    fiat_num = tvb_get_guint8(tvb,  9);
    type_num = tvb_get_guint8(tvb, 10);

    if ( task_num > LAST_TASK_TYPE_INDEX )
    {    /* this happens for unknown task types */
        task_in_range  = FALSE;
        fiat_index_in_range = FALSE; /* don't guess what the correct fiat table should be for unknown task */
    }

    if ( task_in_range )
    {
        if ( ( task_num < FIRST_FIAT_NAME_TABLE_INDEX ) || (task_num > LAST_FIAT_NAME_TABLE_INDEX ) )
        {
            fiat_index_in_range = FALSE; /* this happens for INVALID_TASK_TYPE_VAL */
        }
    }

    col_clear(pinfo->cinfo, COL_INFO);


    if (fiat_index_in_range)
    {
        col_add_fstr(pinfo->cinfo, COL_INFO, "Type: INC_GWE, Task: %s, Fiat: %s",
                val_to_str( task_num, c15inc_gwe_task_types, "Unknown Task Type: %d" ),
                val_to_str( fiat_num, fiat_name_tables[ task_num ], "Unknown Fiat Type: %d") );
    }
    else /* either (task_num == INVALID_TASK_TYPE_VAL) or we have an unknown task */
    {
            col_add_fstr(pinfo->cinfo, COL_INFO, "Type: INC_GWE, Task: %s",
                val_to_str( task_num, c15inc_gwe_task_types, "Unknown Task Type: %d" ));
    }

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe, tvb, 0, 11, ENC_NA);
        /* note that defined INVALID_TASK_TYPE will be labeled as such, but task types that are out
        of range will be labeled as an Unknown Task Type */
        proto_item_append_text(ti, ", Task: %s",
                val_to_str( task_num, c15inc_gwe_task_types, "Unknown Task Type: %d" ) );


        if ( fiat_index_in_range) /* we can find a fiat name table: not defined Invalid task type and not unknown task */
        {
            proto_item_append_text( ti, ", Fiat: %s",
                val_to_str( fiat_num, fiat_name_tables[ task_num ], "Unknown Fiat Type: %d" ) );
        }
        c15ch_inc_gwe_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);

        ti = proto_tree_add_item(c15ch_inc_gwe_tree, hf_c15ch_inc_gwe_ni_tn,
                            tvb, 0, 8, ENC_BIG_ENDIAN);
        sub_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub1);

        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_inc_gwe_ni,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_inc_gwe_tn,
                            tvb, 4, 4, ENC_BIG_ENDIAN);

        proto_tree_add_item(c15ch_inc_gwe_tree, hf_c15ch_inc_gwe_taskid,
                            tvb, 8, 1, ENC_BIG_ENDIAN);
        if (task_in_range) /* can be of any defined task type including INVALID */
        {
            proto_tree_add_item(c15ch_inc_gwe_tree, *(fiatid_table[ task_num ] ),
                            tvb, 9, 1, ENC_BIG_ENDIAN);
        }
        proto_tree_add_item(c15ch_inc_gwe_tree, hf_c15ch_inc_gwe_datatype,
                            tvb, 10, 1, ENC_BIG_ENDIAN);
    }
    next_tvb = tvb_new_subset_remaining(tvb, 11);
    /*third level dissection*/
    retv = 11 + dissector_try_uint(c15ch_inc_gwe_dissector_table, type_num, next_tvb, pinfo, tree);
    return retv;
}

/* Third level dissection code : called after basic inc gwe header info is dissected */

static int dissect_c15ch_inc_gwe_admn_dn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_admn_dn_tree = NULL;

    guint8 num_digits;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_admn_dn, tvb, 0, 37, ENC_NA);
        c15ch_inc_gwe_admn_dn_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        num_digits = tvb_get_guint8(tvb, 4);
        proto_tree_add_item(c15ch_inc_gwe_admn_dn_tree, hf_c15ch_inc_gwe_admn_dn_ip_gwe_sua_hndl,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        add_digits_string(hf_c15ch_inc_gwe_admn_dn_ip_gwe_digits, tvb, c15ch_inc_gwe_admn_dn_tree,
            5, num_digits, 32, 1);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_inc_gwe_admn_updt(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_admn_updt_tree = NULL;
    proto_tree * sub_ni_tn_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_admn_updt, tvb, 0, 20, ENC_NA);
        c15ch_inc_gwe_admn_updt_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);

        ti = proto_tree_add_item(c15ch_inc_gwe_admn_updt_tree, hf_c15ch_inc_gwe_admn_updt_ip_gwe_med_ni_tn,
                            tvb, 0, 8, ENC_BIG_ENDIAN);
        sub_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_third_level_inc_gwe_sub1);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_inc_gwe_admn_updt_ip_gwe_med_ni,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_inc_gwe_admn_updt_ip_gwe_med_tn,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_admn_updt_tree, hf_c15ch_inc_gwe_admn_updt_ip_ns_iface,
                            tvb, 8, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_admn_updt_tree, hf_c15ch_inc_gwe_admn_updt_ip_ns_terminal,
                            tvb, 12, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_admn_updt_tree, hf_c15ch_inc_gwe_admn_updt_ip_gwe_new_rec_addr,
                            tvb, 16, 4, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_inc_gwe_bc_pgi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_bc_pgi_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_bc_pgi, tvb, 0, 19, ENC_NA);
        c15ch_inc_gwe_bc_pgi_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        proto_tree_add_item(c15ch_inc_gwe_bc_pgi_tree, hf_c15ch_inc_gwe_bc_pgi_pbc_conn_num,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_bc_pgi_tree, hf_c15ch_inc_gwe_bc_pgi_pbc_conn_type,
                            tvb, 4, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_bc_pgi_tree, hf_c15ch_inc_gwe_bc_pgi_pbc_msg_type,
                            tvb, 5, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_bc_pgi_tree, hf_c15ch_inc_gwe_bc_pgi_bc_mode,
                            tvb, 6, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_bc_pgi_tree, hf_c15ch_inc_gwe_bc_pgi_bc_pgi_sdp,
                            tvb, 7, 4, ENC_LITTLE_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_bc_pgi_tree, hf_c15ch_inc_gwe_bc_pgi_bc_pgi_m_port,
                            tvb, 11, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_bc_pgi_tree, hf_c15ch_inc_gwe_bc_pgi_pbc_tst_flags,
                            tvb, 15, 4, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}

static int dissect_c15ch_inc_gwe_chg_hndl(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_chg_hndl_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_chg_hndl, tvb, 0, 8, ENC_NA);
        c15ch_inc_gwe_chg_hndl_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        proto_tree_add_item(c15ch_inc_gwe_chg_hndl_tree, hf_c15ch_inc_gwe_chg_hndl_ip_gwe_sua_hndl,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_chg_hndl_tree, hf_c15ch_inc_gwe_chg_hndl_ip_gwe_new_hndl,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_inc_gwe_cl_ans(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_cl_ans_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_cl_ans, tvb, 0, 14, ENC_NA);
        c15ch_inc_gwe_cl_ans_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        proto_tree_add_item(c15ch_inc_gwe_cl_ans_tree, hf_c15ch_inc_gwe_cl_ans_ip_gwe_sua_hndl,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_cl_ans_tree, hf_c15ch_inc_gwe_cl_ans_ip_gwe_conn_num,
                            tvb, 4, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_cl_ans_tree, hf_c15ch_inc_gwe_cl_ans_ip_cl_ans_lsdp,
                            tvb, 5, 4, ENC_LITTLE_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_cl_ans_tree, hf_c15ch_inc_gwe_cl_ans_ip_cl_ans_m_port,
                            tvb, 9, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_cl_ans_tree, hf_c15ch_inc_gwe_cl_ans_encap_isup,
                            tvb, 13, 1, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_inc_gwe_cl_prog(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_cl_prog_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_cl_prog, tvb, 0, 15, ENC_NA);
        c15ch_inc_gwe_cl_prog_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        proto_tree_add_item(c15ch_inc_gwe_cl_prog_tree, hf_c15ch_inc_gwe_cl_prog_ip_gwe_sua_hndl,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_cl_prog_tree, hf_c15ch_inc_gwe_cl_prog_ip_gwe_conn_num,
                            tvb, 4, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_cl_prog_tree, hf_c15ch_inc_gwe_cl_prog_ip_cl_prog_lsdp,
                            tvb, 5, 4, ENC_LITTLE_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_cl_prog_tree, hf_c15ch_inc_gwe_cl_prog_ip_cl_prog_m_port,
                            tvb, 9, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_cl_prog_tree, hf_c15ch_inc_gwe_cl_prog_ip_gwe_stat_code,
                            tvb, 13, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_cl_prog_tree, hf_c15ch_inc_gwe_cl_prog_encap_isup,
                            tvb, 14, 1, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_inc_gwe_cl_redir(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_cl_redir_tree = NULL;


    guint8 redir_num_digits;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_cl_redir, tvb, 0, 24, ENC_NA);
        c15ch_inc_gwe_cl_redir_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        redir_num_digits = tvb_get_guint8(tvb, 8);
        proto_tree_add_item(c15ch_inc_gwe_cl_redir_tree, hf_c15ch_inc_gwe_cl_redir_ip_gwe_sua_hndl,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_cl_redir_tree, hf_c15ch_inc_gwe_cl_redir_ip_gwe_conn_num,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
        add_digits_string(hf_c15ch_inc_gwe_cl_redir_ip_gwe_redir_digits, tvb,c15ch_inc_gwe_cl_redir_tree,
            9, redir_num_digits, 15, 1);
    }
    return tvb_reported_length(tvb);
}

static int dissect_c15ch_inc_gwe_cl_refer(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_cl_refer_tree = NULL;
    proto_tree * sub_ni_tn_tree = NULL;

    guint8 trgt_num_digits;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_cl_refer, tvb, 0, 49, ENC_NA);
        c15ch_inc_gwe_cl_refer_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        trgt_num_digits = tvb_get_guint8(tvb, 8);
        proto_tree_add_item(c15ch_inc_gwe_cl_refer_tree, hf_c15ch_inc_gwe_cl_refer_ip_gwe_sua_hndl,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_cl_refer_tree, hf_c15ch_inc_gwe_cl_refer_ip_gwe_conn_num,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
        add_digits_string(hf_c15ch_inc_gwe_cl_refer_ip_gwe_trgt_digits, tvb, c15ch_inc_gwe_cl_refer_tree,
            9, trgt_num_digits, 32, 1);
        ti = proto_tree_add_item(c15ch_inc_gwe_cl_refer_tree, hf_c15ch_inc_gwe_cl_refer_ip_gwe_trgt_ni_tn,
                            tvb, 41, 8, ENC_BIG_ENDIAN);
        sub_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_third_level_inc_gwe_sub1);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_inc_gwe_cl_refer_ip_gwe_trgt_ni,
                            tvb, 41, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_inc_gwe_cl_refer_ip_gwe_trgt_tn,
                            tvb, 45, 4, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}

static int dissect_c15ch_inc_gwe_cl_rel(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_cl_rel_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_cl_rel, tvb, 0, 7, ENC_NA);
        c15ch_inc_gwe_cl_rel_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        proto_tree_add_item(c15ch_inc_gwe_cl_rel_tree, hf_c15ch_inc_gwe_cl_rel_ip_gwe_sua_hndl,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_cl_rel_tree, hf_c15ch_inc_gwe_cl_rel_ip_gwe_conn_num,
                            tvb, 4, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_cl_rel_tree, hf_c15ch_inc_gwe_cl_rel_ip_gwe_stat_code,
                            tvb, 5, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_cl_rel_tree, hf_c15ch_inc_gwe_cl_rel_encap_isup,
                            tvb, 6, 1, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_inc_gwe_cl_setup(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_cl_setup_tree = NULL;


    guint8 num_digits;

    num_digits = tvb_get_guint8(tvb, 4);

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_cl_setup, tvb, 0, 45, ENC_NA);
        c15ch_inc_gwe_cl_setup_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        proto_tree_add_item(c15ch_inc_gwe_cl_setup_tree, hf_c15ch_inc_gwe_cl_setup_ip_gwe_sua_hndl,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        add_digits_string(hf_c15ch_inc_gwe_cl_setup_ip_gwe_cled_digits,tvb,c15ch_inc_gwe_cl_setup_tree,
            5, num_digits, 32, 1);
        proto_tree_add_item(c15ch_inc_gwe_cl_setup_tree, hf_c15ch_inc_gwe_cl_setup_ip_cl_setup_lsdp,
                            tvb, 37, 4, ENC_LITTLE_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_cl_setup_tree, hf_c15ch_inc_gwe_cl_setup_ip_cl_setup_m_port,
                            tvb, 41, 4, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}

static int dissect_c15ch_inc_gwe_h248_digit(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_h248_digit_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_h248_digit, tvb, 0, 2, ENC_NA);
        c15ch_inc_gwe_h248_digit_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        proto_tree_add_item(c15ch_inc_gwe_h248_digit_tree, hf_c15ch_inc_gwe_h248_digit_ip_gwe_digit,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_h248_digit_tree, hf_c15ch_inc_gwe_h248_digit_ip_gwe_digit_method,
                            tvb, 1, 1, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}

static int dissect_c15ch_inc_gwe_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_info_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_info, tvb, 0, 10, ENC_NA);
        c15ch_inc_gwe_info_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        proto_tree_add_item(c15ch_inc_gwe_info_tree, hf_c15ch_inc_gwe_info_ip_gwe_sua_hndl,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_info_tree, hf_c15ch_inc_gwe_info_ip_gwe_info_type,
                            tvb, 4, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_info_tree, hf_c15ch_inc_gwe_info_ip_gwe_info_digit,
                            tvb, 5, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_info_tree, hf_c15ch_inc_gwe_info_encap_isup_msg_type,
                            tvb, 9, 1, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}

static int dissect_c15ch_inc_gwe_inv_repl(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_inv_repl_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_inv_repl, tvb, 0, 16, ENC_NA);
        c15ch_inc_gwe_inv_repl_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        proto_tree_add_item(c15ch_inc_gwe_inv_repl_tree, hf_c15ch_inc_gwe_inv_repl_ip_gwe_sua_hndl,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_inv_repl_tree, hf_c15ch_inc_gwe_inv_repl_ip_gwe_conn_num,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_inv_repl_tree, hf_c15ch_inc_gwe_inv_repl_ip_inv_repl_rsdp_ip,
                            tvb, 8, 4, ENC_LITTLE_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_inv_repl_tree, hf_c15ch_inc_gwe_inv_repl_ip_inv_repl_rsdp_port,
                            tvb, 12, 4, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_inc_gwe_mgcp_dlcx(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_mgcp_dlcx_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_mgcp_dlcx, tvb, 0, 4, ENC_NA);
        c15ch_inc_gwe_mgcp_dlcx_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        proto_tree_add_item(c15ch_inc_gwe_mgcp_dlcx_tree, hf_c15ch_inc_gwe_mgcp_dlcx_err_code,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}

static int dissect_c15ch_inc_gwe_notify(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_notify_tree = NULL;


    guint8 num_digits;

    num_digits = tvb_get_guint8(tvb, 4);

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_notify, tvb, 0, 37, ENC_NA);
        c15ch_inc_gwe_notify_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        proto_tree_add_item(c15ch_inc_gwe_notify_tree, hf_c15ch_inc_gwe_notify_ip_gwe_mwi_stat,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        add_digits_string(hf_c15ch_inc_gwe_notify_ip_gwe_digits,tvb,c15ch_inc_gwe_notify_tree,
            5, num_digits, 32, 1);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_inc_gwe_ntwk_mod(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_ntwk_mod_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_ntwk_mod, tvb, 0, 22, ENC_NA);
        c15ch_inc_gwe_ntwk_mod_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        proto_tree_add_item(c15ch_inc_gwe_ntwk_mod_tree, hf_c15ch_inc_gwe_ntwk_mod_ip_gwe_sua_hndl,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_ntwk_mod_tree, hf_c15ch_inc_gwe_ntwk_mod_ip_gwe_conn_num,
                            tvb, 4, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_ntwk_mod_tree, hf_c15ch_inc_gwe_ntwk_mod_ip_ntwk_mod_lsdp,
                            tvb, 5, 4, ENC_LITTLE_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_ntwk_mod_tree, hf_c15ch_inc_gwe_ntwk_mod_ip_ntwk_mod_l_m_port,
                            tvb, 9, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_ntwk_mod_tree, hf_c15ch_inc_gwe_ntwk_mod_ip_ntwk_mod_rsdp,
                            tvb, 13, 4, ENC_LITTLE_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_ntwk_mod_tree, hf_c15ch_inc_gwe_ntwk_mod_ip_ntwk_mod_r_m_port,
                            tvb, 17, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_ntwk_mod_tree, hf_c15ch_inc_gwe_ntwk_mod_ip_gwe_stat_code,
                            tvb, 21, 1, ENC_BIG_ENDIAN);

    }
    return tvb_reported_length(tvb);
}

static int dissect_c15ch_inc_gwe_ptrk_setup(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_ptrk_setup_tree = NULL;


    guint8 cled_num_digits, clng_num_digits, redir_num_digits, ocn_num_digits, chrg_num_digits,
        rn_num_digits, cic_num_digits;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_ptrk_setup, tvb, 0, 172, ENC_NA);
        c15ch_inc_gwe_ptrk_setup_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        /* CLED */
        cled_num_digits = tvb_get_guint8(tvb, 4);

        /* CLNG */
        clng_num_digits = tvb_get_guint8(tvb, 46);

        /* REDIR */
        redir_num_digits = tvb_get_guint8(tvb, 85);

        /* OCN */
        ocn_num_digits = tvb_get_guint8(tvb, 103);

        /* CHRG */
        chrg_num_digits = tvb_get_guint8(tvb, 119);

        /* RN */
        rn_num_digits = tvb_get_guint8(tvb, 133);

        /* CIC */
        cic_num_digits = tvb_get_guint8(tvb, 166);

        proto_tree_add_item(c15ch_inc_gwe_ptrk_setup_tree, hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_sua_hndl,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        add_digits_string(hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_cled_digits,tvb,c15ch_inc_gwe_ptrk_setup_tree,
            5,cled_num_digits, 32, 1);
        proto_tree_add_item(c15ch_inc_gwe_ptrk_setup_tree, hf_c15ch_inc_gwe_ptrk_setup_ip_cl_setup_lsdp,
                            tvb, 37, 4, ENC_LITTLE_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_ptrk_setup_tree, hf_c15ch_inc_gwe_ptrk_setup_ip_cl_setup_m_port,
                            tvb, 41, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_ptrk_setup_tree, hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_clid_pri,
                            tvb, 45, 1, ENC_BIG_ENDIAN);
        add_digits_string(hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_clng_digits,tvb,c15ch_inc_gwe_ptrk_setup_tree,
            47,clng_num_digits, 32, 1);
        proto_tree_add_item(c15ch_inc_gwe_ptrk_setup_tree, hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_clng_ton,
                            tvb, 79, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_ptrk_setup_tree, hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_clng_np,
                            tvb, 80, 1, ENC_BIG_ENDIAN);

        proto_tree_add_item(c15ch_inc_gwe_ptrk_setup_tree, hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_alert_info,
                            tvb, 81, 4, ENC_BIG_ENDIAN);

        add_digits_string(hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_redir_digits,tvb,c15ch_inc_gwe_ptrk_setup_tree,
            86,redir_num_digits, 15, 1);
        proto_tree_add_item(c15ch_inc_gwe_ptrk_setup_tree, hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_redir_ton,
                            tvb, 101, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_ptrk_setup_tree, hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_redir_np,
                            tvb, 102, 1, ENC_BIG_ENDIAN);

        add_digits_string(hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_ocn_digits,tvb,c15ch_inc_gwe_ptrk_setup_tree,
            104,ocn_num_digits, 15, 1);

        add_digits_string(hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_chrg_digits,tvb,c15ch_inc_gwe_ptrk_setup_tree,
            120,chrg_num_digits, 10, 1);
        proto_tree_add_item(c15ch_inc_gwe_ptrk_setup_tree, hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_chrg_noa,
                            tvb, 130, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_ptrk_setup_tree, hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_chrg_npi,
                            tvb, 131, 1, ENC_BIG_ENDIAN);

        proto_tree_add_item(c15ch_inc_gwe_ptrk_setup_tree, hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_npdi,
                            tvb, 132, 1, ENC_BIG_ENDIAN);

        add_digits_string(hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_rn_digits,tvb,c15ch_inc_gwe_ptrk_setup_tree,
            134,rn_num_digits, 32, 1);

        add_digits_string(hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_cic_digits,tvb,c15ch_inc_gwe_ptrk_setup_tree,
            167,cic_num_digits, 4, 1);

        proto_tree_add_item(c15ch_inc_gwe_ptrk_setup_tree, hf_c15ch_inc_gwe_ptrk_setup_encap_isup,
                            tvb, 171, 1, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_inc_gwe_reply(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_reply_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree,  hf_c15ch_inc_gwe_reply, tvb, 0, 28, ENC_NA);
        c15ch_inc_gwe_reply_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        proto_tree_add_item(c15ch_inc_gwe_reply_tree, hf_c15ch_inc_gwe_reply_ip_gwe_msg_type,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_reply_tree, hf_c15ch_inc_gwe_reply_ip_gwe_stat_code,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_reply_tree, hf_c15ch_inc_gwe_reply_ip_gwe_conn_num,
                            tvb, 8, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_reply_tree, hf_c15ch_inc_gwe_reply_nw_mdcn_lsdp_ip,
                            tvb, 12, 4, ENC_LITTLE_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_reply_tree, hf_c15ch_inc_gwe_reply_nw_mdcn_lsdp_port,
                            tvb, 16, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_reply_tree, hf_c15ch_inc_gwe_reply_nw_mdcn_rsdp_ip,
                            tvb, 20, 4, ENC_LITTLE_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_reply_tree, hf_c15ch_inc_gwe_reply_nw_mdcn_rsdp_port,
                            tvb, 24, 4, ENC_BIG_ENDIAN);

    }
    return tvb_reported_length(tvb);
}

static int dissect_c15ch_inc_gwe_rv_avail(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_rv_avail_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_rv_avail, tvb, 0, 12, ENC_NA);
        c15ch_inc_gwe_rv_avail_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        proto_tree_add_item(c15ch_inc_gwe_rv_avail_tree, hf_c15ch_inc_gwe_rv_avail_ip_gwe_sua_hndl,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_rv_avail_tree, hf_c15ch_inc_gwe_rv_avail_ip_gwe_conn_num,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_rv_avail_tree, hf_c15ch_inc_gwe_rv_avail_ip_gwe_info_len,
                            tvb, 8, 4, ENC_BIG_ENDIAN);

    }
    return tvb_reported_length(tvb);
}

static int dissect_c15ch_inc_gwe_sua_reply(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_sua_reply_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_sua_reply, tvb, 0, 32, ENC_NA);
        c15ch_inc_gwe_sua_reply_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        proto_tree_add_item(c15ch_inc_gwe_sua_reply_tree, hf_c15ch_inc_gwe_sua_reply_ip_gwe_sua_hndl,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_sua_reply_tree, hf_c15ch_inc_gwe_sua_reply_ip_gwe_msg_type,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_sua_reply_tree, hf_c15ch_inc_gwe_sua_reply_ip_gwe_stat_code,
                            tvb, 8, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_sua_reply_tree, hf_c15ch_inc_gwe_sua_reply_ip_gwe_conn_num,
                            tvb, 12, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_sua_reply_tree, hf_c15ch_inc_gwe_sua_reply_nw_mdcn_lsdp_ip,
                            tvb, 16, 4, ENC_LITTLE_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_sua_reply_tree, hf_c15ch_inc_gwe_sua_reply_nw_mdcn_lsdp_port,
                            tvb, 20, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_sua_reply_tree, hf_c15ch_inc_gwe_sua_reply_nw_mdcn_rsdp_ip,
                            tvb, 24, 4, ENC_LITTLE_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_sua_reply_tree, hf_c15ch_inc_gwe_sua_reply_nw_mdcn_rsdp_port,
                            tvb, 28, 4, ENC_BIG_ENDIAN);

    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_inc_gwe_subs_chg_hndl(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_subs_chg_hndl_tree = NULL;
    proto_tree * sub_ni_tn_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_subs_chg_hndl, tvb, 0, 16, ENC_NA);
        c15ch_inc_gwe_subs_chg_hndl_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        proto_tree_add_item(c15ch_inc_gwe_subs_chg_hndl_tree, hf_c15ch_inc_gwe_subs_chg_hndl_ip_gwe_sua_hndl,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_subs_chg_hndl_tree, hf_c15ch_inc_gwe_subs_chg_hndl_ip_gwe_new_hndl,
                            tvb, 4, 4, ENC_BIG_ENDIAN);

        ti = proto_tree_add_item(c15ch_inc_gwe_subs_chg_hndl_tree, hf_c15ch_inc_gwe_subs_chg_hndl_ip_gwe_med_ni_tn,
                            tvb, 8, 16, ENC_BIG_ENDIAN);
        sub_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_third_level_inc_gwe_sub1);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_inc_gwe_subs_chg_hndl_ip_gwe_med_ni,
                            tvb, 8, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_inc_gwe_subs_chg_hndl_ip_gwe_med_tn,
                            tvb, 12, 4, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}

static int dissect_c15ch_inc_gwe_sua_hndl(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_sua_hndl_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_sua_hndl, tvb, 0, 4, ENC_NA);
        c15ch_inc_gwe_sua_hndl_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        proto_tree_add_item(c15ch_inc_gwe_sua_hndl_tree, hf_c15ch_inc_gwe_sua_hndl_ip_gwe_sua_hndl,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}


static int dissect_c15ch_inc_gwe_tgh_stat(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_tgh_stat_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_tgh_stat, tvb, 0, 5, ENC_NA);
        c15ch_inc_gwe_tgh_stat_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        proto_tree_add_item(c15ch_inc_gwe_tgh_stat_tree, hf_c15ch_inc_gwe_tgh_stat_ip_gwe_sua_hndl,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_inc_gwe_tgh_stat_tree, hf_c15ch_inc_gwe_tgh_stat_ip_gwe_tgh_state,
                            tvb, 4, 1, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}

static int dissect_c15ch_inc_gwe_voip_cot(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_inc_gwe_voip_cot_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_inc_gwe_voip_cot, tvb, 0, 1, ENC_NA);
        c15ch_inc_gwe_voip_cot_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_inc_gwe);
        proto_tree_add_item(c15ch_inc_gwe_voip_cot_tree, hf_c15ch_inc_gwe_voip_cot_ip_gwe_pass_code,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}


/* second level dissection */
static int dissect_c15ch_out_gwe(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_tree = NULL;
    proto_tree * sub_ni_tn_tree = NULL;

    guint8 data_type;
    guint8 msg_type;
    tvbuff_t * next_tvb;

    msg_type = tvb_get_guint8(tvb, 8);
    data_type = tvb_get_guint8(tvb, 14);
    col_clear(pinfo->cinfo, COL_INFO);
    col_add_fstr(pinfo->cinfo, COL_INFO, "Type: OUT_GWE, Msg Subtype: %s",
        val_to_str_ext(msg_type, &c15_out_gwe_msg_types_ext, "Unknown Msg Subtype: %d") );
    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe, tvb, 0, 15, ENC_NA);
        proto_item_append_text(ti, ", Msg Subtype: %s",
            val_to_str_ext(msg_type, &c15_out_gwe_msg_types_ext, "Unknown Msg Subtype: %d"));
        c15ch_out_gwe_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);

        ti = proto_tree_add_item(c15ch_out_gwe_tree, hf_c15ch_out_gwe_ni_tn,
                            tvb, 0, 8, ENC_BIG_ENDIAN);

        sub_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_second_level_sub1);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_out_gwe_ni,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_out_gwe_tn,
                            tvb, 4, 4, ENC_BIG_ENDIAN);


        proto_tree_add_item(c15ch_out_gwe_tree, hf_c15ch_out_gwe_op_gwe_msg_type,
                            tvb, 8, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_tree, hf_c15ch_out_gwe_op_gwe_protocol,
                            tvb, 9, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_tree, hf_c15ch_out_gwe_op_sua_hndl,
                            tvb, 10, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_tree, hf_c15ch_out_gwe_gwe_data_type,
                            tvb, 14, 1, ENC_BIG_ENDIAN);
    }
    next_tvb = tvb_new_subset_remaining(tvb, 15);

    dissector_try_uint(c15ch_out_gwe_dissector_table, data_type, next_tvb, pinfo, tree);
    return tvb_reported_length(tvb);
}


/* third level dissection */
static int dissect_c15ch_out_gwe_audit_conn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_audit_conn_tree = NULL;
    proto_tree * sub_ni_tn_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_audit_conn, tvb, 0, 12, ENC_NA);
        c15ch_out_gwe_audit_conn_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        ti = proto_tree_add_item(c15ch_out_gwe_audit_conn_tree, hf_c15ch_out_gwe_audit_conn_ni_tn,
                            tvb, 0, 8, ENC_BIG_ENDIAN);
        sub_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_third_level_out_gwe);

        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_out_gwe_audit_conn_ni,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_out_gwe_audit_conn_tn,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_audit_conn_tree, hf_c15ch_out_gwe_audit_conn_context,
                            tvb, 8, 4, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_out_gwe_blf_data(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_blf_data_tree = NULL;
    proto_tree * sub_med_ni_tn_tree = NULL;
    proto_tree * sub_rb_ni_tn_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_blf_data, tvb, 0, 21, ENC_NA);
        c15ch_out_gwe_blf_data_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        proto_tree_add_item(c15ch_out_gwe_blf_data_tree, hf_c15ch_out_gwe_blf_data_rb_ua_handle,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_blf_data_tree, hf_c15ch_out_gwe_blf_data_rb_type,
                            tvb, 4, 1, ENC_BIG_ENDIAN);

        ti = proto_tree_add_item(c15ch_out_gwe_blf_data_tree, hf_c15ch_out_gwe_blf_data_med_ni_tn,
                            tvb, 5, 8, ENC_BIG_ENDIAN);
        sub_med_ni_tn_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe_sub1);
        proto_tree_add_item(sub_med_ni_tn_tree, hf_c15ch_out_gwe_blf_data_med_ni,
                            tvb, 5, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(sub_med_ni_tn_tree, hf_c15ch_out_gwe_blf_data_med_tn,
                            tvb, 9, 4, ENC_BIG_ENDIAN);

        ti = proto_tree_add_item(c15ch_out_gwe_blf_data_tree, hf_c15ch_out_gwe_blf_data_rb_ni_tn,
                            tvb, 13, 8, ENC_BIG_ENDIAN);
        sub_rb_ni_tn_tree = proto_item_add_subtree(ti,  ett_c15ch_third_level_out_gwe_sub2);
        proto_tree_add_item(sub_rb_ni_tn_tree, hf_c15ch_out_gwe_blf_data_rb_ni,
                            tvb, 13, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(sub_rb_ni_tn_tree, hf_c15ch_out_gwe_blf_data_rb_tn,
                            tvb, 17, 4, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_out_gwe_call_ans(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_call_ans_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_call_ans, tvb, 0, 13, ENC_NA);
        c15ch_out_gwe_call_ans_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        proto_tree_add_item(c15ch_out_gwe_call_ans_tree, hf_c15ch_out_gwe_call_ans_conn_num,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_call_ans_tree, hf_c15ch_out_gwe_call_ans_op_cl_ans_rsdp_ip,
                            tvb, 4, 4, ENC_LITTLE_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_call_ans_tree, hf_c15ch_out_gwe_call_ans_op_cl_ans_rsdp_port,
                            tvb, 8, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_call_ans_tree, hf_c15ch_out_gwe_call_ans_encap_isup,
                            tvb, 12, 1, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_out_gwe_call_notify(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_call_notify_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_call_notify, tvb, 0, 8, ENC_NA);
        c15ch_out_gwe_call_notify_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        proto_tree_add_item(c15ch_out_gwe_call_notify_tree, hf_c15ch_out_gwe_call_notify_op_gwe_mwi,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_call_notify_tree, hf_c15ch_out_gwe_call_notify_status_code,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_out_gwe_call_prog(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_call_prog_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_call_prog, tvb, 0, 9, ENC_NA);
        c15ch_out_gwe_call_prog_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        proto_tree_add_item(c15ch_out_gwe_call_prog_tree, hf_c15ch_out_gwe_call_prog_conn_num,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_call_prog_tree, hf_c15ch_out_gwe_call_prog_op_gwe_stat_code,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_call_prog_tree, hf_c15ch_out_gwe_call_prog_encap_isup,
                            tvb, 8, 1, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_out_gwe_call_rel(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_call_rel_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_call_rel, tvb, 0, 5, ENC_NA);
        c15ch_out_gwe_call_rel_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        proto_tree_add_item(c15ch_out_gwe_call_rel_tree, hf_c15ch_out_gwe_call_rel_status_code,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_call_rel_tree, hf_c15ch_out_gwe_call_rel_encap_isup,
                            tvb, 4, 1, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_out_gwe_call_setup(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_call_setup_tree = NULL;

    guint8 redir_num_digits;
    guint8 ocn_num_digits;
    guint8 chrg_num_digits;

    if (tree)
    {
        ti = proto_tree_add_item(tree,  hf_c15ch_out_gwe_call_setup, tvb, 0, 60, ENC_NA);
        c15ch_out_gwe_call_setup_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        /* redir */
        redir_num_digits = tvb_get_guint8(tvb, 12);

        /* ocn  */
        ocn_num_digits = tvb_get_guint8(tvb, 30);

        /* chrg  */
        chrg_num_digits = tvb_get_guint8(tvb, 46);

        proto_tree_add_item(c15ch_out_gwe_call_setup_tree, hf_c15ch_out_gwe_call_setup_conn_num,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_call_setup_tree, hf_c15ch_out_gwe_call_setup_op_cl_ans_rsdp_ip,
                            tvb, 4, 4, ENC_LITTLE_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_call_setup_tree, hf_c15ch_out_gwe_call_setup_op_cl_ans_rsdp_port,
                            tvb, 8, 4, ENC_BIG_ENDIAN);
        add_digits_string(hf_c15ch_out_gwe_call_setup_op_gwe_redir_digits, tvb, c15ch_out_gwe_call_setup_tree,
            13, redir_num_digits, 15, 1);
        proto_tree_add_item(c15ch_out_gwe_call_setup_tree, hf_c15ch_out_gwe_call_setup_op_gwe_rdir_ton,
                            tvb, 28, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_call_setup_tree, hf_c15ch_out_gwe_call_setup_op_gwe_rdir_np,
                            tvb, 29, 1, ENC_BIG_ENDIAN);
        add_digits_string(hf_c15ch_out_gwe_call_setup_op_gwe_ocn_digits, tvb, c15ch_out_gwe_call_setup_tree,
            31, ocn_num_digits, 15, 1);
        add_digits_string(hf_c15ch_out_gwe_call_setup_op_gwe_chrg_digits, tvb, c15ch_out_gwe_call_setup_tree,
            47, chrg_num_digits, 10, 1);
        proto_tree_add_item(c15ch_out_gwe_call_setup_tree, hf_c15ch_out_gwe_call_setup_op_gwe_chrg_noa,
                            tvb, 57, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_call_setup_tree, hf_c15ch_out_gwe_call_setup_op_gwe_chrg_npi,
                            tvb, 58, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_call_setup_tree, hf_c15ch_out_gwe_call_setup_encap_isup,
                            tvb, 59, 1, ENC_BIG_ENDIAN);
    }
    return tvb_reported_length(tvb);
}

static int dissect_c15ch_out_gwe_conn_num(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_conn_num_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_conn_num, tvb, 0, 4, ENC_NA);
        c15ch_out_gwe_conn_num_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        proto_tree_add_item(c15ch_out_gwe_conn_num_tree, hf_c15ch_out_gwe_conn_num_out_gwe_conn_num,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}

static int dissect_c15ch_out_gwe_del_subs_ua(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_del_subs_ua_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_del_subs_ua, tvb, 0, 4, ENC_NA);
        c15ch_out_gwe_del_subs_ua_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        proto_tree_add_item(c15ch_out_gwe_del_subs_ua_tree, hf_c15ch_out_gwe_del_subs_ua_op_sip_ua_hndl,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_out_gwe_digit_scan(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_digit_scan_tree = NULL;

    gint str_start;
    gint max_str_len;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_digit_scan, tvb, 0, 255, ENC_NA);
        c15ch_out_gwe_digit_scan_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        proto_tree_add_item(c15ch_out_gwe_digit_scan_tree, hf_c15ch_out_gwe_digit_scan_voip_dgmp_override,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        str_start = 1;
        max_str_len = 250;
        add_string_field( c15ch_out_gwe_digit_scan_tree, tvb, str_start, max_str_len, hf_c15ch_out_gwe_digit_scan_actv_dgmp  );
        proto_tree_add_item(c15ch_out_gwe_digit_scan_tree, hf_c15ch_out_gwe_digit_scan_op_gwe_digit_scan_tone,
                            tvb, 251, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_digit_scan_tree, hf_c15ch_out_gwe_digit_scan_op_gwe_tone_type,
                            tvb, 252, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_digit_scan_tree, hf_c15ch_out_gwe_digit_scan_op_gwe_tone_to,
                            tvb, 253, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_digit_scan_tree, hf_c15ch_out_gwe_digit_scan_op_gwe_digit_flash,
                            tvb, 254, 1, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_out_gwe_line_sprvsn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_line_sprvsn_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree,  hf_c15ch_out_gwe_line_sprvsn, tvb, 0, 3, ENC_NA);
        c15ch_out_gwe_line_sprvsn_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        proto_tree_add_item(c15ch_out_gwe_line_sprvsn_tree, hf_c15ch_out_gwe_line_sprvsn_op_gwe_ofhk_event,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_line_sprvsn_tree, hf_c15ch_out_gwe_line_sprvsn_op_gwe_onhk_event,
                            tvb, 1, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_line_sprvsn_tree, hf_c15ch_out_gwe_line_sprvsn_op_gwe_flhk_event,
                            tvb, 2, 1, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_out_gwe_md_conn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_md_conn_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_md_conn, tvb, 0, 6, ENC_NA);
        c15ch_out_gwe_md_conn_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        proto_tree_add_item(c15ch_out_gwe_md_conn_tree, hf_c15ch_out_gwe_md_conn_conn_num,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_md_conn_tree, hf_c15ch_out_gwe_md_conn_status_code,
                            tvb, 4, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_md_conn_tree, hf_c15ch_out_gwe_md_conn_op_gwe_mode,
                            tvb, 5, 1, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_out_gwe_out_cot(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_out_cot_tree = NULL;
    proto_tree * sub_ni_tn_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_out_cot, tvb, 0, 8, ENC_NA);
        c15ch_out_gwe_out_cot_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);

        ti = proto_tree_add_item(c15ch_out_gwe_out_cot_tree, hf_c15ch_out_gwe_out_cot_ni_tn,
                            tvb, 0, 8, ENC_BIG_ENDIAN);
        sub_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_third_level_out_gwe_sub1);

        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_out_gwe_out_cot_ni,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_out_gwe_out_cot_tn,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_out_gwe_mk_conn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_mk_conn_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_mk_conn, tvb, 0, 12, ENC_NA);
        c15ch_out_gwe_mk_conn_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        proto_tree_add_item(c15ch_out_gwe_mk_conn_tree, hf_c15ch_out_gwe_mk_conn_conn_num,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_mk_conn_tree, hf_c15ch_out_gwe_mk_conn_op_mk_conn_rsdp_ip,
                            tvb, 4, 4, ENC_LITTLE_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_mk_conn_tree, hf_c15ch_out_gwe_mk_conn_op_mk_conn_rsdp_port,
                            tvb, 8, 4, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}

static int dissect_c15ch_out_gwe_pcm_data(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_pcm_data_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_pcm_data, tvb, 0, 8, ENC_NA);
        c15ch_out_gwe_pcm_data_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        proto_tree_add_item(c15ch_out_gwe_pcm_data_tree, hf_c15ch_out_gwe_pcm_data_rb_ua_handle_near,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_pcm_data_tree, hf_c15ch_out_gwe_pcm_data_rb_ua_handle_far,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}

static int dissect_c15ch_out_gwe_ring_line(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_ring_line_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_ring_line, tvb, 0, 101, ENC_NA);
        c15ch_out_gwe_ring_line_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        proto_tree_add_item(c15ch_out_gwe_ring_line_tree, hf_c15ch_out_gwe_ring_line_op_gwe_display,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        add_string_field( c15ch_out_gwe_ring_line_tree, tvb, 1, 100, hf_c15ch_out_gwe_ring_line_op_gwe_display_chars );
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_out_gwe_rv_subs_data(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_rv_subs_data_tree = NULL;
    proto_tree * sub_ni_tn_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_rv_subs_data, tvb, 0, 8, ENC_NA);
        c15ch_out_gwe_rv_subs_data_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);

        ti = proto_tree_add_item(c15ch_out_gwe_rv_subs_data_tree, hf_c15ch_out_gwe_rv_subs_data_rb_fe_ni_tn,
                            tvb, 0, 8, ENC_BIG_ENDIAN);
        sub_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_third_level_out_gwe_sub1);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_out_gwe_rv_subs_data_rb_fe_ni,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_out_gwe_rv_subs_data_rb_fe_tn,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}

static int dissect_c15ch_out_gwe_sac_notify(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_sac_notify_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_sac_notify, tvb, 0, 2, ENC_NA);
        c15ch_out_gwe_sac_notify_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        proto_tree_add_item(c15ch_out_gwe_sac_notify_tree, hf_c15ch_out_gwe_sac_notify_op_gwe_blf_state,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_sac_notify_tree, hf_c15ch_out_gwe_sac_notify_op_gwe_subs_state,
                            tvb, 1, 1, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_out_gwe_sac_list_entry(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_sac_list_entry_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_sac_list_entry, tvb, 0, 72, ENC_NA);
        c15ch_out_gwe_sac_list_entry_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        add_string_field( c15ch_out_gwe_sac_list_entry_tree, tvb, 0,72,
                            hf_c15ch_out_gwe_sac_list_entry_op_gwe_med_uri );
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_out_gwe_sac_sub_valid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_sac_sub_valid_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_sac_sub_valid, tvb, 0, 5, ENC_NA);
        c15ch_out_gwe_sac_sub_valid_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        proto_tree_add_item(c15ch_out_gwe_sac_sub_valid_tree, hf_c15ch_out_gwe_sac_sub_valid_op_gwe_subs_valid,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_sac_sub_valid_tree, hf_c15ch_out_gwe_sac_sub_valid_op_gwe_num_list_items,
                            tvb, 1, 4, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_out_gwe_sip_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_sip_info_tree = NULL;


    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_sip_info, tvb, 0, 5, ENC_NA);
        c15ch_out_gwe_sip_info_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        proto_tree_add_item(c15ch_out_gwe_sip_info_tree, hf_c15ch_out_gwe_sip_info_op_gwe_sip_info_type,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_out_gwe_sip_info_tree, hf_c15ch_out_gwe_sip_info_op_gwe_sip_info,
                            tvb, 1, 4, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}

static int dissect_c15ch_out_gwe_sip_refer(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_sip_refer_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_sip_refer, tvb, 0, 4, ENC_NA);
        c15ch_out_gwe_sip_refer_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        proto_tree_add_item(c15ch_out_gwe_sip_refer_tree, hf_c15ch_out_gwe_sip_refer_op_gwe_refer_ua_hndl,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_out_gwe_update_ni_tn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_update_ni_tn_tree = NULL;
    proto_tree * sub_ni_tn_tree = NULL;


    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_update_ni_tn, tvb, 0, 8, ENC_NA);
        c15ch_out_gwe_update_ni_tn_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);

        ti = proto_tree_add_item(c15ch_out_gwe_update_ni_tn_tree, hf_c15ch_out_gwe_update_ni_tn_ni_tn,
                            tvb, 0, 8, ENC_BIG_ENDIAN);

        sub_ni_tn_tree = proto_item_add_subtree (ti, ett_c15ch_third_level_out_gwe_sub1);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_out_gwe_update_ni_tn_ni,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(sub_ni_tn_tree, hf_c15ch_out_gwe_update_ni_tn_tn,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}

static int dissect_c15ch_out_gwe_update_rec_addr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_out_gwe_update_rec_addr_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_out_gwe_update_rec_addr, tvb, 0, 4, ENC_NA);
        c15ch_out_gwe_update_rec_addr_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_out_gwe);
        proto_tree_add_item(c15ch_out_gwe_update_rec_addr_tree, hf_c15ch_out_gwe_update_rec_addr_op_new_rec_addr,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}

/* tone */

static int dissect_c15ch_tone(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_tone_tree = NULL;

    guint8 msg_type;
    tvbuff_t * next_tvb;
    guint32 retv = 0;

    msg_type = tvb_get_guint8(tvb, 0);
    col_clear(pinfo->cinfo, COL_INFO);
    col_add_fstr(pinfo->cinfo, COL_INFO, "Type: TONE, Msg Subtype: %s",
        val_to_str(msg_type, c15_tone_msg_types, "Unknown Msg Subtype: %d") );
    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_tone, tvb, 0, 1, ENC_NA);
        proto_item_append_text(ti, ", Msg Subtype: %s",
            val_to_str(msg_type, c15_tone_msg_types, "Unknown Msg Subtype: %d"));
        c15ch_tone_tree = proto_item_add_subtree(ti, ett_c15ch_second_level);
        proto_tree_add_item(c15ch_tone_tree, hf_c15ch_tone_msg_type,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
    }
    next_tvb = tvb_new_subset_remaining(tvb, 1);
    retv = 1 + dissector_try_uint(c15ch_tone_dissector_table, msg_type, next_tvb, pinfo, tree);
    return retv;
}


static int dissect_c15ch_tone_cot_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_tone_cot_control_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_tone_cot_control, tvb, 0, 5, ENC_NA);
        c15ch_tone_cot_control_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_tone);
        proto_tree_add_item(c15ch_tone_cot_control_tree, hf_c15ch_tone_cot_control_device_id,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tone_cot_control_tree, hf_c15ch_tone_cot_control_cot_task,
                            tvb, 1, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tone_cot_control_tree, hf_c15ch_tone_cot_control_dest_h248,
                            tvb, 2, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tone_cot_control_tree, hf_c15ch_tone_cot_control_srce_h248,
                            tvb, 3, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tone_cot_control_tree, hf_c15ch_tone_cot_control_svc_channel,
                            tvb, 4, 1, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}

static int dissect_c15ch_tone_cpm(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_tone_cpm_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_tone_cpm, tvb, 0, 3, ENC_NA);
        c15ch_tone_cpm_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_tone);
        proto_tree_add_item(c15ch_tone_cpm_tree, hf_c15ch_tone_cpm_loop_type,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tone_cpm_tree, hf_c15ch_tone_cpm_device_id,
                            tvb, 1, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tone_cpm_tree, hf_c15ch_tone_cpm_tone_type,
                            tvb, 2, 1, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_tone_give_tone(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_tone_give_tone_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_tone_give_tone, tvb, 0, 2, ENC_NA);
        c15ch_tone_give_tone_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_tone);
        proto_tree_add_item(c15ch_tone_give_tone_tree, hf_c15ch_tone_give_tone_tone_id,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tone_give_tone_tree, hf_c15ch_tone_give_tone_tone_type,
                            tvb, 1, 1, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}

static int dissect_c15ch_tone_madn_ring(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_tone_madn_ring_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_tone_madn_ring, tvb, 0, 2, ENC_NA);
        c15ch_tone_madn_ring_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_tone);
        proto_tree_add_item(c15ch_tone_madn_ring_tree, hf_c15ch_tone_madn_ring_device_id,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tone_madn_ring_tree, hf_c15ch_tone_madn_ring_tone_type,
                            tvb, 1, 1, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_tone_opls(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_tone_opls_tree = NULL;
    proto_tree * to_ni_tn_tree = NULL;

    guint8 num_digits;
    num_digits = tvb_get_guint8(tvb, 12);

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_tone_opls, tvb, 0, 67, ENC_NA);
        c15ch_tone_opls_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_tone);
        proto_tree_add_item(c15ch_tone_opls_tree, hf_c15ch_tone_opls_svce_from_ni,
                            tvb, 0, 4, ENC_BIG_ENDIAN);
        ti = proto_tree_add_item(c15ch_tone_opls_tree, hf_c15ch_tone_opls_svce_to_ni_tn,
                            tvb, 4, 8, ENC_BIG_ENDIAN);
        to_ni_tn_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_tone_sub1);
        proto_tree_add_item(to_ni_tn_tree, hf_c15ch_tone_opls_svce_to_ni,
                            tvb, 4, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(to_ni_tn_tree, hf_c15ch_tone_opls_svce_to_tn,
                            tvb, 8, 4, ENC_BIG_ENDIAN);
        /* digits */
        add_digits_string(hf_c15ch_tone_opls_digits, tvb, c15ch_tone_opls_tree,
                        13, num_digits, 54, 1);
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_tone_rcvr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_tone_rcvr_tree = NULL;
    proto_tree * ni_tn_tree = NULL;


    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_tone_rcvr, tvb, 0, 9, ENC_NA);
        c15ch_tone_rcvr_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_tone);
        proto_tree_add_item(c15ch_tone_rcvr_tree, hf_c15ch_tone_rcvr_rcvr_id,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        ti = proto_tree_add_item(c15ch_tone_rcvr_tree, hf_c15ch_tone_rcvr_conn_to_ni_tn,
                            tvb, 1, 8, ENC_BIG_ENDIAN);
        ni_tn_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_tone_sub1);
        proto_tree_add_item(ni_tn_tree, hf_c15ch_tone_rcvr_conn_to_ni,
                            tvb, 1, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(ni_tn_tree, hf_c15ch_tone_rcvr_conn_to_tn,
                            tvb, 5, 4, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}


static int dissect_c15ch_tone_timeout(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_tone_timeout_tree = NULL;
    proto_tree * ni_tn_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_tone_timeout, tvb, 0, 15, ENC_NA);
        c15ch_tone_timeout_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_tone);
        proto_tree_add_item(c15ch_tone_timeout_tree, hf_c15ch_tone_timeout_device_id,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tone_timeout_tree, hf_c15ch_tone_timeout_service_pm,
                            tvb, 1, 1, ENC_BIG_ENDIAN);

        ti = proto_tree_add_item(c15ch_tone_timeout_tree, hf_c15ch_tone_timeout_service_ni_tn,
                            tvb, 2, 8, ENC_BIG_ENDIAN);
        ni_tn_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_tone_sub1);
        proto_tree_add_item(ni_tn_tree, hf_c15ch_tone_timeout_service_ni,
                            tvb, 2, 4, ENC_BIG_ENDIAN);
        proto_tree_add_item(ni_tn_tree, hf_c15ch_tone_timeout_service_tn,
                            tvb, 6, 4, ENC_BIG_ENDIAN);

        proto_tree_add_item(c15ch_tone_timeout_tree, hf_c15ch_tone_timeout_gw_provided,
                            tvb, 10, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tone_timeout_tree, hf_c15ch_tone_timeout_gw_service_tone_type_or_from_ni,
                            tvb, 11, 4, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}

static int dissect_c15ch_tone_tone_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
{
    proto_item * ti = NULL;
    proto_tree * c15ch_tone_tone_control_tree = NULL;

    if (tree)
    {
        ti = proto_tree_add_item(tree, hf_c15ch_tone_tone_control, tvb, 0, 2, ENC_NA);
        c15ch_tone_tone_control_tree = proto_item_add_subtree(ti, ett_c15ch_third_level_tone);
        proto_tree_add_item(c15ch_tone_tone_control_tree, hf_c15ch_tone_tone_control_device_id,
                            tvb, 0, 1, ENC_BIG_ENDIAN);
        proto_tree_add_item(c15ch_tone_tone_control_tree, hf_c15ch_tone_tone_control_tone_type,
                            tvb, 1, 1, ENC_BIG_ENDIAN);
    }

    return tvb_reported_length(tvb);
}

/* register functions */
/* fields for c15 heartbeat dissector */
void proto_register_c15ch_hbeat(void)
{
    static hf_register_info hf[] = {
            { &hf_c15ch_hbeat_clli,
                {"CLLI", "c15hbeat.clli",
                FT_STRINGZ, BASE_NONE,
                NULL,
                0x0, NULL, HFILL}
            },
            { &hf_c15ch_hbeat_primary,
                {"Primary", "c15hbeat.primary",
                FT_UINT8, BASE_DEC,
                NULL,
                0x0, NULL, HFILL}
            },
            { &hf_c15ch_hbeat_secondary,
                {"Secondary", "c15hbeat.secondary",
                FT_UINT8, BASE_DEC,
                NULL,
                0x0, NULL, HFILL}
            },
            {  &hf_c15ch_hbeat_interface,
                {"Interface", "c15hbeat.interface",
                FT_STRINGZ, BASE_NONE,
                NULL,
                0x0, NULL, HFILL}
            }
    }; /* close hf[] array declaration */

    /* Protocol subtree array */
    static gint *ett[] = {
        &ett_c15ch_hbeat
    };

    proto_c15ch_hbeat = proto_register_protocol(
        "C15 Call History Heartbeat Protocol", /* name */
        "C15HBEAT",         /* short name */
        "c15hbeat"            /* abbreviation */
        );
    proto_register_field_array(proto_c15ch_hbeat, hf, array_length(hf));
    proto_register_subtree_array(ett, array_length(ett));
}



void proto_register_c15ch(void)
{
/* fields for C15 header : base c15 dissector for non-heartbeat packets */
/* first level of dissection */
 static hf_register_info hf[] = {
        { &hf_c15ch_version,
            {"Version", "c15.ch.version",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_msgtype,
            {"Message Type", "c15.ch.msgtype",
            FT_UINT32, BASE_DEC|BASE_EXT_STRING,
            &c15_msg_types_ext,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_size,
            { "Size", "c15.ch.size",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_call_ref,
            {"Call Reference", "c15.ch.callref",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_srce_ni_tn,
            {"Source NI/TN", "c15.ch.srce_ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_dest_ni_tn,
            {"Destination NI/TN", "c15.ch.dest_ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_srce_ni,
            {"Source NI", "c15.ch.srce_ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_srce_tn,
            {"Source TN", "c15.ch.srce_tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_dest_ni,
            {"Destination NI", "c15.ch.dest_ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_dest_tn,
            {"Destination TN", "c15.ch.dest_tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_realtime,
            {"Real Time", "c15.ch.realtime",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        }
    };


    /* Protocol subtree array */
    static gint *ett[] = {
        &ett_c15ch,
        &ett_src_ni_tn,
        &ett_dest_ni_tn
    };


       static hf_register_info hf_second_level[] = {
        { &hf_c15ch_ama_call_code,
            { "Call Code", "c15.ama.call_code",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ama_orig_digits,
            { "Orig Digits", "c15.ama.orig_digits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ama_num_dialed_digits,
            { "Number of Dialed Digits", "c15.ama.num_dialed_digits",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ama_br_prefix,
            { "BR Prefix", "c15.ama.br_prefix",
            FT_UINT8, BASE_DEC,
            VALS( ama_br_prefix_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ama_dialed_digits,
            { "Dialed Digits", "c15.ama.dialed_digits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ama_start_hour,
            { "Start Hour", "c15.ama.start_hour",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ama_start_minute,
            { "Start Minute", "c15.ama.start_minute",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ama_start_second,
            { "Start Second", "c15.ama.start_second",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ama_start_tenth_second,
            { "Start Tenth of Second", "c15.ama.start_tenth_second",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ama_start_day,
            { "Start Day", "c15.ama.start_day",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ama_start_month,
            { "Start Month", "c15.ama.start_month",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ama_start_year,
            { "Start Year", "c15.ama.start_year",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ama_answered,
            { "Answered", "c15.ama.answered",
            FT_BOOLEAN, BASE_NONE,
            TFS(&tfs_yes_no),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ama_elapsed_time,
            { "Elapsed Time (Millisec)", "c15.ama.elapsed_time",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ama_call_type,
            { "Call Type", "c15.ama.call_type",
            FT_UINT8, BASE_DEC|BASE_EXT_STRING,
            &ama_call_types_ext,
            0x0, NULL, HFILL}
        },
           { &hf_c15ch_c15_info_text,
            {"C15 Info Text", "c15.info.text",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },

        { &hf_c15ch_c15_info_code,
            {"C15 Info Code", "c15.info.code",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_c15_info_level,
            {"C15 Info Level", "c15.info.level",
            FT_UINT8, BASE_DEC,
            VALS( c15ch_c15_info_level_types ),
            0x0, NULL, HFILL}
        },

           { &hf_c15ch_clli_clli_string,
            {"CLLI", "c15.clli.clli",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_clli_active_core,
            {"Active Core", "c15.clli.active_core",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_clli_inactive_core,
            {"Inactive Core", "c15.clli.inactive_core",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_clli_interface_string,
            {"Interface", "c15.clli.interface",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_clli_seconds,
            {"Seconds", "c15.clli.seconds",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_clli_microseconds,
            {"Microseconds", "c15.clli.microseconds",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },

         { &hf_c15ch_conn_connfrom,
            { "Conn From", "c15.conn.connfrom",
            FT_UINT32, BASE_DEC,
            VALS( c15_conn_from_types),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_conn_conntype,
            { "Conn Type", "c15.conn.conntype",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_conn_perphtype,
            { "Perph Type", "c15.conn.perphtype",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_conn_intra,
            { "Intra", "c15.conn.intra",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_conn_srceni,
            { "Source NI", "c15.conn.srceni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_conn_srcetn,
            { "Source TN", "c15.conn.srcetn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_conn_srcenitn,
            { "Source NI/TN", "c15.conn.srcenitn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_conn_destni,
            {"Destination NI", "c15.conn.destni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_conn_desttn,
            { "Destination TN", "c15.conn.desttn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_conn_destnitn,
            {"Destination NI/TN", "c15.conn.destnitn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_conn_interlinknum,
            { "Interlink Number", "c15.conn.interlinknum",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_conn_fromport,
            { "From Port", "c15.conn.fromport",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_conn_fromslot,
            { "From Slot", "c15.conn.fromslot",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_conn_toport,
            { "From Port", "c15.conn.fromport",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_conn_toslot,
            { "To Slot", "c15.conn.toslot",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_conn_hubcallid,
            { "Hub Call ID", "c15.conn.hubcallid",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },

           { &hf_c15ch_cp_state_ch_oldpm,
            {"Old Progress Mark", "c15.cpsc.oldpm",
            FT_UINT32, BASE_DEC|BASE_EXT_STRING,
            &c15_cp_state_pm_types_ext,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_state_ch_newpm,
            {"New Progress Mark", "c15.cpsc.newpm",
            FT_UINT32, BASE_DEC|BASE_EXT_STRING,
            &c15_cp_state_pm_types_ext,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_state_ch_subpm,
            {"Sub Progress Mark", "c15.cpsc.subpm",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_state_ch_trkpm,
            {"Trunk Progress Mark", "c15.cpsc.trkpm",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_state_ch_slepm,
            {"SLE Progress Mark", "c15.cpsc.slepm",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_state_ch_flags,
            {"Flags", "c15.cpsc.flags",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_state_ch_oldrtetype,
            {"Old RTE Type", "c15.cpsc.oldrtetype",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_state_ch_oldrteidx,
            {"Old RTE Index", "c15.cpsc.oldrteidx",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_state_ch_newrtetype,
            {"New RTE Type", "c15.cpsc.newrtetype",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_cp_state_ch_newrteidx,
            {"New RTE Index", "c15.cpsc.newrteidx",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },

        { &hf_c15ch_dest_digits_digits,
            { "Digits", "c15.dest_digits.digits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_echo_cancel_ni,
            {"NI", "c15.echo_cancel.ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },

        { &hf_c15ch_echo_cancel_tn,
            {"TN", "c15.echo_cancel.tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_echo_cancel_ni_tn,
            {"NI/TN", "c15.echo_cancel.ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_echo_cancel_old_l2_mode,
            {"Old L2 Mode", "c15.echo_cancel.old_l2_mode",
            FT_UINT8, BASE_DEC,
            VALS( c15_echo_cancel_l2_mode_types ),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_echo_cancel_old_channel_mode,
            {"Old Channel Mode", "c15.echo_cancel.old_channel_mode",
            FT_UINT32, BASE_DEC,
            VALS( c15_echo_cancel_channel_mode_types ),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_echo_cancel_old_ecan_mode,
            {"Old Ecan Mode", "c15.echo_cancel.old_ecan_mode",
            FT_UINT32, BASE_DEC,
            VALS( c15_echo_cancel_ecan_mode_types ),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_echo_cancel_new_l2_mode,
            {"New L2 Mode", "c15.echo_cancel.new_l2_mode",
            FT_UINT8, BASE_DEC,
            VALS( c15_echo_cancel_l2_mode_types ),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_echo_cancel_new_channel_mode,
            {"New Channel Mode", "c15.echo_cancel.new_channel_mode",
            FT_UINT32, BASE_DEC,
            VALS( c15_echo_cancel_channel_mode_types ),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_echo_cancel_new_ecan_mode,
            {"New Ecan Mode", "c15.echo_cancel.new_ecan_mode",
            FT_UINT32, BASE_DEC,
            VALS( c15_echo_cancel_ecan_mode_types ),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_echo_cancel_tone_id,
            {"Tone ID", "c15.echo_cancel.tone_id",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_echo_cancel_pm,
            {"PM", "c15.echo_cancel.pm",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_echo_cancel_pc,
            {"PC", "c15.echo_cancel.pc",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_echo_cancel_loop,
            {"Loop", "c15.echo_cancel.loop",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_echo_cancel_slot,
            {"Slot", "c15.echo_cancel.slot",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_echo_cancel_location,
            {"Location", "c15.echo_cancel.location",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL }
        },

        { &hf_c15ch_encap_isup_direction,
            {"Direction", "c15.encap_isup.direction",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_encap_isup_isup_msg_length,
            {"Message Type", "c15.encap_isup.isup_msg_length",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },

        { &hf_c15ch_isup_direction,
            {"Direction", "c15.isup.direction",
            FT_UINT8, BASE_DEC,
            VALS( c15_isup_direction_types ),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_isup_msgtype,
            {"Message Type", "c15.isup.msgtype",
            FT_UINT8, BASE_DEC|BASE_EXT_STRING,
            &c15_isup_types_ext,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_isup_cic,
            { "CIC", "c15.isup.cic",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_isup_opcmember,
            { "OPC Member", "c15.isup.opcmember",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_isup_opccluster,
            { "OPC Cluster", "c15.isup.opccluster",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_isup_opcnetwork,
            { "OPC Network", "c15.isup.opcnetwork",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_isup_dpcmember,
            {"DPC Member", "c15.isup.dpcmember",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_isup_dpccluster,
            { "DPC Cluster", "c15.isup.dpccluster",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_isup_dpcnetwork,
            { "DPC Network", "c15.isup.dpcnetwork",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_isup_level3index,
            { "Level 3 Index", "c15.isup.level3index",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_isup_ni,
            { "NI", "c15.isup.ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_isup_tn,
            { "TN", "c15.isup.tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_isup_ni_tn,
            {"NI/TN", "c15.isup.ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_isup_c15hdr,
            { "C15 Header", "c15.isup.c15hdr",
            FT_BYTES, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_isup_layer2hdr,
            { "Layer 2 Header", "c15.isup.layer2hdr",
            FT_BYTES, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_isup_layer3hdr,
            { "Layer 3 Header", "c15.isup.layer3hdr",
            FT_BYTES, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_isup_iptime,
            {"IP Time", "c15.isup.iptime",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },

        { &hf_c15ch_mkbrk_makebreak,
            { "Make Break", "c15.mkbrk.makebreak",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_mkbrk_nshlf,
            { "Nshlf", "c15.mkbrk.nshlf",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_mkbrk_stm,
            { "Stm", "c15.mkbrk.stm",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_mkbrk_caddr,
            { "C Address", "c15.mkbrk.caddr",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_mkbrk_cdata,
            { "C Data", "c15.mkbrk.cdata",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },

        { &hf_c15ch_nitnxlate_ni,
            {"NI", "c15.nitnxlate.ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_tn,
            { "TN", "c15.nitnxlate.tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_nitnxlate_ni_tn,
            {"NI/TN", "c15.nitnxlate.ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_nitnxlate_equiptype,
            { "Equipment Type", "c15.nitnxlate.equiptype",
            FT_UINT32, BASE_DEC|BASE_EXT_STRING,
            &ett_c15ch_nitnxlate_equip_types_ext,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_sitestring,
            { "Site String", "c15.nitnxlate.sitestring",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_concat_string,
            { "ID String", "c15.nitnxlate.id_string",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_subsitestring,
            { "Subsite String", "c15.nitnxlate.subsitestring",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_equipname,
            { "Equipment Name", "c15.nitnxlate.equipname",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_gw_type,
            { "GW Type", "c15.nitnxlate.gw_type",
            FT_UINT32, BASE_DEC,
            VALS( ett_c15ch_nitnxlate_gwe_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_parm_1,
            { "Parm 1", "c15.nitnxlate.parm_1",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_parm_2,
            { "Parm 2", "c15.nitnxlate.parm_2",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_parm_3,
            { "Parm 3", "c15.nitnxlate.parm_3",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_parm_4,
            { "Parm 4", "c15.nitnxlate.parm_4",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_key,
            { "Key", "c15.nitnxlate.key",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_gateway,
            { "Gateway", "c15.nitnxlate.gateway",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_line,
            { "Line", "c15.nitnxlate.line",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_bay,
            { "Bay", "c15.nitnxlate.bay",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_shelf,
            { "Shelf", "c15.nitnxlate.shelf",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_lsg,
            { "LSG", "c15.nitnxlate.lsg",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_idt_rdt,
            { "IDT/RDT", "c15.nitnxlate.idt_rdt",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_pm,
            { "PM", "c15.nitnxlate.pm",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_ptrk,
            { "Ptrk", "c15.nitnxlate.ptrk",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_channel,
            { "Channel", "c15.nitnxlate.channel",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_pc_sts1,
            { "PC or STS1", "c15.nitnxlate.pc_sts1",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_port_vt15,
            { "Port or VT15", "c15.nitnxlate.port_vt15",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_user_tid,
            { "User TID", "c15.nitnxlate.user_tid",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_host,
            { "Host", "c15.nitnxlate.host",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_tg_num,
            { "Target Group Num", "c15.nitnxlate.tg_num",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate_mgcp_line_id,
            { "MGCP Line ID", "c15.nitnxlate.mgcp_line_id",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },

        { &hf_c15ch_ntwk_conn_pathtype,
            { "Path Type", "c15.ntwkconn.pathtype",
            FT_UINT8, BASE_DEC,
            VALS( ett_c15ch_ntwk_conn_path_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_conntype,
            { "Conn Type", "c15.ntwkconn.conntype",
            FT_UINT8, BASE_DEC,
            VALS( ett_c15ch_ntwk_conn_conn_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_fromoptimized,
            { "From Optimized", "c15.ntwkconn.fromoptimized",
            FT_BOOLEAN, BASE_NONE,
            TFS(&tfs_yes_no),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_fromsite,
            { "From Site", "c15.ntwkconn.fromsite",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_frompm,
            { "From PM", "c15.ntwkconn.frompm",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_frompc,
            { "From PC", "c15.ntwkconn.frompc",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_fromloop,
            { "From Loop", "c15.ntwkconn.fromloop",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_fromslot,
            { "From Slot", "c15.ntwkconn.fromslot",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_fromlocation,
            { "From Location", "c15.ntwkconn.fromlocation",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_fromcnx,
            { "From CNX", "c15.ntwkconn.fromcnx",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_fromntwkni,
            { "From Ntwk NI", "c15.ntwkconn.fromntwkni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_fromntwktn,
            { "From Ntwk TN", "c15.ntwkconn.fromntwktn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_fromntwknitn,
            { "From Ntwk NI/TN", "c15.ntwkconn.fromntwknitn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_mbshold,
            { "MBS Hold", "c15.ntwkconn.mbshold",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_tooptimized,
            { "To Optimized", "c15.ntwkconn.tooptimized",
            FT_BOOLEAN, BASE_NONE,
            TFS(&tfs_yes_no),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_tosite,
            { "To Site", "c15.ntwkconn.tosite",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_topm,
            { "To PM", "c15.ntwkconn.topm",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_topc,
            { "To PC", "c15.ntwkconn.topc",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_toloop,
            { "To Loop", "c15.ntwkconn.toloop",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_tolocation,
            { "To Location", "c15.ntwkconn.tolocation",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_toslot,
            { "To Slot", "c15.ntwkconn.toslot",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn_tocnx,
            { "To CNX", "c15.ntwkconn.tocnx",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },

        { &hf_c15ch_orig_tnblocktype,
            { "TN Block Type", "c15.orig.tnblocktype",
            FT_UINT32, BASE_DEC|BASE_EXT_STRING,
            &c15ch_orig_block_types_ext,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig_ni,
            { "NI", "c15.orig.ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig_tn,
            { "TN", "c15.orig.tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig_ni_tn,
            {"NI/TN", "c15.orig.ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_orig_dndigits,
            { "DN Digits", "c15.orig.dndigits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig_nidscrn,
            { "Nid Scrn", "c15.orig.nidscrn",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig_nidaddrtype,
            { "Nid Address Type", "c15.orig.nidaddrtype",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig_nidnmbrplan,
            { "Nid Number Plan", "c15.orig.nidnmbrplan",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig_nidprivind,
            { "Nid Priv Ind", "c15.orig.nidprivind",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig_upnsaved,
            { "UPN Saved", "c15.orig.upnsaved",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig_upndigits,
            { "UPN Digits", "c15.orig.upndigits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig_upnscrn,
            { "UPN Scrn", "c15.orig.upnscrn",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig_upnaddrtype,
            { "UPN Address Type", "c15.orig.upnaddrtype",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig_upnnmbrplan,
            { "UPN Nmbr Plan", "c15.orig.upnnmbrplan",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig_upnprivind,
            { "UPN Priv Ind", "c15.orig.upnprivind",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig_rnpsaved,
            { "RNP Saved", "c15.orig.rnpsaved",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig_rnpdigits,
            { "RNP Digits", "c15.orig.rnpdigits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig_rnpscrn,
            { "RNP Scrn", "c15.orig.rnpscrn",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig_rnpaddrtype,
            { "RNP Address Type", "c15.orig.rnpaddrtype",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig_rnpnmbrplan,
            { "RNP Number Plan", "c15.orig.rnpnmbrplan",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig_rnpprivind,
            { "RNP Priv Ind", "c15.orig.rnpprivind",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig_iptime,
            { "IP Time", "c15.orig.iptime",
            FT_UINT8, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },

        { &hf_c15ch_outgwebc_pbc_conn_ni,
        { "PBC Conn NI", "c15.out_gwe_bc.pbc.conn.ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_outgwebc_pbc_conn_tn,
            { "PBC Conn TN", "c15.out_gwe_bc.pbc_conn.tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_outgwebc_pbc_conn_ni_tn,
            {"PBC Conn NI/TN", "c15.out_gwe_bc.pbc_conn.ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_outgwebc_pbc_conn_num,
            { "PBC Conn Num", "c15.out_gwe_bc.pbc_conn.num",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_outgwebc_pbc_conn_type,
            { "PBC Conn Type", "c15.out_gwe_bc.pbc_conn.type",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_outgwebc_bc_msg_type,
            { "BC Msg Type", "c15.out_gwe_bc.bc_msg_type",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_outgwebc_op_bc_sdp_ip,
            { "OP BC SDP IP", "c15.out_gwe_bc.op_bc_sdp.ip",
            FT_IPv4, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_outgwebc_op_bc_sdp_port,
            { "OP BC SDP Port", "c15.out_gwe_bc.op_bc_sdp.port",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_outgwebc_pbc_mdrp_mode,
            { "PBC MDRP Mode", "c15.out_gwe_bc.pbc.mdrp_mode",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_outgwebc_pbc_tst_flags,
            { "PBC TST Flags", "c15.out_gwe_bc.pbc.tst_flags",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },

        { &hf_c15ch_pathfind_vds30,
            {"VDS30", "c15.pathfind.vds30",
            FT_UINT8, BASE_DEC,
            VALS( c15ch_pathfind_vds30_types),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_fromgweni,
            { "From GWE NI", "c15.pathfind.fromgweni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_fromgwetn,
            { "From GWE TN", "c15.pathfind.fromgwetn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_fromgwenitn,
            { "From GWE NI/TN", "c15.pathfind.fromgwenitn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_fromoptimized,
            { "From Optimized", "c15.pathfind.fromoptimized",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_fromsite,
            { "From Site", "c15.pathfind.fromsite",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_frompm,
            { "From Port Module", "c15.pathfind.frompm",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_frompc,
            { "From Port Controller", "c15.pathfind.frompc",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_fromloop,
            { "From Loop", "c15.pathfind.fromloop",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_fromslot,
            { "From Slot", "c15.pathfind.fromslot",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_fromcnx,
            { "From CNX", "c15.pathfind.fromcnx",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_fromni,
            { "From NI", "c15.pathfind.fromni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_fromtn,
            { "From TN", "c15.pathfind.fromtn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_fromnitn,
            { "From NI/TN", "c15.pathfind.fromnitn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_togweni,
            { "To GWE NI", "c15.pathfind.togweni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_togwetn,
            { "To GWE TN", "c15.pathfind.togwetn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_togwenitn,
            { "To GWE TN", "c15.pathfind.togwenitn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_tooptimized,
            { "To Optimized", "c15.pathfind.tooptimized",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_tosite,
            { "To Site", "c15.pathfind.tosite",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_topm,
            { "To Port Module", "c15.pathfind.topm",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_topc,
            { "To Port Controller", "c15.pathfind.topc",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_toloop,
            { "To Loop", "c15.pathfind.toloop",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_toslot,
            { "To Slot", "c15.pathfind.toslot",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_tocnx,
            { "To CNX", "c15.pathfind.tocnx",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_toni,
            { "To NI", "c15.pathfind.toni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_totn,
            { "To TN", "c15.pathfind.totn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind_tonitn,
            { "To NI/TN", "c15.pathfind.tonitn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },

        { &hf_c15ch_pathidle_vds30,
            {"VDS30", "c15.pathidle.vds30",
            FT_UINT8, BASE_DEC,
            VALS( c15ch_pathidle_vds30_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_idlecode,
            {"Idle Code", "c15.pathidle.idlecode",
            FT_UINT8, BASE_DEC,
            VALS( c15ch_pathidle_idle_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_pathtype,
            { "Path Type", "c15.pathidle.pathtype",
            FT_UINT8, BASE_DEC,
            VALS( c15ch_pathidle_path_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_fromgweni,
            { "From GWE NI", "c15.pathidle.fromgweni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_fromgwetn,
            { "From GWE TN", "c15.pathidle.fromgwetn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_fromgwenitn,
            { "From GWE NI/TN", "c15.pathidle.fromgwenitn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_fromsite,
            { "From Site", "c15.pathidle.fromsite",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_frompm,
            { "From Port Module", "c15.pathidle.frompm",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_frompc,
            { "From Port Controller", "c15.pathidle.frompc",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_fromloop,
            { "From Loop", "c15.pathidle.fromloop",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_fromslot,
            { "From Slot", "c15.pathidle.fromslot",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_fromcnx,
            { "From CNX", "c15.pathidle.fromcnx",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_fromni,
            { "From NI", "c15.pathidle.fromni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_fromtn,
            { "From TN", "c15.pathidle.fromtn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_fromnitn,
            { "From NI/TN", "c15.pathidle.fromnitn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_togweni,
            { "To GWE NI", "c15.pathidle.togweni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_togwenitn,
            { "To GWE NI/TN", "c15.pathidle.togwenitn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_togwetn,
            { "To GWE TN", "c15.pathidle.togwetn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_tosite,
            { "To Site", "c15.pathidle.tosite",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_topm,
            { "To Port Module", "c15.pathidle.topm",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_topc,
            { "To Port Controller", "c15.pathidle.topc",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_toloop,
            { "To Loop", "c15.pathidle.toloop",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_toslot,
            { "To Slot", "c15.pathidle.toslot",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_tocnx,
            {"To CNX", "c15.pathidle.tocnx",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_toni,
            { "To NI", "c15.pathidle.toni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_totn,
            { "From TN", "c15.pathidle.totn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle_tonitn,
            { "To NI/TN", "c15.pathidle.tonitn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },

        { &hf_c15ch_q931_direction,
            { "Direction", "c15.q931.direction",
            FT_UINT8, BASE_DEC,
            VALS( c15ch_q931_direction_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_q931_ni,
            { "NI", "c15.q931.ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_q931_tn,
            { "TN", "c15.q931.tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_q931_ni_tn,
            { "NI/TN", "c15.q931.ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_q931_msglength,
            { "Message Length", "c15.q931.msglength",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_q931,
            { "C15 Q931", "c15.q931",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_ni,
            { "NI", "c15.qos.ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_tn,
            { "TN", "c15.qos.tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_ni_tn,
            { "NI/TN", "c15.qos.ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_rtcp_call_id,
            { "RTCP Call ID", "c15.qos.rtcp_call_id",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_register_type,
            { "Register Type", "c15.qos.register_type",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_tg_num,
            { "TG Num", "c15.qos.tg_num",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_trk_type,
            { "Trunk Type", "c15.qos.trk_type",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_status,
            { "Status", "c15.qos.status",
            FT_UINT32, BASE_DEC,
            VALS( ett_c15ch_qos_status_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_codec,
            { "Codec", "c15.qos.codec",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_given_ip,
            { "Given IP", "c15.qos.given_ip",
            FT_IPv4, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_real_ip,
            { "Real IP", "c15.qos.real_ip",
            FT_IPv4, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_local_ip,
            { "Local IP", "c15.qos.local_ip",
            FT_IPv4, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_tx_pkts,
            { "Tx Packets", "c15.qos.tx_pkts",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_lost_pkts,
            { "Lost Packets", "c15.qos.lost_pkts",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_lost_pct,
            { "Lost Percent", "c15.qos.lost_pct",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_jitter,
            { "Jitter", "c15.qos.jitter",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_rtt,
            { "Round Trip Time", "c15.qos.rtt",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_avg_rtt,
            { "Average Round Trip Time", "c15.qos.avg_rtt",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_duration,
            { "Duration", "c15.qos.duration",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_mos,
            { "MOS", "c15.qos.mos",
            FT_FLOAT, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_ep_type,
            { "EP Type", "c15.qos.ep_type",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_dn_or_tg,
            { "DN or TG", "c15.qos.dn_or_tg",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_pm,
            { "Port Module", "c15.qos.pm",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_pc,
            { "Port Controller", "c15.qos.pc",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_hour,
            { "Hour", "c15.qos.hour",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_min,
            { "Minutes", "c15.qos.min",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_sec,
            { "Seconds", "c15.qos.sec",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_tenth_sec,
            { "Tenths of Seconds", "c15.qos.tenth_sec",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_year,
            { "Year", "c15.qos.year",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_month,
            { "Month", "c15.qos.month",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_day,
            { "Day", "c15.qos.day",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos_day_of_week,
            { "Day of Week", "c15.qos.day_of_week",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },

        { &hf_c15ch_route_number,
            { "Number", "c15.route.number",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_route_type,
            { "Type", "c15.route.type",
            FT_UINT32, BASE_DEC|BASE_EXT_STRING,
            &c15_route_types_ext,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_route_subpm,
            { "Sub Progress Mark", "c15.route.subpm",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_route_trkpm,
            { "Trk Progress Mark", "c15.route.trkpm",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_route_strtaindo,
            { "START AIN DO", "c15.route.strtaindo",
            FT_UINT8, BASE_DEC,
            VALS( c15_route_strt_ain_do_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_route_cr_rte_adv,
            { "CR RTE Adv", "c15.route.cr_rte_adv",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_route_cause,
            { "Cause", "c15.route.cause",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },

        { &hf_c15ch_sccp_direction,
            { "Direction", "c15.sccp.direction",
            FT_UINT8, BASE_DEC,
            VALS( c15ch_sccp_direction_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_sccp_msgtype,
            { "Message Type", "c15.sccp.msgtype",
            FT_UINT8, BASE_DEC,
            VALS( c15ch_sccp_msg_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_sccp_hopcount,
            { "Hop Count", "c15.sccp.hopcount",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_sccp_transactionnum,
            { "Transaction Number", "c15.sccp.transactionnum",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_sccp_opcmember,
            { "OPC Member", "c15.sccp.opcmember",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_sccp_opccluster,
            { "OPC Cluster", "c15.sccp.opccluster",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_sccp_opcnetwork,
            { "OPC Network", "c15.sccp.opcnetwork",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_sccp_dpcmember,
            { "DPC Member", "c15.sccp.opcmember",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_sccp_dpccluster,
            { "DPC Cluster", "c15.sccp.opccluster",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_sccp_dpcnetwork,
            { "DPC Network", "c15.sccp.opcnetwork",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_sccp_level3index,
            { "Level 3 Index", "c15.sccp.level3index",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_sccp_ni,
            { "NI", "c15.sccp.ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_sccp_tn,
            { "TN", "c15.sccp.tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_sccp_ni_tn,
            { "NI/TN", "c15.sccp.ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_sccp_sls,
            { "SLS", "c15.sccp.sls",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_sccp_iptime,
            { "IP Time", "c15.sccp.iptime",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },

        { &hf_c15ch_srcedest_conntype,
            { "Connection Type", "c15.srcedest.conntype",
            FT_UINT8, BASE_DEC,
            VALS( c15_srcedest_conn_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_srcedest_pathtype,
            { "Path Type", "c15.srcedest.pathtype",
            FT_UINT8, BASE_DEC,
            VALS( c15_srcedest_path_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_srcedest_pathdirect,
            { "Path Direction", "c15.srcedest.pathdirect",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },

        { &hf_c15ch_tcap_direction,
            { "Direction", "c15.tcap.direction",
            FT_UINT8, BASE_DEC,
            VALS( c15ch_tcap_direction_types ),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_tcap_action,
            { "Action", "c15.tcap.action",
            FT_UINT8, BASE_DEC,
            VALS( c15ch_tcap_action_types ),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_tcap_package_type,
            { "Package Type", "c15.tcap.package_type",
            FT_UINT8, BASE_DEC,
            VALS( c15ch_tcap_package_types ),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_tcap_ssn,
            { "SSN", "c15.tcap.ssn",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_tcap_local_ssn,
            { "Local SSN", "c15.tcap.local_ssn",
            FT_UINT8, BASE_DEC,
            VALS( c15ch_tcap_local_ssn_types ),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_tcap_result_err_code,
            { "Result Error Code", "c15.tcap.result_err_code",
            FT_UINT8, BASE_DEC,
            VALS( c15ch_tcap_err_code_types ),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_tcap_return_reason,
            { "Return Reason", "c15.tcap.return_reason",
            FT_UINT8, BASE_DEC,
            VALS( c15ch_tcap_ret_reason_types ),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_tcap_feat_id,
            { "Feat ID", "c15.tcap.feat_id",
            FT_UINT8, BASE_DEC,
            VALS( c15ch_tcap_feat_id_types ),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_tcap_feat_req,
            { "Feat Req", "c15.tcap.feat_req",
            FT_UINT8, BASE_DEC,
            VALS( c15ch_tcap_feat_req_types ),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_tcap_cl_comp_result,
            { "CL Comp Result", "c15.tcap.cl_comp_result",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_tcap_release_bit,
            { "Release Bit", "c15.tcap.release_bit",
            FT_UINT8, BASE_DEC,
            VALS( c15ch_tcap_rel_bit_types ),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_tcap_term_cl_request,
            { "Term CL Request", "c15.tcap.term_cl_request",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_tcap_opc_index,
            { "OPC Index", "c15.tcap.opc_index",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_tcap_dpc_mem,
            { "DPC Mem", "c15.tcap.dpc_mem",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_tcap_dpc_clus,
            { "DPC Clus", "c15.tcap.dpc_clus",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_tcap_dpc_net,
            { "DPC Net", "c15.tcap.dpc_net",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_tcap_cp_id,
            { "CP ID", "c15.tcap.cp_id",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },

        { &hf_c15ch_twc_rswch_pm,
            { "Progress Mark", "c15.twc_rswch.pm",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_twc_rswch_subpm,
            { "Sub Progress Mark", "c15.twc_rswch.subpm",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_twc_rswch_trkpm,
            { "Trunk Progress Mark", "c15.twc_rswch.trkpm",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_twc_rswch_devid,
            { "Device ID", "c15.twc_rswch.devid",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_twc_rswch_event,
            { "Event", "c15.twc_rswch.event",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_twc_rswch_parm,
            { "Parameter", "c15.twc_rswch.parm",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_twc_rswch_iptime,
            { "IP Time", "c15.twc_rswch.iptime",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },

        { &hf_c15ch_cp_event_pm,
            { "Progress Mark", "c15.cpe.pm",
            FT_UINT32, BASE_DEC|BASE_EXT_STRING,
            &c15_pm_types_ext,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_cp_event_subpm,
            { "Sub Progress Mark", "c15.cpe.subpm",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_orig,
            { "Sub Progress Mark (Orig)", "c15.cpe.subpm_orig",
            FT_UINT32, BASE_DEC,
            VALS( subpm_orig_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_disc_time,
            { "Sub Progress Mark (Disc Time)", "c15.cpe.subpm_disc_time",
            FT_UINT32, BASE_DEC,
            VALS( subpm_disc_time_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_revert,
            { "Sub Progress Mark (Revertive)", "c15.cpe.subpm_revert",
            FT_UINT32, BASE_DEC,
            VALS( subpm_revert_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_orig_dt,
            { "Sub Progress Mark (Orig DT)", "c15.cpe.subpm_orig_dt",
            FT_UINT32, BASE_DEC,
            VALS( subpm_orig_dt_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_orig_ws,
            { "Sub Progress Mark (Orig WS)", "c15.cpe.subpm_orig_ws",
            FT_UINT32, BASE_DEC,
            VALS( subpm_orig_ws_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_orig_dd,
            { "Sub Progress Mark (Orig DD)", "c15.cpe.subpm_orig_dd",
            FT_UINT32, BASE_DEC,
            VALS( subpm_orig_dd_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_orig_id,
            { "Sub Progress Mark (Orig ID)", "c15.cpe.subpm_orig_id",
            FT_UINT32, BASE_DEC,
            VALS( subpm_orig_id_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_no_test,
            { "Sub Progress Mark (No Test)", "c15.cpe.subpm_no_test",
            FT_UINT32, BASE_DEC,
            VALS( subpm_no_test_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_dialing,
            { "Sub Progress Mark (Dialing)", "c15.cpe.subpm_dialing",
            FT_UINT32, BASE_DEC,
            VALS( subpm_dialing_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_rebuilt,
            { "Sub Progress Mark (Rebuilt)", "c15.cpe.subpm_rebuilt",
            FT_UINT32, BASE_DEC,
            VALS( subpm_rebuilt_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_acfw_reac,
            { "Sub Progress Mark (ACFW Reac)", "c15.cpe.subpm_acfw_reac",
            FT_UINT32, BASE_DEC,
            VALS( subpm_acfw_reac_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_process_route,
            { "Sub Progress Mark (Process Route)", "c15.cpe.subpm_process_route",
            FT_UINT32, BASE_DEC,
            VALS( subpm_process_route_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_rte_line,
            { "Sub Progress Mark (Rte Line)", "c15.cpe.subpm_rte_line",
            FT_UINT32, BASE_DEC,
            VALS( subpm_rte_line_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_mtce,
            { "Sub Progress Mark (MTCE)", "c15.cpe.subpm_mtce",
            FT_UINT32, BASE_DEC,
            VALS( subpm_mtce_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_aux_tone,
            { "Sub Progress Mark (AUXT)", "c15.cpe.subpm_aux_tone",
            FT_UINT32, BASE_DEC,
            VALS( subpm_aux_tone_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_noller,
            { "Sub Progress Mark (NOLLER)", "c15.cpe.subpm_noller",
            FT_UINT32, BASE_DEC,
            VALS( subpm_noller_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_ittk,
            { "Sub Progress Mark (ITTK)", "c15.cpe.subpm_ittk",
            FT_UINT32, BASE_DEC,
            VALS( subpm_ittk_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_alm_send,
            { "Sub Progress Mark (Alarm Send)", "c15.cpe.subpm_alm_send",
            FT_UINT32, BASE_DEC,
            VALS( subpm_alm_send_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_ani_spill,
            { "Sub Progress Mark (ANI Spill)", "c15.cpe.subpm_ani_spill",
            FT_UINT32, BASE_DEC,
            VALS( subpm_ani_spill_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_trunk_term,
            { "Sub Progress Mark (Trunk Term)", "c15.cpe.subpm_trunk_term",
            FT_UINT32, BASE_DEC,
            VALS( subpm_trunk_term_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_line_term,
            { "Sub Progress Mark (Line Term)", "c15.cpe.subpm_line_term",
            FT_UINT32, BASE_DEC,
            VALS( subpm_line_term_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_non_cp,
            { "Sub Progress Mark (Non CP)", "c15.cpe.subpm_non_cp",
            FT_UINT32, BASE_DEC,
            VALS( subpm_non_cp_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_3wc,
            { "Sub Progress Mark (3wc)", "c15.cpe.subpm_3wc",
            FT_UINT32, BASE_DEC,
            VALS( subpm_twc_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_held_3wc,
            { "Sub Progress Mark (Held 3WC)", "c15.cpe.subpm_held_3wc",
            FT_UINT32, BASE_DEC,
            VALS( subpm_held_3wc_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_cwt,
            { "Sub Progress Mark (CWT)", "c15.cpe.subpm_cwt",
            FT_UINT32, BASE_DEC,
            VALS( subpm_cwt_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_held_cwt,
            { "Sub Progress Mark (Held CWT)", "c15.cpe.subpm_held_cwt",
            FT_UINT32, BASE_DEC,
            VALS( subpm_held_cwt_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_update_sc,
            { "Sub Progress Mark (Update SC)", "c15.cpe.subpm_update_sc",
            FT_UINT32, BASE_DEC,
            VALS( subpm_update_sc_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_orig_spdt,
            { "Sub Progress Mark (Orig SPDT)", "c15.cpe.subpm_orig_spdt",
            FT_UINT32, BASE_DEC,
            VALS( subpm_orig_dt_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_acfw_retm,
            { "Sub Progress Mark (ACFW RETM)", "c15.cpe.subpm_acfw_retm",
            FT_UINT32, BASE_DEC,
            VALS( subpm_acfw_retm_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_cfw_busy,
            { "Sub Progress Mark (CFW Busy)", "c15.cpe.subpm_cfw_busy",
            FT_UINT32, BASE_DEC,
            VALS( subpm_cfw_busy_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_cfw,
            { "Sub Progress Mark (CFW)", "c15.cpe.subpm_cfw",
            FT_UINT32, BASE_DEC,
            VALS( subpm_cfw_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_cfw_deact,
            { "Sub Progress Mark (CFW Deact)", "c15.cpe.subpm_cfw_deact",
            FT_UINT32, BASE_DEC,
            VALS( subpm_cfw_deact_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_rcfw,
            { "Sub Progress Mark (RCFW)", "c15.cpe.subpm_rcfw",
            FT_UINT32, BASE_DEC,
            VALS( subpm_rcfw_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_rotl_tp,
            { "Sub Progress Mark (ROTL TP)", "c15.cpe.subpm_rotl_tp",
            FT_UINT32, BASE_DEC,
            VALS( subpm_rotl_tp_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_chdt,
            { "Sub Progress Mark (CHD DT)", "c15.cpe.subpm_chdt",
            FT_UINT32, BASE_DEC,
            VALS( subpm_chdt_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_chd,
            { "Sub Progress Mark (Call Hold)", "c15.cpe.subpm_chd",
            FT_UINT32, BASE_DEC,
            VALS( subpm_chd_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_cheld,
            { "Sub Progress Mark (Call Held)", "c15.cpe.subpm_cheld",
            FT_UINT32, BASE_DEC,
            VALS( subpm_cheld_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_3wch,
            { "Sub Progress Mark (3WCH)", "c15.cpe.subpm_3wch",
            FT_UINT32, BASE_DEC,
            VALS( subpm_twc_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_3wcw,
            { "Sub Progress Mark (3WCW)", "c15.cpe.subpm_3wcw",
            FT_UINT32, BASE_DEC,
            VALS( subpm_twc_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_cslt,
            { "Sub Progress Mark (CSLT)", "c15.cpe.subpm_cslt",
            FT_UINT32, BASE_DEC,
            VALS( subpm_held_3wc_types ),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_dig_ckt_test,
            { "Sub Progress Mark (Dig CKT Test)", "c15.cpe.subpm_dig_ckt",
            FT_UINT32, BASE_DEC,
            VALS( subpm_dig_ckt_test_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_dig_ckt_test_subpm_sp,
            { "Sub Progress Mark (Dig CKT Test, Single Party)", "c15.cpe.dig_ckt_test_subpm_sp",
            FT_UINT32, BASE_DEC,
            VALS( dig_ckt_test_subpm_sp_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_dig_ckt_test_subpm_mp,
            { "Sub Progress Mark (Dig CKT Test, Multi Party)", "c15.cpe.dig_ckt_test_subpm_mp",
            FT_UINT32, BASE_DEC,
            VALS( dig_ckt_test_subpm_mp_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_dig_ckt_test_subpm_coin,
            { "Sub Progress Mark (Dig CKT Test, Coin)", "c15.cpe.dig_ckt_test_subpm_coin",
            FT_UINT32, BASE_DEC,
            VALS( dig_ckt_test_subpm_coin_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_dig_ckt_test_subpm_isdn,
            { "Sub Progress Mark (Dig CKT Test, ISDN)", "c15.cpe.dig_ckt_test_subpm_isdn",
            FT_UINT32, BASE_DEC,
            VALS( dig_ckt_test_subpm_isdn_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_dig_ckt_test_subpm_trc,
            { "Sub Progress Mark (Dig CKT Test, TRC)", "c15.cpe.dig_ckt_test_subpm_trc",
            FT_UINT32, BASE_DEC,
            VALS( dig_ckt_test_subpm_trc_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_dig_ckt_test_subpm_disc,
            { "Sub Progress Mark (Dig CKT Test, Disc)", "c15.cpe.dig_ckt_test_subpm_disc",
            FT_UINT32, BASE_DEC,
            VALS( dig_ckt_test_subpm_disc_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_nail,
            { "Sub Progress Mark (NAIL)", "c15.cpe.subpm_nail",
            FT_UINT32, BASE_DEC,
            VALS( subpm_nail_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_dcbi,
            { "Sub Progress Mark (DCBI)", "c15.cpe.subpm_dcbi",
            FT_UINT32, BASE_DEC,
            VALS( subpm_dcbi_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_rag_confirm,
            { "Sub Progress Mark (RAG Confirm)", "c15.cpe.subpm_rag_confirm",
            FT_UINT32, BASE_DEC,
            VALS( subpm_rag_confirm_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_rag_process,
            { "Sub Progress Mark (RAG Process)", "c15.cpe.subpm_rag_process",
            FT_UINT32, BASE_DEC,
            VALS( subpm_rag_process_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_e800,
            { "Sub Progress Mark (E800 Db)", "c15.cpe.subpm_e800",
            FT_UINT32, BASE_DEC,
            VALS( subpm_e800_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_cfra,
            { "Sub Progress Mark (CFRA)", "c15.cpe.subpm_cfra",
            FT_UINT32, BASE_DEC,
            VALS( subpm_cfra_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_mwi_deac,
            { "Sub Progress Mark (MWI Deac)", "c15.cpe.subpm_mwi_deac",
            FT_UINT32, BASE_DEC,
            VALS( subpm_mwi_deac_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_acar_cp,
            { "Sub Progress Mark (ACAR CP)", "c15.cpe.subpm_acar_cp",
            FT_UINT32, BASE_DEC,
            VALS( subpm_acar_cp_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_acar_rering,
            { "Sub Progress Mark (ACAR Rering)", "c15.cpe.subpm_acar_rering",
            FT_UINT32, BASE_DEC,
            VALS( subpm_acar_rering_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_acar_ann,
            { "Sub Progress Mark (ACAR Ann)", "c15.cpe.subpm_acar_ann",
            FT_UINT32, BASE_DEC,
            VALS( subpm_acar_ann_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_sle,
            { "Sub Progress Mark (CP SLE)", "c15.cpe.subpm_sle",
            FT_UINT32, BASE_DEC,
            VALS( subpm_sle_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_perform_cot,
            { "Sub Progress Mark (Perform COT)", "c15.cpe.subpm_perform_cot",
            FT_UINT32, BASE_DEC,
            VALS( subpm_perform_cot_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_clid,
            { "Sub Progress Mark (CLID)", "c15.cpe.subpm_clid",
            FT_UINT32, BASE_DEC,
            VALS( subpm_clid_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_xpm,
            { "Sub Progress Mark (XPM)", "c15.cpe.subpm_xpm",
            FT_UINT32, BASE_DEC,
            VALS( subpm_xpm_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_mwil,
            { "Sub Progress Mark (MWIL)", "c15.cpe.subpm_mwil",
            FT_UINT32, BASE_DEC,
            VALS( subpm_mwil_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_ldbs,
            { "Sub Progress Mark (LDBS)", "c15.cpe.subpm_ldbs",
            FT_UINT32, BASE_DEC,
            VALS( subpm_ldbs_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_acr,
            { "Sub Progress Mark (ACR)", "c15.cpe.subpm_acr",
            FT_UINT32, BASE_DEC,
            VALS( subpm_acr_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_call_park,
            { "Sub Progress Mark (Call Park)", "c15.cpe.subpm_call_park",
            FT_UINT32, BASE_DEC,
            VALS( subpm_call_park_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_camp_on_recall,
            { "Sub Progress Mark (Camp On Recall)", "c15.cpe.subpm_camp_on_recall",
            FT_UINT32, BASE_DEC,
            VALS( subpm_camp_on_recall_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_cff,
            { "Sub Progress Mark (Call Fwrd Fixed Dest)", "c15.cpe.subpm_cff",
            FT_UINT32, BASE_DEC,
            VALS( subpm_cff_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_ibert,
            { "Sub Progress Mark (IBERT)", "c15.cpe.subpm_ibert",
            FT_UINT32, BASE_DEC,
            VALS( subpm_ibert_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_ain,
            { "Sub Progress Mark (AIN)", "c15.cpe.subpm_ain",
            FT_UINT32, BASE_DEC,
            VALS( subpm_ain_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_ain_sit,
            { "Sub Progress Mark (AIN SIT)", "c15.cpe.subpm_ain_sit",
            FT_UINT32, BASE_DEC,
            VALS( subpm_ain_sit_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_ain_rtg,
            { "Sub Progress Mark (AIN RTG)", "c15.cpe.subpm_ain_rtg",
            FT_UINT32, BASE_DEC,
            VALS( subpm_ain_rtg_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_nail_bcon,
            { "Sub Progress Mark (NAIL BCON)", "c15.cpe.subpm_nail_bcon",
            FT_UINT32, BASE_DEC,
            VALS( subpm_nail_bcon_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_nail_dcon,
            { "Sub Progress Mark (NAIL DCON)", "c15.cpe.subpm_nail_dcon",
            FT_UINT32, BASE_DEC,
            VALS( subpm_nail_dcon_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_qtrn_trvr,
            { "Sub Progress Mark (QTRN TRVR)", "c15.cpe.subpm_qtrn_trvr",
            FT_UINT32, BASE_DEC,
            VALS( subpm_qtrn_trvr_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_ekts,
            { "Sub Progress Mark (EKTS)", "c15.cpe.subpm_ekts",
            FT_UINT32, BASE_DEC,
            VALS( subpm_ekts_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_alt,
            { "Sub Progress Mark (ALT)", "c15.cpe.subpm_alt",
            FT_UINT32, BASE_DEC,
            VALS( subpm_alt_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_calea,
            { "Sub Progress Mark (CALEA)", "c15.cpe.subpm_calea",
            FT_UINT32, BASE_DEC,
            VALS( subpm_calea_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_sim_ring,
            { "Sub Progress Mark (Sim Ring)", "c15.cpe.subpm_sim_ring",
            FT_UINT32, BASE_DEC,
            VALS( subpm_sim_ring_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_lta,
            { "Sub Progress Mark (LTA)", "c15.cpe.subpm_lta",
            FT_UINT32, BASE_DEC,
            VALS( subpm_lta_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_hgq,
            { "Sub Progress Mark (HGQ)", "c15.cpe.subpm_hgq",
            FT_UINT32, BASE_DEC,
            VALS( subpm_hgq_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_idle,
            { "Sub Progress Mark (Idle)", "c15.cpe.subpm_idle",
            FT_UINT32, BASE_DEC,
            VALS( subpm_idle_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_sig,
            { "Sub Progress Mark (Sig)", "c15.cpe.subpm_sig",
            FT_UINT32, BASE_DEC,
            VALS( subpm_sig_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_sig_dest,
            { "Sub Progress Mark (Sig Dest)", "c15.cpe.subpm_sig_dest",
            FT_UINT32, BASE_DEC,
            VALS( subpm_sig_dest_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_subpm_agl_splrg,
            { "Sub Progress Mark (AGL Splash Ring)", "c15.cpe.subpm_agl_splrg",
            FT_UINT32, BASE_DEC,
            VALS( subpm_agl_splrg_types),
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_cp_event_trkpm,
            { "Trunk Progress Mark", "c15.cpe.trkpm",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_cp_event_dig_ckt_test_trkpm,
            { "Trunk Progress Mark (Dig CKT Test)", "c15.cpe.dig_ckt_test_trkpm",
            FT_UINT32, BASE_DEC,
            VALS( trkpm_dig_ckt_test_types),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_cp_event_devid,
            { "Device ID", "c15.cpe.devid",
            FT_UINT32, BASE_DEC|BASE_EXT_STRING,
            &c15_dev_types_ext,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_cp_event_event,
            { "Event", "c15.cpe.event",
            FT_UINT32, BASE_DEC|BASE_EXT_STRING,
            &c15_event_types_ext,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_cp_event_parm,
            { "Parm", "c15.cpe.parm",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_cp_event_iptime,
            { "IP Time", "c15.cpe.iptime",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        } ,
         { &hf_c15ch_inc_gwe_ni,
            { "NI", "c15.inc_gwe.ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_tn,
            { "TN", "c15.inc_gwe.tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ni_tn,
            {"NI/TN", "c15.inc_gwe.ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_inc_gwe_taskid,
            { "Task ID", "c15.inc_gwe.taskid",
            FT_UINT8, BASE_DEC,
            VALS( c15inc_gwe_task_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_fiatid_invalid,
            { "Fiat ID (Invalid)", "c15.inc_gwe.fiatid_invalid",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_fiatid_bc,
            { "Fiat ID (Bearer Control)", "c15.inc_gwe.fiatid_bc",
            FT_UINT8, BASE_DEC,
            VALS( c15inc_gwe_bc_fiat_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_fiatid_mtce,
            { "Fiat ID (MTCE)", "c15.inc_gwe.fiatid_mtce",
            FT_UINT8, BASE_DEC,
            VALS( c15inc_gwe_mtce_fiat_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_fiatid_om,
            { "Fiat ID (OM)", "c15.inc_gwe.fiatid_om",
            FT_UINT8, BASE_DEC,
            VALS( c15inc_gwe_om_fiat_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_fiatid_h248,
            { "Fiat ID (H248)", "c15.inc_gwe.fiatid_h248",
            FT_UINT8, BASE_DEC,
            VALS( c15inc_gwe_h248_fiat_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_fiatid_sua,
            { "Fiat ID (SUA)", "c15.inc_gwe.fiatid_sua",
            FT_UINT8, BASE_DEC,
            VALS( c15inc_gwe_sua_fiat_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_fiatid_mgcp,
            { "Fiat ID (MGCP)", "c15.inc_gwe.fiatid_mgcp",
            FT_UINT8, BASE_DEC,
            VALS( c15inc_gwe_mgcp_fiat_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_fiatid_sip_notify,
            { "Fiat ID (SIP Notify)", "c15.inc_gwe.fiatid_sip_notify",
            FT_UINT8, BASE_DEC,
            VALS( c15inc_gwe_sip_notify_fiat_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_fiatid_admn,
            { "Fiat ID (Admn)", "c15.inc_gwe.fiatid_admn",
            FT_UINT8, BASE_DEC,
            VALS( c15inc_gwe_admn_fiat_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_datatype,
            { "Datatype", "c15.inc_gwe.datatype",
            FT_UINT8, BASE_DEC|BASE_EXT_STRING,
            &c15inc_gwe_types_ext,
            0x0, NULL, HFILL}
        },

        { &hf_c15ch_out_gwe_ni,
            { "NI", "c15.out_gwe.ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_tn,
            { "TN", "c15.out_gwe.tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_ni_tn,
            {"NI/TN", "c15.out_gwe.ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_out_gwe_op_gwe_msg_type,
            { "OP GWE Msg Type", "c15.out_gwe.op_gwe_msg_type",
            FT_UINT8, BASE_DEC|BASE_EXT_STRING,
            &c15_out_gwe_msg_types_ext,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_op_gwe_protocol,
            { "OP GWE Protocol", "c15.out_gwe.op_gwe_protocol",
            FT_UINT8, BASE_DEC,
            VALS( c15_out_gwe_protocol_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_op_sua_hndl,
            { "Sip User Agent Handle", "c15.out_gwe.sua_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_gwe_data_type,
            { "GWE Datatype", "c15.out_gwe.gwe_data_type",
            FT_UINT8, BASE_DEC|BASE_EXT_STRING,
            &c15_out_gwe_data_types_ext,
            0x0, NULL, HFILL}
        },

        { &hf_c15ch_tone_msg_type,
            { "Msg Type", "c15.tone.msg_type",
            FT_UINT8, BASE_DEC,
            VALS( c15_tone_msg_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_cp_state_ch,
            { "C15 CP State Change", "c15.cpsc",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_cp_event,
            { "C15 CP Event", "c15.cpe",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_isup,
            { "C15 ISUP", "c15.isup",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_nitnxlate,
            { "C15 NITN Xlate", "c15.nitnxlate",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_sccp,
            { "C15 SCCP", "c15.sccp",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_orig,
            { "C15 CP Orig", "c15.orig",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_conn,
            { "C15 Conn", "c15.conn",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ntwk_conn,
            { "C15 Network Conn", "c15.ntwkconn",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_mkbrk,
            { "C15 Make Break", "c15.mkbrk",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathfind,
            { "C15 Path Find", "c15.pathfind",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_pathidle,
            { "C15 Path Idle", "c15.pathidle",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_dest_digits,
            { "C15 Destination Digits", "c15.dest_digits",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_twc_rswch,
            { "C15 TWC Rswch", "c15.twc_rswch",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_srcedest,
            { "C15 Source Destination", "c15.srcedest",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_route,
            { "C15 Route", "c15.route",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe,
            { "C15 Incoming GWE", "c15.inc_gwe",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe,
            { "C15 Outgoing GWE", "c15.out_gwe",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_outgwebc,
            { "C15 Out GWE Bearer Control", "c15.out_gwe_bc",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_ama,
            { "C15 AMA", "c15.ama",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_qos,
            { "C15 Quality of Service", "c15.qos",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_echo_cancel,
            { "C15 Echo Cancel", "c15.echo_cancel",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone,
            { "C15 Tone", "c15.tone",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_encap_isup,
            { "C15 Encapsulated ISUP", "c15.encap_isup",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tcap,
            { "C15 TCAP", "c15.tcap",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_clli,
            { "C15 CLLI", "c15.clli",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_c15_info,
            { "C15 Info", "c15.info",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        }
    };
    static gint *ett_second_level[] = {
        &ett_c15ch_second_level,
        &ett_c15ch_second_level_sub1,
        &ett_c15ch_second_level_sub2,
        &ett_c15ch_second_level_sub3,
        &ett_c15ch_second_level_sub4
    };
 /* third level */
 /* tone */

     static hf_register_info hf_third_level_tone[] = {
        { &hf_c15ch_tone_cot_control_device_id,
            { "Device ID", "c15.tone.cot_control.device_id",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_cot_control_cot_task,
            { "COT Task", "c15.tone.cot_control.cot_task",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_cot_control_dest_h248,
            { "Destination H248", "c15.tone.cot_control.dest_h248",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_cot_control_srce_h248,
            { "Source H248", "c15.tone.cot_control.srce_h248",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_cot_control_svc_channel,
            { "Svc Channel", "c15.tone.cot_control.svc_channel",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_give_tone_tone_id,
            { "Tone ID", "c15.tone.give_tone.tone_id",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_give_tone_tone_type,
            { "Tone Type", "c15.tone.give_tone.tone_type",
            FT_UINT8, BASE_DEC|BASE_EXT_STRING,
            &tone_types_ext,
            0x0, NULL, HFILL}
        },

        { &hf_c15ch_tone_madn_ring_device_id,
            { "Device ID", "c15.tone.madn_ring.device_id",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_madn_ring_tone_type,
            { "Tone Type", "c15.tone.madn_ring.tone_type",
            FT_UINT8, BASE_DEC|BASE_EXT_STRING,
            &tone_types_ext,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_opls_svce_from_ni,
            { "Svce From NI", "c15.tone.opls.svce_from_ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_opls_svce_to_ni,
            { "Svce To NI", "c15.tone.opls.svce_to_ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_opls_svce_to_tn,
            { "Svce To TN", "c15.tone.opls.svce_to_tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_opls_svce_to_ni_tn,
            { "Svce To NI/TN", "c15.tone.opls.svce_to_ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_opls_digits,
            { "Digits", "c15.tone.opls.digits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_rcvr_rcvr_id,
            { "Receiver ID", "c15.tone.rcvr.rcvr_id",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_rcvr_conn_to_ni,
            { "Conn to NI", "c15.tone.rcvr.conn_to_ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_rcvr_conn_to_tn,
            { "Conn to TN", "c15.tone.rcvr.conn_to_tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_rcvr_conn_to_ni_tn,
            { "Conn to NI/TN", "c15.tone.rcvr.conn_to_ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_timeout_device_id,
            { "Device ID", "c15.tone.timeout.device_id",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_timeout_service_pm,
            { "Service PM", "c15.tone.timeout.service_pm",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_timeout_service_ni,
            { "Service NI", "c15.tone.timeout.service_ni",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_timeout_service_tn,
            { "Service TN", "c15.tone.timeout.service_tn",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_timeout_service_ni_tn,
            { "Service NI/TN", "c15.tone.timeout.service_ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_timeout_gw_provided,
            { "GW Provided", "c15.tone.timeout.gw_provided",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_timeout_gw_service_tone_type_or_from_ni,
            { "GW Service Tone Type or From NI", "c15.tone.timeout.gw_service_tone_type_or_from_ni",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_tone_control_device_id,
            { "Device ID", "c15.tone.tone_control.device_id",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_tone_control_tone_type,
            { "Tone Type", "c15.tone.tone_control.tone_type",
            FT_UINT8, BASE_DEC|BASE_EXT_STRING,
            &tone_types_ext,
            0x0, NULL, HFILL}
        },

        { &hf_c15ch_tone_cpm_loop_type,
            { "Loop Type", "c15.tone.cpm.loop_type",
            FT_UINT8, BASE_DEC,
            VALS( loop_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_cpm_device_id,
            { "Device ID", "c15.tone.cpm.device_id",
            FT_UINT8, BASE_DEC|BASE_EXT_STRING,
            &device_types_ext,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_cpm_tone_type,
            { "Tone Type", "c15.tone.cpm.tone_type",
            FT_UINT8, BASE_DEC|BASE_EXT_STRING,
            &tone_types_ext,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_tone_control,
            { "C15 Tone Control", "c15.tone.tone_control",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_give_tone,
            { "C15 Give Tone", "c15.tone.give_tone",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_opls,
            { "C15 Tone OPLS", "c15.tone.opls",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_cot_control,
            { "C15 Tone COT Control", "c15.tone.cot_control",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_cpm,
            { "C15 Tone CPM", "c15.tone.cpm",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_rcvr,
            { "C15 Tone Receiver", "c15.tone.rcvr",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_madn_ring,
            { "C15 Tone MADN Ring", "c15.tone.madn_ring",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_tone_timeout,
            { "C15 Tone Timeout", "c15.tone.timeout",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        }
    };


    static gint *ett_third_level_tone[] = {
        &ett_c15ch_third_level_tone,
        &ett_c15ch_third_level_tone_sub1
    };

       static hf_register_info hf_third_level_inc_gwe[] = {

        { &hf_c15ch_inc_gwe_reply_ip_gwe_msg_type,
            { "IP GWE Msg Type", "c15.inc_gwe.reply.ip_gwe_msg_type",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_reply_ip_gwe_stat_code,
            { "IP GWE Stat Code", "c15.inc_gwe.reply.ip_gwe_stat_code",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_reply_ip_gwe_conn_num,
            { "IP GWE Connection Number", "c15.inc_gwe.reply.ip_gwe_conn_num",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_reply_nw_mdcn_lsdp_ip,
            { "NW MDCN LSDP IP", "c15.inc_gwe.reply.nw_mdcn_lsdp_ip",
            FT_IPv4, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_reply_nw_mdcn_lsdp_port,
            { "NW MDCN LSDP Port", "c15.inc_gwe.reply.nw_mdcn_lsdp_port",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_reply_nw_mdcn_rsdp_ip,
            { "NW MDCN RSDP IP", "c15.inc_gwe.reply.nw_mdcn_rsdp_ip",
            FT_IPv4, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_reply_nw_mdcn_rsdp_port,
            { "NW MDCN RSDP Port", "c15.inc_gwe.reply.nw_mdcn_rsdp_port",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_bc_pgi_pbc_conn_num,
            { "PBC Connection Number", "c15.inc_gwe.bc_pgi.pbc_conn_num",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_bc_pgi_pbc_conn_type,
            { "PBC Connection Type", "c15.inc_gwe.bc_pgi.pbc_conn_type",
            FT_UINT8, BASE_DEC,
            VALS( c15_inc_gwe_bc_pgi_pbc_conn_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_bc_pgi_pbc_msg_type,
            { "PBC Message Type", "c15.inc_gwe.bc_pgi.pbc_msg_type",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_bc_pgi_bc_mode,
            { "BC Mode", "c15.inc_gwe.bc_pgi.bc_mode",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_bc_pgi_bc_pgi_sdp,
            { "BC PGI SDP", "c15.inc_gwe.bc_pgi.bc_pgi_sdp",
            FT_IPv4, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_bc_pgi_bc_pgi_m_port,
            { "BC PGI M Port", "c15.inc_gwe.bc_pgi.bc_pgi_m_port",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_bc_pgi_pbc_tst_flags,
            { "PBC TST Flags", "c15.inc_gwe.bc_pgi.pbc_tst_flags",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_mgcp_dlcx_err_code,
            { "Error Code", "c15.inc_gwe.mgcp_dlcx.err_code",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_h248_digit_ip_gwe_digit,
            { "IP GWE Digit", "c15.inc_gwe.h248_digit.ip_gwe_digit",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_h248_digit_ip_gwe_digit_method,
            { "IP GWE Digit Method", "c15.inc_gwe.h248_digit.ip_gwe_digit_method",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_voip_cot_ip_gwe_pass_code,
            { "IP GWE Digit", "c15.inc_gwe.voip_cot.ip_gwe_pass_code",
            FT_BOOLEAN, BASE_NONE,
            TFS( &c15_inc_gwe_voip_cot_ip_gwe_pass_code_types),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_notify_ip_gwe_mwi_stat,
            { "IP GWE Message Waiting Indicator Stat", "c15.inc_gwe.notify.ip_gwe_mwi_stat",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_notify_ip_gwe_digits,
            { "IP GWE Digits", "c15.inc_gwe.notify.ip_gwe_digits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_admn_updt_ip_gwe_med_ni,
            { "IP GWE Med NI", "c15.inc_gwe.admn_updt.ip_gwe_med_ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_admn_updt_ip_gwe_med_tn,
            { "IP GWE Med TN", "c15.inc_gwe.admn_updt.ip_gwe_med_tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_admn_updt_ip_gwe_med_ni_tn,
            {"IP GWE Med NI/TN", "c15.inc_gwe.admn_updt.ip_gwe_med_ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_inc_gwe_admn_updt_ip_ns_iface,
            { "IP NS Interface", "c15.inc_gwe.admn_updt.ip_ns_iface",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_admn_updt_ip_ns_terminal,
            { "IP NS Terminal", "c15.inc_gwe.admn_updt.ip_ns_terminal",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_admn_updt_ip_gwe_new_rec_addr,
            { "IP GWE New Rec Addr", "c15.inc_gwe.admn_updt.ip_gwe_new_rec_addr",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_setup_ip_gwe_sua_hndl,
            { "IP GWE Message Sip User Agent Handle", "c15.inc_gwe.cl_setup.ip_gwe_sua_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_setup_ip_gwe_cled_digits,
            { "IP GWE CLED Digits", "c15.inc_gwe.cl_setup.ip_gwe_cled_digits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_setup_ip_cl_setup_lsdp,
            { "IP CL Setup LSDP", "c15.inc_gwe.cl_setup.ip_cl_setup_lsdp",
            FT_IPv4, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_setup_ip_cl_setup_m_port,
            { "IP CL Setup M Port", "c15.inc_gwe.cl_setup.ip_cl_setup_m_port",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
                { &hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_sua_hndl,
            { "IP GWE SipUserAgent Handle", "c15.iinc_gwe.ptrk_setup.ip_gwe_sua_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_cled_digits,
            { "IP GWE CLED Digits", "c15.iinc_gwe.ptrk_setup.ip_gwe_cled_digits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ptrk_setup_ip_cl_setup_lsdp,
            { "IP CL SETUP LSDP", "c15.iinc_gwe.ptrk_setup.ip_cl_setup_lsdp",
            FT_IPv4, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ptrk_setup_ip_cl_setup_m_port,
            { "IP CL SETUP M Port", "c15.iinc_gwe.ptrk_setup.ip_cl_setup_m_port",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_clid_pri,
            { "IP GWE CLID PRI", "c15.iinc_gwe.ptrk_setup.ip_gwe_clid_pri",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_clng_digits,
            { "IP GWE CLNG Digits", "c15.iinc_gwe.ptrk_setup.ip_gwe_clng_digits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_clng_ton,
            { "IP GWE CLNG TON", "c15.iinc_gwe.ptrk_setup.ip_gwe_clng_ton",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_clng_np,
            { "IP GWE CLNG NP", "c15.iinc_gwe.ptrk_setup.ip_gwe_clng_np",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_alert_info,
            { "IP GWE Alert Info", "c15.iinc_gwe.ptrk_setup.ip_gwe_alert_info",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_redir_digits,
            { "IP GWE REDIR Digits", "c15.iinc_gwe.ptrk_setup.ip_gwe_redir_digits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_redir_ton,
            { "IP GWE REDIR TON", "c15.iinc_gwe.ptrk_setup.ip_gwe_redir_ton",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_redir_np,
            { "IP GWE REDIR NP", "c15.iinc_gwe.ptrk_setup.ip_gwe_redir_np",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_ocn_digits,
            { "IP GWE OCN Digits", "c15.iinc_gwe.ptrk_setup.ip_gwe_ocn_digits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_chrg_digits,
            { "IP GWE CHRG Digits", "c15.iinc_gwe.ptrk_setup.ip_gwe_chrg_digits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_chrg_noa,
            { "IP GWE CHRG noa", "c15.iinc_gwe.ptrk_setup.ip_gwe_chrg_noa",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_chrg_npi,
            { "IP GWE CHRG NPI", "c15.iinc_gwe.ptrk_setup.ip_gwe_chrg_npi",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_npdi,
            { "IP GWE NPDI", "c15.iinc_gwe.ptrk_setup.ip_gwe_npdi",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_rn_digits,
            { "IP GWE RN Digits", "c15.iinc_gwe.ptrk_setup.ip_gwe_rn_digits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ptrk_setup_ip_gwe_cic_digits,
            { "IP GWE CIC Digits", "c15.iinc_gwe.ptrk_setup.ip_gwe_cic_digits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ptrk_setup_encap_isup,
            { "Encapsulated ISUP", "c15.iinc_gwe.ptrk_setup.encap_isup",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_prog_ip_gwe_sua_hndl,
            { "IP GWE Message Sip User Agent Handle", "c15.inc_gwe.cl_prog.ip_gwe_sua_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_prog_ip_gwe_conn_num,
            { "IP GWE Connection Number", "c15.inc_gwe.cl_prog.ip_gwe_conn_num",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_prog_ip_cl_prog_lsdp,
            { "IP CL Prog LSDP", "c15.inc_gwe.cl_prog.ip_cl_prog_lsdp",
            FT_IPv4, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_prog_ip_cl_prog_m_port,
            { "IP CL Prog M Port", "c15.inc_gwe.cl_prog.ip_cl_prog_m_port",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_prog_ip_gwe_stat_code,
            { "IP GWE Stat Code", "c15.inc_gwe.cl_prog.ip_gwe_stat_code",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_prog_encap_isup,
            { "Encapsulated ISUP", "c15.inc_gwe.cl_prog.encap_isup",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_reply,
            { "C15 Incoming GWE Reply", "c15.inc_gwe.reply",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_bc_pgi,
            { "C15 Incoming GWE Bearer Control PGI", "c15.inc_gwe.bc_pgi",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_mgcp_dlcx,
            { "C15 Incoming GWE MGCP DLCX", "c15.inc_gwe.mgcp_dlcx",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_h248_digit,
            { "C15 Incoming GWE H248 Digit", "c15.inc_gwe.h248_digit",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_voip_cot,
            { "C15 Incoming GWE VOIP COT", "c15.inc_gwe.voip_cot",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_notify,
            { "C15 Incoming GWE Notify", "c15.inc_gwe.notify",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_admn_updt,
            { "C15 Incoming GWE Admn Update", "c15.inc_gwe.admn_updt",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_setup,
            { "C15 Incoming GWE CL Setup", "c15.inc_gwe.cl_setup",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ptrk_setup,
            { "C15 Incoming GWE Packet Trunk Setup", "c15.inc_gwe.ptrk_setup",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_prog,
            { "C15 Incoming GWE CL Prog", "c15.inc_gwe.cl_prog",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_ans_ip_gwe_sua_hndl,
            { "IP GWE Message Sip User Agent Handle", "c15.inc_gwe.cl_ans.ip_gwe_sua_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_ans_ip_gwe_conn_num,
            { "IP GWE Connection Number", "c15.inc_gwe.cl_ans.ip_gwe_conn_num",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_ans_ip_cl_ans_lsdp,
            { "IP CL Prog LSDP", "c15.inc_gwe.cl_ans.ip_cl_ans_lsdp",
            FT_IPv4, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_ans_ip_cl_ans_m_port,
            { "IP CL Prog M Port", "c15.inc_gwe.cl_ans.ip_cl_ans_m_port",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_ans_encap_isup,
            { "Encapsulated ISUP", "c15.inc_gwe.cl_ans.encap_isup",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL},
        },
        { &hf_c15ch_inc_gwe_cl_ans,
            { "C15 Incoming GWE CL Ans", "c15.inc_gwe.cl_ans",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL},
        },
        { &hf_c15ch_inc_gwe_cl_rel_ip_gwe_sua_hndl,
            { "IP GWE Message Sip User Agent Handle", "c15.inc_gwe.cl_rel.ip_gwe_sua_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_rel_ip_gwe_conn_num,
            { "IP GWE Connection Number", "c15.inc_gwe.cl_rel.ip_gwe_conn_num",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_rel_ip_gwe_stat_code,
            { "IP GWE Stat Code", "c15.inc_gwe.cl_rel.ip_gwe_stat_code",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_rel_encap_isup,
            { "Encapsulated ISUP", "c15.inc_gwe.cl_rel.encap_isup",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL},
        },
        { &hf_c15ch_inc_gwe_cl_rel,
            { "C15 Incoming GWE CL Release", "c15.inc_gwe.cl_rel",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL},
        },
        { &hf_c15ch_inc_gwe_ntwk_mod_ip_gwe_sua_hndl,
            { "IP GWE Message Sip User Agent Handle", "c15.inc_gwe.ntwk_mod.ip_gwe_sua_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ntwk_mod_ip_gwe_conn_num,
            { "IP GWE Connection Number", "c15.inc_gwe.ntwk_mod.ip_gwe_conn_num",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ntwk_mod_ip_ntwk_mod_lsdp,
            { "IP Network Mod LSDP", "c15.inc_gwe.ntwk_mod.ip_ntwk_mod_lsdp",
            FT_IPv4, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ntwk_mod_ip_ntwk_mod_l_m_port,
            { "IP Network Mod L M PORT", "c15.inc_gwe.ntwk_mod.ip_ntwk_mod_l_m_port",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ntwk_mod_ip_ntwk_mod_rsdp,
            { "IP Network Mod RSDP", "c15.inc_gwe.ntwk_mod.ip_ntwk_mod_rsdp",
            FT_IPv4, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ntwk_mod_ip_ntwk_mod_r_m_port,
            { "IP Network Mod R M PORT", "c15.inc_gwe.ntwk_mod.ip_ntwk_mod_r_m_port",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ntwk_mod_ip_gwe_stat_code,
            { "IP GWE Stat Code", "c15.inc_gwe.ntwk_mod.ip_gwe_stat_code",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_ntwk_mod,
            { "C15 Incoming GWE Network Mod", "c15.inc_gwe.ntwk_mod",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_rv_avail_ip_gwe_sua_hndl,
            { "IP GWE Message Sip User Agent Handle", "c15.inc_gwe.rv_avail.ip_gwe_sua_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_rv_avail_ip_gwe_conn_num,
            { "IP GWE Connection Number", "c15.inc_gwe.rv_avail.ip_gwe_conn_num",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_rv_avail_ip_gwe_info_len,
            { "IP GWE Info Length", "c15.inc_gwe.rv_avail.ip_gwe_info_len",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_rv_avail,
            { "C15 Incoming GWE RV Avail", "c15.inc_gwe.rv_avail",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_redir_ip_gwe_sua_hndl,
            { "IP GWE SipUserAgent Handle", "c15.inc_gwe.cl_redir.ip_gwe_sua_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_redir_ip_gwe_conn_num,
            { "IP GWE Connection Number", "c15.inc_gwe.cl_redir.ip_gwe_conn_num",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_redir_ip_gwe_redir_digits,
            { "IP GWE Redir Digits", "c15.inc_gwe.cl_redir.ip_gwe_redir_digits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_redir,
            { "C15 Incoming GWE CL Redir", "c15.inc_gwe.cl_redir",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_refer_ip_gwe_sua_hndl,
            { "IP GWE SipUserAgent Handle", "c15.inc_gwe.cl_refer.ip_gwe_sua_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_refer_ip_gwe_conn_num,
            { "IP GWE Connection Number", "c15.inc_gwe.cl_refer.ip_gwe_conn_num",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_refer_ip_gwe_trgt_digits,
            { "IP GWE TRGT Digits", "c15.inc_gwe.cl_refer.ip_gwe_trgt_digits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_refer_ip_gwe_trgt_tn,
            { "IP GWE TRGT TN", "c15.inc_gwe.cl_refer.ip_gwe_trgt_tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_refer_ip_gwe_trgt_ni,
            { "IP GWE TRGT NI", "c15.inc_gwe.cl_refer.ip_gwe_trgt_ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_cl_refer_ip_gwe_trgt_ni_tn,
            {"IP GWE TRGT NI/TN", "c15.inc_gwe.cl_refer.ip_gwe_trgt_tn_ni",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_inc_gwe_cl_refer,
            {"C15 Incoming GWE CL Refer", "c15.inc_gwe.cl_refer",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_inc_gwe_chg_hndl_ip_gwe_sua_hndl,
            { "IP GWE Message Sip User Agent Handle", "c15.inc_gwe.chg_hndl.ip_gwe_sua_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_chg_hndl_ip_gwe_new_hndl,
            { "IP GWE Message New Sip User Agent Handle", "c15.inc_gwe.chg_hndl.ip_gwe_new_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_chg_hndl,
            { "C15 Incoming GWE Change Handle", "c15.inc_gwe.chg_hndl",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_subs_chg_hndl_ip_gwe_sua_hndl,
            { "IP GWE Message Sip User Agent Handle", "c15.inc_gwe.subs_chg_hndl.ip_gwe_sua_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_subs_chg_hndl_ip_gwe_new_hndl,
            { "IP GWE Message New Sip User Agent Handle", "c15.inc_gwe.subs_chg_hndl.ip_gwe_new_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_subs_chg_hndl_ip_gwe_med_ni,
            { "IP GWE Med NI", "c15.inc_gwe.subs_chg_hndl.ip_gwe_med_ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_subs_chg_hndl_ip_gwe_med_tn,
            { "IP GWE Med TN", "c15.inc_gwe.subs_chg_hndl.ip_gwe_med_TN",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_subs_chg_hndl_ip_gwe_med_ni_tn,
            {"IP GWE Med NI/TN", "c15.inc_gwe.subs_chg_hndl.ip_gwe_med_ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_inc_gwe_subs_chg_hndl,
            {"C15 Incoming GWE Subscription Change Handle", "c15.inc_gwe.subs_chg_hndl",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_inc_gwe_info_ip_gwe_sua_hndl,
            { "IP GWE Message Sip User Agent Handle", "c15.inc_gwe.info.ip_gwe_sua_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_info_ip_gwe_info_type,
            { "IP GWE Info Type", "c15.inc_gwe.info.ip_gwe_info_type",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_info_ip_gwe_info_digit,
            { "IP GWE Info Digit", "c15.inc_gwe.info.ip_gwe_info_digit",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_info_encap_isup_msg_type,
            { "IP GWE Encapsulated ISUP Message Type", "c15.inc_gwe.info.encap_isup_msg_type",
            FT_UINT8, BASE_DEC,
            VALS( c15ch_inc_gwe_info_encap_isup_msg_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_info,
            { "C15 Incoming GWE Info", "c15.inc_gwe.info",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_inv_repl_ip_gwe_sua_hndl,
            { "IP GWE Message Sip User Agent Handle", "c15.inc_gwe.inv_repl.ip_gwe_sua_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_inv_repl_ip_gwe_conn_num,
            { "IP GWE Connection Number", "c15.inc_gwe.inv_repl.ip_gwe_conn_num",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_inv_repl_ip_inv_repl_rsdp_ip,
            { "IP Inv Repl RSDP IP", "c15.inc_gwe.inv_repl.ip_gwe_inv_repl_rsdp_ip",
            FT_IPv4, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_inv_repl_ip_inv_repl_rsdp_port,
            { "IP Inv Repl RSDP Port", "c15.inc_gwe.inv_repl.ip_gwe_inv_repl_rsdp_port",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_inv_repl,
            { "C15 Incoming GWE Inv Repl", "c15.inc_gwe.inv_repl",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_admn_dn_ip_gwe_sua_hndl,
            { "IP GWE SipUserAgent Handle", "c15.inc_gwe.admn_dn.ip_gwe_sua_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_admn_dn_ip_gwe_digits,
            { "IP GWE Digits", "c15.inc_gwe.admn_dn.ip_gwe_digits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_admn_dn,
            { "C15 Incoming GWE Admn DN", "c15.inc_gwe.admn_dn",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_sua_reply_ip_gwe_sua_hndl,
            { "IP GWE Message Sip User Agent Handle", "c15.inc_gwe.sua_reply.ip_gwe_sua_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_sua_reply_ip_gwe_msg_type,
            { "IP GWE Message Type", "c15.inc_gwe.sua_reply.ip_gwe_msg_type",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_sua_reply_ip_gwe_stat_code,
            { "IP GWE Stat Code", "c15.inc_gwe.sua_reply.ip_gwe_stat_code",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_sua_reply_ip_gwe_conn_num,
            { "IP GWE Connection Number", "c15.inc_gwe.sua_reply.ip_gwe_conn_num",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_sua_reply_nw_mdcn_lsdp_ip,
            { "NW MDCN LSDP IP", "c15.inc_gwe.sua_reply.nw_mdcn_lsdp_ip",
            FT_IPv4, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_sua_reply_nw_mdcn_lsdp_port,
            { "NW MDCN LSDP Port", "c15.inc_gwe.sua_reply.nw_mdcn_lsdp_port",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_sua_reply_nw_mdcn_rsdp_ip,
            { "NW MDCN RSDP IP", "c15.inc_gwe.sua_reply.nw_mdcn_rsdp_ip",
            FT_IPv4, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_sua_reply_nw_mdcn_rsdp_port,
            { "NW MDCN RSDP Port", "c15.inc_gwe.sua_reply.nw_mdcn_rsdp_port",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_sua_reply,
            { "C15 Incoming GWE Sip User Agent Reply", "c15.inc_gwe.sua_reply",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_sua_hndl_ip_gwe_sua_hndl,
            { "IP GWE Message Sip User Agent Handle", "c15.inc_gwe.sua_hndl.ip_gwe_sua_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_sua_hndl,
            { "C15 Incoming GWE Sip User Agent Handle", "c15.inc_gwe.sua_hndl",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_tgh_stat_ip_gwe_sua_hndl,
            { "IP GWE Message Sip User Agent Handle", "c15.inc_gwe.sua_tgh_stat.ip_gwe_sua_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_tgh_stat_ip_gwe_tgh_state,
            { "IP GWE TGH State", "c15.inc_gwe.sua_tgh_stat.ip_gwe_tgh_state",
            FT_UINT8, BASE_HEX,
            VALS( tgh_state_types ),
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_inc_gwe_tgh_stat,
            { "C15 Incoming GWE Sipu User Agent TGH State", "c15.inc_gwe.sua_tgh_stat",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        }
    };

    static gint *ett_third_level_inc_gwe[] = {
        &ett_c15ch_third_level_inc_gwe,
        &ett_c15ch_third_level_inc_gwe_sub1
    };

    static hf_register_info hf_third_level_out_gwe[] = {
       /* TODO */
        { &hf_c15ch_out_gwe_digit_scan_voip_dgmp_override,
            { "VOIP DGMP Override", "c15.out_gwe.digit_scan.voip_dgmp_override",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_digit_scan_actv_dgmp,
            { "Actv DGMP", "c15.out_gwe.digit_scan.actv_dgmp",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_digit_scan_op_gwe_digit_scan_tone,
            { "OP GWE Digit Scan Tone", "c15.out_gwe.digit_scan.op_gwe_digit_scan_tone",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_digit_scan_op_gwe_tone_type,
            { "OP GWE Digit Tone Type", "c15.out_gwe.digit_scan.op_gwe_digit_tone_type",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_digit_scan_op_gwe_tone_to,
            { "OP GWE Digit Tone To", "c15.out_gwe.digit_scan.op_gwe_digit_tone_to",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_digit_scan_op_gwe_digit_flash,
            { "OP GWE Digit Flash", "c15.out_gwe.digit_scan.op_gwe_digit_flash",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_digit_scan,
            { "C15 Outgoing GWE Digit Scan", "c15.out_gwe.digit_scan",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_conn_num_out_gwe_conn_num,
            { "Outgoing GWE Connection Number", "c15.out_gwe.conn_num.out_gwe_conn_num",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_conn_num,
            { "C15 Outgoing GWE Connection Number", "c15.out_gwe.conn_num",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_mk_conn_conn_num,
            { "Connection Number", "c15.out_gwe.mk_conn.conn_num",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_mk_conn_op_mk_conn_rsdp_ip,
            { "OP MK Conn RSDP IP", "c15.out_gwe.mk_conn.op_mk_conn_rsdp_ip",
            FT_IPv4, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_mk_conn_op_mk_conn_rsdp_port,
            { "OP MK Conn RSDP Port", "c15.out_gwe.mk_conn.op_mk_conn_rsdp_port",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_mk_conn,
            { "C15 Outgoing GWE Mk Connection", "c15.out_gwe.mk_conn",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_md_conn_conn_num,
            { "Connection Number", "c15.out_gwe.md_conn.conn_num",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_md_conn_status_code,
            { "Status Code", "c15.out_gwe.md_conn.status_code",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_md_conn_op_gwe_mode,
            { "OP GWE Mode", "c15.out_gwe.md_conn.op_md_conn_op_gwe_mode",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_md_conn,
            { "C15 Outgoing GWE MD Connection", "c15.out_gwe.md_conn",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_ans_conn_num,
            { "Connection Number", "c15.out_gwe.call_ans.conn_num",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_ans_op_cl_ans_rsdp_ip,
            { "OP Call Answer RSDP IP", "c15.out_gwe.call_ans.op_cl_ans_rsdp_ip",
            FT_IPv4, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_ans_op_cl_ans_rsdp_port,
            { "OP Call Answer RSDP Port", "c15.out_gwe.call_ans.op_cl_ans_rsdp_port",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_ans_encap_isup,
            { "Encapsulated ISUP", "c15.out_gwe.call_ans.encap_isup",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_ans,
            { "C15 Outgoing GWE Call Answer", "c15.out_gwe.call_ans",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_setup_conn_num,
            { "Connection Number", "c15.out_gwe.call_setup.conn_num",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_setup_op_cl_ans_rsdp_ip,
            { "OP Cl Ans RSDP IP", "c15.out_gwe.call_setup.op_cl_ans_rsdp_ip",
            FT_IPv4, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_setup_op_cl_ans_rsdp_port,
            { "OP Cl Ans RSDP Port", "c15.out_gwe.call_setup.op_cl_ans_rsdp_port",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_setup_op_gwe_redir_digits,
            { "OP GWE Redir Digits", "c15.out_gwe.call_setup.op_gwe_redir_digits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_setup_op_gwe_rdir_ton,
            { "OP GWE Redirect TON", "c15.out_gwe.call_setup.op_gwe_rdir_ton",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_setup_op_gwe_rdir_np,
            { "OP GWE Redirect NP", "c15.out_gwe.call_setup.op_gwe_rdir_np",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_setup_op_gwe_ocn_digits,
            { "OP GWE OCN Digits", "c15.out_gwe.call_setup.op_gwe_ocn_digits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_setup_op_gwe_chrg_digits,
            { "OP GWE CHRG Digits", "c15.out_gwe.call_setup.op_gwe_chrg_digits",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_setup_op_gwe_chrg_noa,
            { "OP GWE CHRG NOA", "c15.out_gwe.call_setup.op_gwe_chrg_noa",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_setup_op_gwe_chrg_npi,
            { "OP GWE CHRG NPI", "c15.out_gwe.call_setup.op_gwe_chrg_npi",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_setup_encap_isup,
            { "Encapsulated ISUP", "c15.out_gwe.call_setup.encap_isup",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_setup,
            { "C15 Outgoing GWE Call Setup", "c15.out_gwe.call_setup",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_prog_conn_num,
            { "Connection Number", "c15.out_gwe.call_prog.conn_num",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_prog_op_gwe_stat_code,
            { "OP GWE Stat Code", "c15.out_gwe.call_prog.op_gwe_stat_code",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_prog_encap_isup,
            { "Encapsulated ISUP", "c15.out_gwe.call_prog.encap_isup",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_prog,
            { "C15 Outgoing GWE Call Prog", "c15.out_gwe.call_prog",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_notify_op_gwe_mwi,
            { "OP GWE MWI", "c15.out_gwe.call_notify.op_gwe_mwi",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_notify_status_code,
            { "Status Code", "c15.out_gwe.call_notify.status_code",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_notify,
            { "C15 Outgoing GWE Call Notify", "c15.out_gwe.call_notify",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_rel_status_code,
            { "Status Code", "c15.out_gwe.call_rel.status_code",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_rel_encap_isup,
            { "Encapsulated ISUP", "c15.out_gwe.call_rel.encap_isup",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_call_rel,
            { "C15 Outgoing GWE Call Release", "c15.out_gwe.call_rel",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_update_ni_tn_ni,
            { "NI", "c15.out_gwe.update_ni_tn.ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_update_ni_tn_tn,
            { "TN", "c15.out_gwe.update_ni_tn.tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_update_ni_tn_ni_tn,
            { "TN", "c15.out_gwe.update_ni_tn.ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_update_ni_tn,
            { "C15 Outgoing GWE Update NI and TN", "c15.out_gwe.update_ni_tn",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_pcm_data_rb_ua_handle_near,
            { "RB User Agent Handle (Near)", "c15.out_gwe.pcm_data.rb_ua_handle_near",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_pcm_data_rb_ua_handle_far,
            { "RB User Agent Handle (Far)", "c15.out_gwe.pcm_data.rb_ua_handle_far",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_pcm_data,
            { "C15 Outgoing GWE PCM Data", "c15.out_gwe.pcm_data",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_blf_data_rb_ua_handle,
            { "RB User Agent Handle", "c15.out_gwe.blf_data.rb_ua_handle",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_blf_data_rb_type,
            { "RB Type", "c15.out_gwe.blf_data.rb_type",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_blf_data_med_ni,
            { "Med NI", "c15.out_gwe.blf_data.med_ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_blf_data_med_tn,
            { "Med TN", "c15.out_gwe.blf_data.med_tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_blf_data_med_ni_tn,
            {"Med NI/TN", "c15.out_gwe.blf_data.med_ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_out_gwe_blf_data_rb_ni,
            { "RB NI", "c15.out_gwe.blf_data.rb_ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_blf_data_rb_tn,
            { "RB TN", "c15.out_gwe.blf_data.rb_tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_blf_data_rb_ni_tn,
            {"RB NI/TN", "c15.out_gwe.blf_data.rb_ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_out_gwe_blf_data,
            {"C15 Outgoing GWE BLF Data", "c15.out_gwe.blf_data",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL }
        },
       { &hf_c15ch_out_gwe_out_cot_ni,
            { "NI", "c15.out_gwe.out_cot.ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_out_cot_tn,
            { "TN", "c15.out_gwe.out_cot.tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_out_cot_ni_tn,
            {"NI/TN", "c15.out_gwe.out_cot.ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_out_gwe_out_cot,
            {"C15 Outgoing GWE Out COT", "c15.out_gwe.out_cot",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_out_gwe_ring_line_op_gwe_display,
            { "OP GWE Display", "c15.out_gwe.ring_line.op_gwe_display",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_ring_line_op_gwe_display_chars,
            { "OP GWE Display Chars", "c15.out_gwe.ring_line.op_gwe_display_chars",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_ring_line,
            { "C15 Outgoing GWE Ring Line", "c15.out_gwe.ring_line",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_audit_conn_ni,
            { "NI", "c15.out_gwe.audit_conn.ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_audit_conn_tn,
            { "TN", "c15.out_gwe.audit_conn.tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_audit_conn_ni_tn,
            {"NI/TN", "c15.out_gwe.audit_conn.ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_out_gwe_audit_conn_context,
            { "Context", "c15.out_gwe.audit_conn.context",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_audit_conn,
            { "C15 Outgoing GWE Audit Connection", "c15.out_gwe.audit_conn",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_sac_sub_valid_op_gwe_subs_valid,
            { "OP GWE Subs Valid", "c15.out_gwe.sac_sub_valid.op_gwe_subs_valid",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_sac_sub_valid_op_gwe_num_list_items,
            { "OP GWE Num List Items", "c15.out_gwe.sac_sub_valid.op_gwe_num_list_items",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_sac_sub_valid,
            { "C15 Outgoing GWE SAC Subscription Valid", "c15.out_gwe.sac_sub_valid",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_sac_notify_op_gwe_blf_state,
            { "OP GWE BLF State", "c15.out_gwe.sac_notify.op_gwe_blf_state",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_sac_notify_op_gwe_subs_state,
            { "OP GWE Subscription State", "c15.out_gwe.sac_notify.op_gwe_subs_state",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_sac_notify,
            { "C15 Outgoing GWE SAC Notify", "c15.out_gwe.sac_notify",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_sac_list_entry_op_gwe_med_uri,
            { "OP GWE Med URI", "c15.out_gwe.sac_list_entry.op_gwe_med_uri",
            FT_STRINGZ, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_sac_list_entry,
            { "C15 Outgoing GWE SAC List Entry", "c15.out_gwe.sac_list_entry",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_rv_subs_data_rb_fe_ni,
            { "RB Fe NI", "c15.out_gwe.rv_subs_data.rb_fe_ni",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_rv_subs_data_rb_fe_tn,
            { "RB Fe TN", "c15.out_gwe.rv_subs_data.rb_fe_tn",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_rv_subs_data_rb_fe_ni_tn,
            {"Rb Fe NI/TN", "c15.out_gwe.rv_subs_data.rb_fe_ni_tn",
            FT_UINT64, BASE_HEX,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_out_gwe_rv_subs_data,
            {"C15 Outgoing GWE Radvision Subscription Data", "c15.out_gwe.rv_subs_data",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL }
        },
        { &hf_c15ch_out_gwe_update_rec_addr_op_new_rec_addr,
            { "OP New Rec Addr", "c15.out_gwe.update_rec_addr.op_new_rec_addr",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_update_rec_addr,
            { "C15 Outgoing GWE Update Rec Address", "c15.out_gwe.update_rec_addr",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_del_subs_ua_op_sip_ua_hndl,
            { "OP SIP UA Handle", "c15.out_gwe.del_subs_ua.op_sip_ua_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_del_subs_ua,
            { "C15 Outgoing GWE Delete Subscription User Agent", "c15.out_gwe.del_subs_ua",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_line_sprvsn_op_gwe_ofhk_event,
            { "OP GWE Off-Hook Event", "c15.out_gwe.line_sprvsn.op_gwe_ofhk_event",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_line_sprvsn_op_gwe_onhk_event,
            { "OP GWE On-Hook Event", "c15.out_gwe.line_sprvsn.op_gwe_onhk_event",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_line_sprvsn_op_gwe_flhk_event,
            { "OP GWE Flash-Hook Event", "c15.out_gwe.line_sprvsn.op_gwe_flhk_event",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_line_sprvsn,
            { "C15 Outgoing GWE Line SPRVSN", "c15.out_gwe.line_sprvsn",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
       { &hf_c15ch_out_gwe_sip_info_op_gwe_sip_info_type,
            { "OP GWE SIP Info Type", "c15.out_gwe.sip_info.op_gwe_sip_info_type",
            FT_UINT8, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_sip_info_op_gwe_sip_info,
            { "OP GWE SIP Info", "c15.out_gwe.sip_info.op_gwe_sip_info",
            FT_UINT32, BASE_DEC,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_sip_info,
            { "C15 Outgoing GWE SIP Info", "c15.out_gwe.sip_info",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_sip_refer_op_gwe_refer_ua_hndl,
            { "OP GWE Refer User Agent Handle", "c15.out_gwe.sip_refer.op_gwe_refer_ua_hndl",
            FT_UINT32, BASE_HEX,
            NULL,
            0x0, NULL, HFILL}
        },
        { &hf_c15ch_out_gwe_sip_refer,
            { "C15 Outgoing GWE SIP Refer", "c15.out_gwe.sip_refer",
            FT_PROTOCOL, BASE_NONE,
            NULL,
            0x0, NULL, HFILL}
        }
    };

    static gint *ett_third_level_out_gwe[] = {
        &ett_c15ch_third_level_out_gwe,
        &ett_c15ch_third_level_out_gwe_sub1,
        &ett_c15ch_third_level_out_gwe_sub2
    };
    /* protocols */

    /* first level: Call History Common Header */
    proto_c15ch = proto_register_protocol(
        "C15 Call History Common Header Protocol",
        "C15.ch",
        "c15.ch"
        );
    proto_register_field_array(proto_c15ch, hf, array_length(hf));
    proto_register_subtree_array(ett, array_length(ett));

    /* second level dissector */
    proto_c15ch_second_level = proto_register_protocol(
        "C15 Call History Protocol",
        "C15",
        "c15"
        );
    proto_register_field_array(proto_c15ch_second_level, hf_second_level, array_length(hf_second_level));
    proto_register_subtree_array(ett_second_level, array_length(ett_second_level));
    c15ch_dissector_table = register_dissector_table("c15", "C15", proto_c15ch, FT_UINT32, BASE_DEC);

    /* third level */
    /* tone */
        proto_c15ch_third_level_tone = proto_register_protocol(
        "C15 Tone",
        "C15.TONE",
        "c15.tone"
        );
    proto_register_field_array(proto_c15ch_third_level_tone, hf_third_level_tone, array_length(hf_third_level_tone));
    proto_register_subtree_array(ett_third_level_tone, array_length(ett_third_level_tone));
    c15ch_tone_dissector_table = register_dissector_table("c15.tone", "C15.TONE", proto_c15ch_third_level_tone, FT_UINT32, BASE_DEC);

    /* inc gwe */
    proto_c15ch_third_level_inc_gwe = proto_register_protocol(
        "C15 Incoming GWE",
        "C15.INC_GWE",
        "c15.inc_gwe"
        );
    proto_register_field_array(proto_c15ch_third_level_inc_gwe, hf_third_level_inc_gwe, array_length(hf_third_level_inc_gwe));
    proto_register_subtree_array(ett_third_level_inc_gwe, array_length(ett_third_level_inc_gwe));
    c15ch_inc_gwe_dissector_table = register_dissector_table("c15.inc_gwe", "C15.INC_GWE", proto_c15ch_third_level_inc_gwe, FT_UINT32, BASE_DEC);

    /* out gwe */
    proto_c15ch_third_level_out_gwe = proto_register_protocol(
        "C15 Outgoing GWE",
        "C15.out_gwe",
        "c15.out_gwe"
        );
    proto_register_field_array(proto_c15ch_third_level_out_gwe, hf_third_level_out_gwe, array_length(hf_third_level_out_gwe));
    proto_register_subtree_array(ett_third_level_out_gwe, array_length(ett_third_level_out_gwe));
    c15ch_out_gwe_dissector_table = register_dissector_table("c15.out_gwe", "C15.out_gwe", proto_c15ch_third_level_out_gwe, FT_UINT32, BASE_DEC);
}


/* handoff */
/* heartbeat dissector */
void proto_reg_handoff_c15ch_hbeat(void)
{
    static dissector_handle_t c15ch_hbeat_handle;
    c15ch_hbeat_handle = create_dissector_handle(dissect_c15ch_hbeat, proto_c15ch_hbeat);
    dissector_add_uint("ethertype", ETHERTYPE_C15_HBEAT, c15ch_hbeat_handle);
}

/* c15 non-heartbeat dissectors : first-level, second-level, and third-level */
void proto_reg_handoff_c15ch(void)
{
    dissector_handle_t c15ch_handle;
    dissector_handle_t c15ch_second_level_handle;
    dissector_handle_t c15ch_third_level_handle;
    /* first level */
    c15ch_handle = create_dissector_handle(dissect_c15ch, proto_c15ch);
    dissector_add_uint("ethertype", ETHERTYPE_C15_CH, c15ch_handle);

    /* second_level */
    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_cp_state_ch, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_CP_STATE_CH, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_cp_event, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_CP_EVENT, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_isup, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_ISUP, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_nitnxlate, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_NITN_XLATE, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_route, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_ROUTE, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_sccp, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_SCCP, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_orig, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_CP_ORIG, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_conn, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_CONN, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_ntwk_conn, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_NTWK_CONN, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_mkbrk, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_MK_BRK, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_pathfind, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_PATH_FIND, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_pathidle, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_PATH_IDLE, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_dest_digits, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_DEST_DIGITS, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_twc_rswch, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_TWC_RSWCH, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_srcedest, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_SRCE_DEST, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_INC_GWE, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_out_gwe, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_OUT_GWE, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_outgwebc, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_OUT_GWE_BC, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_q931, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_Q931, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_ama, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_AMA, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_qos, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_QOS, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_echo_cancel, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_ECHO_CANCEL, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_tone, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_TONE, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_encap_isup, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_ENCAP_ISUP, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_tcap, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_TCAP, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_clli, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_CLLI, c15ch_second_level_handle);

    c15ch_second_level_handle = create_dissector_handle(dissect_c15ch_c15_info, proto_c15ch_second_level);
    dissector_add_uint("c15", C15_INFO, c15ch_second_level_handle);

    /* third level */
    /* tone */
    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_tone_cot_control, proto_c15ch_third_level_tone);
    dissector_add_uint("c15.tone", C15_TONE_COT, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_tone_cpm, proto_c15ch_third_level_tone);
    dissector_add_uint("c15.tone", C15_TONE_CPM, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_tone_give_tone, proto_c15ch_third_level_tone);
    dissector_add_uint("c15.tone", C15_TONE_GIVE_TONE, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_tone_madn_ring, proto_c15ch_third_level_tone);
    dissector_add_uint("c15.tone", C15_TONE_MADN_RING, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_tone_opls, proto_c15ch_third_level_tone);
    dissector_add_uint("c15.tone", C15_TONE_OPLS, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_tone_rcvr, proto_c15ch_third_level_tone);
    dissector_add_uint("c15.tone", C15_TONE_RCVR, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_tone_timeout, proto_c15ch_third_level_tone);
    dissector_add_uint("c15.tone", C15_TONE_TIMEOUT, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_tone_tone_control, proto_c15ch_third_level_tone);
    dissector_add_uint("c15.tone", C15_TONE_TONE_CONTROL, c15ch_third_level_handle);

    /* inc gwe */
    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_reply, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_REPLY, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_bc_pgi, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_BC_PGI, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_mgcp_dlcx, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_MGCP_DLCX, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_h248_digit, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_H248_DIGIT, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_voip_cot, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_VOIP_COT, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_notify, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_NOTIFY, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_admn_updt, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_ADMN_UPDT_REC, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_cl_setup, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_CL_SETUP, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_ptrk_setup, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_PTRK_SETUP, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_cl_prog, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_CL_PROG, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_cl_ans, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_CL_ANS, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_cl_rel, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_CL_REL, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_ntwk_mod, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_NTWK_MOD, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_rv_avail, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_RV_AVAIL, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_cl_redir, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_CL_REDIR, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_cl_refer, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_CL_REFER, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_chg_hndl, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_CHG_HDL, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_subs_chg_hndl, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_SUBS_CHG_HDL, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_info, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_INFO, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_inv_repl, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_INV_REPL, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_admn_dn, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_ADMN_DN, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_sua_reply, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_SUA_REPLY, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_sua_hndl, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_SUA_HNDL, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_inc_gwe_tgh_stat, proto_c15ch_third_level_inc_gwe);
    dissector_add_uint("c15.inc_gwe", C15_INC_GWE_SUA_TGH_STAT, c15ch_third_level_handle);

    /* out gwe */
    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_digit_scan, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_DIGIT_SCAN, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_conn_num, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_CONN_NUM, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_mk_conn, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_MK_CONN, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_md_conn, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_MD_CONN, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_call_ans, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_CALL_ANS, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_call_setup, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_CALL_SETUP, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_call_prog, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_CALL_PROG, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_call_notify, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_CALL_NOTIFY, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_call_rel, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_CALL_REL, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_update_ni_tn, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_UPDT_NI_TN, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_pcm_data, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_PCM_DATA, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_blf_data, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_BLF_DATA, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_out_cot, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_COT, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_ring_line, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_RING_LINE, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_audit_conn, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_AUDIT_CONN, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_sac_sub_valid, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_SAC_SUB_VALID, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_sac_notify, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_SAC_NOTIFY, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_sac_list_entry, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_SAC_LIST_ENTRY, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_rv_subs_data, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_RV_SUBS_DATA, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_update_rec_addr, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_UPDT_REC_ADDR, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_del_subs_ua, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_DEL_SUBS_UA, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_line_sprvsn, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_LINE_SPRVSN, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_sip_info, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_SIP_INFO, c15ch_third_level_handle);

    c15ch_third_level_handle = create_dissector_handle(dissect_c15ch_out_gwe_sip_refer, proto_c15ch_third_level_out_gwe);
    dissector_add_uint("c15.out_gwe", C15_OUT_GWE_SIP_REFER, c15ch_third_level_handle);

    /* find external dissectors */
    general_isup_handle = find_dissector_add_dependency("isup", proto_c15ch);
    general_sccp_handle = find_dissector_add_dependency("sccp", proto_c15ch);
    general_q931_handle = find_dissector_add_dependency("q931", proto_c15ch);

}

/*
 * Editor modelines  -  http://www.wireshark.org/tools/modelines.html
 *
 * Local variables:
 * c-basic-offset: 4
 * tab-width: 8
 * indent-tabs-mode: nil
 * End:
 *
 * vi: set shiftwidth=4 tabstop=8 expandtab:
 * :indentSize=4:tabSize=8:noTabs=true:
 */
