diff options
author | Michael Mann <mmann78@netscape.net> | 2017-04-02 18:44:15 -0400 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2017-04-05 04:48:50 +0000 |
commit | cf54564508f1a4e3ce6af8bab17fb884c5e9b9b9 (patch) | |
tree | 6d853a36b5dec4c7c8d0a192e71122ad9460b064 /epan/dissectors/packet-geneve.c | |
parent | 697ea9affaab0dbd8fe9876724749207be75adfa (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.c | 57 |
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. */ |