I've created a v1 of a QinQ test suite around the set of test cases discussed earlier (which is not set in stone, and I expect it to change significantly across many future versions.) The PASS/FAIL values can be mostly disregarded in the context of this conversation, but I've added logging to explain which packets are sent, and what happened upon reception, which I hope will be more informative. After running on mlx5/i40e drivers, I got the following results:
test_vlan_strip: QinQ strip OFF and VLAN strip ON test_qinq_strip: QinQ strip ON and VLAN strip ON i40e: test_qinq_strip (sent packet: Single VLAN): FAIL reason: VLAN tags found in packet when should have been stripped: Ether / Dot1Q / 802.1q (0x1c) vlan 1280 / LLC / Raw / Padding test_qinq_strip (sent packet: Stacked VLAN): FAIL reason: Expected one VLAN tag but found 2: Ether / Dot1Q / Dot1Q / 802.1q (0x1c) vlan 1280 / LLC / Raw / Padding test_qinq_strip (sent packet: Single S-VLAN): FAIL reason: VLAN tags found in packet when should have been stripped: Ether / Dot1Q / 802.1q (??) vlan ?? / LLC / Raw / Padding test_qinq_strip (sent packet: QinQ): FAIL reason: VLAN tags found in packet when should have been stripped: Ether / Dot1Q / Dot1AD / 802.1q (0x1c) vlan 1280 / LLC / Raw / Padding test_vlan_strip (sent packet: Single VLAN): PASS reason: VLAN tag stripped from packet test_vlan_strip (sent packet: Stacked VLAN): PASS reason: Received packet had outer VLAN stripped, with inner VLAN intact test_vlan_strip (sent packet: Single S-VLAN): PASS reason: S-VLAN tag stripped from packet test_vlan_strip (sent packet: QinQ): FAIL reason: Neither tag stripped mlx5_core: test_qinq_strip: SKIP reason: Required capability '{NicCapability.RX_OFFLOAD_QINQ_STRIP}' not found. test_vlan_strip (sent packet: Single VLAN): PASS reason: VLAN tags found in packet when should have been stripped: Ether / 802.1q 24:8a:07:aa:83:ee > 0c:42:a1:54:25:86 (0x1c) vlan 1280 / LLC / Raw / Padding test_vlan_strip (sent packet: Stacked VLAN): PASS test_vlan_strip (sent packet: Single S-VLAN): PASS reason: S-VLAN tag stripped from packet test_vlan_strip (sent packet: QinQ): FAIL reason: VLAN tag 0x8100 not found in packet: Ether / Dot1Q / 802.1q (??) vlan ?? / LLC / Raw / Padding Hopefully this can give a clearer picture of the current QinQ/VLAN strip behavior. If anyone wants to take a look at the suite I'll link it here: https://patchwork.dpdk.org/project/dpdk/patch/20250717205718.108826-2-dm...@iol.unh.edu/