[prev in list] [next in list] [prev in thread] [next in thread] 

List:       git-commits-head
Subject:    net: dsa: introduce dsa_is_upstream_port and dsa_switch_is_upstream_of
From:       Linux Kernel Mailing List <linux-kernel () vger ! kernel ! org>
Date:       2021-06-30 23:50:23
Message-ID: git-mailbomb-linux-master-63609c8fac40810b0b14c9512d47b11965cea37f () kernel ! org
[Download RAW message or body]

Commit:     63609c8fac40810b0b14c9512d47b11965cea37f
Parent:     b117e1e8a86d363fc1ad53df8d2c47884d2c0048
Refname:    refs/heads/master
Web:        https://git.kernel.org/torvalds/c/63609c8fac40810b0b14c9512d47b11965cea37f
Author:     Vladimir Oltean <vladimir.oltean@nxp.com>
AuthorDate: Tue Jun 29 17:06:48 2021 +0300
Committer:  David S. Miller <davem@davemloft.net>
CommitDate: Tue Jun 29 10:46:23 2021 -0700

    net: dsa: introduce dsa_is_upstream_port and dsa_switch_is_upstream_of
    
    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 <vladimir.oltean@nxp.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
---
 include/net/dsa.h | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/include/net/dsa.h b/include/net/dsa.h
index ea47783d56951..5f632cfd33c70 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;
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic