• Vladimir Oltean's avatar
    net: dsa: convert check for 802.1Q upper when bridged into PRECHANGEUPPER · 2b138406
    Vladimir Oltean authored
    DSA tries to prevent having a VLAN added by a bridge and by an 802.1Q
    upper at the same time. It does that by checking the VID in
    .ndo_vlan_rx_add_vid(), since that's something that the 8021q module
    calls, via vlan_vid_add(). When a VLAN matches in both subsystems, this
    check returns -EBUSY.
    
    However the vlan_vid_add() function isn't specific to the 8021q module
    in any way at all. It is simply the kernel's way to tell an interface to
    add a VLAN to its RX filter and not drop that VLAN. So there's no reason
    to return -EBUSY when somebody tries to call vlan_vid_add() for a VLAN
    that was installed by the bridge. The proper behavior is to accept that
    configuration.
    
    So what's wrong is how DSA checks that it has an 8021q upper. It should
    look at the actual uppers for that, not just assume that the 8021q
    module was somewhere in the call stack of .ndo_vlan_rx_add_vid().
    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>
    2b138406
slave.c 52.5 KB