OSDN Git Service

net: dsa: introduce dsa_towards_port helper
authorVivien Didelot <vivien.didelot@savoirfairelinux.com>
Thu, 30 Nov 2017 17:56:42 +0000 (12:56 -0500)
committerDavid S. Miller <davem@davemloft.net>
Sun, 3 Dec 2017 02:20:59 +0000 (21:20 -0500)
Add a new helper returning the local port used to reach an arbitrary
switch port in the fabric.

Its only user at the moment is the dsa_upstream_port helper, which
returns the local port reaching the dedicated CPU port, but it will be
used in cross-chip FDB operations.

Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/dsa.h

index 6700dff..8198efc 100644 (file)
@@ -296,20 +296,23 @@ static inline u32 dsa_user_ports(struct dsa_switch *ds)
        return mask;
 }
 
+/* Return the local port used to reach an arbitrary switch port */
+static inline unsigned int dsa_towards_port(struct dsa_switch *ds, int device,
+                                           int port)
+{
+       if (device == ds->index)
+               return port;
+       else
+               return ds->rtable[device];
+}
+
+/* Return the local port used to reach the dedicated CPU port */
 static inline u8 dsa_upstream_port(struct dsa_switch *ds)
 {
        struct dsa_switch_tree *dst = ds->dst;
+       struct dsa_port *cpu_dp = dst->cpu_dp;
 
-       /*
-        * If this is the root switch (i.e. the switch that connects
-        * to the CPU), return the cpu port number on this switch.
-        * Else return the (DSA) port number that connects to the
-        * switch that is one hop closer to the cpu.
-        */
-       if (dst->cpu_dp->ds == ds)
-               return dst->cpu_dp->index;
-       else
-               return ds->rtable[dst->cpu_dp->ds->index];
+       return dsa_towards_port(ds, cpu_dp->ds->index, cpu_dp->index);
 }
 
 typedef int dsa_fdb_dump_cb_t(const unsigned char *addr, u16 vid,