summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsfd <stephen.donnelly@endace.com>2017-02-28 10:13:42 +1300
committerAnders Broman <a.broman58@gmail.com>2017-02-28 05:21:30 +0000
commit4ef0fa2f15b0d389e05ff94024f194702ddf42f9 (patch)
tree189a42490f596a591192f580113a2b3d4f27d299
parent841531bc85629023c9f3fb73d8af609e3cd32109 (diff)
downloadwireshark-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.c29
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 } },