aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-geneve.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2017-04-02 18:44:15 -0400
committerAnders Broman <a.broman58@gmail.com>2017-04-05 04:48:50 +0000
commitcf54564508f1a4e3ce6af8bab17fb884c5e9b9b9 (patch)
tree6d853a36b5dec4c7c8d0a192e71122ad9460b064 /epan/dissectors/packet-geneve.c
parent697ea9affaab0dbd8fe9876724749207be75adfa (diff)
packet-geneve.c: Convert print_flags to proto_tree_add_bitmask
Change-Id: Ibf3ed8885737dcec2f59ba640ff202097195322d Reviewed-on: https://code.wireshark.org/review/20915 Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-geneve.c')
-rw-r--r--epan/dissectors/packet-geneve.c57
1 files changed, 9 insertions, 48 deletions
diff --git a/epan/dissectors/packet-geneve.c b/epan/dissectors/packet-geneve.c
index 1b27c89b6a..55c51d4e44 100644
--- a/epan/dissectors/packet-geneve.c
+++ b/epan/dissectors/packet-geneve.c
@@ -88,38 +88,6 @@ static expert_field ei_geneve_opt_len_invalid = EI_INIT;
static dissector_table_t ethertype_dissector_table;
-static void
-print_flags(guint8 flags, proto_item *flag_item)
-{
- static const char flag_names[][5] = {"OAM", "CRIT"};
- unsigned int i;
-
- if (!flags) {
- return;
- }
-
- proto_item_append_text(flag_item, " (");
-
- for (i = 0; i < array_length(flag_names); i++) {
- guint8 bit = 1 << (7 - i);
-
- if (flags & bit) {
- proto_item_append_text(flag_item, "%s", flag_names[i]);
- flags &= ~bit;
-
- if (flags) {
- proto_item_append_text(flag_item, ", ");
- }
- }
- }
-
- if (flags) {
- proto_item_append_text(flag_item, "RSVD");
- }
-
- proto_item_append_text(flag_item, ")");
-}
-
static const char *
format_unknown_option_name(guint16 opt_class, guint8 opt_type)
{
@@ -225,8 +193,8 @@ dissect_geneve_options(tvbuff_t *tvb, packet_info *pinfo,
static int
dissect_geneve(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
{
- proto_item *ti, *flag_item, *rsvd_item;
- proto_tree *geneve_tree, *flag_tree;
+ proto_item *ti, *rsvd_item;
+ proto_tree *geneve_tree;
tvbuff_t *next_tvb;
int offset = 0;
guint8 ver_opt;
@@ -234,6 +202,12 @@ dissect_geneve(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _
guint8 flags;
guint16 proto_type;
int opts_len;
+ static const int * flag_fields[] = {
+ &hf_geneve_flag_oam,
+ &hf_geneve_flag_critical,
+ &hf_geneve_flag_reserved,
+ NULL
+ };
col_set_str(pinfo->cinfo, COL_PROTOCOL, "Geneve");
col_clear(pinfo->cinfo, COL_INFO);
@@ -262,20 +236,7 @@ dissect_geneve(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _
/* Flags. */
flags = tvb_get_guint8(tvb, offset);
- if (tree) {
- flag_item = proto_tree_add_item(geneve_tree, hf_geneve_flags, tvb,
- offset, 1, ENC_BIG_ENDIAN);
- print_flags(flags, flag_item);
-
- flag_tree = proto_item_add_subtree(flag_item, ett_geneve_flags);
-
- proto_tree_add_item(flag_tree, hf_geneve_flag_oam, tvb, offset,
- 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(flag_tree, hf_geneve_flag_critical, tvb, offset,
- 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(flag_tree, hf_geneve_flag_reserved, tvb, offset,
- 1, ENC_BIG_ENDIAN);
- }
+ proto_tree_add_bitmask(geneve_tree, tvb, offset, hf_geneve_flags, ett_geneve_flags, flag_fields, ENC_BIG_ENDIAN);
offset += 1;
/* Protocol Type. */