aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Morriss <jeff.morriss.ws@gmail.com>2014-09-11 15:16:45 -0400
committerJeff Morriss <jeff.morriss.ws@gmail.com>2014-09-11 19:18:00 +0000
commitab6ad63e25a9f2e4e8b6e7845dd4513db5232811 (patch)
tree2d00e1e2e71e316a6f8e87562366e5e4885bed55
parent0ec17938fdfb103e6a8375e9735c64bda5935c10 (diff)
Show the sctp.checksum_bad filter rather than hiding it.
Follow TCP's lead by putting the filter in a subtree under the checksum. Change-Id: I9351ee865011cd04bc3d3e88c51e8dbb3dc23f07 Reviewed-on: https://code.wireshark.org/review/4082 Reviewed-by: Jeff Morriss <jeff.morriss.ws@gmail.com>
-rw-r--r--epan/dissectors/packet-sctp.c48
1 files changed, 25 insertions, 23 deletions
diff --git a/epan/dissectors/packet-sctp.c b/epan/dissectors/packet-sctp.c
index 428bf5978c..333d706c7e 100644
--- a/epan/dissectors/packet-sctp.c
+++ b/epan/dissectors/packet-sctp.c
@@ -257,6 +257,7 @@ static int exported_pdu_tap = -1;
/* Initialize the subtree pointers */
static gint ett_sctp = -1;
+static gint ett_sctp_checksum = -1;
static gint ett_sctp_chunk = -1;
static gint ett_sctp_chunk_parameter = -1;
static gint ett_sctp_chunk_cause = -1;
@@ -4405,7 +4406,7 @@ dissect_sctp_packet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolea
guint captured_length, reported_length;
gboolean crc32c_correct = FALSE, adler32_correct = FALSE;
proto_item *sctp_item, *hidden_item, *item;
- proto_tree *sctp_tree;
+ proto_tree *sctp_tree, *checksum_tree;
guint32 vtag;
sctp_half_assoc_t *ha = NULL;
proto_item *pi, *vt = NULL;
@@ -4489,48 +4490,48 @@ dissect_sctp_packet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolea
break;
case SCTP_CHECKSUM_ADLER32:
if (adler32_correct)
- proto_tree_add_uint_format_value(sctp_tree, hf_checksum, tvb, CHECKSUM_OFFSET, CHECKSUM_LENGTH,
- checksum, "0x%08x [correct Adler32]", checksum);
+ item = proto_tree_add_uint_format_value(sctp_tree, hf_checksum, tvb, CHECKSUM_OFFSET, CHECKSUM_LENGTH,
+ checksum, "0x%08x [correct Adler32]", checksum);
else {
item = proto_tree_add_uint_format_value(sctp_tree, hf_checksum, tvb, CHECKSUM_OFFSET, CHECKSUM_LENGTH, checksum,
- "0x%08x [incorrect Adler32, should be 0x%08x]",
- checksum, calculated_adler32);
+ "0x%08x [incorrect Adler32, should be 0x%08x]",
+ checksum, calculated_adler32);
expert_add_info(pinfo, item, &ei_sctp_bad_sctp_checksum);
}
- hidden_item = proto_tree_add_boolean(sctp_tree, hf_checksum_bad, tvb, CHECKSUM_OFFSET, CHECKSUM_LENGTH, !(adler32_correct));
- PROTO_ITEM_SET_HIDDEN(hidden_item);
+ checksum_tree = proto_item_add_subtree(item, ett_sctp_checksum);
+ proto_tree_add_boolean(checksum_tree, hf_checksum_bad, tvb, CHECKSUM_OFFSET, CHECKSUM_LENGTH, !(adler32_correct));
break;
case SCTP_CHECKSUM_CRC32C:
if (crc32c_correct)
- proto_tree_add_uint_format_value(sctp_tree, hf_checksum, tvb, CHECKSUM_OFFSET, CHECKSUM_LENGTH,
- checksum, "0x%08x [correct CRC32C]", checksum);
+ item = proto_tree_add_uint_format_value(sctp_tree, hf_checksum, tvb, CHECKSUM_OFFSET, CHECKSUM_LENGTH,
+ checksum, "0x%08x [correct CRC32C]", checksum);
else {
item = proto_tree_add_uint_format_value(sctp_tree, hf_checksum, tvb, CHECKSUM_OFFSET, CHECKSUM_LENGTH, checksum,
- "0x%08x [incorrect CRC32C, should be 0x%08x]",
- checksum, calculated_crc32c);
+ "0x%08x [incorrect CRC32C, should be 0x%08x]",
+ checksum, calculated_crc32c);
expert_add_info(pinfo, item, &ei_sctp_bad_sctp_checksum);
}
- hidden_item = proto_tree_add_boolean(sctp_tree, hf_checksum_bad, tvb, CHECKSUM_OFFSET, CHECKSUM_LENGTH, !(crc32c_correct));
- PROTO_ITEM_SET_HIDDEN(hidden_item);
+ checksum_tree = proto_item_add_subtree(item, ett_sctp_checksum);
+ proto_tree_add_boolean(checksum_tree, hf_checksum_bad, tvb, CHECKSUM_OFFSET, CHECKSUM_LENGTH, !(crc32c_correct));
break;
case SCTP_CHECKSUM_AUTOMATIC:
if ((adler32_correct) && !(crc32c_correct))
- proto_tree_add_uint_format_value(sctp_tree, hf_checksum, tvb, CHECKSUM_OFFSET, CHECKSUM_LENGTH,
- checksum, "0x%08x [correct Adler32]", checksum);
+ item = proto_tree_add_uint_format_value(sctp_tree, hf_checksum, tvb, CHECKSUM_OFFSET, CHECKSUM_LENGTH,
+ checksum, "0x%08x [correct Adler32]", checksum);
else if ((!adler32_correct) && (crc32c_correct))
- proto_tree_add_uint_format_value(sctp_tree, hf_checksum, tvb, CHECKSUM_OFFSET, CHECKSUM_LENGTH,
- checksum, "0x%08x [correct CRC32C]", checksum);
+ item = proto_tree_add_uint_format_value(sctp_tree, hf_checksum, tvb, CHECKSUM_OFFSET, CHECKSUM_LENGTH,
+ checksum, "0x%08x [correct CRC32C]", checksum);
else if ((adler32_correct) && (crc32c_correct))
- proto_tree_add_uint_format_value(sctp_tree, hf_checksum, tvb, CHECKSUM_OFFSET, CHECKSUM_LENGTH,
- checksum, "0x%08x [correct Adler32 and CRC32C]", checksum);
+ item = proto_tree_add_uint_format_value(sctp_tree, hf_checksum, tvb, CHECKSUM_OFFSET, CHECKSUM_LENGTH,
+ checksum, "0x%08x [correct Adler32 and CRC32C]", checksum);
else {
item = proto_tree_add_uint_format_value(sctp_tree, hf_checksum, tvb, CHECKSUM_OFFSET, CHECKSUM_LENGTH, checksum,
- "0x%08x [incorrect, should be 0x%08x (Adler32) or 0x%08x (CRC32C)]",
- checksum, calculated_adler32, calculated_crc32c);
+ "0x%08x [incorrect, should be 0x%08x (Adler32) or 0x%08x (CRC32C)]",
+ checksum, calculated_adler32, calculated_crc32c);
expert_add_info(pinfo, item, &ei_sctp_bad_sctp_checksum);
}
- hidden_item = proto_tree_add_boolean(sctp_tree, hf_checksum_bad, tvb, CHECKSUM_OFFSET, CHECKSUM_LENGTH, !(crc32c_correct || adler32_correct));
- PROTO_ITEM_SET_HIDDEN(hidden_item);
+ checksum_tree = proto_item_add_subtree(item, ett_sctp_checksum);
+ proto_tree_add_boolean(checksum_tree, hf_checksum_bad, tvb, CHECKSUM_OFFSET, CHECKSUM_LENGTH, !(crc32c_correct || adler32_correct));
break;
}
} else {
@@ -4756,6 +4757,7 @@ proto_register_sctp(void)
/* Setup protocol subtree array */
static gint *ett[] = {
&ett_sctp,
+ &ett_sctp_checksum,
&ett_sctp_chunk,
&ett_sctp_chunk_parameter,
&ett_sctp_chunk_cause,