From patchwork Sun Jun 27 14:10:00 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 467942 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 404FDC48BC2 for ; Sun, 27 Jun 2021 14:10:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2CD20619B0 for ; Sun, 27 Jun 2021 14:10:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231201AbhF0OMv (ORCPT ); Sun, 27 Jun 2021 10:12:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55946 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231158AbhF0OMt (ORCPT ); Sun, 27 Jun 2021 10:12:49 -0400 Received: from mail-ej1-x632.google.com (mail-ej1-x632.google.com [IPv6:2a00:1450:4864:20::632]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 72BD1C061767 for ; Sun, 27 Jun 2021 07:10:24 -0700 (PDT) Received: by mail-ej1-x632.google.com with SMTP id v20so5862918eji.10 for ; Sun, 27 Jun 2021 07:10:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=8q4kkEQ6fmMwH2vZZgk3RBl2nTpfC/5pzFbK/qkE2Zg=; b=LKHo6ZiULmz/l65Cvr7GoMQRoCII+8+ilHzKaWJgV8sw9JRIfDVitA6h/CYVQ9dSMW 9f4jyrLXG3HyIhSJYjGScdJw5IDvr1K2yIMSAs82+I2M/lA1CW6Ek0Qk4oHCDcTwqhXj 7S8qZwDj2qXwvAq2JqkzAdDbFXQCqEmNk2GKWOJt6t6z4MEPOgI+5achVrZDuzejw6I2 fJww1FiLgp3fUfgier4lqlrxZLAYmio34Vcb8CRnFHmAUV8QKX9a8n8DkllmKzL6SRZs OE5js6SH0U6nvxwfLQwnDOSp5Hofjys1UIkujacw19G+a6qXpZG1pkyQRZzq5eEfzG8u b8zQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=8q4kkEQ6fmMwH2vZZgk3RBl2nTpfC/5pzFbK/qkE2Zg=; b=CXcCIj6xB54vPCm9kZF7c7thcxQfLP97qcmFSJF9clcVll0sxui2alsIFDtNLfM4k2 td+8OSRPSLwBi+0di39NlmBRrrPKVRqqZ2nSQs+6UiuH9vOkhd45SCBXbSSyFnSkq0bj aMe9d91QdnPZSnqMv5NisPabnyvl9bMnIlG1AyP3rnolRFB2AD8kEPsArddUs2dey98i pSSK1gV8TRJBN+SkrbBuodrkxuqcqIPHt1s/zmORpzk475gJftupM066K7QoQE/3rC1s r8Luwdvk951dbEOMohAfo/QjI56rSaeWaZC3VmrlJMvms7mICPgHGIM+NngZtngoxQO1 lJZg== X-Gm-Message-State: AOAM531eQNVmfyDrx2PrH7ZRkwAnCt3fNTIBAoBmcAZXaKmav8vENmI5 65odDd20GPN8j8wP0dfHSlMfqbvoa0Y= X-Google-Smtp-Source: ABdhPJy1yXmYav1eQE2ylei6tLip05VVqEtl18Y89SPLX9cJPSt0WdoxrVi+LqOIrRC8YTo7y3psxg== X-Received: by 2002:a17:906:52d5:: with SMTP id w21mr20535468ejn.490.1624803022836; Sun, 27 Jun 2021 07:10:22 -0700 (PDT) Received: from localhost.localdomain ([188.26.224.68]) by smtp.gmail.com with ESMTPSA id s4sm7857389edu.49.2021.06.27.07.10.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Jun 2021 07:10:22 -0700 (PDT) From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Florian Fainelli , Vivien Didelot , Jiri Pirko , Ido Schimmel , Tobias Waldekranz , Roopa Prabhu , Nikolay Aleksandrov , Vladimir Oltean Subject: [RFC PATCH v3 net-next 02/15] net: bridge: allow br_fdb_replay to be called for the bridge device Date: Sun, 27 Jun 2021 17:10:00 +0300 Message-Id: <20210627141013.1273942-3-olteanv@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210627141013.1273942-1-olteanv@gmail.com> References: <20210627141013.1273942-1-olteanv@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Vladimir Oltean When a port joins a bridge which already has local FDB entries pointing to the bridge device itself, we would like to offload those, so allow the "dev" argument to be equal to the bridge too. The code already does what we need in that case. Signed-off-by: Vladimir Oltean --- net/bridge/br_fdb.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c index 0296d737a519..5a92bec02bbc 100644 --- a/net/bridge/br_fdb.c +++ b/net/bridge/br_fdb.c @@ -754,7 +754,8 @@ int br_fdb_replay(const struct net_device *br_dev, const struct net_device *dev, unsigned long action; int err = 0; - if (!netif_is_bridge_master(br_dev) || !netif_is_bridge_port(dev)) + if (!netif_is_bridge_master(br_dev) || + (!netif_is_bridge_port(dev) && !netif_is_bridge_master(dev))) return -EINVAL; br = netdev_priv(br_dev); From patchwork Sun Jun 27 14:10:01 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 467941 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C238FC49EAB for ; Sun, 27 Jun 2021 14:10:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9901061C35 for ; Sun, 27 Jun 2021 14:10:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231215AbhF0OMy (ORCPT ); Sun, 27 Jun 2021 10:12:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55950 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231181AbhF0OMu (ORCPT ); Sun, 27 Jun 2021 10:12:50 -0400 Received: from mail-ej1-x62c.google.com (mail-ej1-x62c.google.com [IPv6:2a00:1450:4864:20::62c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5A113C061574 for ; Sun, 27 Jun 2021 07:10:25 -0700 (PDT) Received: by mail-ej1-x62c.google.com with SMTP id hc16so24303705ejc.12 for ; Sun, 27 Jun 2021 07:10:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=OmnkHE63ICnW7mGQCaJkMYpyhoywe6TU1LHujNyikC0=; b=bz8Kpr+MGZyC1/3rlJUN8So35mD4K+nfWNRT6O2LtXLc8yDGtRZ4w512/UItmtoIvO MA9VAhEwsOqYX/Tf9L3daS5XFznjQ8yGz/xAmMoJW5qNFe6RUGoT4XnnOWfZt3ombtta qorm7xQC7dRhUpKaO+gioZ01mo/WfKAEwL4MIKmeUcMoa0EAwFOAerey+kDMhFiuK1nh oRDMyhhyg+jnP/LsbtcPWRllLs+Db9xZBEMA3rftX6RPCDo/cUuKgSto4gyvr7qP95Ru CWr+TchgG4AMzgZr1/UrV7efAdQq7iBWu/BLKlvlDftGLgSKXqlQcICI9ecELKnvUGZC lMWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=OmnkHE63ICnW7mGQCaJkMYpyhoywe6TU1LHujNyikC0=; b=sC0cPGKnwn5DFb1HM2FZVwbQ/Rv4XN8uZTWRCqvomkFG4BeXrrZ/Z3RKz/R8yz8kph 0l9Ecuu2Rswkm9g8Gv6fRAbN9yk0xKjtdKmIdLLGuqK05QdR5RO2TAiI+xWgXJ+gwiJi Md0Q/hzooVuE4vwUZIpw41qdPWBuOHCiv25S3N2bRe5+dssxLejUY20y6VuP4SoaT5EV zacsa3kpY2ax5Rc++WdpbI5pQpv7gB771EOiDCXXrqoOU1Q8N45LXRs+K4ZCFd/z0TaX e1HkFqxgLaZWW5yjxA2lZc60gxlUdPD5tAdhNwvEteKdLv2HBk1PsZzV2NtwRDEbBca1 ki7A== X-Gm-Message-State: AOAM533emO/uhsvPLt+r/Iw/FgD8LmBzVvwDWE6Y+ci/XBs6nx6FmMPA j7lt5iehwclNK5JNRzzdqw8MQhDgdmg= X-Google-Smtp-Source: ABdhPJxjJsLW478Rl3h109tdIX2Jq4tCuV14bfTolNgliN/7uzrLpj7HdpAqpnPmNvThoiee6mGwJA== X-Received: by 2002:a17:906:c1d2:: with SMTP id bw18mr20027323ejb.123.1624803023887; Sun, 27 Jun 2021 07:10:23 -0700 (PDT) Received: from localhost.localdomain ([188.26.224.68]) by smtp.gmail.com with ESMTPSA id s4sm7857389edu.49.2021.06.27.07.10.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Jun 2021 07:10:23 -0700 (PDT) From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Florian Fainelli , Vivien Didelot , Jiri Pirko , Ido Schimmel , Tobias Waldekranz , Roopa Prabhu , Nikolay Aleksandrov , Vladimir Oltean Subject: [RFC PATCH v3 net-next 03/15] net: bridge: allow br_mdb_replay to be called for the bridge device Date: Sun, 27 Jun 2021 17:10:01 +0300 Message-Id: <20210627141013.1273942-4-olteanv@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210627141013.1273942-1-olteanv@gmail.com> References: <20210627141013.1273942-1-olteanv@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Vladimir Oltean Signed-off-by: Vladimir Oltean --- net/bridge/br_mdb.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/bridge/br_mdb.c b/net/bridge/br_mdb.c index 17a720b4473f..fda61a90cfe5 100644 --- a/net/bridge/br_mdb.c +++ b/net/bridge/br_mdb.c @@ -617,7 +617,8 @@ int br_mdb_replay(struct net_device *br_dev, struct net_device *dev, ASSERT_RTNL(); - if (!netif_is_bridge_master(br_dev) || !netif_is_bridge_port(dev)) + if (!netif_is_bridge_master(br_dev) || + (!netif_is_bridge_port(dev) && !netif_is_bridge_master(dev))) return -EINVAL; br = netdev_priv(br_dev); From patchwork Sun Jun 27 14:10:03 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 467940 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7AD10C49EA6 for ; Sun, 27 Jun 2021 14:10:37 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5F95461C20 for ; Sun, 27 Jun 2021 14:10:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231217AbhF0ONA (ORCPT ); Sun, 27 Jun 2021 10:13:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55966 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231206AbhF0OMx (ORCPT ); Sun, 27 Jun 2021 10:12:53 -0400 Received: from mail-ej1-x630.google.com (mail-ej1-x630.google.com [IPv6:2a00:1450:4864:20::630]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C330FC061574 for ; Sun, 27 Jun 2021 07:10:27 -0700 (PDT) Received: by mail-ej1-x630.google.com with SMTP id yy20so16669940ejb.6 for ; Sun, 27 Jun 2021 07:10:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=834iGMR1WRWnq6buci5F593+4lHqaxa+HUHZzFv31Jw=; b=qBA1gjCuKDK/3nw8JKYz9g2kY+H5KVIQ7QMJ+aRAtFUbmv6LvFAwhkrJaA8F3fqK44 DXNMRFAwQFVN6MBfNjCVro4ib2QNSuXPhzxT1M4XqKbzdYZQUjCRsNG5I6C+MaGAKIja JbvQLKusG2wLSzrZcgc/tCD3Tw/Z+Jzi4o83Eaq3lHFgiizVRUUERjWmBJ19KTGk0/1d yenFksGHUCbcGAwxKmo8Mt5ctQdyvSi1x3J0F4XBCo54lBKrq0QTNjhXIVzn9r7/jqOY ybdVZoMzdhCeAiJ+2ahPBf21RCi8VTjbx1r3XpEWtva29pEpAbahRKBNCQj/UqFNoV2C pvDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=834iGMR1WRWnq6buci5F593+4lHqaxa+HUHZzFv31Jw=; b=sRWqB27jRrHMQAmM7NGv7XAWLd+NDoi0opKcnYL52T4hA/jUAYXnfOWyhcDzaNB24O k6pULljIOD+ZYqGyezeeBCoovLVPVEMnJcAyNDal13Vva7FBOp+D3TjoqjQhFZm2yJDw c9LmCK6G/cdATxu4cLFt1zDXzbOSP6V2LEn3pMw9yxveXnHjgh8rBqF2ckIZc68ndqDV v82IwY8h9RT49IHpm3VuAtjJ29frmNp8wtK9hDZwt4/PZskfTGY8qgTRCtU/tT93LKH8 A14mM4wpqwhXS6tr/8Oj89/MqKnFt9xcNWWUnJWjeZ6926WI+uzaGypp76jWjt3Qa93h tVYQ== X-Gm-Message-State: AOAM5317AytxD0LpmNxhvfHat29/Vsa5u5EHT8YEKGm5/dAS03ZxL67s eY6/SOeFolgx0lA8/b87KPOobbU47h0= X-Google-Smtp-Source: ABdhPJztNzCuaN5AI7z8UU5SqGM/Gw5v01mnvfEJeTjYsdN2UytbSYgllRSuNBOa9N0kUXmYMLj85Q== X-Received: by 2002:a17:906:cc9b:: with SMTP id oq27mr20120279ejb.301.1624803025911; Sun, 27 Jun 2021 07:10:25 -0700 (PDT) Received: from localhost.localdomain ([188.26.224.68]) by smtp.gmail.com with ESMTPSA id s4sm7857389edu.49.2021.06.27.07.10.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Jun 2021 07:10:25 -0700 (PDT) From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Florian Fainelli , Vivien Didelot , Jiri Pirko , Ido Schimmel , Tobias Waldekranz , Roopa Prabhu , Nikolay Aleksandrov , Vladimir Oltean Subject: [RFC PATCH v3 net-next 05/15] net: dsa: introduce dsa_is_upstream_port and dsa_switch_is_upstream_of Date: Sun, 27 Jun 2021 17:10:03 +0300 Message-Id: <20210627141013.1273942-6-olteanv@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210627141013.1273942-1-olteanv@gmail.com> References: <20210627141013.1273942-1-olteanv@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Vladimir Oltean In preparation for the new cross-chip notifiers for host addresses, let's introduce some more topology helpers which we are going to use to discern switches that are in our path towards the dedicated CPU port from switches that aren't. Signed-off-by: Vladimir Oltean --- include/net/dsa.h | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/include/net/dsa.h b/include/net/dsa.h index ea47783d5695..5f632cfd33c7 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -491,6 +491,32 @@ static inline unsigned int dsa_upstream_port(struct dsa_switch *ds, int port) return dsa_towards_port(ds, cpu_dp->ds->index, cpu_dp->index); } +/* Return true if this is the local port used to reach the CPU port */ +static inline bool dsa_is_upstream_port(struct dsa_switch *ds, int port) +{ + if (dsa_is_unused_port(ds, port)) + return false; + + return port == dsa_upstream_port(ds, port); +} + +/* Return true if @upstream_ds is an upstream switch of @downstream_ds, meaning + * that the routing port from @downstream_ds to @upstream_ds is also the port + * which @downstream_ds uses to reach its dedicated CPU. + */ +static inline bool dsa_switch_is_upstream_of(struct dsa_switch *upstream_ds, + struct dsa_switch *downstream_ds) +{ + int routing_port; + + if (upstream_ds == downstream_ds) + return true; + + routing_port = dsa_routing_port(downstream_ds, upstream_ds->index); + + return dsa_is_upstream_port(downstream_ds, routing_port); +} + static inline bool dsa_port_is_vlan_filtering(const struct dsa_port *dp) { const struct dsa_switch *ds = dp->ds; From patchwork Sun Jun 27 14:10:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 467939 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3A9F0C48BC2 for ; Sun, 27 Jun 2021 14:10:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2794361C20 for ; Sun, 27 Jun 2021 14:10:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230363AbhF0ONC (ORCPT ); Sun, 27 Jun 2021 10:13:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55980 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231210AbhF0OMy (ORCPT ); Sun, 27 Jun 2021 10:12:54 -0400 Received: from mail-ed1-x52a.google.com (mail-ed1-x52a.google.com [IPv6:2a00:1450:4864:20::52a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B4352C061767 for ; Sun, 27 Jun 2021 07:10:29 -0700 (PDT) Received: by mail-ed1-x52a.google.com with SMTP id i5so21273049eds.1 for ; Sun, 27 Jun 2021 07:10:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+cGJ9JAiA7Sl2Lwm6rK5BJXR6mXB4qxtpp8wj3bA/Kk=; b=TgLiuSZOl10Bo0B/9cBH8iYsupBsF5ozCH/q5e9BEM2+0sOpKWmtk61Npsaon/S+rc THCzOaPIykcqhUeGcDvFZvAfJjfYASHSJPUonBxFCh7n79Km6/polgexTzmBGyvFwGz3 VqyvCLLpELgN0TAcb97DN+POxlXzfsOu8wRNdryjVG7TiHC9dfExRYwJoffeSl7t37tE gwx9k86R1lqAmVHYQz3WBvu/sItjTHBbApfAsairpQvQ7pq3/q6bPgCtO0jGyaEBEnb2 yZjyO0U2nz0ooOFox8YfN0+tnbmWZDOOGK5kLExUeoEFmcNTrnyZccsOWw6uqBbkljhm UNRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+cGJ9JAiA7Sl2Lwm6rK5BJXR6mXB4qxtpp8wj3bA/Kk=; b=bGRGXDHM6w+wUYDO7HOo+/up+Bk+YvcbsP+aHrm0qmEyWOarfB1N3rA43eoTSCztsK SmWYMwdjs1VJQQVStuGgYWvbXTqZbpsppK2vTYsfWFgvaW3FtNzBag1uJhPgo5pP2zmC fdy3/g01WhHvfnEbl77wouohs3RoTKtWFIFLBzmPNiPe7SzkHGdl0OuuKwhHl5DJ8Mob DA7O5COfGVPwAGVMKjtgk+TknSNzQMXxvCFodetiibd/MfuXCT4iZygX/fJygrW5AOgy Ky7QnxQab0skfwbiknWH+wKBJxHlJd3Lhnd2YCGLbHuX5fBquB1idc8a9GnrYVeuly5e Nadg== X-Gm-Message-State: AOAM531t11pnpveEyWvcK/PwIZXznyE89oWyI4rUCQrSlj1HjDpDE2X2 UvyCvdjdz2HA+A612wPqDOR+m+10pjs= X-Google-Smtp-Source: ABdhPJwncvAbzr1uyO0Rd+dsgtmVHeqfTlwjnJOZgMf+vc0fNoSLg/y0m9weOIIoD0CrlyAut7f/Og== X-Received: by 2002:a05:6402:896:: with SMTP id e22mr27193677edy.201.1624803028019; Sun, 27 Jun 2021 07:10:28 -0700 (PDT) Received: from localhost.localdomain ([188.26.224.68]) by smtp.gmail.com with ESMTPSA id s4sm7857389edu.49.2021.06.27.07.10.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Jun 2021 07:10:27 -0700 (PDT) From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Florian Fainelli , Vivien Didelot , Jiri Pirko , Ido Schimmel , Tobias Waldekranz , Roopa Prabhu , Nikolay Aleksandrov , Vladimir Oltean Subject: [RFC PATCH v3 net-next 07/15] net: dsa: reference count the MDB entries at the cross-chip notifier level Date: Sun, 27 Jun 2021 17:10:05 +0300 Message-Id: <20210627141013.1273942-8-olteanv@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210627141013.1273942-1-olteanv@gmail.com> References: <20210627141013.1273942-1-olteanv@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Vladimir Oltean Ever since the cross-chip notifiers were introduced, the design was meant to be simplistic and just get the job done without worrying too much about dangling resources left behind. For example, somebody installs an MDB entry on sw0p0 in this daisy chain topology. It gets installed using ds->ops->port_mdb_add() on sw0p0, sw1p4 and sw2p4. | sw0p0 sw0p1 sw0p2 sw0p3 sw0p4 [ user ] [ user ] [ user ] [ dsa ] [ cpu ] [ x ] [ ] [ ] [ ] [ ] | +---------+ | sw1p0 sw1p1 sw1p2 sw1p3 sw1p4 [ user ] [ user ] [ user ] [ dsa ] [ dsa ] [ ] [ ] [ ] [ ] [ x ] | +---------+ | sw2p0 sw2p1 sw2p2 sw2p3 sw2p4 [ user ] [ user ] [ user ] [ user ] [ dsa ] [ ] [ ] [ ] [ ] [ x ] Then the same person deletes that MDB entry. The cross-chip notifier for deletion only matches sw0p0: | sw0p0 sw0p1 sw0p2 sw0p3 sw0p4 [ user ] [ user ] [ user ] [ dsa ] [ cpu ] [ x ] [ ] [ ] [ ] [ ] | +---------+ | sw1p0 sw1p1 sw1p2 sw1p3 sw1p4 [ user ] [ user ] [ user ] [ dsa ] [ dsa ] [ ] [ ] [ ] [ ] [ ] | +---------+ | sw2p0 sw2p1 sw2p2 sw2p3 sw2p4 [ user ] [ user ] [ user ] [ user ] [ dsa ] [ ] [ ] [ ] [ ] [ ] Why? Because the DSA links are 'trunk' ports, if we just go ahead and delete the MDB from sw1p4 and sw2p4 directly, we might delete those multicast entries when they are still needed. Just consider the fact that somebody does: - add a multicast MAC address towards sw0p0 [ via the cross-chip notifiers it gets installed on the DSA links too ] - add the same multicast MAC address towards sw0p1 (another port of that same switch) - delete the same multicast MAC address from sw0p0. At this point, if we deleted the MAC address from the DSA links, it would be flooded, even though there is still an entry on switch 0 which needs it not to. So that is why deletions only match the targeted source port and nothing on DSA links. Of course, dangling resources means that the hardware tables will eventually run out given enough additions/removals, but hey, at least it's simple. But there is a bigger concern which needs to be addressed, and that is our support for SWITCHDEV_OBJ_ID_HOST_MDB. DSA simply translates such an object into a dsa_port_host_mdb_add() which ends up as ds->ops->port_mdb_add() on the upstream port, and a similar thing happens on deletion: dsa_port_host_mdb_del() will trigger ds->ops->port_mdb_del() on the upstream port. When there are 2 VLAN-unaware bridges spanning the same switch (which is a use case DSA proudly supports), each bridge will install its own SWITCHDEV_OBJ_ID_HOST_MDB entries. But upon deletion, DSA goes ahead and emits a DSA_NOTIFIER_MDB_DEL for dp->cpu_dp, which is shared between the user ports enslaved to br0 and the user ports enslaved to br1. Not good. The host-trapped multicast addresses installed by br1 will be deleted when any state changes in br0 (IGMP timers expire, or ports leave, etc). To avoid this, we could of course go the route of the zero-sum game and delete the DSA_NOTIFIER_MDB_DEL call for dp->cpu_dp. But the better design is to just admit that on shared ports like DSA links and CPU ports, we should be reference counting calls, even if this consumes some dynamic memory which DSA has traditionally avoided. On the flip side, the hardware tables of switches are limited in size, so it would be good if the OS managed them properly instead of having them eventually overflow. To address the memory usage concern, we only apply the refcounting of MDB entries on ports that are really shared (CPU ports and DSA links) and not on user ports. In a typical single-switch setup, this means only the CPU port (and the host MDB entries are not that many, really). The name of the newly introduced data structures (dsa_mac_addr) is chosen in such a way that will be reusable for host FDB entries (next patch). With this change, we can finally have the same matching logic for the MDB additions and deletions, as well as for their host-trapped variants. Signed-off-by: Vladimir Oltean --- include/net/dsa.h | 12 ++++++ net/dsa/dsa2.c | 8 ++++ net/dsa/switch.c | 104 ++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 115 insertions(+), 9 deletions(-) diff --git a/include/net/dsa.h b/include/net/dsa.h index 5f632cfd33c7..2c50546f9667 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -285,6 +285,11 @@ struct dsa_port { */ const struct dsa_netdevice_ops *netdev_ops; + /* List of MAC addresses that must be forwarded on this port. + * These are only valid on CPU ports and DSA links. + */ + struct list_head mdbs; + bool setup; }; @@ -299,6 +304,13 @@ struct dsa_link { struct list_head list; }; +struct dsa_mac_addr { + unsigned char addr[ETH_ALEN]; + u16 vid; + refcount_t refcount; + struct list_head list; +}; + struct dsa_switch { bool setup; diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index 9000a8c84baf..2035d132682f 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -348,6 +348,8 @@ static int dsa_port_setup(struct dsa_port *dp) if (dp->setup) return 0; + INIT_LIST_HEAD(&dp->mdbs); + switch (dp->type) { case DSA_PORT_TYPE_UNUSED: dsa_port_disable(dp); @@ -443,6 +445,7 @@ static int dsa_port_devlink_setup(struct dsa_port *dp) static void dsa_port_teardown(struct dsa_port *dp) { struct devlink_port *dlp = &dp->devlink_port; + struct dsa_mac_addr *a, *tmp; if (!dp->setup) return; @@ -468,6 +471,11 @@ static void dsa_port_teardown(struct dsa_port *dp) break; } + list_for_each_entry_safe(a, tmp, &dp->mdbs, list) { + list_del(&a->list); + kfree(a); + } + dp->setup = false; } diff --git a/net/dsa/switch.c b/net/dsa/switch.c index 7c5fe60a3763..10602a6da5e3 100644 --- a/net/dsa/switch.c +++ b/net/dsa/switch.c @@ -178,6 +178,84 @@ static bool dsa_switch_host_address_match(struct dsa_switch *ds, int port, return false; } +static struct dsa_mac_addr *dsa_mac_addr_find(struct list_head *addr_list, + const unsigned char *addr, + u16 vid) +{ + struct dsa_mac_addr *a; + + list_for_each_entry(a, addr_list, list) + if (ether_addr_equal(a->addr, addr) && a->vid == vid) + return a; + + return NULL; +} + +static int dsa_switch_do_mdb_add(struct dsa_switch *ds, int port, + const struct switchdev_obj_port_mdb *mdb) +{ + struct dsa_port *dp = dsa_to_port(ds, port); + struct dsa_mac_addr *a; + int err; + + /* No need to bother with refcounting for user ports */ + if (!(dsa_port_is_cpu(dp) || dsa_port_is_dsa(dp))) + return ds->ops->port_mdb_add(ds, port, mdb); + + a = dsa_mac_addr_find(&dp->mdbs, mdb->addr, mdb->vid); + if (a) { + refcount_inc(&a->refcount); + return 0; + } + + a = kzalloc(sizeof(*a), GFP_KERNEL); + if (!a) + return -ENOMEM; + + err = ds->ops->port_mdb_add(ds, port, mdb); + if (err) { + kfree(a); + return err; + } + + ether_addr_copy(a->addr, mdb->addr); + a->vid = mdb->vid; + refcount_set(&a->refcount, 1); + list_add_tail(&a->list, &dp->mdbs); + + return 0; +} + +static int dsa_switch_do_mdb_del(struct dsa_switch *ds, int port, + const struct switchdev_obj_port_mdb *mdb) +{ + struct dsa_port *dp = dsa_to_port(ds, port); + struct dsa_mac_addr *a; + int err; + + /* No need to bother with refcounting for user ports */ + if (!(dsa_port_is_cpu(dp) || dsa_port_is_dsa(dp))) + return ds->ops->port_mdb_del(ds, port, mdb); + + a = dsa_mac_addr_find(&dp->mdbs, mdb->addr, mdb->vid); + if (!a) + return -ENOENT; + + if (!refcount_dec_and_test(&a->refcount)) + return 0; + + err = ds->ops->port_mdb_del(ds, port, mdb); + if (err) { + refcount_inc(&a->refcount); + return err; + } + + list_del(&a->list); + kfree(a); + + return 0; +} + static int dsa_switch_fdb_add(struct dsa_switch *ds, struct dsa_notifier_fdb_info *info) { @@ -267,19 +345,18 @@ static int dsa_switch_mdb_add(struct dsa_switch *ds, if (!ds->ops->port_mdb_add) return -EOPNOTSUPP; - return ds->ops->port_mdb_add(ds, port, info->mdb); + return dsa_switch_do_mdb_add(ds, port, info->mdb); } static int dsa_switch_mdb_del(struct dsa_switch *ds, struct dsa_notifier_mdb_info *info) { + int port = dsa_towards_port(ds, info->sw_index, info->port); + if (!ds->ops->port_mdb_del) return -EOPNOTSUPP; - if (ds->index == info->sw_index) - return ds->ops->port_mdb_del(ds, info->port, info->mdb); - - return 0; + return dsa_switch_do_mdb_del(ds, port, info->mdb); } static int dsa_switch_host_mdb_add(struct dsa_switch *ds, @@ -294,7 +371,7 @@ static int dsa_switch_host_mdb_add(struct dsa_switch *ds, for (port = 0; port < ds->num_ports; port++) { if (dsa_switch_host_address_match(ds, port, info->sw_index, info->port)) { - err = ds->ops->port_mdb_add(ds, port, info->mdb); + err = dsa_switch_do_mdb_add(ds, port, info->mdb); if (err) break; } @@ -306,13 +383,22 @@ static int dsa_switch_host_mdb_add(struct dsa_switch *ds, static int dsa_switch_host_mdb_del(struct dsa_switch *ds, struct dsa_notifier_mdb_info *info) { + int err = 0; + int port; + if (!ds->ops->port_mdb_del) return -EOPNOTSUPP; - if (ds->index == info->sw_index) - return ds->ops->port_mdb_del(ds, info->port, info->mdb); + for (port = 0; port < ds->num_ports; port++) { + if (dsa_switch_host_address_match(ds, port, info->sw_index, + info->port)) { + err = dsa_switch_do_mdb_del(ds, port, info->mdb); + if (err) + break; + } + } - return 0; + return err; } static bool dsa_switch_vlan_match(struct dsa_switch *ds, int port, From patchwork Sun Jun 27 14:10:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 467938 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0125FC49EAB for ; Sun, 27 Jun 2021 14:10:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DEC9E61C20 for ; Sun, 27 Jun 2021 14:10:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231313AbhF0ONE (ORCPT ); Sun, 27 Jun 2021 10:13:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56018 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231262AbhF0OM6 (ORCPT ); Sun, 27 Jun 2021 10:12:58 -0400 Received: from mail-ed1-x52e.google.com (mail-ed1-x52e.google.com [IPv6:2a00:1450:4864:20::52e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9B2B4C0617AE for ; Sun, 27 Jun 2021 07:10:34 -0700 (PDT) Received: by mail-ed1-x52e.google.com with SMTP id r7so21173609edv.12 for ; Sun, 27 Jun 2021 07:10:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3CRcEaN0Bg+xQgzR5B59tpxXfhAiXab1BE8fXxf/L7k=; b=eardDC0e6zliFN/Rs89L0ruYIPL/eHgpUOCM4SqWAca3nYrsBQtMY1WuqOVev+BRg5 RFiNkygg7dxquBk6ubHIS26xib6bnfHKHuCkJW4OrsX151QiXnvnPFNDPjrzRsJPIDCV sRrf3uSIf2g1Z6JLcI7s4mO00mdwouZoDx/h9UiX91rD+4PzyqnGEtszHf/F9iNpydo0 eVJskv5kG/4hdPArC1SBC5JLdv0XOXplYsE05L6gjk/iPbQ8od4ZZSsTqh4dlujNBz+v DdU0cH64gSGcStCuRjYiLmzN+6hW4apVWOrGk+7wqA91OO0ZlInwKwk3qsO3s51QLn6t d+lA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3CRcEaN0Bg+xQgzR5B59tpxXfhAiXab1BE8fXxf/L7k=; b=tEbC69stVx3GNfJVFx4aUiIclnlCWtJeLWYveGOoR3vWPbX4ODSGwlR6aoFMoqag4N /E5mNBrnbqcQKosWXJDtnWK4EERXmQvpb89KscvFLyDqvHgdelKdLMXRiKM98bRr3XeX MwhgIo4synwXsqFZe5KXYYTwo+BmYsQe6OMhtRjVaVP620mJ5+GEgQSwCgZ3QxiPJSaD 6eDILq9NNhilsyHeY1IFzM7z7zffQGKhP7az751mZnfsIKA9pJaK30C0BWeWqFzCOdoi K5++tMpW3S1yE5pZVuG8rp5PAWGk8OOiRB/kiqizbh3dGp+I8uNw84RANYI7cL0HniAD m/0Q== X-Gm-Message-State: AOAM531iupsCI/6Np7GRmu5MjnwZEFQgUCNbXqHW/vH7HY/0yjvMLXGY pHVy6huPH49LXrEWQgoTbUl2WJwd0xc= X-Google-Smtp-Source: ABdhPJxNs44TQt7cfd37bYUZofm/iijCIRAaR1qMFwhavisz/uN/kH+mkluaigxm23Z2KPhkb5tlvw== X-Received: by 2002:a05:6402:30a8:: with SMTP id df8mr27301507edb.7.1624803032068; Sun, 27 Jun 2021 07:10:32 -0700 (PDT) Received: from localhost.localdomain ([188.26.224.68]) by smtp.gmail.com with ESMTPSA id s4sm7857389edu.49.2021.06.27.07.10.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Jun 2021 07:10:31 -0700 (PDT) From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Florian Fainelli , Vivien Didelot , Jiri Pirko , Ido Schimmel , Tobias Waldekranz , Roopa Prabhu , Nikolay Aleksandrov , Vladimir Oltean Subject: [RFC PATCH v3 net-next 10/15] net: dsa: install the host MDB and FDB entries in the master's RX filter Date: Sun, 27 Jun 2021 17:10:08 +0300 Message-Id: <20210627141013.1273942-11-olteanv@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210627141013.1273942-1-olteanv@gmail.com> References: <20210627141013.1273942-1-olteanv@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Vladimir Oltean If the DSA master implements strict address filtering, then the unicast and multicast addresses kept by the DSA CPU ports should be synchronized with the address lists of the DSA master. Note that we want the synchronization of the master's address lists even if the DSA switch doesn't support unicast/multicast database operations, on the premises that the packets will be flooded to the CPU in that case, and we should still instruct the master to receive them. Signed-off-by: Vladimir Oltean --- net/dsa/port.c | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/net/dsa/port.c b/net/dsa/port.c index 1b80e0fbdfaa..255172a8599a 100644 --- a/net/dsa/port.c +++ b/net/dsa/port.c @@ -655,8 +655,14 @@ int dsa_port_host_fdb_add(struct dsa_port *dp, const unsigned char *addr, .addr = addr, .vid = vid, }; + struct dsa_port *cpu_dp = dp->cpu_dp; + int err; + + err = dsa_port_notify(dp, DSA_NOTIFIER_HOST_FDB_ADD, &info); + if (err) + return err; - return dsa_port_notify(dp, DSA_NOTIFIER_HOST_FDB_ADD, &info); + return dev_uc_add(cpu_dp->master, addr); } int dsa_port_host_fdb_del(struct dsa_port *dp, const unsigned char *addr, @@ -668,8 +674,14 @@ int dsa_port_host_fdb_del(struct dsa_port *dp, const unsigned char *addr, .addr = addr, .vid = vid, }; + struct dsa_port *cpu_dp = dp->cpu_dp; + int err; + + err = dsa_port_notify(dp, DSA_NOTIFIER_HOST_FDB_DEL, &info); + if (err) + return err; - return dsa_port_notify(dp, DSA_NOTIFIER_HOST_FDB_DEL, &info); + return dev_uc_del(cpu_dp->master, addr); } int dsa_port_fdb_dump(struct dsa_port *dp, dsa_fdb_dump_cb_t *cb, void *data) @@ -715,8 +727,14 @@ int dsa_port_host_mdb_add(const struct dsa_port *dp, .port = dp->index, .mdb = mdb, }; + struct dsa_port *cpu_dp = dp->cpu_dp; + int err; + + err = dsa_port_notify(dp, DSA_NOTIFIER_HOST_MDB_ADD, &info); + if (err) + return err; - return dsa_port_notify(dp, DSA_NOTIFIER_HOST_MDB_ADD, &info); + return dev_mc_add(cpu_dp->master, mdb->addr); } int dsa_port_host_mdb_del(const struct dsa_port *dp, @@ -727,8 +745,14 @@ int dsa_port_host_mdb_del(const struct dsa_port *dp, .port = dp->index, .mdb = mdb, }; + struct dsa_port *cpu_dp = dp->cpu_dp; + int err; + + err = dsa_port_notify(dp, DSA_NOTIFIER_HOST_MDB_DEL, &info); + if (err) + return err; - return dsa_port_notify(dp, DSA_NOTIFIER_HOST_MDB_DEL, &info); + return dev_mc_del(cpu_dp->master, mdb->addr); } int dsa_port_vlan_add(struct dsa_port *dp, From patchwork Sun Jun 27 14:10:09 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 467937 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 67650C48BC2 for ; Sun, 27 Jun 2021 14:10:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4EE68619B0 for ; Sun, 27 Jun 2021 14:10:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231357AbhF0ONI (ORCPT ); Sun, 27 Jun 2021 10:13:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56026 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231221AbhF0ONA (ORCPT ); Sun, 27 Jun 2021 10:13:00 -0400 Received: from mail-ed1-x533.google.com (mail-ed1-x533.google.com [IPv6:2a00:1450:4864:20::533]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6838FC061766 for ; Sun, 27 Jun 2021 07:10:35 -0700 (PDT) Received: by mail-ed1-x533.google.com with SMTP id r7so21173637edv.12 for ; Sun, 27 Jun 2021 07:10:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=cOcrEyVseqjoteqwx/PlBKbx2ck6ms2QqjNCJLmGW94=; b=l3MadUDTBvY9SxLpVvnPZ8uXYruwzwaheEIlvPu0r/+zHemFfbCB5XDLLkhk+OFqsk VvfrIsuEk4ayMD1KQ4uck6QxJTcyHM2lcPSCyNCMvwjdIefhTsMf8vrE1ue8kR0coZRH d2+SYwqJjE+fPzUpbxIHrLJNyYBsyaqRAwnt2S76ri6k+67SJFLgeFQogK/696GbA5Ka WzEgaSrBViKIB+gcR0AS+KVpYoC8jIHIPW429VjzA56GBrTx6i7QLdQdEHekVTp6VFO2 gx8JqcBw1Uxtia8XtNvIL0JVZjqacJZXEssgIwHZeE1ePAPSsILJMnmDbRiQ4jD8XMXP pP/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cOcrEyVseqjoteqwx/PlBKbx2ck6ms2QqjNCJLmGW94=; b=O7mZXZG8owld0aG6Vmh6LYOTbdSmqTtom5Z4D4UzQg3tc2V/akdcU0iVaEbSeiYPLu X7NcNMKvGltv6IdKPMLMfsC3cWgt9OQu3hIj7g9jj4UC855ZC/xxZ6BChHA72S9futXm XPFxPpsiJnTJO1ogR3fys5ZMk6O+QSXs4vZAOwaA6UvyW1Pcrcc+TufDRPuPrBLTI2vH uWF+vOIgOKPjLJUM5+qyLbmF+M+Gol/mQxUmBIfu6emy6mmifRALviIqiGvloHNU46mW WFbtG4jJi7FL412qcbXirwv6sXKXvV23YizwEAnsezxSJUfhtCFkh0SS86NIR2i3AdBv 9DTQ== X-Gm-Message-State: AOAM531EmFUwk0XNF0O/XlknPSguHkxDpvt3wNkjlyyBNbsMv7FAOUaQ wh0UZ0QUaIfv81X3kxCfRSfHoOgpMfM= X-Google-Smtp-Source: ABdhPJwglX3r1WBgwoH6cnnKq5Rb/eyk3NAN/GPpq2XJByL0Z76esp7jtZXBmZ8nxg9WXSPTmQJrtA== X-Received: by 2002:aa7:de90:: with SMTP id j16mr27346327edv.385.1624803033912; Sun, 27 Jun 2021 07:10:33 -0700 (PDT) Received: from localhost.localdomain ([188.26.224.68]) by smtp.gmail.com with ESMTPSA id s4sm7857389edu.49.2021.06.27.07.10.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Jun 2021 07:10:33 -0700 (PDT) From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Florian Fainelli , Vivien Didelot , Jiri Pirko , Ido Schimmel , Tobias Waldekranz , Roopa Prabhu , Nikolay Aleksandrov , Vladimir Oltean Subject: [RFC PATCH v3 net-next 11/15] net: dsa: sync static FDB entries on foreign interfaces to hardware Date: Sun, 27 Jun 2021 17:10:09 +0300 Message-Id: <20210627141013.1273942-12-olteanv@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210627141013.1273942-1-olteanv@gmail.com> References: <20210627141013.1273942-1-olteanv@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Tobias Waldekranz Reuse the "assisted_learning_on_cpu_port" functionality to always add entries for user-configured entries on foreign interfaces, even if assisted_learning_on_cpu_port is not enabled. E.g. in this situation: br0 / \ swp0 dummy0 $ bridge fdb add 02:00:de:ad:00:01 dev dummy0 vlan 1 master static Results in DSA adding an entry in the hardware FDB, pointing this address towards the CPU port. The same is true for entries added to the bridge itself, e.g: $ bridge fdb add 02:00:de:ad:00:01 dev br0 vlan 1 self local Signed-off-by: Tobias Waldekranz Signed-off-by: Vladimir Oltean --- net/dsa/slave.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/net/dsa/slave.c b/net/dsa/slave.c index ac7f4f200ab1..ea9a7c1ce83e 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -2403,9 +2403,12 @@ static int dsa_slave_switchdev_event(struct notifier_block *unused, dp = dsa_slave_to_port(dev); } else { - /* Snoop addresses learnt on foreign interfaces - * bridged with us, for switches that don't - * automatically learn SA from CPU-injected traffic + /* Snoop addresses added to foreign interfaces + * bridged with us, or the bridge + * itself. Dynamically learned addresses can + * also be added for switches that don't + * automatically learn SA from CPU-injected + * traffic. */ struct net_device *br_dev; struct dsa_slave_priv *p; @@ -2424,7 +2427,8 @@ static int dsa_slave_switchdev_event(struct notifier_block *unused, dp = p->dp; host_addr = true; - if (!dp->ds->assisted_learning_on_cpu_port) + if (!fdb_info->added_by_user && + !dp->ds->assisted_learning_on_cpu_port) return NOTIFY_DONE; /* When the bridge learns an address on an offloaded From patchwork Sun Jun 27 14:10:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 467936 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 69DD3C49EA6 for ; Sun, 27 Jun 2021 14:10:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 539D3619B0 for ; Sun, 27 Jun 2021 14:10:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231372AbhF0ONK (ORCPT ); Sun, 27 Jun 2021 10:13:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56012 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231210AbhF0ONC (ORCPT ); Sun, 27 Jun 2021 10:13:02 -0400 Received: from mail-ed1-x531.google.com (mail-ed1-x531.google.com [IPv6:2a00:1450:4864:20::531]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 80D06C061574 for ; Sun, 27 Jun 2021 07:10:37 -0700 (PDT) Received: by mail-ed1-x531.google.com with SMTP id q14so21221977eds.5 for ; Sun, 27 Jun 2021 07:10:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=aGonoc67Ai6XKeGNBN5cd512cH7Bt87vHd2+sbc3nEM=; b=Ef8eR7iC719Q5rispk3bmTL0NQdBidwmqR0kYLmSjrjyIv5E/Ml/hgPo+bGOFR7j14 7xfcDj6YW1K8uU0RwNgjKhVXpDmvr7GK2sfZvaaSJ6oZf2DHKvmhY3NvvKwFqZV9wfzB amkuxPPPuUBpUXnXjVMCkjujp4pXE7LEEL60iyFeH+RkxHJ6h9+2WAlzvD4VCAcQ5o8B GmzKTWUguhkx/hdaTqtwv+h4wenA20TqDEy3NwBUVzjtHstM2yWsm1CfqizJp/tvJ2XZ tIOl71URqi7IogtXndomAPJdo/15dg00TpRPgmUu4fWMlw/OjG1zne2xT+kN9v98gcho 2tww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=aGonoc67Ai6XKeGNBN5cd512cH7Bt87vHd2+sbc3nEM=; b=txW/0bbndlpkPzCaQezgN3veRWFYW2jAwn6i5cFKBduVjEKf46Gts2jCvLPnjfIPxV LmdESSzjxpG0yPLTdstN+MFHp3f1ZbF27bZP9rD785fMYTH01+BPYzCshe2s1GPEHm9q xWI9fYPSL7UoKxWv+UoPYYohbdTp+8oIlGcWGfY1By0MQWaCHtHfeIgLNTyX04LmWasc EzN4+UEYCupQeA05AHI6zxi3n4H4G7n/gR8tLHcee67K3cKcYGHfD+nSnVYCBUsq0URM t6f9YgUUXhjZ8Ug40bUcLC6u1LoU2UsVg/PpDDWJVe5n8jFpm5iMvYy0dGaCpQxIkc4t YT8w== X-Gm-Message-State: AOAM531/6OAKyfNoochlBJM+FIFJqsQRFBDKD4elZPPYkjMcTBiGfnco +wrezUMKAr9P8PdYk2QCvvHLIugnm6k= X-Google-Smtp-Source: ABdhPJy76YBfWdLer278IN+hKl0pG4BHWxqsvUQS73JZOqF8+XCd9jlX6DFb619lcSiCPN8RDz+IJA== X-Received: by 2002:aa7:d413:: with SMTP id z19mr27779734edq.37.1624803036027; Sun, 27 Jun 2021 07:10:36 -0700 (PDT) Received: from localhost.localdomain ([188.26.224.68]) by smtp.gmail.com with ESMTPSA id s4sm7857389edu.49.2021.06.27.07.10.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Jun 2021 07:10:35 -0700 (PDT) From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Florian Fainelli , Vivien Didelot , Jiri Pirko , Ido Schimmel , Tobias Waldekranz , Roopa Prabhu , Nikolay Aleksandrov , Vladimir Oltean Subject: [RFC PATCH v3 net-next 13/15] net: dsa: include fdb entries pointing to bridge in the host fdb list Date: Sun, 27 Jun 2021 17:10:11 +0300 Message-Id: <20210627141013.1273942-14-olteanv@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210627141013.1273942-1-olteanv@gmail.com> References: <20210627141013.1273942-1-olteanv@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Vladimir Oltean The bridge supports a legacy way of adding local (non-forwarded) FDB entries, which works on an individual port basis: bridge fdb add dev swp0 00:01:02:03:04:05 master local As well as a new way, added by Roopa Prabhu in commit 3741873b4f73 ("bridge: allow adding of fdb entries pointing to the bridge device"): bridge fdb add dev br0 00:01:02:03:04:05 self local The two commands are functionally equivalent, except that the first one produces an entry with fdb->dst == swp0, and the other an entry with fdb->dst == NULL. The confusing part, though, is that even if fdb->dst is swp0 for the 'local on port' entry, that destination is not used. Nonetheless, the idea is that the bridge has reference counting for local entries, and local entries pointing towards the bridge are still 'as local' as local entries for a port. The bridge adds the MAC addresses of the interfaces automatically as FDB entries with is_local=1. For the MAC address of the ports, fdb->dst will be equal to the port, and for the MAC address of the bridge, fdb->dst will point towards the bridge (i.e. be NULL). Therefore, if the MAC address of the bridge is not inherited from either of the physical ports, then we must explicitly catch local FDB entries emitted towards the br0, otherwise we'll miss the MAC address of the bridge (and, of course, any entry with 'bridge add dev br0 ... self local'). Co-developed-by: Tobias Waldekranz Signed-off-by: Tobias Waldekranz Signed-off-by: Vladimir Oltean --- net/dsa/slave.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/net/dsa/slave.c b/net/dsa/slave.c index d006bd04f84a..a7b5d2a41472 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -2415,7 +2415,11 @@ static int dsa_slave_switchdev_event(struct notifier_block *unused, struct net_device *br_dev; struct dsa_slave_priv *p; - br_dev = netdev_master_upper_dev_get_rcu(dev); + if (netif_is_bridge_master(dev)) + br_dev = dev; + else + br_dev = netdev_master_upper_dev_get_rcu(dev); + if (!br_dev) return NOTIFY_DONE; @@ -2443,8 +2447,13 @@ static int dsa_slave_switchdev_event(struct notifier_block *unused, * LAG we don't want to send traffic to the CPU, the * other ports bridged with the LAG should be able to * autonomously forward towards it. + * On the other hand, if the address is local + * (therefore not learned) then we want to trap it to + * the CPU regardless of whether the interface it + * belongs to is offloaded or not. */ - if (dsa_tree_offloads_bridge_port(dp->ds->dst, dev)) + if (dsa_tree_offloads_bridge_port(dp->ds->dst, dev) && + !fdb_info->is_local) return NOTIFY_DONE; } From patchwork Sun Jun 27 14:10:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 467935 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6706CC49EAF for ; Sun, 27 Jun 2021 14:10:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 516EF619B0 for ; Sun, 27 Jun 2021 14:10:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231417AbhF0ONN (ORCPT ); Sun, 27 Jun 2021 10:13:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56048 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231303AbhF0ONE (ORCPT ); Sun, 27 Jun 2021 10:13:04 -0400 Received: from mail-ej1-x635.google.com (mail-ej1-x635.google.com [IPv6:2a00:1450:4864:20::635]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 94999C0617A6 for ; Sun, 27 Jun 2021 07:10:39 -0700 (PDT) Received: by mail-ej1-x635.google.com with SMTP id o11so11270507ejd.4 for ; Sun, 27 Jun 2021 07:10:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=eqjTrbP8WLdm2CiHqRr8RY8N7+TrvxKyRWH+kkJBIzY=; b=prYv8boBImsZO3XgQQYhT8bIJ6AnkHY9B04FjWLXefNXlGhKGjmaz4Ei7HsbkuIoxv VRidw6jpgIlYdld03b+8tLJjEYDF33kUISZMvUMPB2xSBeq6xPaHmh5H3Mz09fkbnzR4 BinXyejE539Rgv0CRqNlAwfTdSiMKp1F7hv6c+fAVUHQwC8tqqyiMCAfxNS+RfYkNbLt LPW4MC9IbvRt8tm+fZfUtBecsmBWgVJ4A4Fv/aQ5GobITh0NM+jtbMNdjGJXh/AYg03u Nimy9blVRNOaJxMrrvBngt1cK2itx4EFlMNRkALPi/7LY3YaMBWTWr4wQjBWKIQxjvhd OsBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=eqjTrbP8WLdm2CiHqRr8RY8N7+TrvxKyRWH+kkJBIzY=; b=H5WO74C+ACMASmBn/OMcJFJ0qPglzTrWm0IHpduc/qhgqdJts7KInd5j+2vBov4cfZ 2T0/Zp9ifA4rbJMLzvUAqO1M8dR2BFD8cgokpJmgiUtPjteUnVXO781p4OFRzpnrIWOX CtiUA3CfW3b0hgoSGtMA7A1wJMs36zL01kEwLCTfzDH5qxknt4Ru4lN7zDaQ/vPw3oQs ddBCPcvra0OhN92H0jlgTCABqBOjHKJ3MiG+K4H1tG+UM5WSYDxI425b+M39ZRg/xcGn 7hS4Qkp6aCvdm1hGiOhAdZWOLzFxC/ZjfhAcNraFuAvUw/uU4liXVnknhHF646VF1u4D CKzA== X-Gm-Message-State: AOAM532xdEZ//9RJWLjCUnAuA0XxTkxwWlkG6uwcZXiRChDMdBvYH2sr UWIjMfE09jtesrNydJ4TPGFL6VmLaKU= X-Google-Smtp-Source: ABdhPJydZbS+5vlvMb+Eaaa/H15g1P6tRQrBcg3iYmDRwKYK+4H4WFfPi8RGEkDkLRZGKYU7/v6zOA== X-Received: by 2002:a17:906:c10f:: with SMTP id do15mr17136408ejc.475.1624803038021; Sun, 27 Jun 2021 07:10:38 -0700 (PDT) Received: from localhost.localdomain ([188.26.224.68]) by smtp.gmail.com with ESMTPSA id s4sm7857389edu.49.2021.06.27.07.10.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Jun 2021 07:10:37 -0700 (PDT) From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Florian Fainelli , Vivien Didelot , Jiri Pirko , Ido Schimmel , Tobias Waldekranz , Roopa Prabhu , Nikolay Aleksandrov , Vladimir Oltean Subject: [RFC PATCH v3 net-next 15/15] net: dsa: replay the local bridge FDB entries pointing to the bridge dev too Date: Sun, 27 Jun 2021 17:10:13 +0300 Message-Id: <20210627141013.1273942-16-olteanv@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210627141013.1273942-1-olteanv@gmail.com> References: <20210627141013.1273942-1-olteanv@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Vladimir Oltean When we join a bridge that already has some local addresses pointing to itself, we do not get those notifications. Similarly, when we leave that bridge, we do not get notifications for the deletion of those entries. The only switchdev notifications we get are those of entries added while the DSA port is enslaved to the bridge. This makes use cases such as the following work properly (with the number of additions and removals properly balanced): ip link add br0 type bridge ip link add br1 type bridge ip link set br0 address 00:01:02:03:04:05 ip link set br1 address 00:01:02:03:04:05 ip link set swp0 up ip link set swp1 up ip link set swp0 master br0 ip link set swp1 master br1 ip link set br0 up ip link set br1 up ip link del br1 # 00:01:02:03:04:05 still installed on the CPU port ip link del br0 # 00:01:02:03:04:05 finally removed from the CPU port Signed-off-by: Vladimir Oltean --- net/dsa/port.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/net/dsa/port.c b/net/dsa/port.c index 255172a8599a..a833684349cb 100644 --- a/net/dsa/port.c +++ b/net/dsa/port.c @@ -199,11 +199,17 @@ static int dsa_port_switchdev_sync(struct dsa_port *dp, if (err && err != -EOPNOTSUPP) return err; + /* Forwarding and termination FDB entries on the port */ err = br_fdb_replay(br, brport_dev, dp, true, &dsa_slave_switchdev_notifier); if (err && err != -EOPNOTSUPP) return err; + /* Termination FDB entries on the bridge itself */ + err = br_fdb_replay(br, br, dp, true, &dsa_slave_switchdev_notifier); + if (err && err != -EOPNOTSUPP) + return err; + err = br_vlan_replay(br, brport_dev, dp, true, &dsa_slave_switchdev_blocking_notifier, extack); if (err && err != -EOPNOTSUPP) @@ -225,11 +231,17 @@ static int dsa_port_switchdev_unsync_objs(struct dsa_port *dp, if (err && err != -EOPNOTSUPP) return err; + /* Forwarding and termination FDB entries on the port */ err = br_fdb_replay(br, brport_dev, dp, false, &dsa_slave_switchdev_notifier); if (err && err != -EOPNOTSUPP) return err; + /* Termination FDB entries on the bridge itself */ + err = br_fdb_replay(br, br, dp, false, &dsa_slave_switchdev_notifier); + if (err && err != -EOPNOTSUPP) + return err; + err = br_vlan_replay(br, brport_dev, dp, false, &dsa_slave_switchdev_blocking_notifier, extack); if (err && err != -EOPNOTSUPP)