• Vladimir Oltean's avatar
    net: bridge: ignore switchdev events for LAG ports which didn't request replay · 0d2cfbd4
    Vladimir Oltean authored
    There is a slight inconvenience in the switchdev replay helpers added
    recently, and this is when:
    
    ip link add br0 type bridge
    ip link add bond0 type bond
    ip link set bond0 master br0
    bridge vlan add dev bond0 vid 100
    ip link set swp0 master bond0
    ip link set swp1 master bond0
    
    Since the underlying driver (currently only DSA) asks for a replay of
    VLANs when swp0 and swp1 join the LAG because it is bridged, what will
    happen is that DSA will try to react twice on the VLAN event for swp0.
    This is not really a huge problem right now, because most drivers accept
    duplicates since the bridge itself does, but it will become a problem
    when we add support for replaying switchdev object deletions.
    
    Let's fix this by adding a blank void *ctx in the replay helpers, which
    will be passed on by the bridge in the switchdev notifications. If the
    context is NULL, everything is the same as before. But if the context is
    populated with a valid pointer, the underlying switchdev driver
    (currently DSA) can use the pointer to 'see through' the bridge port
    (which in the example above is bond0) and 'know' that the event is only
    for a particular physical port offloading that bridge port, and not for
    all of them.
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    0d2cfbd4
slave.c 61.5 KB