• Vladimir Oltean's avatar
    net: dsa: sja1105: ignore the FDB entry for unknown multicast when adding a new address · 728db843
    Vladimir Oltean authored
    Currently, when sja1105pqrs_fdb_add() is called for a host-joined IPv6
    MDB entry such as 33:33:00:00:00:6a, the search for that address will
    return the FDB entry for SJA1105_UNKNOWN_MULTICAST, which has a
    destination MAC of 01:00:00:00:00:00 and a mask of 01:00:00:00:00:00.
    It returns that entry because, well, it matches, in the sense that
    unknown multicast is supposed by design to match it...
    
    But the issue is that we then proceed to overwrite this entry with the
    one for our precise host-joined multicast address, and the unknown
    multicast entry is no longer there - unknown multicast is now flooded to
    the same group of ports as broadcast, which does not look up the FDB.
    
    To solve this problem, we should ignore searches that return the unknown
    multicast address as the match, and treat them as "no match" which will
    result in the entry being installed to hardware.
    
    For this to work properly, we need to put the result of the FDB search
    in a temporary variable in order to avoid overwriting the l2_lookup
    entry we want to program. The l2_lookup entry returned by the search
    might not have the same set of DESTPORTS and not even the same MACADDR
    as the entry we're trying to add.
    
    Fixes: 4d942354 ("net: dsa: sja1105: offload bridge port flags to device")
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    728db843
sja1105_main.c 109 KB