Skip to content

Commit

Permalink
net: dsa: add slave VLAN helpers
Browse files Browse the repository at this point in the history
Add dsa_slave_vlan_add and dsa_slave_vlan_del helpers to handle
SWITCHDEV_OBJ_ID_PORT_VLAN switchdev objects. Also copy the
switchdev_obj_port_vlan structure on add since we will modify it in
future patches.

Signed-off-by: Vivien Didelot <vivien.didelot@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Vivien Didelot authored and David S. Miller committed Aug 28, 2019
1 parent cf36086 commit bdcff08
Showing 1 changed file with 33 additions and 7 deletions.
40 changes: 33 additions & 7 deletions net/dsa/slave.c
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,26 @@ static int dsa_slave_port_attr_set(struct net_device *dev,
return ret;
}

static int dsa_slave_vlan_add(struct net_device *dev,
const struct switchdev_obj *obj,
struct switchdev_trans *trans)
{
struct dsa_port *dp = dsa_slave_to_port(dev);
struct switchdev_obj_port_vlan vlan;
int err;

if (obj->orig_dev != dev)
return -EOPNOTSUPP;

vlan = *SWITCHDEV_OBJ_PORT_VLAN(obj);

err = dsa_port_vlan_add(dp, &vlan, trans);
if (err)
return err;

return 0;
}

static int dsa_slave_port_obj_add(struct net_device *dev,
const struct switchdev_obj *obj,
struct switchdev_trans *trans,
Expand Down Expand Up @@ -339,10 +359,7 @@ static int dsa_slave_port_obj_add(struct net_device *dev,
trans);
break;
case SWITCHDEV_OBJ_ID_PORT_VLAN:
if (obj->orig_dev != dev)
return -EOPNOTSUPP;
err = dsa_port_vlan_add(dp, SWITCHDEV_OBJ_PORT_VLAN(obj),
trans);
err = dsa_slave_vlan_add(dev, obj, trans);
break;
default:
err = -EOPNOTSUPP;
Expand All @@ -352,6 +369,17 @@ static int dsa_slave_port_obj_add(struct net_device *dev,
return err;
}

static int dsa_slave_vlan_del(struct net_device *dev,
const struct switchdev_obj *obj)
{
struct dsa_port *dp = dsa_slave_to_port(dev);

if (obj->orig_dev != dev)
return -EOPNOTSUPP;

return dsa_port_vlan_del(dp, SWITCHDEV_OBJ_PORT_VLAN(obj));
}

static int dsa_slave_port_obj_del(struct net_device *dev,
const struct switchdev_obj *obj)
{
Expand All @@ -371,9 +399,7 @@ static int dsa_slave_port_obj_del(struct net_device *dev,
err = dsa_port_mdb_del(dp->cpu_dp, SWITCHDEV_OBJ_PORT_MDB(obj));
break;
case SWITCHDEV_OBJ_ID_PORT_VLAN:
if (obj->orig_dev != dev)
return -EOPNOTSUPP;
err = dsa_port_vlan_del(dp, SWITCHDEV_OBJ_PORT_VLAN(obj));
err = dsa_slave_vlan_del(dev, obj);
break;
default:
err = -EOPNOTSUPP;
Expand Down

0 comments on commit bdcff08

Please sign in to comment.