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

Commit 2acf4e6a authored by Arkadi Sharshevsky's avatar Arkadi Sharshevsky Committed by David S. Miller
Browse files

net: dsa: Remove switchdev dependency from DSA switch notifier chain



Currently, the switchdev objects are embedded inside the DSA notifier
info. This patch removes this dependency. This is done as a preparation
stage before adding support for learning FDB through the switchdev
notification chain.

Signed-off-by: default avatarArkadi Sharshevsky <arkadis@mellanox.com>
Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Reviewed-by: default avatarVivien Didelot <vivien.didelot@savoirfairelinux.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1b6dd556
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -43,9 +43,10 @@ struct dsa_notifier_bridge_info {

/* DSA_NOTIFIER_FDB_* */
struct dsa_notifier_fdb_info {
	const struct switchdev_obj_port_fdb *fdb;
	int sw_index;
	int port;
	const unsigned char *addr;
	u16 vid;
};

/* DSA_NOTIFIER_MDB_* */
@@ -120,10 +121,10 @@ int dsa_port_vlan_filtering(struct dsa_port *dp, bool vlan_filtering,
			    struct switchdev_trans *trans);
int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock,
			 struct switchdev_trans *trans);
int dsa_port_fdb_add(struct dsa_port *dp,
		     const struct switchdev_obj_port_fdb *fdb);
int dsa_port_fdb_del(struct dsa_port *dp,
		     const struct switchdev_obj_port_fdb *fdb);
int dsa_port_fdb_add(struct dsa_port *dp, const unsigned char *addr,
		     u16 vid);
int dsa_port_fdb_del(struct dsa_port *dp, const unsigned char *addr,
		     u16 vid);
int dsa_port_fdb_dump(struct dsa_port *dp, struct switchdev_obj_port_fdb *fdb,
		      switchdev_obj_dump_cb_t *cb);
int dsa_port_mdb_add(struct dsa_port *dp,
+9 −6
Original line number Diff line number Diff line
@@ -146,25 +146,28 @@ int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock,
	return dsa_port_notify(dp, DSA_NOTIFIER_AGEING_TIME, &info);
}

int dsa_port_fdb_add(struct dsa_port *dp,
		     const struct switchdev_obj_port_fdb *fdb)
int dsa_port_fdb_add(struct dsa_port *dp, const unsigned char *addr,
		     u16 vid)
{
	struct dsa_notifier_fdb_info info = {
		.sw_index = dp->ds->index,
		.port = dp->index,
		.fdb = fdb,
		.addr = addr,
		.vid = vid,
	};

	return dsa_port_notify(dp, DSA_NOTIFIER_FDB_ADD, &info);
}

int dsa_port_fdb_del(struct dsa_port *dp,
		     const struct switchdev_obj_port_fdb *fdb)
int dsa_port_fdb_del(struct dsa_port *dp, const unsigned char *addr,
		     u16 vid)
{
	struct dsa_notifier_fdb_info info = {
		.sw_index = dp->ds->index,
		.port = dp->index,
		.fdb = fdb,
		.addr = addr,
		.vid = vid,

	};

	return dsa_port_notify(dp, DSA_NOTIFIER_FDB_DEL, &info);
+4 −2
Original line number Diff line number Diff line
@@ -253,7 +253,8 @@ static int dsa_slave_port_obj_add(struct net_device *dev,
	case SWITCHDEV_OBJ_ID_PORT_FDB:
		if (switchdev_trans_ph_prepare(trans))
			return 0;
		err = dsa_port_fdb_add(dp, SWITCHDEV_OBJ_PORT_FDB(obj));
		err = dsa_port_fdb_add(dp, SWITCHDEV_OBJ_PORT_FDB(obj)->addr,
				       SWITCHDEV_OBJ_PORT_FDB(obj)->vid);
		break;
	case SWITCHDEV_OBJ_ID_PORT_MDB:
		err = dsa_port_mdb_add(dp, SWITCHDEV_OBJ_PORT_MDB(obj), trans);
@@ -279,7 +280,8 @@ static int dsa_slave_port_obj_del(struct net_device *dev,

	switch (obj->id) {
	case SWITCHDEV_OBJ_ID_PORT_FDB:
		err = dsa_port_fdb_del(dp, SWITCHDEV_OBJ_PORT_FDB(obj));
		err = dsa_port_fdb_del(dp, SWITCHDEV_OBJ_PORT_FDB(obj)->addr,
				       SWITCHDEV_OBJ_PORT_FDB(obj)->vid);
		break;
	case SWITCHDEV_OBJ_ID_PORT_MDB:
		err = dsa_port_mdb_del(dp, SWITCHDEV_OBJ_PORT_MDB(obj));
+4 −7
Original line number Diff line number Diff line
@@ -83,8 +83,6 @@ static int dsa_switch_bridge_leave(struct dsa_switch *ds,
static int dsa_switch_fdb_add(struct dsa_switch *ds,
			      struct dsa_notifier_fdb_info *info)
{
	const struct switchdev_obj_port_fdb *fdb = info->fdb;

	/* Do not care yet about other switch chips of the fabric */
	if (ds->index != info->sw_index)
		return 0;
@@ -92,14 +90,13 @@ static int dsa_switch_fdb_add(struct dsa_switch *ds,
	if (!ds->ops->port_fdb_add)
		return -EOPNOTSUPP;

	return ds->ops->port_fdb_add(ds, info->port, fdb->addr, fdb->vid);
	return ds->ops->port_fdb_add(ds, info->port, info->addr,
				     info->vid);
}

static int dsa_switch_fdb_del(struct dsa_switch *ds,
			      struct dsa_notifier_fdb_info *info)
{
	const struct switchdev_obj_port_fdb *fdb = info->fdb;

	/* Do not care yet about other switch chips of the fabric */
	if (ds->index != info->sw_index)
		return 0;
@@ -107,8 +104,8 @@ static int dsa_switch_fdb_del(struct dsa_switch *ds,
	if (!ds->ops->port_fdb_del)
		return -EOPNOTSUPP;

	return ds->ops->port_fdb_del(ds, info->port, fdb->addr,
				     fdb->vid);
	return ds->ops->port_fdb_del(ds, info->port, info->addr,
				     info->vid);
}

static int dsa_switch_mdb_add(struct dsa_switch *ds,