aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-icmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/packet-icmp.c')
-rw-r--r--epan/dissectors/packet-icmp.c48
1 files changed, 15 insertions, 33 deletions
diff --git a/epan/dissectors/packet-icmp.c b/epan/dissectors/packet-icmp.c
index de871c7e7f..6e0e5bebc9 100644
--- a/epan/dissectors/packet-icmp.c
+++ b/epan/dissectors/packet-icmp.c
@@ -360,12 +360,24 @@ dissect_mip_extensions(tvbuff_t * tvb, int offset, proto_tree * tree)
{
guint8 type;
guint8 length;
- guint16 flags;
proto_item *ti;
proto_tree *mip_tree = NULL;
- proto_tree *flags_tree = NULL;
gint numCOAs;
gint i;
+ static const int * flags[] = {
+ &hf_icmp_mip_r,
+ &hf_icmp_mip_b,
+ &hf_icmp_mip_h,
+ &hf_icmp_mip_f,
+ &hf_icmp_mip_m,
+ &hf_icmp_mip_g,
+ &hf_icmp_mip_v,
+ &hf_icmp_mip_rt,
+ &hf_icmp_mip_u,
+ &hf_icmp_mip_x,
+ &hf_icmp_mip_reserved,
+ NULL
+ };
/* Not much to do if we're not parsing everything */
if (!tree)
@@ -416,37 +428,7 @@ dissect_mip_extensions(tvbuff_t * tvb, int offset, proto_tree * tree)
ENC_BIG_ENDIAN);
offset += 2;
/* flags */
- flags = tvb_get_ntohs(tvb, offset);
- ti = proto_tree_add_uint(mip_tree,
- hf_icmp_mip_flags, tvb,
- offset, 2, flags);
- flags_tree =
- proto_item_add_subtree(ti, ett_icmp_mip_flags);
- proto_tree_add_boolean(flags_tree, hf_icmp_mip_r,
- tvb, offset, 2, flags);
- proto_tree_add_boolean(flags_tree, hf_icmp_mip_b,
- tvb, offset, 2, flags);
- proto_tree_add_boolean(flags_tree, hf_icmp_mip_h,
- tvb, offset, 2, flags);
- proto_tree_add_boolean(flags_tree, hf_icmp_mip_f,
- tvb, offset, 2, flags);
- proto_tree_add_boolean(flags_tree, hf_icmp_mip_m,
- tvb, offset, 2, flags);
- proto_tree_add_boolean(flags_tree, hf_icmp_mip_g,
- tvb, offset, 2, flags);
- proto_tree_add_boolean(flags_tree, hf_icmp_mip_v,
- tvb, offset, 2, flags);
- proto_tree_add_boolean(flags_tree, hf_icmp_mip_rt,
- tvb, offset, 2, flags);
- proto_tree_add_boolean(flags_tree, hf_icmp_mip_u,
- tvb, offset, 2, flags);
- proto_tree_add_boolean(flags_tree, hf_icmp_mip_x,
- tvb, offset, 2, flags);
-
- /* Reserved */
- proto_tree_add_uint(flags_tree,
- hf_icmp_mip_reserved, tvb,
- offset, 2, flags);
+ proto_tree_add_bitmask(mip_tree, tvb, offset, hf_icmp_mip_flags, ett_icmp_mip_flags, flags, ENC_BIG_ENDIAN);
offset += 2;
/* COAs */