@@ -290,6 +290,50 @@ static int dsa_slave_port_fdb_dump(struct net_device *dev,
290
290
return - EOPNOTSUPP ;
291
291
}
292
292
293
+ static int dsa_slave_port_mdb_add (struct net_device * dev ,
294
+ const struct switchdev_obj_port_mdb * mdb ,
295
+ struct switchdev_trans * trans )
296
+ {
297
+ struct dsa_slave_priv * p = netdev_priv (dev );
298
+ struct dsa_switch * ds = p -> parent ;
299
+
300
+ if (switchdev_trans_ph_prepare (trans )) {
301
+ if (!ds -> ops -> port_mdb_prepare || !ds -> ops -> port_mdb_add )
302
+ return - EOPNOTSUPP ;
303
+
304
+ return ds -> ops -> port_mdb_prepare (ds , p -> port , mdb , trans );
305
+ }
306
+
307
+ ds -> ops -> port_mdb_add (ds , p -> port , mdb , trans );
308
+
309
+ return 0 ;
310
+ }
311
+
312
+ static int dsa_slave_port_mdb_del (struct net_device * dev ,
313
+ const struct switchdev_obj_port_mdb * mdb )
314
+ {
315
+ struct dsa_slave_priv * p = netdev_priv (dev );
316
+ struct dsa_switch * ds = p -> parent ;
317
+
318
+ if (ds -> ops -> port_mdb_del )
319
+ return ds -> ops -> port_mdb_del (ds , p -> port , mdb );
320
+
321
+ return - EOPNOTSUPP ;
322
+ }
323
+
324
+ static int dsa_slave_port_mdb_dump (struct net_device * dev ,
325
+ struct switchdev_obj_port_mdb * mdb ,
326
+ switchdev_obj_dump_cb_t * cb )
327
+ {
328
+ struct dsa_slave_priv * p = netdev_priv (dev );
329
+ struct dsa_switch * ds = p -> parent ;
330
+
331
+ if (ds -> ops -> port_mdb_dump )
332
+ return ds -> ops -> port_mdb_dump (ds , p -> port , mdb , cb );
333
+
334
+ return - EOPNOTSUPP ;
335
+ }
336
+
293
337
static int dsa_slave_ioctl (struct net_device * dev , struct ifreq * ifr , int cmd )
294
338
{
295
339
struct dsa_slave_priv * p = netdev_priv (dev );
@@ -412,6 +456,10 @@ static int dsa_slave_port_obj_add(struct net_device *dev,
412
456
SWITCHDEV_OBJ_PORT_FDB (obj ),
413
457
trans );
414
458
break ;
459
+ case SWITCHDEV_OBJ_ID_PORT_MDB :
460
+ err = dsa_slave_port_mdb_add (dev , SWITCHDEV_OBJ_PORT_MDB (obj ),
461
+ trans );
462
+ break ;
415
463
case SWITCHDEV_OBJ_ID_PORT_VLAN :
416
464
err = dsa_slave_port_vlan_add (dev ,
417
465
SWITCHDEV_OBJ_PORT_VLAN (obj ),
@@ -435,6 +483,9 @@ static int dsa_slave_port_obj_del(struct net_device *dev,
435
483
err = dsa_slave_port_fdb_del (dev ,
436
484
SWITCHDEV_OBJ_PORT_FDB (obj ));
437
485
break ;
486
+ case SWITCHDEV_OBJ_ID_PORT_MDB :
487
+ err = dsa_slave_port_mdb_del (dev , SWITCHDEV_OBJ_PORT_MDB (obj ));
488
+ break ;
438
489
case SWITCHDEV_OBJ_ID_PORT_VLAN :
439
490
err = dsa_slave_port_vlan_del (dev ,
440
491
SWITCHDEV_OBJ_PORT_VLAN (obj ));
@@ -459,6 +510,10 @@ static int dsa_slave_port_obj_dump(struct net_device *dev,
459
510
SWITCHDEV_OBJ_PORT_FDB (obj ),
460
511
cb );
461
512
break ;
513
+ case SWITCHDEV_OBJ_ID_PORT_MDB :
514
+ err = dsa_slave_port_mdb_dump (dev , SWITCHDEV_OBJ_PORT_MDB (obj ),
515
+ cb );
516
+ break ;
462
517
case SWITCHDEV_OBJ_ID_PORT_VLAN :
463
518
err = dsa_slave_port_vlan_dump (dev ,
464
519
SWITCHDEV_OBJ_PORT_VLAN (obj ),
0 commit comments