Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 65aebfc0 authored by Vivien Didelot's avatar Vivien Didelot Committed by David S. Miller
Browse files

net: dsa: add port_vlan_dump routine



Similar to port_fdb_dump, add a port_vlan_dump function to DSA drivers
which gets passed the switchdev VLAN object and callback.

This function, if implemented, takes precedence over the soon legacy
vlan_getnext/port_pvid_get approach.

Signed-off-by: default avatarVivien Didelot <vivien.didelot@savoirfairelinux.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2a04c7ba
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -554,6 +554,10 @@ Bridge VLAN filtering
- port_vlan_del: bridge layer function invoked when a VLAN is removed from the
  given switch port

- port_vlan_dump: bridge layer function invoked with a switchdev callback
  function that the driver has to call for each VLAN the given port is a member
  of. A switchdev object is used to carry the VID and bridge flags.

- vlan_getnext: bridge layer function invoked to query the next configured VLAN
  in the switch, i.e. returns the bitmaps of members and untagged ports

+3 −0
Original line number Diff line number Diff line
@@ -313,6 +313,9 @@ struct dsa_switch_driver {
				 struct switchdev_trans *trans);
	int	(*port_vlan_del)(struct dsa_switch *ds, int port,
				 const struct switchdev_obj_port_vlan *vlan);
	int	(*port_vlan_dump)(struct dsa_switch *ds, int port,
				  struct switchdev_obj_port_vlan *vlan,
				  int (*cb)(struct switchdev_obj *obj));
	int	(*port_pvid_get)(struct dsa_switch *ds, int port, u16 *pvid);
	int	(*vlan_getnext)(struct dsa_switch *ds, u16 *vid,
				unsigned long *ports, unsigned long *untagged);
+3 −0
Original line number Diff line number Diff line
@@ -248,6 +248,9 @@ static int dsa_slave_port_vlan_dump(struct net_device *dev,
	u16 pvid, vid = 0;
	int err;

	if (ds->drv->port_vlan_dump)
		return ds->drv->port_vlan_dump(ds, p->port, vlan, cb);

	if (!ds->drv->vlan_getnext || !ds->drv->port_pvid_get)
		return -EOPNOTSUPP;