aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-bpdu.c
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/packet-bpdu.c')
-rw-r--r--epan/dissectors/packet-bpdu.c30
1 files changed, 11 insertions, 19 deletions
diff --git a/epan/dissectors/packet-bpdu.c b/epan/dissectors/packet-bpdu.c
index 456e48f1f7..f7fe851b55 100644
--- a/epan/dissectors/packet-bpdu.c
+++ b/epan/dissectors/packet-bpdu.c
@@ -334,7 +334,6 @@ dissect_bpdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolean is_bp
guint16 msti_bridge_identifier_priority, msti_port_identifier_priority;
int total_msti_length, offset, msti, msti_format;
int msti_length_remaining;
- guint8 agree_num = 0, dagree_num = 0;
int spt_offset = 0;
@@ -933,6 +932,14 @@ dissect_bpdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolean is_bp
/* version 4 length is 55 or more.
*/
if (version_4_length >= 53) {
+ static const int * agreements[] = {
+ &hf_bpdu_flags_agree_num,
+ &hf_bpdu_flags_dagree_num,
+ &hf_bpdu_flags_agree_valid,
+ &hf_bpdu_flags_restricted_role,
+ NULL
+ };
+
spt_tree = proto_tree_add_subtree(bpdu_tree, tvb, bpdu_version_4_length, -1,
ett_spt, NULL, "SPT Extension");
@@ -963,27 +970,12 @@ dissect_bpdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolean is_bp
spt_agree_data = tvb_get_guint8(tvb, spt_offset);
sep = initial_sep;
- if (agreement_item) {
- agree_num = (spt_agree_data & 0x03);
- proto_item_append_text(agreement_item, "%sAN: %d", sep, agree_num );
- }
+ proto_item_append_text(agreement_item, "%sAN: %d", sep, (spt_agree_data & 0x03));
- proto_tree_add_uint(agreement_tree, hf_bpdu_flags_agree_num,
- tvb, spt_offset, 1, spt_agree_data);
+ proto_tree_add_bitmask_list_value(agreement_tree, tvb, spt_offset, 1, agreements, spt_agree_data);
sep = cont_sep;
- if (agreement_item) {
- dagree_num = ((spt_agree_data & 0x0C) >> 2);
- proto_item_append_text(agreement_item, "%sDAN: %d", sep, dagree_num);
- }
- proto_tree_add_uint(agreement_tree, hf_bpdu_flags_dagree_num,
- tvb, spt_offset, 1, spt_agree_data);
-
- proto_tree_add_boolean(agreement_tree, hf_bpdu_flags_agree_valid,
- tvb, spt_offset, 1, spt_agree_data);
-
- proto_tree_add_boolean(agreement_tree, hf_bpdu_flags_restricted_role,
- tvb, spt_offset, 1, spt_agree_data);
+ proto_item_append_text(agreement_item, "%sDAN: %d", sep, ((spt_agree_data & 0x0C) >> 2));
if (sep != initial_sep) {
proto_item_append_text(agreement_item, ")");