• Vladimir Oltean's avatar
    net: dsa: tag_dsa: send packets with TX fwd offload from VLAN-unaware bridges using VID 0 · c7709a02
    Vladimir Oltean authored
    The present code is structured this way due to an incomplete thought
    process. In Documentation/networking/switchdev.rst we document that if a
    bridge is VLAN-unaware, then the presence or lack of a pvid on a bridge
    port (or on the bridge itself, for that matter) should not affect the
    ability to receive and transmit tagged or untagged packets.
    
    If the bridge on behalf of which we are sending this packet is
    VLAN-aware, then the TX forwarding offload API ensures that the skb will
    be VLAN-tagged (if the packet was sent by user space as untagged, it
    will get transmitted town to the driver as tagged with the bridge
    device's pvid). But if the bridge is VLAN-unaware, it may or may not be
    VLAN-tagged. In fact the logic to insert the bridge's PVID came from the
    idea that we should emulate what is being done in the VLAN-aware case.
    But we shouldn't.
    
    It appears that injecting packets using a VLAN ID of 0 serves the
    purpose of forwarding the packets to the egress port with no VLAN tag
    added or stripped by the hardware, and no filtering being performed.
    So we can simply remove the superfluous logic.
    
    One reason why this logic is broken is that when CONFIG_BRIDGE_VLAN_FILTERING=n,
    we call br_vlan_get_pvid_rcu() but that returns an error and we do error
    out, dropping all packets on xmit. Not really smart. This is also an
    issue when the user deletes the bridge pvid:
    
    $ bridge vlan del dev br0 vid 1 self
    
    As mentioned, in both cases, packets should still flow freely, and they
    do just that on any net device where the bridge is not offloaded, but on
    mv88e6xxx they don't.
    
    Fixes: d82f8ab0 ("net: dsa: tag_dsa: offload the bridge forwarding process")
    Reported-by: default avatarAndrew Lunn <andrew@lunn.ch>
    Link: https://patchwork.kernel.org/project/netdevbpf/patch/20211003155141.2241314-1-andrew@lunn.ch/
    Link: https://patchwork.kernel.org/project/netdevbpf/patch/20210928233708.1246774-1-vladimir.oltean@nxp.com/Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    c7709a02
tag_dsa.c 11 KB