Add code to handle switchdev host mdb add/del. Since DSA uses one of
the switch ports as a transport to the host, we just need to add an
MDB on this port.

Signed-off-by: Andrew Lunn <and...@lunn.ch>
---
 net/dsa/slave.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/net/dsa/slave.c b/net/dsa/slave.c
index 1179e4cd6701..4b80d2ac1d69 100644
--- a/net/dsa/slave.c
+++ b/net/dsa/slave.c
@@ -304,6 +304,13 @@ static int dsa_slave_port_obj_add(struct net_device *dev,
        case SWITCHDEV_OBJ_ID_PORT_MDB:
                err = dsa_port_mdb_add(dp, SWITCHDEV_OBJ_PORT_MDB(obj), trans);
                break;
+       case SWITCHDEV_OBJ_ID_HOST_MDB:
+               /* DSA can directly translate this to a normal MDB add,
+                * but on the CPU port.
+                */
+               err = dsa_port_mdb_add(dp->cpu_dp, SWITCHDEV_OBJ_PORT_MDB(obj),
+                                      trans);
+               break;
        case SWITCHDEV_OBJ_ID_PORT_VLAN:
                err = dsa_port_vlan_add(dp, SWITCHDEV_OBJ_PORT_VLAN(obj),
                                        trans);
@@ -326,6 +333,12 @@ static int dsa_slave_port_obj_del(struct net_device *dev,
        case SWITCHDEV_OBJ_ID_PORT_MDB:
                err = dsa_port_mdb_del(dp, SWITCHDEV_OBJ_PORT_MDB(obj));
                break;
+       case SWITCHDEV_OBJ_ID_HOST_MDB:
+               /* DSA can directly translate this to a normal MDB add,
+                * but on the CPU port.
+                */
+               err = dsa_port_mdb_del(dp->cpu_dp, SWITCHDEV_OBJ_PORT_MDB(obj));
+               break;
        case SWITCHDEV_OBJ_ID_PORT_VLAN:
                err = dsa_port_vlan_del(dp, SWITCHDEV_OBJ_PORT_VLAN(obj));
                break;
-- 
2.15.0

Reply via email to