• Corinna Vinschen's avatar
    igb: Fix VLAN tag stripping on Intel i350 · 030f9f52
    Corinna Vinschen authored
    Problem: When switching off VLAN offloading on an i350, the VLAN
    interface gets unusable.  For testing, set up a VLAN on an i350
    and some remote machine, e.g.:
    
      $ ip link add link eth0 name eth0.42 type vlan id 42
      $ ip addr add 192.168.42.1/24 dev eth0.42
      $ ip link set dev eth0.42 up
    
    Offloading is switched on by default:
    
      $ ethtool -k eth0 | grep vlan-offload
      rx-vlan-offload: on
      tx-vlan-offload: on
    
      $ ping -c 3 -I eth0.42 192.168.42.2
      [...works as usual...]
    
    Now switch off VLAN offloading and try again:
    
      $ ethtool -K eth0 rxvlan off
      Actual changes:
      rx-vlan-offload: off
      tx-vlan-offload: off [requested on]
      $ ping -c 3 -I eth0.42 192.168.42.2
      PING 192.168.42.2 (192.168.42.2) from 192.168.42.1 eth0.42: 56(84) bytes of da
    ta.
    
      --- 192.168.42.2 ping statistics ---
      3 packets transmitted, 0 received, 100% packet loss, time 1999ms
    
    I can only reproduce it on an i350, the above works fine on a 82580.
    
    While inspecting the igb source, I came across the code in igb_set_vmolr
    which sets the E1000_VMOLR_STRVLAN/E1000_DVMOLR_STRVLAN flags once and
    for all, and in all of the igb code there's no other place where the
    STRVLAN is set or cleared.  Thus, VLAN stripping is enabled in igb
    unconditionally, independently of the offloading setting.
    
    I compared that to the latest Intel igb-5.3.3.5 driver from
    http://sourceforge.net/projects/e1000/ which in fact sets and clears the
    STRVLAN flag independently from igb_set_vmolr in its own function
    igb_set_vf_vlan_strip, depending on the vlan settings.
    
    So I included the STRVLAN handling from the igb-5.3.3.5 driver into our
    current igb driver and tested the above scenario again.  This time ping
    still works after switching off VLAN offloading.
    
    Tested on i350, with and without addtional VFs, as well as on 82580
    successfully.
    Signed-off-by: default avatarCorinna Vinschen <vinschen@redhat.com>
    Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    030f9f52
igb_main.c 219 KB