aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-fefd.c
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/packet-fefd.c')
-rw-r--r--epan/dissectors/packet-fefd.c41
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);