It appears that since commit 8cb65d000, Q-in-Q vlans have been broken. The series that commit is part of enabled TSO and checksum offloading on Q-in-Q vlans. However, most HW we support can't handle it. To work around the issue, the above commit added a function that turns off offloads on Q-in-Q devices, but it left the checksum offload. That will cause issues with most older devices that supprort very basic checksum offload capabilities as well as some newer devices (we've reproduced te problem with both be2net and bnx).
To solve this for everyone, turn off checksum offloading feature by default when sending Q-in-Q traffic. Devices that are proven to work can provided a corrected ndo_features_check implemetation. Fixes: 8cb65d000 ("net: Move check for multiple vlans to drivers") CC: Toshiaki Makita <makita.toshi...@lab.ntt.co.jp> Signed-off-by: Vladislav Yasevich <vyase...@redhat.com> --- include/linux/if_vlan.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h index 8d5fcd6..ae537f0 100644 --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h @@ -619,7 +619,6 @@ static inline netdev_features_t vlan_features_check(const struct sk_buff *skb, NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST | - NETIF_F_HW_CSUM | NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_STAG_TX); -- 2.7.4