aboutsummaryrefslogtreecommitdiffstats
path: root/packet-mtp3.c
diff options
context:
space:
mode:
authorguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>2002-06-20 20:40:36 +0000
committerguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>2002-06-20 20:40:36 +0000
commit4ac6d9c2e184c325598909a4ea14586fa4b70842 (patch)
tree667e7706790cc03020bf53e4e2e50568bafb4d84 /packet-mtp3.c
parentb21b3f2044db5e15516e5926a34f7d71861c2a2b (diff)
From Jeff Morriss:
- Correct the "standard" preference to be "mtp3.standard" instead of "mtp3.mtp3_standard". - Change ANSI decoding to use 8-bit SLS by default with an option for 5-bit. - Put line breaks in a bunch of places to avoid going past 80 chars. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@5716 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'packet-mtp3.c')
-rw-r--r--packet-mtp3.c123
1 files changed, 88 insertions, 35 deletions
diff --git a/packet-mtp3.c b/packet-mtp3.c
index 9617d3652c..40d6ad07e3 100644
--- a/packet-mtp3.c
+++ b/packet-mtp3.c
@@ -3,7 +3,7 @@
* Copyright 2001, Michael Tuexen <Michael.Tuexen@icn.siemens.de>
* Updated for ANSI support by Jeff Morriss <jeff.morriss[AT]ulticom.com>
*
- * $Id: packet-mtp3.c,v 1.11 2002/03/04 22:39:22 guy Exp $
+ * $Id: packet-mtp3.c,v 1.12 2002/06/20 20:40:36 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -52,7 +52,8 @@ static int hf_mtp3_dpc_network = -1;
static int hf_mtp3_dpc_cluster = -1;
static int hf_mtp3_dpc_member = -1;
static int hf_mtp3_itu_sls = -1;
-static int hf_mtp3_ansi_sls = -1;
+static int hf_mtp3_ansi_5_bit_sls = -1;
+static int hf_mtp3_ansi_8_bit_sls = -1;
/* Initialize the subtree pointers */
static gint ett_mtp3 = -1;
@@ -66,6 +67,8 @@ static dissector_table_t mtp3_sio_dissector_table;
#include <packet-mtp3.h>
Standard_Type mtp3_standard = ITU_STANDARD;
+gboolean mtp3_use_ansi_5_bit_sls = FALSE;
+
#define SIO_LENGTH 1
#define ITU_ROUTING_LABEL_LENGTH 4
@@ -99,7 +102,6 @@ Standard_Type mtp3_standard = ITU_STANDARD;
#define ANSI_CLUSTER_MASK 0x00FF00
#define ANSI_MEMBER_MASK 0xFF0000
#define ANSI_5BIT_SLS_MASK 0x1F
-/* TODO: eventually add support for ANSI 8-bit SLS */
#define ANSI_8BIT_SLS_MASK 0xFF
static const value_string service_indicator_code_vals[] = {
@@ -139,22 +141,27 @@ dissect_mtp3_sio(tvbuff_t *tvb, proto_tree *mtp3_tree)
proto_item *sio_item;
proto_tree *sio_tree;
- sio_item = proto_tree_add_text(mtp3_tree, tvb, SIO_OFFSET, SIO_LENGTH, "Service information octet");
+ sio_item = proto_tree_add_text(mtp3_tree, tvb, SIO_OFFSET, SIO_LENGTH,
+ "Service information octet");
sio_tree = proto_item_add_subtree(sio_item, ett_mtp3_sio);
sio = tvb_get_guint8(tvb, SIO_OFFSET);
- proto_tree_add_uint(sio_tree, hf_mtp3_network_indicator, tvb, SIO_OFFSET, SIO_LENGTH, sio);
-
+ proto_tree_add_uint(sio_tree, hf_mtp3_network_indicator, tvb, SIO_OFFSET,
+ SIO_LENGTH, sio);
+
switch(mtp3_standard){
case ANSI_STANDARD:
- proto_tree_add_uint(sio_tree, hf_mtp3_ansi_priority, tvb, SIO_OFFSET, SIO_LENGTH, sio);
+ proto_tree_add_uint(sio_tree, hf_mtp3_ansi_priority, tvb, SIO_OFFSET,
+ SIO_LENGTH, sio);
break;
case ITU_STANDARD:
- proto_tree_add_uint(sio_tree, hf_mtp3_itu_spare, tvb, SIO_OFFSET, SIO_LENGTH, sio);
+ proto_tree_add_uint(sio_tree, hf_mtp3_itu_spare, tvb, SIO_OFFSET,
+ SIO_LENGTH, sio);
break;
}
-
- proto_tree_add_uint(sio_tree, hf_mtp3_service_indicator, tvb, SIO_OFFSET, SIO_LENGTH, sio);
+
+ proto_tree_add_uint(sio_tree, hf_mtp3_service_indicator, tvb, SIO_OFFSET,
+ SIO_LENGTH, sio);
}
static void
@@ -167,15 +174,21 @@ dissect_mtp3_routing_label(tvbuff_t *tvb, proto_tree *mtp3_tree)
switch (mtp3_standard) {
case ITU_STANDARD:
- label_item = proto_tree_add_text(mtp3_tree, tvb, ITU_ROUTING_LABEL_OFFSET, ITU_ROUTING_LABEL_LENGTH, "Routing label");
+ label_item = proto_tree_add_text(mtp3_tree, tvb, ITU_ROUTING_LABEL_OFFSET,
+ ITU_ROUTING_LABEL_LENGTH, "Routing label");
label_tree = proto_item_add_subtree(label_item, ett_mtp3_label);
label = tvb_get_letohl(tvb, ITU_ROUTING_LABEL_OFFSET);
sls = tvb_get_guint8(tvb, ITU_ROUTING_LABEL_OFFSET);
- proto_tree_add_uint(label_tree, hf_mtp3_itu_dpc, tvb, ITU_ROUTING_LABEL_OFFSET, ITU_ROUTING_LABEL_LENGTH, label);
- proto_tree_add_uint(label_tree, hf_mtp3_itu_opc, tvb, ITU_ROUTING_LABEL_OFFSET, ITU_ROUTING_LABEL_LENGTH, label);
- proto_tree_add_uint(label_tree, hf_mtp3_itu_sls, tvb, ITU_SLS_OFFSET, ITU_SLS_LENGTH, sls);
+ proto_tree_add_uint(label_tree, hf_mtp3_itu_dpc, tvb,
+ ITU_ROUTING_LABEL_OFFSET, ITU_ROUTING_LABEL_LENGTH,
+ label);
+ proto_tree_add_uint(label_tree, hf_mtp3_itu_opc, tvb,
+ ITU_ROUTING_LABEL_OFFSET, ITU_ROUTING_LABEL_LENGTH,
+ label);
+ proto_tree_add_uint(label_tree, hf_mtp3_itu_sls, tvb, ITU_SLS_OFFSET,
+ ITU_SLS_LENGTH, sls);
break;
case ANSI_STANDARD:
@@ -183,34 +196,52 @@ dissect_mtp3_routing_label(tvbuff_t *tvb, proto_tree *mtp3_tree)
sls = tvb_get_guint8(tvb, ANSI_SLS_OFFSET);
/* Create the Routing Label Tree */
- label_item = proto_tree_add_text(mtp3_tree, tvb, ANSI_ROUTING_LABEL_OFFSET, ANSI_ROUTING_LABEL_LENGTH, "Routing label");
+ label_item = proto_tree_add_text(mtp3_tree, tvb, ANSI_ROUTING_LABEL_OFFSET,
+ ANSI_ROUTING_LABEL_LENGTH,
+ "Routing label");
label_tree = proto_item_add_subtree(label_item, ett_mtp3_label);
/* create the DPC tree */
dpc = tvb_get_ntoh24(tvb, ANSI_DPC_OFFSET);
- label_dpc_item = proto_tree_add_text(label_tree, tvb, ANSI_DPC_OFFSET, ANSI_PC_LENGTH,
- "DPC (%d-%d-%d)", (dpc & ANSI_NETWORK_MASK), ((dpc & ANSI_CLUSTER_MASK) >> 8), ((dpc & ANSI_MEMBER_MASK) >> 16));
+ label_dpc_item = proto_tree_add_text(label_tree, tvb, ANSI_DPC_OFFSET,
+ ANSI_PC_LENGTH, "DPC (%d-%d-%d)",
+ (dpc & ANSI_NETWORK_MASK),
+ ((dpc & ANSI_CLUSTER_MASK) >> 8),
+ ((dpc & ANSI_MEMBER_MASK) >> 16));
label_dpc_tree = proto_item_add_subtree(label_dpc_item, ett_mtp3_label_dpc);
- proto_tree_add_uint(label_dpc_tree, hf_mtp3_dpc_member, tvb, ANSI_DPC_OFFSET, ANSI_PC_LENGTH, dpc);
- proto_tree_add_uint(label_dpc_tree, hf_mtp3_dpc_cluster,tvb, ANSI_DPC_OFFSET, ANSI_PC_LENGTH, dpc);
- proto_tree_add_uint(label_dpc_tree, hf_mtp3_dpc_network,tvb, ANSI_DPC_OFFSET, ANSI_PC_LENGTH, dpc);
+ proto_tree_add_uint(label_dpc_tree, hf_mtp3_dpc_member, tvb,
+ ANSI_DPC_OFFSET, ANSI_PC_LENGTH, dpc);
+ proto_tree_add_uint(label_dpc_tree, hf_mtp3_dpc_cluster,tvb,
+ ANSI_DPC_OFFSET, ANSI_PC_LENGTH, dpc);
+ proto_tree_add_uint(label_dpc_tree, hf_mtp3_dpc_network,tvb,
+ ANSI_DPC_OFFSET, ANSI_PC_LENGTH, dpc);
/* create the OPC tree */
opc = tvb_get_ntoh24(tvb, ANSI_OPC_OFFSET);
- label_opc_item = proto_tree_add_text(label_tree, tvb, ANSI_OPC_OFFSET, ANSI_PC_LENGTH,
- "OPC (%d-%d-%d)", (opc & ANSI_NETWORK_MASK), ((opc & ANSI_CLUSTER_MASK) >> 8), ((opc & ANSI_MEMBER_MASK) >> 16));
+ label_opc_item = proto_tree_add_text(label_tree, tvb, ANSI_OPC_OFFSET,
+ ANSI_PC_LENGTH, "OPC (%d-%d-%d)",
+ (opc & ANSI_NETWORK_MASK),
+ ((opc & ANSI_CLUSTER_MASK) >> 8),
+ ((opc & ANSI_MEMBER_MASK) >> 16));
label_opc_tree = proto_item_add_subtree(label_opc_item, ett_mtp3_label_opc);
- proto_tree_add_uint(label_opc_tree, hf_mtp3_opc_member, tvb, ANSI_OPC_OFFSET, ANSI_PC_LENGTH, opc);
- proto_tree_add_uint(label_opc_tree, hf_mtp3_opc_cluster, tvb, ANSI_OPC_OFFSET, ANSI_PC_LENGTH, opc);
- proto_tree_add_uint(label_opc_tree, hf_mtp3_opc_network,tvb, ANSI_OPC_OFFSET, ANSI_PC_LENGTH, opc);
+ proto_tree_add_uint(label_opc_tree, hf_mtp3_opc_member, tvb,
+ ANSI_OPC_OFFSET, ANSI_PC_LENGTH, opc);
+ proto_tree_add_uint(label_opc_tree, hf_mtp3_opc_cluster, tvb,
+ ANSI_OPC_OFFSET, ANSI_PC_LENGTH, opc);
+ proto_tree_add_uint(label_opc_tree, hf_mtp3_opc_network,tvb,
+ ANSI_OPC_OFFSET, ANSI_PC_LENGTH, opc);
+
/* SLS */
- /* TODO: separate 5-bit and 8-bit SLS */
- proto_tree_add_item(label_tree, hf_mtp3_ansi_sls, tvb, ANSI_SLS_OFFSET, ANSI_SLS_LENGTH, sls);
- /* proto_tree_add_uint(label_tree, hf_mtp3_ansi_sls, tvb,ANSI_SLS_OFFSET, ANSI_SLS_LENGTH, sls);*/
+ if (mtp3_use_ansi_5_bit_sls)
+ proto_tree_add_item(label_tree, hf_mtp3_ansi_5_bit_sls, tvb,
+ ANSI_SLS_OFFSET, ANSI_SLS_LENGTH, sls);
+ else
+ proto_tree_add_item(label_tree, hf_mtp3_ansi_8_bit_sls, tvb,
+ ANSI_SLS_OFFSET, ANSI_SLS_LENGTH, sls);
break;
}
}
@@ -234,7 +265,8 @@ dissect_mtp3_payload(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
break;
}
- if (!dissector_try_port(mtp3_sio_dissector_table, service_indicator, payload_tvb, pinfo, tree)) {
+ if (!dissector_try_port(mtp3_sio_dissector_table, service_indicator,
+ payload_tvb, pinfo, tree)) {
call_dissector(data_handle, payload_tvb, pinfo, tree);
if (check_col(pinfo->cinfo, COL_INFO))
col_append_str(pinfo->cinfo, COL_INFO, "DATA ");
@@ -258,10 +290,12 @@ dissect_mtp3(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
/* create display subtree for the protocol */
switch (mtp3_standard) {
case ITU_STANDARD:
- mtp3_item = proto_tree_add_item(tree, proto_mtp3, tvb, 0, ITU_HEADER_LENGTH, FALSE);
+ mtp3_item = proto_tree_add_item(tree, proto_mtp3, tvb, 0,
+ ITU_HEADER_LENGTH, FALSE);
break;
case ANSI_STANDARD:
- mtp3_item = proto_tree_add_item(tree, proto_mtp3, tvb, 0, ANSI_HEADER_LENGTH, FALSE);
+ mtp3_item = proto_tree_add_item(tree, proto_mtp3, tvb, 0,
+ ANSI_HEADER_LENGTH, FALSE);
break;
}
mtp3_tree = proto_item_add_subtree(mtp3_item, ett_mtp3);
@@ -333,9 +367,13 @@ proto_register_mtp3(void)
{ "Signalling Link Selector", "mtp3.sls",
FT_UINT32, BASE_DEC, NULL, ITU_SLS_MASK,
"", HFILL }},
- { &hf_mtp3_ansi_sls,
+ { &hf_mtp3_ansi_5_bit_sls,
{ "Signalling Link Selector", "mtp3.sls",
FT_UINT8, BASE_DEC, NULL, ANSI_5BIT_SLS_MASK,
+ "", HFILL }},
+ { &hf_mtp3_ansi_8_bit_sls,
+ { "Signalling Link Selector", "mtp3.sls",
+ FT_UINT8, BASE_DEC, NULL, ANSI_8BIT_SLS_MASK,
"", HFILL }}
};
@@ -355,16 +393,31 @@ proto_register_mtp3(void)
};
/* Register the protocol name and description */
- proto_mtp3 = proto_register_protocol("Message Transfer Part Level 3", "MTP3", "mtp3");
+ proto_mtp3 = proto_register_protocol("Message Transfer Part Level 3",
+ "MTP3", "mtp3");
register_dissector("mtp3", dissect_mtp3, proto_mtp3);
/* Required function calls to register the header fields and subtrees used */
proto_register_field_array(proto_mtp3, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
- mtp3_sio_dissector_table = register_dissector_table("mtp3.service_indicator", "MTP3 Service indicator", FT_UINT8, BASE_HEX);
+ mtp3_sio_dissector_table = register_dissector_table("mtp3.service_indicator",
+ "MTP3 Service indicator",
+ FT_UINT8, BASE_HEX);
+
mtp3_module = prefs_register_protocol(proto_mtp3, NULL);
- prefs_register_enum_preference(mtp3_module, "mtp3_standard", "MTP3 standard", "MTP3 standard", (gint *)&mtp3_standard, mtp3_options, FALSE);
+
+ /* Version 1.5 to 1.11 of this module used "mtp3_standard" */
+ prefs_register_obsolete_preference(mtp3_module, "mtp3_standard");
+
+ prefs_register_enum_preference(mtp3_module, "standard", "MTP3 standard",
+ "The SS7 standard used in MTP3 packets",
+ (gint *)&mtp3_standard, mtp3_options, FALSE);
+
+ prefs_register_bool_preference(mtp3_module, "ansi_5_bit_sls",
+ "Use 5-bit SLS (ANSI only)",
+ "Use 5-bit (instead of 8-bit) SLS in ANSI MTP3 packets",
+ &mtp3_use_ansi_5_bit_sls);
}
void