• Vladimir Oltean's avatar
    net: dsa: sja1105: add support for imprecise RX · 884be12f
    Vladimir Oltean authored
    This is already common knowledge by now, but the sja1105 does not have
    hardware support for DSA tagging for data plane packets, and tag_8021q
    sets up a unique pvid per port, transmitted as VLAN-tagged towards the
    CPU, for the source port to be decoded nonetheless.
    
    When the port is part of a VLAN-aware bridge, the pvid committed to
    hardware is taken from the bridge and not from tag_8021q, so we need to
    work with that the best we can.
    
    Configure the switches to send all packets to the CPU as VLAN-tagged
    (even ones that were originally untagged on the wire) and make use of
    dsa_untag_bridge_pvid() to get rid of it before we send those packets up
    the network stack.
    
    With the classified VLAN used by hardware known to the tagger, we first
    peek at the VID in an attempt to figure out if the packet was received
    from a VLAN-unaware port (standalone or under a VLAN-unaware bridge),
    case in which we can continue to call dsa_8021q_rcv(). If that is not
    the case, the packet probably came from a VLAN-aware bridge. So we call
    the DSA helper that finds for us a "designated bridge port" - one that
    is a member of the VLAN ID from the packet, and is in the proper STP
    state - basically these are all checks performed by br_handle_frame() in
    the software RX data path.
    
    The bridge will accept the packet as valid even if the source port was
    maybe wrong. So it will maybe learn the MAC SA of the packet on the
    wrong port, and its software FDB will be out of sync with the hardware
    FDB. So replies towards this same MAC DA will not work, because the
    bridge will send towards a different netdev.
    
    This is where the bridge data plane offload ("imprecise TX") added by
    the next patch comes in handy. The software FDB is wrong, true, but the
    hardware FDB isn't, and by offloading the bridge forwarding plane we
    have a chance to right a wrong, and have the hardware look up the FDB
    for us for the reply packet. So it all cancels out.
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    884be12f
sja1105_main.c 88.1 KB