From Anders Broman: add support for BICC dissection.

Change his e-mail address.

svn path=/trunk/; revision=8454
This commit is contained in:
Guy Harris 2003-09-11 00:08:14 +00:00
parent d09530d0cf
commit 930e137aff
3 changed files with 332 additions and 56 deletions

View File

@ -1626,7 +1626,7 @@ rmkml <rmkml [AT] wanadoo.fr> {
Support for capturing from a pipe in Tethereal
}
Anders Broman <a.broman [AT] telia.com> {
Anders Broman <anders.broman [AT] ericsson.com> {
Additional SCTP payload protocol identifiers
Assorted ISUP enhancements
MEGACO updates and fixes

View File

@ -2038,7 +2038,7 @@ B<http://www.ethereal.com>.
Marco Molteni <mmolteni [AT] cisco.com>
James Harris <jharris [AT] fourhorsemen.org>
rmkml <rmkml [AT] wanadoo.fr>
Anders Broman <a.broman [AT] telia.com>
Anders Broman <anders.broman [AT] ericsson.com>
Christian Falckenberg <christian.falckenberg [AT] nortelnetworks.com>
Huagang Xie <xie [AT] lids.org>
cjs 2895 <cjs2895 [AT] hotmail.com>

View File

@ -1,8 +1,10 @@
/* packet-isup.c
* Routines for ISUP dissection
* Copyright 2001, Martina Obermeier <martina.obermeier@icn.siemens.de>
*
* $Id: packet-isup.c,v 1.24 2003/06/26 08:39:46 guy Exp $
* Modified 2003-09-10 by Anders Broman
* <anders.broman@ericsson.com>
* Inserted routines for BICC dissection
* $Id: packet-isup.c,v 1.25 2003/09/11 00:08:14 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@ -39,6 +41,7 @@
#include "packet-q931.h"
#define MTP3_ISUP_SERVICE_INDICATOR 5
#define MTP3_BICC_SERVICE_INDICATOR 13
#define ASCII_NUMBER_DELTA 0x30
#define ASCII_LETTER_DELTA 0x37
@ -91,6 +94,10 @@
#define MESSAGE_TYPE_IDENT_RSP 55
#define MESSAGE_TYPE_SEGMENTATION 56
#define MESSAGE_TYPE_LOOP_PREVENTION 64
#define MESSAGE_TYPE_APPLICATION_TRANS 65
#define MESSAGE_TYPE_PRE_RELEASE_INFO 66
#define MESSAGE_TYPE_SUBSEQUENT_DIR_NUM 67
static const value_string isup_message_type_value[] = {
{ MESSAGE_TYPE_INITIAL_ADDR, "Initial address"},
@ -139,6 +146,10 @@ static const value_string isup_message_type_value[] = {
{ MESSAGE_TYPE_IDENT_RSP, "Identification response"},
{ MESSAGE_TYPE_SEGMENTATION, "Segmentation"},
{ MESSAGE_TYPE_LOOP_PREVENTION, "Loop prevention"},
{ MESSAGE_TYPE_APPLICATION_TRANS, "Application transport"},
{ MESSAGE_TYPE_PRE_RELEASE_INFO, "Pre-release information"},
{ MESSAGE_TYPE_SUBSEQUENT_DIR_NUM, "Subsequent Directory Number (national use)"},
{ 0, NULL}};
/* Same as above but in acronym form (for the Info column) */
@ -189,6 +200,10 @@ static const value_string isup_message_type_value_acro[] = {
{ MESSAGE_TYPE_IDENT_RSP, "IDS"},
{ MESSAGE_TYPE_SEGMENTATION, "SGM"},
{ MESSAGE_TYPE_LOOP_PREVENTION, "LOP"},
{ MESSAGE_TYPE_APPLICATION_TRANS, "APM"},
{ MESSAGE_TYPE_PRE_RELEASE_INFO, "PRI"},
{ MESSAGE_TYPE_SUBSEQUENT_DIR_NUM, "SDN"},
{ 0, NULL}};
/* Definition of Parameter Types */
@ -270,6 +285,7 @@ static const value_string isup_message_type_value_acro[] = {
#define PARAM_TYPE_UID_ACTION_IND 116
#define PARAM_TYPE_UID_CAPAB_IND 117
#define PARAM_TYPE_REDIRECT_COUNTER 119
#define PARAM_TYPE_APPLICATON_TRANS 120
#define PARAM_TYPE_COLLECT_CALL_REQ 121
#define PARAM_TYPE_GENERIC_NR 192
#define PARAM_TYPE_GENERIC_DIGITS 193
@ -356,12 +372,15 @@ static const value_string isup_parameter_type_value[] = {
{ PARAM_TYPE_COLLECT_CALL_REQ, "Collect call request"},
{ PARAM_TYPE_GENERIC_NR, "Generic number"},
{ PARAM_TYPE_GENERIC_DIGITS, "Generic digits (national use)"},
{ PARAM_TYPE_APPLICATON_TRANS, "Application transport"},
{ 0, NULL}};
#define CIC_LENGTH 2
#define BICC_CIC_LENGTH 4
#define MESSAGE_TYPE_LENGTH 1
#define COMMON_HEADER_LENGTH (CIC_LENGTH + MESSAGE_TYPE_LENGTH)
#define BICC_COMMON_HEADER_LENGTH (BIC_CIC_LENGTH + MESSAGE_TYPE_LENGTH)
#define MAXLENGTH 0xFF /* since length field is 8 Bit long - used in number dissectors;
max. number of address digits is 15 digits, but MAXLENGTH used
@ -433,6 +452,7 @@ static const value_string isup_parameter_type_value[] = {
#define CREDIT_LENGTH 1 /* for parameter Connection request */
#define CIC_OFFSET 0
#define BICC_CIC_OFFSET 0
#define NO_SATELLITE_CIRCUIT_IN_CONNECTION 0
#define ONE_SATELLITE_CIRCUIT_IN_CONNECTION 1
@ -1031,6 +1051,8 @@ static const true_false_string isup_extension_ind_value = {
"information continues through the next octet"
};
static const value_string isup_call_to_be_diverted_ind_value[] = {
/* according 3.72/Q.763 */
{ 0, "no indication"},
@ -1055,6 +1077,45 @@ static const value_string isup_conference_acceptance_ind_value[] = {
{ 3, "spare"},
{ 0, NULL}};
static const value_string isup_application_transport_parameter_value[] = {
/* according 3.82/Q.763 */
{ 0, "Unidentified Context and Error Handling (UCEH) ASE"},
{ 1, "PSS1 ASE (VPN)"},
{ 2, "spare"},
{ 3, "Charging ASE"},
{ 4, "GAT"},
{ 5, "BAT ASE"},
{ 6, "Enhanced Unidentified Context and Error Handling ASE (EUCEH ASE)"},
{ 0, NULL}};
static const true_false_string isup_Release_call_indicator_value = {
"release call",
"do not release call"
};
static const true_false_string isup_Send_notification_ind_value = {
"send notification",
"do not send notification"
};
static const value_string isup_APM_segmentation_ind_value[] = {
{ 0x00, "final segment"},
{ 0x01, "number of following segments"},
{ 0x02, "number of following segments"},
{ 0x03, "number of following segments"},
{ 0x04, "number of following segments"},
{ 0x05, "number of following segments"},
{ 0x06, "number of following segments"},
{ 0x07, "number of following segments"},
{ 0x08, "number of following segments"},
{ 0x09, "number of following segments"},
{ 0, NULL}};
static const true_false_string isup_Sequence_ind_value = {
"new sequence",
"subsequent segment to first segment"
};
/* Generalized bit masks for 8 and 16 bits fields */
#define A_8BIT_MASK 0x01
@ -1070,6 +1131,7 @@ static const value_string isup_conference_acceptance_ind_value[] = {
#define CB_8BIT_MASK 0x06
#define DC_8BIT_MASK 0x0C
#define FE_8BIT_MASK 0x30
#define GF_8BIT_MASK 0x60
#define GFE_8BIT_MASK 0x70
#define DCBA_8BIT_MASK 0x0F
#define EDCBA_8BIT_MASK 0x1F
@ -1109,7 +1171,10 @@ static const value_string isup_conference_acceptance_ind_value[] = {
/* Initialize the protocol and registered fields */
static int proto_isup = -1;
static int proto_bicc = -1;
static int hf_isup_cic = -1;
static int hf_bicc_cic = -1;
static int hf_isup_message_type = -1;
static int hf_isup_parameter_type = -1;
static int hf_isup_parameter_length = -1;
@ -1217,11 +1282,25 @@ static int hf_isup_loop_prevention_response_ind = -1;
static int hf_isup_temporary_alternative_routing_ind = -1;
static int hf_isup_extension_ind = -1;
static int hf_isup_call_to_be_diverted_ind = -1;
static int hf_isup_call_to_be_diverted_ind = -1;
static int hf_isup_call_to_be_offered_ind = -1;
static int hf_isup_call_to_be_offered_ind = -1;
static int hf_isup_conference_acceptance_ind = -1;
static int hf_isup_conference_acceptance_ind = -1;
static int hf_isup_transit_at_intermediate_exchange_ind = -1;
static int hf_isup_Release_call_ind = -1;
static int hf_isup_Send_notification_ind = -1;
static int hf_isup_Discard_message_ind_value = -1;
static int hf_isup_Discard_parameter_ind = -1;
static int hf_isup_Pass_on_not_possible_indicator = -1;
static int hf_isup_Broadband_narrowband_interworking_ind = -1;
static int hf_isup_app_cont_ident = -1;
static int hf_isup_app_Send_notification_ind = -1;
static int hf_isup_apm_segmentation_ind = -1;
static int hf_isup_apm_si_ind = -1;
static int hf_isup_app_Release_call_ind = -1;
/* Initialize the subtree pointers */
static gint ett_isup = -1;
@ -1230,7 +1309,7 @@ static gint ett_isup_address_digits = -1;
static gint ett_isup_pass_along_message = -1;
static gint ett_isup_circuit_state_ind = -1;
static gint ett_bicc = -1;
/* ------------------------------------------------------------------
Mapping number to ASCII-character
------------------------------------------------------------------ */
@ -1730,6 +1809,74 @@ dissect_isup_access_transport_parameter(tvbuff_t *parameter_tvb, proto_tree *par
proto_tree_add_text(parameter_tree, parameter_tvb, 0, length, "Access transport parameter field (-> Q.931)");
proto_item_set_text(parameter_item, "Access transport, see Q.931 (%u byte%s length)", length , plurality(length, "", "s"));
}
static void
dissect_isup_application_transport_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item)
{
guint8 application_context_identifier;
guint8 application_transport_instruction_ind;
guint8 si_and_apm_segmentation_indicator;
guint8 apm_Segmentation_local_ref;
guint8 pointer_to_transparent_data;
guint16 application_context_identifier16;
guint8 offset = 0;
guint length = tvb_length(parameter_tvb);
proto_tree_add_text(parameter_tree, parameter_tvb, 0, length, "Application transport parameter fields:");
proto_item_set_text(parameter_item, "Application transport, (%u byte%s length)", length , plurality(length, "", "s"));
application_context_identifier = tvb_get_guint8(parameter_tvb, 0);
if ( (application_context_identifier & H_8BIT_MASK) == 0x80) {
proto_tree_add_uint(parameter_tree, hf_isup_app_cont_ident, parameter_tvb,offset, 1, (application_context_identifier & GFEDCBA_8BIT_MASK));
offset = offset + 1;
if ((application_context_identifier & 0x7f) > 6) return;
}
else
{
application_context_identifier16 = tvb_get_letohs(parameter_tvb,offset);
proto_tree_add_text(parameter_tree, parameter_tvb, offset, 2, "Application context identifier: 0x%x", application_context_identifier16);
offset = offset + 2;
return; /* no further decoding of this element */
}
proto_tree_add_text(parameter_tree, parameter_tvb, offset, length, "Application transport instruction indictators: ");
application_transport_instruction_ind = tvb_get_guint8(parameter_tvb, offset);
proto_tree_add_boolean(parameter_tree, hf_isup_app_Release_call_ind, parameter_tvb, offset, 1, application_transport_instruction_ind);
proto_tree_add_boolean(parameter_tree, hf_isup_app_Send_notification_ind, parameter_tvb, offset, 1, application_transport_instruction_ind);
offset = offset + 1;
if ( (application_transport_instruction_ind & H_8BIT_MASK) == 0x80) {
proto_tree_add_text(parameter_tree, parameter_tvb, offset, length, "APM segmentation indicator:");
si_and_apm_segmentation_indicator = tvb_get_guint8(parameter_tvb, offset);
proto_tree_add_uint(parameter_tree, hf_isup_apm_segmentation_ind , parameter_tvb, offset, 1, si_and_apm_segmentation_indicator );
proto_tree_add_boolean(parameter_tree, hf_isup_apm_si_ind , parameter_tvb, offset, 1, si_and_apm_segmentation_indicator );
offset = offset + 1;
if ( (si_and_apm_segmentation_indicator & H_8BIT_MASK) == 0x80) {
apm_Segmentation_local_ref = tvb_get_guint8(parameter_tvb, offset);
proto_tree_add_text(parameter_tree, parameter_tvb, offset, 1, "Segmentation local reference (SLR): 0x%x", apm_Segmentation_local_ref );
offset = offset + 1;
}
}
proto_tree_add_text(parameter_tree, parameter_tvb, offset, length, "APM-user information field" );
/* dissect BAT ASE element, without transparent data ( Q.765.5-200006) */
if ((application_context_identifier & 0x7f) != 5) {
proto_tree_add_text(parameter_tree, parameter_tvb, offset, length, "No further dissection of APM-user information field");
return;
}
pointer_to_transparent_data = tvb_get_guint8(parameter_tvb, offset);
if (pointer_to_transparent_data != 0)
proto_tree_add_text(parameter_tree, parameter_tvb, offset, 1, "Pointer to transparent data: 0x%x Don't know how to dissect further", pointer_to_transparent_data );
proto_tree_add_text(parameter_tree, parameter_tvb, offset, 1, "Pointer to transparent data: 0x%x No transparent data", pointer_to_transparent_data );
offset = offset + 1;
}
/* ------------------------------------------------------------------
Dissector Parameter Optional Forward Call indicators
*/
@ -2357,37 +2504,27 @@ dissect_isup_message_compatibility_information_parameter(tvbuff_t *parameter_tvb
/* ------------------------------------------------------------------
Dissector Parameter compatibility information
*/
static const value_string ISUP_transit_at_intermediate_exchange_indicator_vals[] = {
{ 0x00, "Transit interpretation" },
{ 0x01, "End node interpretation" },
static const true_false_string isup_transit_at_intermediate_exchange_ind_value = {
"End node interpretation",
"Transit interpretation"
};
static const value_string ISUP_Release_call_indicator_vals[] = {
{ 0x00, "Do not release call" },
{ 0x02, "Release call" },
static const true_false_string isup_Discard_message_ind_value = {
"Discard message",
"Do not discard message (pass on)",
};
static const value_string ISUP_Send_notification_indicator_vals[] = {
{ 0x00, "Do not send notification" },
{ 0x04, "Send notification" },
};
static const value_string ISUP_Discard_message_indicator_vals[] = {
{ 0x00, "Do not discard message (pass on)" },
{ 0x08, "Discard message" },
};
static const value_string ISUP_Discard_parameter_indicator_vals[] = {
{ 0x00, "Do not discard parameter (pass on)" },
{ 0x10, "Discard parameter" },
static const true_false_string isup_Discard_parameter_ind_value = {
"Discard parameter",
"Do not discard parameter (pass on)",
};
static const value_string ISUP_Pass_on_not_possible_indicator_vals[] = {
static const value_string isup_Pass_on_not_possible_indicator_vals[] = {
{ 0x00, "Release call" },
{ 0x20, "Discard message" },
{ 0x40, "Discard parameter" },
{ 0x60, "Reserved (interpreted as 00)" },
{ 0x01, "Discard message" },
{ 0x02, "Discard parameter" },
{ 0x03, "Reserved (interpreted as 00)" },
};
static const value_string ISUP_Broadband_narrowband_interworking_indicator_vals[] = {
@ -2425,39 +2562,27 @@ dissect_isup_parameter_compatibility_information_parameter(tvbuff_t *parameter_t
"Instruction indicators: 0x%x ",
instruction_indicators);
proto_tree_add_text(parameter_tree, parameter_tvb, offset, 1,
"Transit at intermediate exchange indicator: Bit A %s",
val_to_str(instruction_indicators & 0x01,ISUP_transit_at_intermediate_exchange_indicator_vals ,NULL));
proto_tree_add_text(parameter_tree, parameter_tvb, offset, 1,
"Release call indicator: Bit B %s",
val_to_str(instruction_indicators & 0x02,ISUP_Release_call_indicator_vals ,NULL));
proto_tree_add_boolean(parameter_tree, hf_isup_transit_at_intermediate_exchange_ind,
parameter_tvb, offset, 1, instruction_indicators );
proto_tree_add_text(parameter_tree, parameter_tvb, offset, 1,
"Send_notification_indicator: Bit C %s",
val_to_str(instruction_indicators & 0x04,ISUP_Send_notification_indicator_vals ,NULL));
proto_tree_add_boolean(parameter_tree, hf_isup_Release_call_ind, parameter_tvb, offset, 1, instruction_indicators );
proto_tree_add_text(parameter_tree, parameter_tvb, offset, 1,
"Discard message indicator: Bit D %s",
val_to_str(instruction_indicators & 0x08,ISUP_Discard_message_indicator_vals ,NULL));
proto_tree_add_boolean(parameter_tree, hf_isup_Send_notification_ind, parameter_tvb, offset, 1, instruction_indicators );
proto_tree_add_text(parameter_tree, parameter_tvb, offset, 1,
"Discard parameter indicator: Bit E %s",
val_to_str(instruction_indicators & 0x10,ISUP_Discard_parameter_indicator_vals ,NULL));
proto_tree_add_boolean(parameter_tree, hf_isup_Discard_message_ind_value, parameter_tvb, offset, 1, instruction_indicators );
proto_tree_add_boolean(parameter_tree, hf_isup_Discard_parameter_ind, parameter_tvb, offset, 1, instruction_indicators );
proto_tree_add_uint(parameter_tree, hf_isup_Pass_on_not_possible_indicator, parameter_tvb, 0, 1,instruction_indicators);
proto_tree_add_text(parameter_tree, parameter_tvb, offset, 1,
"Pass on not possible indicator: Bits FG %s",
val_to_str(instruction_indicators & 0x60,ISUP_Pass_on_not_possible_indicator_vals ,NULL));
offset += 1;
len -= 1;
if (!(instruction_indicators & H_8BIT_MASK)) {
if (len == 0)
return;
instruction_indicators = tvb_get_guint8(parameter_tvb, offset);
proto_tree_add_text(parameter_tree, parameter_tvb, offset, 1,
"Broadband/narrowband interworking indicator: Bit JI %s",
val_to_str(instruction_indicators & 0x03,ISUP_Broadband_narrowband_interworking_indicator_vals ,NULL));
offset += 1;
proto_tree_add_uint(parameter_tree, hf_isup_Broadband_narrowband_interworking_ind, parameter_tvb, offset, 1,instruction_indicators);
offset += 1;
len -= 1;
}
if (len == 0)
@ -3278,6 +3403,10 @@ dissect_isup_optional_parameter(tvbuff_t *optional_parameters_tvb, proto_tree *i
case PARAM_TYPE_GENERIC_DIGITS:
dissect_isup_generic_digits_parameter(parameter_tvb, parameter_tree, parameter_item);
break;
case PARAM_TYPE_APPLICATON_TRANS:
dissect_isup_application_transport_parameter(parameter_tvb, parameter_tree, parameter_item);
break;
default:
dissect_isup_unknown_parameter(parameter_tvb, parameter_item);
break;
@ -4098,6 +4227,19 @@ dissect_isup_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *isup
/* no dissector necessary since no mandatory parameters included */
opt_part_possible = TRUE;
break;
case MESSAGE_TYPE_APPLICATION_TRANS:
/* no dissector necessary since no mandatory parameters included */
opt_part_possible = TRUE;
break;
case MESSAGE_TYPE_PRE_RELEASE_INFO:
/* no dissector necessary since no mandatory parameters included */
opt_part_possible = TRUE;
break;
case MESSAGE_TYPE_SUBSEQUENT_DIR_NUM:
/* do nothing since format is a national matter */
proto_tree_add_text(isup_tree, parameter_tvb, 0, bufferlength, "Format is a national matter");
break;
default:
proto_tree_add_text(isup_tree, parameter_tvb, 0, bufferlength, "Unknown Message type (possibly reserved/used in former ISUP version)");
break;
@ -4159,7 +4301,44 @@ dissect_isup(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
}
}
/* ------------------------------------------------------------------ */
static void
dissect_bicc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
/* Set up structures needed to add the protocol subtree and manage it */
proto_item *ti;
proto_tree *bicc_tree;
tvbuff_t *message_tvb;
guint32 bicc_cic;
guint8 message_type;
/* Make entries in Protocol column and Info column on summary display */
if (check_col(pinfo->cinfo, COL_PROTOCOL))
col_set_str(pinfo->cinfo, COL_PROTOCOL, "BICC");
/* Extract message type field */
message_type = tvb_get_guint8(tvb, BICC_CIC_OFFSET + BICC_CIC_LENGTH);
if (check_col(pinfo->cinfo, COL_INFO))
col_add_fstr(pinfo->cinfo, COL_INFO, "%s ", val_to_str(message_type, isup_message_type_value_acro, "reserved"));
/* In the interest of speed, if "tree" is NULL, don't do any work not
necessary to generate protocol tree items. */
if (tree) {
ti = proto_tree_add_item(tree, proto_bicc, tvb, 0, -1, FALSE);
bicc_tree = proto_item_add_subtree(ti, ett_bicc);
/* dissect CIC in main dissector since pass-along message type carrying complete BICC/ISUP message w/o CIC needs
recursive message dissector call */
bicc_cic = tvb_get_letohs(tvb, BICC_CIC_OFFSET);
proto_tree_add_uint_format(bicc_tree, hf_bicc_cic, tvb, BICC_CIC_OFFSET, BICC_CIC_LENGTH, bicc_cic, "CIC: %u", bicc_cic);
message_tvb = tvb_new_subset(tvb, BICC_CIC_LENGTH, -1, -1);
dissect_isup_message(message_tvb, pinfo, bicc_tree);
}
}
/*---------------------------------------------------------------------*/
/* Register the protocol with Ethereal */
void
@ -4601,6 +4780,68 @@ proto_register_isup(void)
{ "Conference acceptance indicator", "isup.conference_acceptance_ind",
FT_UINT8, BASE_DEC, VALS(isup_conference_acceptance_ind_value), BA_8BIT_MASK,
"", HFILL }},
{ &hf_isup_transit_at_intermediate_exchange_ind,
{ "Transit at intermediate exchange indicator", "isup.transit_at_intermediate_exchange_ind",
FT_BOOLEAN, 16, TFS(&isup_transit_at_intermediate_exchange_ind_value), A_8BIT_MASK,
"", HFILL }},
{ &hf_isup_Release_call_ind,
{ "Release call indicator", "isup.Release_call_ind",
FT_BOOLEAN, 16, TFS(&isup_Release_call_indicator_value), B_8BIT_MASK,
"", HFILL }},
{ &hf_isup_Send_notification_ind,
{ "Send notification indicator", "isup.Send_notification_ind",
FT_BOOLEAN, 16, TFS(&isup_Send_notification_ind_value),C_8BIT_MASK,
"", HFILL }},
{ &hf_isup_Discard_message_ind_value,
{ "Discard message indicator","isup.Discard_message_ind_value",
FT_BOOLEAN, 16, TFS(&isup_Discard_message_ind_value), D_8BIT_MASK,
"", HFILL }},
{ &hf_isup_Discard_parameter_ind,
{ "Discard parameter indicator","isup.Discard_parameter_ind",
FT_BOOLEAN, 16, TFS(&isup_Discard_parameter_ind_value), E_8BIT_MASK,
"", HFILL }},
{ &hf_isup_Pass_on_not_possible_indicator,
{ "Pass on not possible indicator", "isup_Pass_on_not_possible_ind",
FT_UINT8, BASE_HEX, VALS(isup_Pass_on_not_possible_indicator_vals),GF_8BIT_MASK,
"", HFILL }},
{ &hf_isup_Broadband_narrowband_interworking_ind,
{ "Broadband narrowband interworking indicator Bits JF", "isup_Pass_on_not_possible_ind",
FT_UINT8, BASE_HEX, VALS(ISUP_Broadband_narrowband_interworking_indicator_vals),BA_8BIT_MASK,
"", HFILL }},
{ &hf_isup_app_cont_ident,
{ "Application context identifier", "isup.app_context_identifier",
FT_UINT8, BASE_DEC, VALS(isup_application_transport_parameter_value),0x0,
"", HFILL }},
{ &hf_isup_app_Release_call_ind,
{ "Release call indicator (RCI)", "isup.app_Release_call_ indicator",
FT_BOOLEAN, 8, TFS(&isup_Release_call_indicator_value), A_8BIT_MASK,
"", HFILL }},
{ &hf_isup_app_Send_notification_ind,
{ "Send notification indicator (SNI)", "isup.app_Send_notification_ind",
FT_BOOLEAN, 8, TFS(&isup_Send_notification_ind_value), B_8BIT_MASK,
"", HFILL }},
{ &hf_isup_apm_segmentation_ind,
{ "APM segmentation indicator", "isup.apm_segmentation_ind",
FT_UINT8, BASE_DEC, VALS(isup_APM_segmentation_ind_value), FEDCBA_8BIT_MASK,
"", HFILL }},
{ &hf_isup_apm_si_ind,
{ "Sequence indicator (SI)", "isup.APM_Sequence_ind",
FT_BOOLEAN, 8, TFS(& isup_Sequence_ind_value), G_8BIT_MASK,
"", HFILL }},
};
/* Setup protocol subtree array */
@ -4628,8 +4869,43 @@ void
proto_reg_handoff_isup(void)
{
dissector_handle_t isup_handle;
isup_handle = create_dissector_handle(dissect_isup, proto_isup);
dissector_add("mtp3.service_indicator", MTP3_ISUP_SERVICE_INDICATOR, isup_handle);
dissector_add("m3ua.protocol_data_si", MTP3_ISUP_SERVICE_INDICATOR, isup_handle);
}
void
proto_register_bicc(void)
{
/* Setup list of header fields See Section 1.6.1 for details*/
static hf_register_info hf[] = {
{ &hf_bicc_cic,
{ "Call identification Code (CIC)", "bicc.cic",
FT_UINT32, BASE_HEX, NULL, 0x0,
"", HFILL }},
};
/* Setup protocol subtree array */
static gint *ett[] = {
&ett_bicc
};
proto_bicc = proto_register_protocol("Bearer Independent Call Control ",
"BICC", "bicc");
/* Required function calls to register the header fields and subtrees used */
proto_register_field_array(proto_bicc, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
}
/* Register isup with the sub-laying MTP L3 dissector */
void
proto_reg_handoff_bicc(void)
{
dissector_handle_t bicc_handle;
bicc_handle = create_dissector_handle(dissect_bicc, proto_bicc);
dissector_add("mtp3.service_indicator", MTP3_BICC_SERVICE_INDICATOR, bicc_handle);
dissector_add("m3ua.protocol_data_si", MTP3_BICC_SERVICE_INDICATOR, bicc_handle);
}