forked from osmocom/wireshark
Revert "MPLS: relax pw_eth_heuristic and improve 1st nibble logic"
This reverts commit 01ddd93a72
.
Change-Id: I90f19fec52d3f1edc63fd00e614173a0154503d4
Reviewed-on: https://code.wireshark.org/review/19820
Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
parent
1bfa581529
commit
a949d7887c
|
@ -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:
|
||||
/*
|
||||
|
|
|
@ -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;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (manuf_name_da || manuf_name_sa) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
Loading…
Reference in New Issue