There seems to be a bug in the igbvf sourceforge driver. In igbvf_receive_skb()
we're ANDing the big-endian vlan ID with the little-endian mask.

Also, I think the criteria for setting IGBVF_FLAG_RX_LB_VLAN_BSWAP is incorrect.
The 82576 datasheet also indicates that the VLAN tag is big endian.  Since both
currently-supported devices are big-endian, maybe this should be the default?

Accordingly, I think the following patch may be in order:


diff --git a/src/netdev.c b/src/netdev.c
index a18f000..3834c69 100644
--- a/src/netdev.c
+++ b/src/netdev.c
@@ -127,9 +127,9 @@ static void igbvf_receive_skb(struct igbvf_adapter *adapter,
        if (status & E1000_RXD_STAT_VP) {
                if ((adapter->flags & IGBVF_FLAG_RX_LB_VLAN_BSWAP) &&
                    (status & E1000_RXDEXT_STATERR_LB))
-                       vid = be16_to_cpu(vlan & E1000_RXD_SPC_VLAN_MASK);
+                       vid = be16_to_cpu(vlan) & E1000_RXD_SPC_VLAN_MASK;
                else
-                       vid = le16_to_cpu(vlan & E1000_RXD_SPC_VLAN_MASK);
+                       vid = le16_to_cpu(vlan) & E1000_RXD_SPC_VLAN_MASK;
        }
        /*
         * On some adapters, trunk VLANs are incorrectly indicated in the
@@ -2944,9 +2944,8 @@ static int __devinit igbvf_probe(struct pci_dev *pdev,
        /* reset the hardware with the new settings */
        igbvf_reset(adapter);
 
-       /* set hardware-specific flags */
-       if (adapter->hw.mac.type == e1000_vfadapt_i350)
-               adapter->flags |= IGBVF_FLAG_RX_LB_VLAN_BSWAP;
+       /* both 82576 and i350 store vlan ID in network order */
+       adapter->flags |= IGBVF_FLAG_RX_LB_VLAN_BSWAP;
 
        /* tell the stack to leave us alone until igbvf_open() is called */
        netif_carrier_off(netdev);


Incidentally, the igbvf driver in the current mainline sources is missing 
support
for IGBVF_FLAG_RX_LB_VLAN_BSWAP so it will break when using VLAN in a VF.  I'll
be sending in a patch.

Chris

------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
E1000-devel mailing list
E1000-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel® Ethernet, visit 
http://communities.intel.com/community/wired

Reply via email to