diff options
author | sfd <stephen.donnelly@endace.com> | 2017-02-28 10:13:42 +1300 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2017-02-28 05:21:30 +0000 |
commit | 4ef0fa2f15b0d389e05ff94024f194702ddf42f9 (patch) | |
tree | 189a42490f596a591192f580113a2b3d4f27d299 | |
parent | 841531bc85629023c9f3fb73d8af609e3cd32109 (diff) | |
download | wireshark-4ef0fa2f15b0d389e05ff94024f194702ddf42f9.tar.gz |
Some ERF pseudo-headers have color instead of lctr value
Don't report expert-info warnings for lctr when it is actually color.
Change-Id: I689ec84dd8f1cafa1ec7e8740f9bc4091339929a
Reviewed-on: https://code.wireshark.org/review/20306
Reviewed-by: Michael Mann <mmann78@netscape.net>
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
-rw-r--r-- | epan/dissectors/packet-erf.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/epan/dissectors/packet-erf.c b/epan/dissectors/packet-erf.c index fe380722f8..58a1e0dfbc 100644 --- a/epan/dissectors/packet-erf.c +++ b/epan/dissectors/packet-erf.c @@ -74,6 +74,7 @@ static int hf_erf_flags_res = -1; static int hf_erf_rlen = -1; static int hf_erf_lctr = -1; +static int hf_erf_color = -1; static int hf_erf_wlen = -1; /* Classification extension header */ @@ -886,6 +887,20 @@ static const erf_meta_hf_template_t erf_meta_sections[] = { { ERF_META_SECTION_SOURCE, { "Source Section", "section_source", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } } }; +static int erf_type_has_color(unsigned int type) { + switch (type & ERF_HDR_TYPE_MASK) { + case ERF_TYPE_COLOR_HDLC_POS: + case ERF_TYPE_COLOR_ETH: + case ERF_TYPE_COLOR_HASH_POS: + case ERF_TYPE_COLOR_HASH_ETH: + case ERF_TYPE_DSM_COLOR_HDLC_POS: + case ERF_TYPE_DSM_COLOR_ETH: + case ERF_TYPE_COLOR_MC_HDLC_POS: + return 1; + } + return 0; +} + static erf_meta_tag_info_ex_t* erf_meta_tag_info_ex_new(wmem_allocator_t *allocator) { gsize i = 0; erf_meta_tag_info_ex_t *extra = wmem_new0(allocator, erf_meta_tag_info_ex_t); @@ -1857,9 +1872,14 @@ dissect_erf_pseudo_header(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) proto_tree_add_uint(flags_tree, hf_erf_flags_res, tvb, 0, 0, pinfo->pseudo_header->erf.phdr.flags); proto_tree_add_uint(tree, hf_erf_rlen, tvb, 0, 0, pinfo->pseudo_header->erf.phdr.rlen); - pi=proto_tree_add_uint(tree, hf_erf_lctr, tvb, 0, 0, pinfo->pseudo_header->erf.phdr.lctr); - if (pinfo->pseudo_header->erf.phdr.lctr > 0) - expert_add_info(pinfo, pi, &ei_erf_packet_loss); + + if (erf_type_has_color(pinfo->pseudo_header->erf.phdr.type)) { + pi=proto_tree_add_uint(tree, hf_erf_color, tvb, 0, 0, pinfo->pseudo_header->erf.phdr.lctr); + } else { + pi=proto_tree_add_uint(tree, hf_erf_lctr, tvb, 0, 0, pinfo->pseudo_header->erf.phdr.lctr); + if (pinfo->pseudo_header->erf.phdr.lctr > 0) + expert_add_info(pinfo, pi, &ei_erf_packet_loss); + } proto_tree_add_uint(tree, hf_erf_wlen, tvb, 0, 0, pinfo->pseudo_header->erf.phdr.wlen); } @@ -2827,6 +2847,9 @@ proto_register_erf(void) { &hf_erf_lctr, { "Loss counter", "erf.lctr", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, + { &hf_erf_color, + { "Color", "erf.color", + FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_erf_wlen, { "Wire length", "erf.wlen", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |