Received: by 2002:a05:6a10:413:0:0:0:0 with SMTP id 19csp4350967pxp; Tue, 15 Mar 2022 19:13:36 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxWLz5t6moAttmM0z6PW+rWffBTuuieHSWUyRyoJV+WwwWaaurvYUh6gLIONO0TeKqyoKIx X-Received: by 2002:a17:907:2dac:b0:6db:e1e8:c66f with SMTP id gt44-20020a1709072dac00b006dbe1e8c66fmr7987540ejc.382.1647396816008; Tue, 15 Mar 2022 19:13:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1647396816; cv=none; d=google.com; s=arc-20160816; b=O+7bqqZkAXxGAKX0iKNYuTCiqZL8VfpPiNiVUZYtag81C4XuTSq/fnYXK0mGFZVtRK xfgdRiXQc8JFnHuuVYAvwsjlB7E4npgQNcFgQlz/mccbrNeRZU/51Izrb/wXAEi3dMM4 LIR1cDzJ4SK0XxXmV9W/nlgi/LA+P4X9pJZcpLCtMdxs32KQwoLKl24B9pUaGjxAUxUk 4rKJGEJ4KK0Lgsjki9zuQjq/Oke6gyQa4d275qPEN+1c9/dYEa3rjafbEi5PW6aTvSjF 1ZyeiWVfDBS6RwHPzk7Gdgxs8eLkygh4ReooT3lX+3Qz/RTtlmZcSWC0RlmbSKaB6MTh dEEg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:organization :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=S0uf403y5pA6c17GdYe3Paoa8iItkzcnykjXIbZRnYM=; b=uAflHXVJSlsQw319pIOXH62uvUyLQsjPKdxNPIK0/+EK1wvJzLhxtlcvoboUeQFIZj tZMcmUHmGBdM1JGWoDvfUz3bfjVBoelSuvdBDVGdH77Y+S1HR/TKMuCELOVJOe5UUonB K0oBzuaP78uFga6NfN0umej6qhq1L2PcIWPKlyhIXBRfqj8eo8r8PDs53bvubDZpQHNt YOz+xNlpCB9IRnnSxUtGJsnLOETfF3LTbBuOY4Ez4RCscVPqdtsFHaenb2AiLsew0iTQ jdEJiv1rr7Tzq/HTdhDek1BuoqOglkZ8gcYLLZz/rnJMsNxYbnn57azEK7GDcicaljAT yRZA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@waldekranz-com.20210112.gappssmtp.com header.s=20210112 header.b=tpDgUOqj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id fy1-20020a1709069f0100b0069bbbb0754asi381125ejc.92.2022.03.15.19.13.11; Tue, 15 Mar 2022 19:13:35 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@waldekranz-com.20210112.gappssmtp.com header.s=20210112 header.b=tpDgUOqj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343951AbiCOA2T (ORCPT + 99 others); Mon, 14 Mar 2022 20:28:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48410 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343825AbiCOA1o (ORCPT ); Mon, 14 Mar 2022 20:27:44 -0400 Received: from mail-lj1-x22e.google.com (mail-lj1-x22e.google.com [IPv6:2a00:1450:4864:20::22e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 046AF4130A for ; Mon, 14 Mar 2022 17:26:29 -0700 (PDT) Received: by mail-lj1-x22e.google.com with SMTP id u3so24408563ljd.0 for ; Mon, 14 Mar 2022 17:26:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=waldekranz-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:organization:content-transfer-encoding; bh=S0uf403y5pA6c17GdYe3Paoa8iItkzcnykjXIbZRnYM=; b=tpDgUOqjwHD8vl9zPFuAoAgMa+MpKZLTPSjugdhT90HWIXW35dPqKYUkNYY6OrBEGX KF7zVFjA+jVW6IfkCJHx9X0NoNlufnrGtDb8W5utjV17pZv8wMelCEQOix3EAhHtUmZf gs9Qjp6dLDZullEAF6iuyDK69u1JPrw8+jCtLBGmRSqqwqDGUhf1bQVpxdt+GbN/UiNd k/AObQqpLJfDGl1sef9R+O9bLXkUoLpsfKmbZAiWBObzBmB0wUUlF1kOofpxX6/t1x0A K/NArjN6XXOasgkw/4whBXsjqkO/9cdP8z6Bap6Zj+OYHheAXyC8glRrNePC/yC4VEnc Hmjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:organization:content-transfer-encoding; bh=S0uf403y5pA6c17GdYe3Paoa8iItkzcnykjXIbZRnYM=; b=zCVwZZF4tTbJC48eZ7+Sgt2U1wrtfYGeSbdZvNR7XgNMOtmHYFQxoZ0rtBChd/PcmI 2Wq2rdxPXWk/JHV1PtwqQrUOOaDPh/LCiF9NxqrLHw2+wBdA8wi082cclV7Yp9dK3drB eShoJKjYg82EZi3aMbAAh1tqv+x9/YwB2koZfOKuo2wdH86DMoRNmGZqDCYbcmbql58e up5M/vKiboJtIkcsJP1WwcCsuhcHdSM12LiLfsf3SFoiYFMzTPXeJUznttruH1HmQm4P apG70YGmCMFygJBzNZQpSdXc3GxgEIbXv/QdEps47MvCouQMldSGxB4/tAwGtx1ABGqg jFcg== X-Gm-Message-State: AOAM533L+zkzKyTZUPgHO/jQXCgKCKxedyENbOB98+TUIQJTycnXYfC3 Q/lt7uSal8IEDt08iFB+y+biFA== X-Received: by 2002:a2e:87d7:0:b0:246:1466:c43b with SMTP id v23-20020a2e87d7000000b002461466c43bmr15761096ljj.279.1647303987190; Mon, 14 Mar 2022 17:26:27 -0700 (PDT) Received: from veiron.westermo.com (static-193-12-47-89.cust.tele2.se. [193.12.47.89]) by smtp.gmail.com with ESMTPSA id y14-20020a2e544e000000b0024800f8286bsm4219923ljd.78.2022.03.14.17.26.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Mar 2022 17:26:26 -0700 (PDT) From: Tobias Waldekranz To: davem@davemloft.net, kuba@kernel.org Cc: Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , Jiri Pirko , Ivan Vecera , Roopa Prabhu , Nikolay Aleksandrov , Russell King , Petr Machata , Ido Schimmel , Matt Johnston , Cooper Lees , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, bridge@lists.linux-foundation.org Subject: [PATCH v4 net-next 07/15] net: bridge: mst: Add helper to map an MSTI to a VID set Date: Tue, 15 Mar 2022 01:25:35 +0100 Message-Id: <20220315002543.190587-8-tobias@waldekranz.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220315002543.190587-1-tobias@waldekranz.com> References: <20220315002543.190587-1-tobias@waldekranz.com> MIME-Version: 1.0 Organization: Westermo Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org br_mst_get_info answers the question: "On this bridge, which VIDs are mapped to the given MSTI?" This is useful in switchdev drivers, which might have to fan-out operations, relating to an MSTI, per VLAN. An example: When a port's MST state changes from forwarding to blocking, a driver may choose to flush the dynamic FDB entries on that port to get faster reconvergence of the network, but this should only be done in the VLANs that are managed by the MSTI in question. Signed-off-by: Tobias Waldekranz --- include/linux/if_bridge.h | 7 +++++++ net/bridge/br_mst.c | 26 ++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/include/linux/if_bridge.h b/include/linux/if_bridge.h index 3aae023a9353..1cf0cc46d90d 100644 --- a/include/linux/if_bridge.h +++ b/include/linux/if_bridge.h @@ -119,6 +119,7 @@ int br_vlan_get_info(const struct net_device *dev, u16 vid, struct bridge_vlan_info *p_vinfo); int br_vlan_get_info_rcu(const struct net_device *dev, u16 vid, struct bridge_vlan_info *p_vinfo); +int br_mst_get_info(const struct net_device *dev, u16 msti, unsigned long *vids); #else static inline bool br_vlan_enabled(const struct net_device *dev) { @@ -151,6 +152,12 @@ static inline int br_vlan_get_info_rcu(const struct net_device *dev, u16 vid, { return -EINVAL; } + +static inline int br_mst_get_info(const struct net_device *dev, u16 msti, + unsigned long *vids) +{ + return -EINVAL; +} #endif #if IS_ENABLED(CONFIG_BRIDGE) diff --git a/net/bridge/br_mst.c b/net/bridge/br_mst.c index b92daca86513..f50625a60b7e 100644 --- a/net/bridge/br_mst.c +++ b/net/bridge/br_mst.c @@ -13,6 +13,32 @@ DEFINE_STATIC_KEY_FALSE(br_mst_used); +int br_mst_get_info(const struct net_device *dev, u16 msti, unsigned long *vids) +{ + const struct net_bridge_vlan_group *vg; + const struct net_bridge_vlan *v; + const struct net_bridge *br; + + ASSERT_RTNL(); + + if (!netif_is_bridge_master(dev)) + return -EINVAL; + + br = netdev_priv(dev); + if (!br_opt_get(br, BROPT_MST_ENABLED)) + return -EINVAL; + + vg = br_vlan_group(br); + + list_for_each_entry(v, &vg->vlan_list, vlist) { + if (v->msti == msti) + __set_bit(v->vid, vids); + } + + return 0; +} +EXPORT_SYMBOL_GPL(br_mst_get_info); + static void br_mst_vlan_set_state(struct net_bridge_port *p, struct net_bridge_vlan *v, u8 state) { -- 2.25.1