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

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
...@@ -43,9 +43,10 @@ struct dsa_notifier_bridge_info { ...@@ -43,9 +43,10 @@ struct dsa_notifier_bridge_info {
/* DSA_NOTIFIER_FDB_* */ /* DSA_NOTIFIER_FDB_* */
struct dsa_notifier_fdb_info { struct dsa_notifier_fdb_info {
const struct switchdev_obj_port_fdb *fdb;
int sw_index; int sw_index;
int port; int port;
const unsigned char *addr;
u16 vid;
}; };
/* DSA_NOTIFIER_MDB_* */ /* DSA_NOTIFIER_MDB_* */
...@@ -120,10 +121,10 @@ int dsa_port_vlan_filtering(struct dsa_port *dp, bool vlan_filtering, ...@@ -120,10 +121,10 @@ int dsa_port_vlan_filtering(struct dsa_port *dp, bool vlan_filtering,
struct switchdev_trans *trans); struct switchdev_trans *trans);
int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock, int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock,
struct switchdev_trans *trans); struct switchdev_trans *trans);
int dsa_port_fdb_add(struct dsa_port *dp, int dsa_port_fdb_add(struct dsa_port *dp, const unsigned char *addr,
const struct switchdev_obj_port_fdb *fdb); u16 vid);
int dsa_port_fdb_del(struct dsa_port *dp, int dsa_port_fdb_del(struct dsa_port *dp, const unsigned char *addr,
const struct switchdev_obj_port_fdb *fdb); u16 vid);
int dsa_port_fdb_dump(struct dsa_port *dp, struct switchdev_obj_port_fdb *fdb, int dsa_port_fdb_dump(struct dsa_port *dp, struct switchdev_obj_port_fdb *fdb,
switchdev_obj_dump_cb_t *cb); switchdev_obj_dump_cb_t *cb);
int dsa_port_mdb_add(struct dsa_port *dp, int dsa_port_mdb_add(struct dsa_port *dp,
......
...@@ -146,25 +146,28 @@ int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock, ...@@ -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); return dsa_port_notify(dp, DSA_NOTIFIER_AGEING_TIME, &info);
} }
int dsa_port_fdb_add(struct dsa_port *dp, int dsa_port_fdb_add(struct dsa_port *dp, const unsigned char *addr,
const struct switchdev_obj_port_fdb *fdb) u16 vid)
{ {
struct dsa_notifier_fdb_info info = { struct dsa_notifier_fdb_info info = {
.sw_index = dp->ds->index, .sw_index = dp->ds->index,
.port = dp->index, .port = dp->index,
.fdb = fdb, .addr = addr,
.vid = vid,
}; };
return dsa_port_notify(dp, DSA_NOTIFIER_FDB_ADD, &info); return dsa_port_notify(dp, DSA_NOTIFIER_FDB_ADD, &info);
} }
int dsa_port_fdb_del(struct dsa_port *dp, int dsa_port_fdb_del(struct dsa_port *dp, const unsigned char *addr,
const struct switchdev_obj_port_fdb *fdb) u16 vid)
{ {
struct dsa_notifier_fdb_info info = { struct dsa_notifier_fdb_info info = {
.sw_index = dp->ds->index, .sw_index = dp->ds->index,
.port = dp->index, .port = dp->index,
.fdb = fdb, .addr = addr,
.vid = vid,
}; };
return dsa_port_notify(dp, DSA_NOTIFIER_FDB_DEL, &info); return dsa_port_notify(dp, DSA_NOTIFIER_FDB_DEL, &info);
......
...@@ -253,7 +253,8 @@ static int dsa_slave_port_obj_add(struct net_device *dev, ...@@ -253,7 +253,8 @@ static int dsa_slave_port_obj_add(struct net_device *dev,
case SWITCHDEV_OBJ_ID_PORT_FDB: case SWITCHDEV_OBJ_ID_PORT_FDB:
if (switchdev_trans_ph_prepare(trans)) if (switchdev_trans_ph_prepare(trans))
return 0; 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; break;
case SWITCHDEV_OBJ_ID_PORT_MDB: case SWITCHDEV_OBJ_ID_PORT_MDB:
err = dsa_port_mdb_add(dp, SWITCHDEV_OBJ_PORT_MDB(obj), trans); 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, ...@@ -279,7 +280,8 @@ static int dsa_slave_port_obj_del(struct net_device *dev,
switch (obj->id) { switch (obj->id) {
case SWITCHDEV_OBJ_ID_PORT_FDB: 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; break;
case SWITCHDEV_OBJ_ID_PORT_MDB: case SWITCHDEV_OBJ_ID_PORT_MDB:
err = dsa_port_mdb_del(dp, SWITCHDEV_OBJ_PORT_MDB(obj)); err = dsa_port_mdb_del(dp, SWITCHDEV_OBJ_PORT_MDB(obj));
......
...@@ -83,8 +83,6 @@ static int dsa_switch_bridge_leave(struct dsa_switch *ds, ...@@ -83,8 +83,6 @@ static int dsa_switch_bridge_leave(struct dsa_switch *ds,
static int dsa_switch_fdb_add(struct dsa_switch *ds, static int dsa_switch_fdb_add(struct dsa_switch *ds,
struct dsa_notifier_fdb_info *info) 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 */ /* Do not care yet about other switch chips of the fabric */
if (ds->index != info->sw_index) if (ds->index != info->sw_index)
return 0; return 0;
...@@ -92,14 +90,13 @@ static int dsa_switch_fdb_add(struct dsa_switch *ds, ...@@ -92,14 +90,13 @@ static int dsa_switch_fdb_add(struct dsa_switch *ds,
if (!ds->ops->port_fdb_add) if (!ds->ops->port_fdb_add)
return -EOPNOTSUPP; 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, static int dsa_switch_fdb_del(struct dsa_switch *ds,
struct dsa_notifier_fdb_info *info) 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 */ /* Do not care yet about other switch chips of the fabric */
if (ds->index != info->sw_index) if (ds->index != info->sw_index)
return 0; return 0;
...@@ -107,8 +104,8 @@ static int dsa_switch_fdb_del(struct dsa_switch *ds, ...@@ -107,8 +104,8 @@ static int dsa_switch_fdb_del(struct dsa_switch *ds,
if (!ds->ops->port_fdb_del) if (!ds->ops->port_fdb_del)
return -EOPNOTSUPP; return -EOPNOTSUPP;
return ds->ops->port_fdb_del(ds, info->port, fdb->addr, return ds->ops->port_fdb_del(ds, info->port, info->addr,
fdb->vid); info->vid);
} }
static int dsa_switch_mdb_add(struct dsa_switch *ds, static int dsa_switch_mdb_add(struct dsa_switch *ds,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment