]> git.baikalelectronics.ru Git - kernel.git/commitdiff
net: mscc: ocelot: fix broken IP multicast flooding
authorVladimir Oltean <vladimir.oltean@nxp.com>
Fri, 15 Apr 2022 15:19:50 +0000 (18:19 +0300)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 19 Apr 2022 08:33:33 +0000 (10:33 +0200)
When the user runs:
bridge link set dev $br_port mcast_flood on

this command should affect not only L2 multicast, but also IPv4 and IPv6
multicast.

In the Ocelot switch, unknown multicast gets flooded according to
different PGIDs according to its type, and PGID_MC only handles L2
multicast. Therefore, by leaving PGID_MCIPV4 and PGID_MCIPV6 at their
default value of 0, unknown IP multicast traffic is never flooded.

Fixes: de16b5ad751c ("net: mscc: ocelot: offload bridge port flags to device")
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Link: https://lore.kernel.org/r/20220415151950.219660-1-vladimir.oltean@nxp.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/mscc/ocelot.c

index e443bd8b2d09acd2294d5f9a8735bdf63dd185a1..ee9c607d62a79e320b88246712db92e89925e8e4 100644 (file)
@@ -2859,6 +2859,8 @@ static void ocelot_port_set_mcast_flood(struct ocelot *ocelot, int port,
                val = BIT(port);
 
        ocelot_rmw_rix(ocelot, val, BIT(port), ANA_PGID_PGID, PGID_MC);
+       ocelot_rmw_rix(ocelot, val, BIT(port), ANA_PGID_PGID, PGID_MCIPV4);
+       ocelot_rmw_rix(ocelot, val, BIT(port), ANA_PGID_PGID, PGID_MCIPV6);
 }
 
 static void ocelot_port_set_bcast_flood(struct ocelot *ocelot, int port,