Messages in this thread | | | Date | Wed, 26 Jun 2019 18:13:38 +0200 | From | mirq-linux@rere ... | Subject | Re: [PATCH] bonding: Always enable vlan tx offload |
| |
On Wed, Jun 26, 2019 at 04:08:44PM +0800, YueHaibing wrote: > 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. [...] > diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c > index 407f4095a37a..799fc38c5c34 100644 > --- a/drivers/net/bonding/bond_main.c > +++ b/drivers/net/bonding/bond_main.c > @@ -4320,12 +4320,12 @@ void bond_setup(struct net_device *bond_dev) > 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_GSO_ENCAP_ALL | NETIF_F_GSO_UDP_L4; > bond_dev->features |= bond_dev->hw_features; > + bond_dev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_STAG_TX; > } > > /* Destroy a bonding device. >
I can see that bonding driver uses dev_queue_xmit() to pass packets to slave links, but I can't see where in the path it does software fallback for devices without HW VLAN tagging. Generally drivers that don't ever do VLAN offload also ignore vlan_tci presence. Am I missing something here?
Best Regards, Michał Mirosław
| |