| From: YueHaibing <yuehaibing@huawei.com> |
| Date: Wed, 26 Jun 2019 16:08:44 +0800 |
| Subject: bonding: Always enable vlan tx offload |
| |
| commit 30d8177e8ac776d89d387fad547af6a0f599210e upstream. |
| |
| We build vlan on top of bonding interface, which vlan offload |
| is off, bond mode is 802.3ad (LACP) and xmit_hash_policy is |
| BOND_XMIT_POLICY_ENCAP34. |
| |
| Because vlan tx offload is off, vlan tci is cleared and skb push |
| the vlan header in validate_xmit_vlan() while sending from vlan |
| devices. Then in bond_xmit_hash, __skb_flow_dissect() fails to |
| get information from protocol headers encapsulated within vlan, |
| because 'nhoff' is points to IP header, so bond hashing is based |
| on layer 2 info, which fails to distribute packets across slaves. |
| |
| This patch always enable bonding's vlan tx offload, pass the vlan |
| packets to the slave devices with vlan tci, let them to handle |
| vlan implementation. |
| |
| Fixes: 278339a42a1b ("bonding: propogate vlan_features to bonding master") |
| Suggested-by: Jiri Pirko <jiri@resnulli.us> |
| Signed-off-by: YueHaibing <yuehaibing@huawei.com> |
| Acked-by: Jiri Pirko <jiri@mellanox.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| [bwh: Backported to 3.16: adjust context] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/net/bonding/bond_main.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/net/bonding/bond_main.c |
| +++ b/drivers/net/bonding/bond_main.c |
| @@ -4038,13 +4038,13 @@ void bond_setup(struct net_device *bond_ |
| bond_dev->features |= NETIF_F_NETNS_LOCAL; |
| |
| bond_dev->hw_features = BOND_VLAN_FEATURES | |
| - NETIF_F_HW_VLAN_CTAG_TX | |
| NETIF_F_HW_VLAN_CTAG_RX | |
| NETIF_F_HW_VLAN_CTAG_FILTER; |
| |
| bond_dev->hw_features &= ~(NETIF_F_ALL_CSUM & ~NETIF_F_HW_CSUM); |
| bond_dev->hw_features |= NETIF_F_GSO_UDP_TUNNEL; |
| bond_dev->features |= bond_dev->hw_features; |
| + bond_dev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_STAG_TX; |
| } |
| |
| /* |