From a949d7887cd60ebfe1d81e1adbab920bb1d288d2 Mon Sep 17 00:00:00 2001 From: Anders Broman Date: Sat, 28 Jan 2017 10:29:52 +0000 Subject: Revert "MPLS: relax pw_eth_heuristic and improve 1st nibble logic" This reverts commit 01ddd93a7296b54a2048de74691984a7e78e4cb9. Change-Id: I90f19fec52d3f1edc63fd00e614173a0154503d4 Reviewed-on: https://code.wireshark.org/review/19820 Reviewed-by: Anders Broman --- epan/dissectors/packet-mpls.c | 58 +++++++++++++---------------------------- epan/dissectors/packet-pw-eth.c | 17 +++++------- 2 files changed, 24 insertions(+), 51 deletions(-) diff --git a/epan/dissectors/packet-mpls.c b/epan/dissectors/packet-mpls.c index 03f8ea3b01..4ea63e589e 100644 --- a/epan/dissectors/packet-mpls.c +++ b/epan/dissectors/packet-mpls.c @@ -479,51 +479,29 @@ dissect_mpls(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_ } /* - * No, there isn't, so use a mix of the 1st nibble logic (see BCP 4928, - * RFC 4385 and 5586) + heuristic. + * No, there isn't, so use the 1st nibble logic (see BCP 4928, + * RFC 4385 and 5586). */ switch(first_nibble) { case 4: - { - /* - * This could be from an Ethernet pseudo-wire without a - * control word, with the MAC address's first nibble being 4 - * or an IPv4 packet (or something else). - */ - guint iplen = tvb_get_ntohs(next_tvb, 2); - guint reported_len = tvb_reported_length(next_tvb); - if (iplen >= (reported_len - 4) && iplen <= reported_len) { - /* the supposed IP total len is equal to the reported len plus - the possible padding, we have a good indication this is IP */ - call_dissector(dissector_ip, next_tvb, pinfo, tree); - /* IP dissector may reduce the length of the tvb. - We need to do the same, so that ethernet trailer is detected. */ - set_actual_length(tvb, offset + tvb_reported_length(next_tvb)); - break; - } - /* last resort */ - call_dissector(dissector_pw_eth_heuristic, next_tvb, pinfo, tree); - } + /* + * XXX - this could be from an Ethernet pseudo-wire without a + * control word, with the MAC address's first nibble being 4. + */ + call_dissector(dissector_ip, next_tvb, pinfo, tree); + /* IP dissector may reduce the length of the tvb. + We need to do the same, so that ethernet trailer is detected. */ + set_actual_length(tvb, offset+tvb_reported_length(next_tvb)); break; case 6: - { - /* - * This could be from an Ethernet pseudo-wire without a - * control word, with the MAC address's first nibble being 6 - * or an IPv6 packet (or something else). - */ - guint ip6len = tvb_get_guint16(next_tvb, offset + 4, ENC_BIG_ENDIAN); - guint reported_len = tvb_reported_length(next_tvb); - if (ip6len >= (reported_len - 4) && ip6len <= reported_len) { - call_dissector(dissector_ipv6, next_tvb, pinfo, tree); - /* IPv6 dissector may reduce the length of the tvb. - We need to do the same, so that ethernet trailer is detected. */ - set_actual_length(tvb, offset + tvb_reported_length(next_tvb)); - break; - } - /* last resort */ - call_dissector(dissector_pw_eth_heuristic, next_tvb, pinfo, tree); - } + /* + * XXX - this could be from an Ethernet pseudo-wire without a + * control word, with the MAC address's first nibble being 6. + */ + call_dissector(dissector_ipv6, next_tvb, pinfo, tree); + /* IPv6 dissector may reduce the length of the tvb. + We need to do the same, so that ethernet trailer is detected. */ + set_actual_length(tvb, offset+tvb_reported_length(next_tvb)); break; case 1: /* diff --git a/epan/dissectors/packet-pw-eth.c b/epan/dissectors/packet-pw-eth.c index 58f8f3cb65..2c245331f7 100644 --- a/epan/dissectors/packet-pw-eth.c +++ b/epan/dissectors/packet-pw-eth.c @@ -108,32 +108,27 @@ dissect_pw_eth_nocw(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* d } /* - * FF: this function returns 2 if the first 12 bytes in tvb looks like - * two valid ethernet addresses, 1 if either one of them contains a - * registered OUI and 0 otherwise. + * FF: this function returns TRUE if the first 12 bytes in tvb looks like + * two valid ethernet addresses. FALSE otherwise. */ -static int +static gboolean looks_like_plain_eth(tvbuff_t *tvb _U_) { const gchar *manuf_name_da; const gchar *manuf_name_sa; if (tvb_reported_length_remaining(tvb, 0) < 14) { - return 0; + return FALSE; } manuf_name_da = tvb_get_manuf_name_if_known(tvb, 0); manuf_name_sa = tvb_get_manuf_name_if_known(tvb, 6); if (manuf_name_da && manuf_name_sa) { - return 2; - } - - if (manuf_name_da || manuf_name_sa) { - return 1; + return TRUE; } - return 0; + return FALSE; } static int -- cgit v1.2.1