diff options
Diffstat (limited to 'epan/dissectors/packet-fefd.c')
-rw-r--r-- | epan/dissectors/packet-fefd.c | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/epan/dissectors/packet-fefd.c b/epan/dissectors/packet-fefd.c index 26982e63db..489315c070 100644 --- a/epan/dissectors/packet-fefd.c +++ b/epan/dissectors/packet-fefd.c @@ -94,31 +94,30 @@ dissect_fefd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_ guint16 length; proto_tree *tlv_tree; int real_length; + static const int * flags[] = { + &hf_fefd_flags_rt, + &hf_fefd_flags_rsy, + NULL + }; + static const int * headers[] = { + &hf_fefd_version, + &hf_fefd_opcode, + NULL + }; col_set_str(pinfo->cinfo, COL_PROTOCOL, "FEFD"); col_clear(pinfo->cinfo, COL_INFO); - if (tree) { - proto_item *flags_ti; - proto_tree *flags_tree; - - ti = proto_tree_add_item(tree, proto_fefd, tvb, offset, -1, ENC_NA); - fefd_tree = proto_item_add_subtree(ti, ett_fefd); - - /* FEFD header */ - proto_tree_add_item(fefd_tree, hf_fefd_version, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(fefd_tree, hf_fefd_opcode, tvb, offset, 1, ENC_BIG_ENDIAN); - offset += 1; - flags_ti = proto_tree_add_item(fefd_tree, hf_fefd_flags, tvb, offset, 1, ENC_BIG_ENDIAN); - flags_tree = proto_item_add_subtree(flags_ti, ett_fefd_flags); - proto_tree_add_item(flags_tree, hf_fefd_flags_rt, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_fefd_flags_rsy, tvb, offset, 1, ENC_BIG_ENDIAN); - offset += 1; - proto_tree_add_item(fefd_tree, hf_fefd_checksum, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; - } else { - offset += 4; /* The version/opcode/flags/checksum fields from above */ - } + ti = proto_tree_add_item(tree, proto_fefd, tvb, offset, -1, ENC_NA); + fefd_tree = proto_item_add_subtree(ti, ett_fefd); + + /* FEFD header */ + proto_tree_add_bitmask_list(fefd_tree, tvb, offset, 1, headers, ENC_BIG_ENDIAN); + offset += 1; + proto_tree_add_bitmask(fefd_tree, tvb, offset, hf_fefd_flags, ett_fefd_flags, flags, ENC_BIG_ENDIAN); + offset += 1; + proto_tree_add_checksum(fefd_tree, tvb, offset, hf_fefd_checksum, -1, NULL, pinfo, 0, ENC_BIG_ENDIAN, PROTO_CHECKSUM_NO_FLAGS); + offset += 2; while (tvb_reported_length_remaining(tvb, offset) != 0) { type = tvb_get_ntohs(tvb, offset + TLV_TYPE); |