e1000 & igb if_vlan netmap header stripping issue after e1000-igb driver updates.

From: Özkan KIRIK <ozkan.kirik_at_gmail.com>
Date: Sat, 20 Nov 2021 14:19:11 UTC
Hello,

I'm using stable/12 (aba2dc46dfa5, Oct 24 2021). I'm hitting some
problems with if_vlan + parent interface netmap. It was working with
before driver update. Maybe something missing for netmap
implementation.

The way to reproduce:
[HostA] <----> [HostB]

HostA
- ifconfig em1.110 create 10.10.10.2/24 up
- ping 10.10.10.1
- tcpdump -eni em1
17:05:11.393411 00:50:56:26:69:ea > 00:0c:29:84:5d:88, ethertype
802.1Q (0x8100), length 102: vlan 110, p 0, ethertype IPv4, 10.10.10.1
> 10.10.10.2: ICMP echo reply, id 32844, seq 53, length 64

HostB
- ifconfig em1.110 create 10.10.10.1/24 up
- ifconfig em1 promisc -tso -lro -rxcsum -txcsum -tso6 -rxcsum -txcsum
-tso6 -rxcsum6 -txcsum6 -vlanhwtag -vlanhwcsum -vlanhwtso
- ./bridge -i em1 -i em1^ &
# tcpdump -eni em1
17:05:11.391215 00:0c:29:84:5d:88 > 00:50:56:26:69:ea, ethertype IPv4
(0x0800), length 98: 10.10.10.2 > 10.10.10.1: ICMP echo request, id
32844, seq 53, length 64

Pinging from HostA to HostB through if_vlan. When netmap bridge is
closed, everything is okey, we can see the original packet on tcpdump.
But when netmap bridge is started, packet's vlan header was lost as
you can see above. The netmap bridge app is the original
tools/tools/netmap/bridge.c application.
HostA and HostB connected back to back directly with a patch cable.
There is no switch between them.

I tried this test on real hardware em, igb and vmware e1000 (em) nics.
Problem is easy to reproduce.
But there is no such problem on ix and ixl cards.

Is it possible to check and fix?
Best Regards,
Özkan KIRIK