net: dsa: sja1105: Implement is_static for FDB entries on E/T
authorVladimir Oltean <olteanv@gmail.com>
Tue, 25 Jun 2019 23:39:42 +0000 (02:39 +0300)
committerDavid S. Miller <davem@davemloft.net>
Thu, 27 Jun 2019 18:03:22 +0000 (11:03 -0700)
The first generation switches don't tell us through the dynamic config
interface whether the dumped FDB entries are static or not (the LOCKEDS
bit from P/Q/R/S).

However, now that we're keeping a mirror of all 'bridge fdb' commands in
the static config, this is an opportunity to compare a dumped FDB entry
to the driver's private database.  After all, what makes an entry static
is that *we* added it.

Signed-off-by: Vladimir Oltean <olteanv@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/sja1105/sja1105_main.c

index cadee76..caebf76 100644 (file)
@@ -1218,6 +1218,21 @@ static int sja1105_fdb_dump(struct dsa_switch *ds, int port,
                        continue;
                u64_to_ether_addr(l2_lookup.macaddr, macaddr);
 
+               /* On SJA1105 E/T, the switch doesn't implement the LOCKEDS
+                * bit, so it doesn't tell us whether a FDB entry is static
+                * or not.
+                * But, of course, we can find out - we're the ones who added
+                * it in the first place.
+                */
+               if (priv->info->device_id == SJA1105E_DEVICE_ID ||
+                   priv->info->device_id == SJA1105T_DEVICE_ID) {
+                       int match;
+
+                       match = sja1105_find_static_fdb_entry(priv, port,
+                                                             &l2_lookup);
+                       l2_lookup.lockeds = (match >= 0);
+               }
+
                /* We need to hide the dsa_8021q VLANs from the user. This
                 * basically means hiding the duplicates and only showing
                 * the pvid that is supposed to be active in standalone and