This change aligns the FreeBSD driver behaviour closer to the Linux driver behaviour which is what I based the change off. In doing so it allows the driver to function on AWS instances that support Enhanced Networking.
While I don't understand all the codebase of this Intel driver. The change seems quite straight forward.
- When disabling the RX queue for updates in function ixv_initialize_receive_units. Don't remove VLAN support.
- When running the function ixv_initialize_receive_units. It looks like we read the VFRXEDCTL twice which seems redundant given we have read it earlier in the function.
- When enabling the RX queues, we should also flag them as VLAN capable with 'IXGBE_RXDCTL_VME'.
The linux driver also makes use of this FLAG during the RX queue initialisation process.
ixgbevf_main.c in 3.1.1 -> https://sourceforge.net/projects/e1000/files/ixgbevf%20stable/3.1.1/
1936: /* allow any size packet since we can handle overflow */ 1937: rxdctl &= ~IXGBE_RXDCTL_RLPML_EN;
But I'm not 100% sure on what it does. So am leaving this for a later change if it's needed. FreeBSd does seem to have this in the header files though but it never gets used from what I see. Anyway, I do wonder if this flag has anything to do with the automatic jumbo frame MTU detection and configuration as with this change alone the VF is setup and functions now, but does so with a default 1500 MTU instead of the 9001 which Linux systems do.