aboutsummaryrefslogtreecommitdiffstats
path: root/packet-m2ua.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2003-12-01 23:26:40 +0000
committerGuy Harris <guy@alum.mit.edu>2003-12-01 23:26:40 +0000
commit00fbb882299228eb1cb367ac4cce4b98ccbda1ca (patch)
tree349dd826bba1909439958b533b64f1ce76d5fc72 /packet-m2ua.c
parentad0107ddf4d60aa230e0586b77fc6bd90bc927a4 (diff)
downloadwireshark-00fbb882299228eb1cb367ac4cce4b98ccbda1ca.tar.gz
wireshark-00fbb882299228eb1cb367ac4cce4b98ccbda1ca.tar.bz2
wireshark-00fbb882299228eb1cb367ac4cce4b98ccbda1ca.zip
From Michael Lum: add a preference setting to specify the parameter tag
for "Protocol Data 1", as it changed between draft 7 and RFC 3331. svn path=/trunk/; revision=9133
Diffstat (limited to 'packet-m2ua.c')
-rw-r--r--packet-m2ua.c58
1 files changed, 53 insertions, 5 deletions
diff --git a/packet-m2ua.c b/packet-m2ua.c
index 85c54e1b4a..87df31e94e 100644
--- a/packet-m2ua.c
+++ b/packet-m2ua.c
@@ -6,7 +6,7 @@
*
* Copyright 2002, Michael Tuexen <tuexen [AT] fh-muenster.de>
*
- * $Id: packet-m2ua.c,v 1.13 2003/11/13 23:38:33 guy Exp $
+ * $Id: packet-m2ua.c,v 1.14 2003/12/01 23:26:40 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -34,6 +34,7 @@
#endif
#include <epan/packet.h>
+#include "prefs.h"
#include "sctpppids.h"
#define SCTP_PORT_M2UA 2904
@@ -507,6 +508,8 @@ dissect_protocol_data_1_parameter(tvbuff_t *parameter_tvb, packet_info *pinfo, p
payload_tvb = tvb_new_subset(parameter_tvb, DATA_1_MTP3_OFFSET, payload_length, payload_length);
proto_item_set_len(parameter_item, PARAMETER_HEADER_LENGTH);
call_dissector(mtp3_handle, payload_tvb, pinfo, tree);
+
+ proto_item_set_text(parameter_item, "Data 1 parameter");
}
#define DATA_2_LI_LENGTH 1
@@ -866,6 +869,15 @@ static const value_string parameter_tag_values[] = {
{ DEREG_STATUS_PARAMETER_TAG, "Deregistration status" },
{ 0, NULL } };
+/*
+ * Default preference for 'Protocol Data 1 Parameter Tag' is RFC3331 value
+ * defined above (PROTOCOL_DATA_1_PARAMETER_TAG)
+ *
+ * The other option is the old Draft 7 value defined below.
+ */
+#define PROTOCOL_DATA_1_DRAFT_7 0x000e
+static guint protocol_data_1_global = PROTOCOL_DATA_1_PARAMETER_TAG;
+
static void
dissect_parameter(tvbuff_t *parameter_tvb, packet_info *pinfo, proto_tree *tree, proto_tree *m2ua_tree)
{
@@ -885,9 +897,24 @@ dissect_parameter(tvbuff_t *parameter_tvb, packet_info *pinfo, proto_tree *tree,
val_to_str(tag, parameter_tag_values, "Unknown parameter"));
parameter_tree = proto_item_add_subtree(parameter_item, ett_m2ua_parameter);
- /* add tag and length to the m2ua tree */
- proto_tree_add_item(parameter_tree, hf_parameter_tag, parameter_tvb, PARAMETER_TAG_OFFSET, PARAMETER_TAG_LENGTH, NETWORK_BYTE_ORDER);
- proto_tree_add_item(parameter_tree, hf_parameter_length, parameter_tvb, PARAMETER_LENGTH_OFFSET, PARAMETER_LENGTH_LENGTH, NETWORK_BYTE_ORDER);
+ if ((protocol_data_1_global == PROTOCOL_DATA_1_DRAFT_7) &&
+ (tag == PROTOCOL_DATA_1_DRAFT_7))
+ {
+ proto_tree_add_uint_hidden(parameter_tree, hf_parameter_tag, parameter_tvb, PARAMETER_TAG_OFFSET, PARAMETER_TAG_LENGTH, tag);
+
+ /* add tag and length to the m2ua tree */
+ proto_tree_add_text(parameter_tree, parameter_tvb, PARAMETER_TAG_OFFSET, PARAMETER_TAG_LENGTH,
+ "Parameter Tag: Protocol data 1 (0x000e)");
+
+ proto_tree_add_item(parameter_tree, hf_parameter_length, parameter_tvb, PARAMETER_LENGTH_OFFSET, PARAMETER_LENGTH_LENGTH, NETWORK_BYTE_ORDER);
+ tag = PROTOCOL_DATA_1_PARAMETER_TAG;
+ }
+ else
+ {
+ /* add tag and length to the m2ua tree */
+ proto_tree_add_item(parameter_tree, hf_parameter_tag, parameter_tvb, PARAMETER_TAG_OFFSET, PARAMETER_TAG_LENGTH, NETWORK_BYTE_ORDER);
+ proto_tree_add_item(parameter_tree, hf_parameter_length, parameter_tvb, PARAMETER_LENGTH_OFFSET, PARAMETER_LENGTH_LENGTH, NETWORK_BYTE_ORDER);
+ }
switch(tag) {
case INTERFACE_IDENTIFIER_INT_PARAMETER_TAG:
@@ -924,6 +951,10 @@ dissect_parameter(tvbuff_t *parameter_tvb, packet_info *pinfo, proto_tree *tree,
dissect_correlation_identifier_parameter(parameter_tvb, parameter_tree, parameter_item);
break;
case PROTOCOL_DATA_1_PARAMETER_TAG:
+ if (protocol_data_1_global == PROTOCOL_DATA_1_DRAFT_7)
+ {
+ tag = PROTOCOL_DATA_1_DRAFT_7;
+ }
dissect_protocol_data_1_parameter(parameter_tvb, pinfo, tree, parameter_item);
break;
case PROTOCOL_DATA_2_PARAMETER_TAG:
@@ -1091,6 +1122,14 @@ proto_register_m2ua(void)
&ett_m2ua_parameter,
};
+ static enum_val_t protocol_data_1_options[] = {
+ { "0x000e (Draft 7)", PROTOCOL_DATA_1_DRAFT_7 },
+ { "0x0300 (RFC3331)", PROTOCOL_DATA_1_PARAMETER_TAG },
+ { NULL, 0 }
+ };
+
+ module_t *m2ua_module;
+
/* Register the protocol name and description */
proto_m2ua = proto_register_protocol("MTP 2 User Adaptation Layer", "M2UA", "m2ua");
@@ -1098,7 +1137,16 @@ proto_register_m2ua(void)
proto_register_field_array(proto_m2ua, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
-};
+ m2ua_module = prefs_register_protocol(proto_m2ua, NULL);
+
+ prefs_register_enum_preference(m2ua_module,
+ "protocol_data_1_tag",
+ "Protocol Data 1 Parameter Tag",
+ "The value of the parameter tag for protocol data 1",
+ &protocol_data_1_global,
+ protocol_data_1_options,
+ FALSE);
+}
void
proto_reg_handoff_m2ua(void)