net: dsa: hellcreek: Add STP forwarding rule
authorKurt Kanzenbach <kurt@linutronix.de>
Tue, 14 Dec 2021 13:45:06 +0000 (14:45 +0100)
committerJakub Kicinski <kuba@kernel.org>
Wed, 15 Dec 2021 02:46:28 +0000 (18:46 -0800)
Treat STP as management traffic. STP traffic is designated for the CPU port
only. In addition, STP traffic has to pass blocked ports.

Fixes: e4b27ebc780f ("net: dsa: Add DSA driver for Hirschmann Hellcreek switches")
Signed-off-by: Kurt Kanzenbach <kurt@linutronix.de>
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
Acked-by: Richard Cochran <richardcochran@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/dsa/hirschmann/hellcreek.c

index c4f840b..17d3a4a 100644 (file)
@@ -1075,6 +1075,17 @@ static int hellcreek_setup_fdb(struct hellcreek *hellcreek)
                .reprio_tc    = 6,      /* TC: 6 as per IEEE 802.1AS */
                .reprio_en    = 1,
        };
+       static struct hellcreek_fdb_entry stp = {
+               /* MAC: 01-80-C2-00-00-00 */
+               .mac          = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x00 },
+               .portmask     = 0x03,   /* Management ports */
+               .age          = 0,
+               .is_obt       = 0,
+               .pass_blocked = 1,
+               .is_static    = 1,
+               .reprio_tc    = 6,
+               .reprio_en    = 1,
+       };
        int ret;
 
        mutex_lock(&hellcreek->reg_lock);
@@ -1082,6 +1093,9 @@ static int hellcreek_setup_fdb(struct hellcreek *hellcreek)
        if (ret)
                goto out;
        ret = __hellcreek_fdb_add(hellcreek, &p2p);
+       if (ret)
+               goto out;
+       ret = __hellcreek_fdb_add(hellcreek, &stp);
 out:
        mutex_unlock(&hellcreek->reg_lock);