Revert commit 1f250674085a ("net: fix packet type for stacked VLAN")
which introduced a regression causing single VLAN frames to be
misidentified as QinQ due to incorrect use of |= on the ptype.

Replace the separate VLAN and QinQ code paths with a single loop
that handles arbitrarily stacked VLAN tags. Fix the MPLS path to
use the bottom of stack bit instead of a hardcoded label limit,
and parse the L3 protocol of the MPLS payload by inspecting the
first nibble.

Add unit tests for rte_net_get_ptype covering Ethernet, VLAN, QinQ,
MPLS, IPv4/IPv6, and truncated packet scenarios.

v5:

* Split the series in multiple patches.
* Revert the commit that introduced the bug.
* Add support for stacked VLAN/QINQ as suggested by David.
* Fix MPLS bottom of stack detection. Try to guess MPLS payload.
* Add more test cases.

v4:

* changed the approach again. Only set VLAN or QINQ ptype for the first
  encountered vlan/qinq ether type.
* unit tests not changed

v3:

* changed the approach: initialize pkt_type=0 and only set it to
  RTE_PTYPE_L2_ETHER if neither of VLAN nor QINQ matched.
* extended the unit tests to check for header lengths and added ipv6 / tcp
  cases.

v2: added new ptype tests

v3:

* changed the approach: initialize pkt_type=0 and only set it to
  RTE_PTYPE_L2_ETHER if neither of VLAN nor QINQ matched.
* extended the unit tests to check for header lengths and added ipv6 / tcp
  cases.

v2: added new ptype tests

Robin Jarry (5):
  Revert "net: fix packet type for stacked VLAN"
  net: support multiple stacked VLAN tags
  net: add unit tests for rte_net_get_ptype
  net: parse L3 protocol after MPLS labels
  net: add truncated packet tests for rte_net_get_ptype

 app/test/meson.build      |   1 +
 app/test/test_net_ptype.c | 326 ++++++++++++++++++++++++++++++++++++++
 lib/net/rte_net.c         |  72 +++++----
 3 files changed, 369 insertions(+), 30 deletions(-)
 create mode 100644 app/test/test_net_ptype.c

-- 
2.54.0

Reply via email to