Intel 82576 support transparent vlan which will automaticaly tag and untag packet at the vf before leave or reach the guest. Currently, FreeBSD igb driver does not correctly handle the vlan tag. Packet inbound still have the vlan tag. Linux and Windows does not have this problem. This is very similar to the problem with ixgb (Intel 82599) driver. https://reviews.freebsd.org/D4788 https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=202983#c4 For the root cause: It seem that VLAN stripping will depend on RXDCTL.VME flag that the guest driver need to set. And FreeBSD driver does not set it so FreeBSD guest will still see the VLAN tag. They only mention intel 82599 (ixgb/ixgbe) but I check intel 82576 datasheet and the similar flag is CTRL.VME. But the 82576 sr-iov driver guide mention the VMOLR.STRVLAN flag (?) https://access.redhat.com/solutions/1126973 http://www.intel.com/content/dam/www/public/us/en/documents/datasheets/82576eb-gigabit-ethernet-controller-datasheet.pdf http://www.intel.com/content/dam/doc/design-guide/82576-sr-iov-driver-companion-guide.pdf
Can you confirm that this is actually running on an arm64 (64-bit ARM) platform, or otherwise update the Hardware description?
Has there been any update on this? It is also affecting me. I can supply any additional information that's needed.
(In reply to ingenium from comment #2) It looks like there may be a newer version of the Intel driver? Is it possible it contains the necessary fixes? https://downloadcenter.intel.com/download/15815/Intel-Network-Adapter-Driver-for-82575-6-and-82580-based-Gigabit-Network-Connections-under-FreeBSD-
(In reply to ingenium from comment #3) Please try a patch for 11-stable. I don't test it. This functionality seems to be dropped from 12-current's iflib if_em.c. Index: sys/dev/e1000/if_igb.c =================================================================== --- sys/dev/e1000/if_igb.c (revision 314587) +++ sys/dev/e1000/if_igb.c (working copy) @@ -5327,7 +5327,6 @@ if (adapter->vf_ifp) { e1000_rlpml_set_vf(hw, adapter->max_frame_size + VLAN_TAG_SIZE); - return; } reg = E1000_READ_REG(hw, E1000_CTRL);
(In reply to Kaho Toshikazu from comment #4) I'm not sure that I follow? Are you suggesting simply deleting that line from 10.3 and it may allow vlan tags to not be stripped?
(In reply to ingenium from comment #5) > Are you suggesting simply deleting that line from 10.3 and it may allow > vlan tags to not be stripped? Yes. I don't know that the code setting the vlan filter table(VFTA) is correct or not, but this line inhibits a VFTA generation.
Looks like I'm having a similar issue with an Intel i350 NIC. I.e. packets from outside the NIC to a VF make it, even with VLAN tags. But packets from within the NIC (i.e. VF - VF or PF - VF) with VLAN tags don't make it! I'm experiencing the issue with pfsense 2.4.3, which is freebsd based (FreeBSD 11.1-RELEASE-p7). Will the patch you mentioned be in the next freebsd release?
Patch from comment 4 doesn't apply anymore. In if_em.c the code around e1000_rlpml_set_vf looks like: if (sc->vf_ifp) e1000_rlpml_set_vf(hw, psize); else E1000_WRITE_REG(hw, E1000_RLPML, psize); There is no return to be removed. Since the patch doesn't apply anymore and there is no recent information about this bug on a supported release, I'm closing this PR. Please reopen if the issue is still valid.