aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2006-04-25 19:12:08 +0000
committerAnders Broman <anders.broman@ericsson.com>2006-04-25 19:12:08 +0000
commitf9468fe33f35dfb0fdbc25cc6ae84ffd3b330963 (patch)
tree10ccc1b99de1184b2ecb9fa5dfccef309d4daa96
parenta6930fe4ae76f82ccb17a31f1ca1ec01546ce074 (diff)
Add some more ANSI Message types and Parameters dissect ANSI cause.
svn path=/trunk/; revision=18000
-rw-r--r--epan/dissectors/packet-isup.c152
-rw-r--r--epan/dissectors/packet-isup.h15
2 files changed, 147 insertions, 20 deletions
diff --git a/epan/dissectors/packet-isup.c b/epan/dissectors/packet-isup.c
index 553583d7ac..631ac0bfe1 100644
--- a/epan/dissectors/packet-isup.c
+++ b/epan/dissectors/packet-isup.c
@@ -126,6 +126,7 @@ static gint isup_type = ITU_ISUP;
#define ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES 0xEA
#define ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST_RSP 0xEB
#define ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST 0xEC
+#define ANSI_ISUP_MESSAGE_TYPE_EXIT 0xED
const value_string isup_message_type_value[] = {
{ MESSAGE_TYPE_INITIAL_ADDR, "Initial address"},
@@ -177,10 +178,6 @@ const value_string isup_message_type_value[] = {
{ MESSAGE_TYPE_APPLICATION_TRANS, "Application transport"},
{ MESSAGE_TYPE_PRE_RELEASE_INFO, "Pre-release information"},
{ MESSAGE_TYPE_SUBSEQUENT_DIR_NUM, "Subsequent Directory Number (national use)"},
- { ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES_ACK, "Circuit Reservation Acknowledge"},
- { ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES , "Circuit Reservation"},
- { ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST_RSP , "Circuit Validation Test Response"},
- { ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST , "Circuit Validation Test"},
{ 0, NULL}};
static const value_string ansi_isup_message_type_value[] = {
@@ -234,9 +231,10 @@ const value_string isup_message_type_value[] = {
{ MESSAGE_TYPE_PRE_RELEASE_INFO, "Pre-release information"},
{ MESSAGE_TYPE_SUBSEQUENT_DIR_NUM, "Subsequent Directory Number (national use)"},
{ ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES_ACK, "Circuit Reservation Acknowledge"},
- { ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES , "Circuit Reservation"},
- { ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST_RSP , "Circuit Validation Test Response"},
- { ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST , "Circuit Validation Test"},
+ { ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES, "Circuit Reservation"},
+ { ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST_RSP, "Circuit Validation Test Response"},
+ { ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST, "Circuit Validation Test"},
+ { ANSI_ISUP_MESSAGE_TYPE_EXIT, "Exit"},
{ 0, NULL}};
/* Same as above but in acronym form (for the Info column) */
const value_string isup_message_type_value_acro[] = {
@@ -289,10 +287,6 @@ const value_string isup_message_type_value_acro[] = {
{ MESSAGE_TYPE_APPLICATION_TRANS, "APM"},
{ MESSAGE_TYPE_PRE_RELEASE_INFO, "PRI"},
{ MESSAGE_TYPE_SUBSEQUENT_DIR_NUM, "SDN"},
- { ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES_ACK, "CRA"},
- { ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES, "CRM"},
- { ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST_RSP, "CVR"},
- { ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST, "CVT"},
{ 0, NULL}};
/* Same as above but in acronym form (for the Info column) */
@@ -350,6 +344,7 @@ static const value_string ansi_isup_message_type_value_acro[] = {
{ ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES, "CRM"},
{ ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST_RSP, "CVR"},
{ ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST, "CVT"},
+ { ANSI_ISUP_MESSAGE_TYPE_EXIT, "EXIT"},
{ 0, NULL}};
const value_string isup_parameter_type_value[] = {
@@ -520,6 +515,24 @@ static const value_string ansi_isup_parameter_type_value[] = {
{ PARAM_TYPE_GENERIC_NR, "Generic number"},
{ PARAM_TYPE_GENERIC_DIGITS, "Generic digits (national use)"},
{ PARAM_TYPE_APPLICATON_TRANS, "Application transport"},
+ { ANSI_ISUP_PARAM_TYPE_OPER_SERV_INF, "Operator Services information"},
+ { ANSI_ISUP_PARAM_TYPE_EGRESS, "Egress"},
+ { ANSI_ISUP_PARAM_TYPE_JURISDICTION, "Jurisdiction"},
+ { ANSI_ISUP_PARAM_TYPE_CARRIER_ID, "Carrier identification"},
+ { ANSI_ISUP_PARAM_TYPE_BUSINESS_GRP, "Buisiness group"},
+ { ANSI_ISUP_PARAM_TYPE_GENERIC_NAME, "Generic name"},
+ { ANSI_ISUP_PARAM_TYPE_NOTIF_IND, "Notification indicator"},
+ { ANSI_ISUP_PARAM_TYPE_CG_CHAR_IND, "Circuit group characteristic indicator"},
+ { ANSI_ISUP_PARAM_TYPE_CVR_RESP_IND, "Circuit validation response indicator"},
+ { ANSI_ISUP_PARAM_TYPE_OUT_TRK_GRP_NM,"Outgoing trunk group number"},
+ { ANSI_ISUP_PARAM_TYPE_CI_NAME_IND, "Circuit identification name"},
+ { ANSI_ISUP_PARAM_CLLI_CODE, "COMMON LANGUAGE location identificatio (CLLI) code"},
+ { ANSI_ISUP_PARAM_ORIG_LINE_INF, "Originating line information"},
+ { ANSI_ISUP_PARAM_CHRG_NO, "Charge number"},
+ { ANSI_ISUP_PARAM_SERV_CODE_IND, "Service code indicator"},
+ { ANSI_ISUP_PARAM_SPEC_PROC_REQ, "Special processing request"},
+ { ANSI_ISUP_PARAM_CARRIER_SEL_INF, "Carrier selection information"},
+ { ANSI_ISUP_PARAM_NET_TRANS, "Network transport"},
{ 0, NULL}};
#define CIC_LENGTH 2
@@ -1476,6 +1489,7 @@ static int hf_isup_backw_call_echo_control_device_ind = -1;
static int hf_isup_backw_call_sccp_method_ind = -1;
static int hf_isup_cause_indicator = -1;
+static int hf_ansi_isup_cause_indicator = -1;
static int hf_isup_suspend_resume_indicator = -1;
@@ -1551,6 +1565,10 @@ static int hf_isup_apm_slr = -1;
static int hf_isup_orig_addr_len = -1;
static int hf_isup_dest_addr_len = -1;
static int hf_isup_app_Release_call_ind = -1;
+static int hf_isup_cause_location = -1;
+
+static int hf_ansi_isup_coding_standard = -1;
+
static int hf_length_indicator = -1;
static int hf_afi = -1;
static int hf_bicc_nsap_dsp = -1;
@@ -2074,9 +2092,24 @@ const value_string q850_cause_code_vals[] = {
{ 0, NULL }
};
+static const value_string ansi_isup_cause_code_vals[] = {
+ { 23, "Unallocated destination number" },
+ { 24, "Undefined buissines group" },
+ { 25, "Exchange routeing error" },
+ { 45, "Preemption" },
+ { 46, "Precedence call blocked" },
+ { 51, "Call type incompatible with service request" },
+ { 54, "Call blocked due to group restriction" },
+ { 0, NULL }
+};
-
-
+static const value_string ansi_isup_coding_standard_vals[] = {
+ { 0, "CCITT Standard" },
+ { 1, "Reserved for other international standards" },
+ { 2, "ANSI Standard" },
+ { 3, "Reserved" },
+ { 0, NULL }
+};
void
dissect_isup_cause_indicators_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item)
{ guint length = tvb_reported_length(parameter_tvb);
@@ -2087,6 +2120,50 @@ dissect_isup_cause_indicators_parameter(tvbuff_t *parameter_tvb, proto_tree *par
proto_item_set_text(parameter_item, "Cause indicators, see Q.850 (%u byte%s length)", length , plurality(length, "", "s"));
}
+static void
+dissect_ansi_isup_cause_indicators_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item)
+{
+ guint8 coding_standard;
+ int offset = 0;
+ guint length = tvb_reported_length(parameter_tvb);
+
+ coding_standard = (tvb_get_guint8(parameter_tvb, offset)&& 0x60)>>5;
+ proto_tree_add_text(parameter_tree, parameter_tvb,0, -1, "Cause indicators");
+
+ switch (coding_standard) {
+ case 1:
+ /* ITU Cause */
+ dissect_q931_cause_ie(parameter_tvb,0,length,
+ parameter_tree,
+ hf_isup_cause_indicator, &tap_cause_value);
+ break;
+ case 2:
+ /*ANSI*/
+ proto_tree_add_item(parameter_tree, hf_isup_cause_location, parameter_tvb, offset, 1, FALSE);
+ proto_tree_add_item(parameter_tree, hf_ansi_isup_coding_standard, parameter_tvb, offset, 1, FALSE);
+ proto_tree_add_item(parameter_tree, hf_isup_extension_ind, parameter_tvb, offset, 1, FALSE);
+ offset ++;
+ length--;
+ if (length == 0)
+ return;
+ proto_tree_add_item(parameter_tree, hf_ansi_isup_cause_indicator, parameter_tvb, offset, 1, FALSE);
+ offset ++;
+ length--;
+ if (length == 0)
+ return;
+ proto_tree_add_text(parameter_tree, parameter_tvb, offset,
+ length, "Diagnostic: %s",
+ tvb_bytes_to_str(parameter_tvb, offset, length));
+ return;
+ break;
+ default:
+ proto_tree_add_item(parameter_tree, hf_ansi_isup_coding_standard, parameter_tvb, offset, 1, FALSE);
+ proto_tree_add_item(parameter_tree, hf_isup_extension_ind, parameter_tvb, offset, 1, FALSE);
+ break;
+ }
+ proto_item_set_text(parameter_item, "Cause indicators(%u byte%s length)", length , plurality(length, "", "s"));
+}
+
/* ------------------------------------------------------------------
Dissector Parameter Suspend/Resume Indicators
*/
@@ -5272,7 +5349,7 @@ dissect_ansi_isup_optional_parameter(tvbuff_t *optional_parameters_tvb,packet_in
dissect_isup_backward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item);
break;
case PARAM_TYPE_CAUSE_INDICATORS:
- dissect_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item);
+ dissect_ansi_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item);
break;
case PARAM_TYPE_REDIRECTION_INFO:
dissect_isup_redirection_information_parameter(parameter_tvb, parameter_tree, parameter_item);
@@ -5489,7 +5566,7 @@ dissect_ansi_isup_optional_parameter(tvbuff_t *optional_parameters_tvb,packet_in
Dissector Message Type Circuit Validation Test Response
*/
static gint
-dissect_isup_circuit_validation_test_resp_message(tvbuff_t *message_tvb, proto_tree *isup_tree)
+dissect_ansi_isup_circuit_validation_test_resp_message(tvbuff_t *message_tvb, proto_tree *isup_tree)
{
proto_item* parameter_item;
proto_tree* parameter_tree;
@@ -5786,7 +5863,14 @@ dissect_isup_release_message(tvbuff_t *message_tvb, proto_tree *isup_tree)
proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_length, message_tvb, offset + parameter_pointer, PARAMETER_LENGTH_IND_LENGTH, parameter_length, "Parameter length: %u", parameter_length);
actual_length = tvb_ensure_length_remaining(message_tvb, offset);
parameter_tvb = tvb_new_subset(message_tvb, offset + parameter_pointer + PARAMETER_LENGTH_IND_LENGTH, MIN(parameter_length, actual_length), parameter_length );
- dissect_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item);
+ switch (isup_type){
+ case ITU_ISUP:
+ dissect_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item);
+ break;
+ case ANSI_ISUP:
+ dissect_ansi_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item);
+ break;
+ }
offset += PARAMETER_POINTER_LENGTH;
return offset;
@@ -5955,7 +6039,14 @@ dissect_isup_facility_reject_message(tvbuff_t *message_tvb, proto_tree *isup_tre
proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_length, message_tvb, offset + parameter_pointer, PARAMETER_LENGTH_IND_LENGTH, parameter_length, "Parameter length: %u", parameter_length);
actual_length = tvb_ensure_length_remaining(message_tvb, offset);
parameter_tvb = tvb_new_subset(message_tvb, offset + parameter_pointer + PARAMETER_LENGTH_IND_LENGTH, MIN(parameter_length, actual_length), parameter_length );
- dissect_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item);
+ switch (isup_type){
+ case ITU_ISUP:
+ dissect_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item);
+ break;
+ case ANSI_ISUP:
+ dissect_ansi_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item);
+ break;
+ }
offset += PARAMETER_POINTER_LENGTH;
return offset;
@@ -6126,7 +6217,15 @@ dissect_isup_confusion_message(tvbuff_t *message_tvb, proto_tree *isup_tree)
proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_length, message_tvb, offset + parameter_pointer, PARAMETER_LENGTH_IND_LENGTH, parameter_length, "Parameter length: %u", parameter_length);
actual_length = tvb_ensure_length_remaining(message_tvb, offset);
parameter_tvb = tvb_new_subset(message_tvb, offset + parameter_pointer + PARAMETER_LENGTH_IND_LENGTH, MIN(parameter_length, actual_length), parameter_length );
- dissect_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item);
+
+ switch (isup_type){
+ case ITU_ISUP:
+ dissect_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item);
+ break;
+ case ANSI_ISUP:
+ dissect_ansi_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item);
+ break;
+ }
offset += PARAMETER_POINTER_LENGTH;
return offset;
@@ -6559,11 +6658,11 @@ dissect_isup_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *isup
/* no dissector necessary since no mandatory parameters included */
break;
case ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES:
- /* dissect_isup_circuit_reservation_message( parameter_tvb, isup_tree ); */
+ /* dissect_ansi_isup_circuit_reservation_message( parameter_tvb, isup_tree ); */
break;
case ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST_RSP:
opt_part_possible = TRUE;
- dissect_isup_circuit_validation_test_resp_message( parameter_tvb, isup_tree );
+ dissect_ansi_isup_circuit_validation_test_resp_message( parameter_tvb, isup_tree );
break;
case ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST:
/* no dissector necessary since no mandatory parameters included */
@@ -7087,6 +7186,11 @@ proto_register_isup(void)
FT_UINT8, BASE_DEC, VALS(q850_cause_code_vals), 0x7f,
"", HFILL }},
+ { &hf_ansi_isup_cause_indicator,
+ { "Cause indicator", "ansi_isup.cause_indicator",
+ FT_UINT8, BASE_DEC, VALS(ansi_isup_cause_code_vals), 0x7f,
+ "", HFILL }},
+
{ &hf_isup_suspend_resume_indicator,
{ "Suspend/Resume indicator", "isup.suspend_resume_indicator",
FT_BOOLEAN, 8, TFS(&isup_suspend_resume_ind_value), A_8BIT_MASK,
@@ -7366,6 +7470,14 @@ proto_register_isup(void)
{ "Segmentation local reference (SLR)", "isup.APM_slr",
FT_UINT8, BASE_DEC, NULL,GFEDCBA_8BIT_MASK,
"", HFILL }},
+ { &hf_isup_cause_location,
+ { "Cause location", "isup.cause_location",
+ FT_UINT8, BASE_DEC, VALS(q931_cause_location_vals), 0x0f,
+ "", HFILL }},
+
+ { &hf_ansi_isup_coding_standard,
+ { "Coding standard", "ansi_isup.coding_standard", FT_UINT8, BASE_HEX,
+ VALS(ansi_isup_coding_standard_vals), 0x60,"", HFILL }},
{ &hf_bat_ase_identifier,
{ "BAT ASE Identifiers", "bicc.bat_ase_identifier",
diff --git a/epan/dissectors/packet-isup.h b/epan/dissectors/packet-isup.h
index d7b98fd85a..25349a9e3d 100644
--- a/epan/dissectors/packet-isup.h
+++ b/epan/dissectors/packet-isup.h
@@ -131,12 +131,27 @@ ETH_VAR_IMPORT const value_string q850_cause_code_vals[];
#define PARAM_TYPE_GENERIC_NR 192
#define PARAM_TYPE_GENERIC_DIGITS 193
+#define ANSI_ISUP_PARAM_TYPE_OPER_SERV_INF 0xC2
+#define ANSI_ISUP_PARAM_TYPE_EGRESS 0xC3
+#define ANSI_ISUP_PARAM_TYPE_JURISDICTION 0xC4
+#define ANSI_ISUP_PARAM_TYPE_CARRIER_ID 0xC5
+#define ANSI_ISUP_PARAM_TYPE_BUSINESS_GRP 0xC6
+#define ANSI_ISUP_PARAM_TYPE_GENERIC_NAME 0xC7
+#define ANSI_ISUP_PARAM_TYPE_NOTIF_IND 0xE1
#define ANSI_ISUP_PARAM_TYPE_CG_CHAR_IND 229
#define ANSI_ISUP_PARAM_TYPE_CVR_RESP_IND 230
+#define ANSI_ISUP_PARAM_TYPE_OUT_TRK_GRP_NM 231
#define ANSI_ISUP_PARAM_TYPE_CI_NAME_IND 232
#define ANSI_ISUP_PARAM_CLLI_CODE 233
+#define ANSI_ISUP_PARAM_ORIG_LINE_INF 0xEA
+#define ANSI_ISUP_PARAM_CHRG_NO 0xEB
+#define ANSI_ISUP_PARAM_SERV_CODE_IND 0xEC
+#define ANSI_ISUP_PARAM_SPEC_PROC_REQ 0xED
+#define ANSI_ISUP_PARAM_CARRIER_SEL_INF 0xEE
+#define ANSI_ISUP_PARAM_NET_TRANS 0xEF
+
extern const value_string isup_parameter_type_value[];
extern const value_string isup_transmission_medium_requirement_value[];
extern const value_string isup_calling_partys_category_value[];