summaryrefslogtreecommitdiffstats
path: root/net/dsa
diff options
context:
space:
mode:
authorScott Feldman <sfeldma@gmail.com>2015-05-10 18:47:49 +0200
committerDavid S. Miller <davem@davemloft.net>2015-05-13 00:43:53 +0200
commitf8e20a9f87d33865cc1d67f13da0db8d457fc3c9 (patch)
tree0072db71330af1215e78c1def9033d62156a4183 /net/dsa
parentswitchdev: introduce get/set attrs ops (diff)
downloadlinux-f8e20a9f87d33865cc1d67f13da0db8d457fc3c9.tar.xz
linux-f8e20a9f87d33865cc1d67f13da0db8d457fc3c9.zip
switchdev: convert parent_id_get to switchdev attr get
Switch ID is just a gettable port attribute. Convert switchdev op switchdev_parent_id_get to a switchdev attr. Note: for sysfs and netlink interfaces, SWITCHDEV_ATTR_PORT_PARENT_ID is called with SWITCHDEV_F_NO_RECUSE to limit switch ID user-visiblity to only port netdevs. So when a port is stacked under bond/bridge, the user can only query switch id via the switch ports, but not via the upper devices Signed-off-by: Scott Feldman <sfeldma@gmail.com> Acked-by: Jiri Pirko <jiri@resnulli.us> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/dsa')
-rw-r--r--net/dsa/slave.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/net/dsa/slave.c b/net/dsa/slave.c
index 1546acf6ebd3..de705b674ac9 100644
--- a/net/dsa/slave.c
+++ b/net/dsa/slave.c
@@ -382,14 +382,20 @@ static int dsa_slave_bridge_port_leave(struct net_device *dev)
return ret;
}
-static int dsa_slave_parent_id_get(struct net_device *dev,
- struct netdev_phys_item_id *psid)
+static int dsa_slave_port_attr_get(struct net_device *dev,
+ struct switchdev_attr *attr)
{
struct dsa_slave_priv *p = netdev_priv(dev);
struct dsa_switch *ds = p->parent;
- psid->id_len = sizeof(ds->index);
- memcpy(&psid->id, &ds->index, psid->id_len);
+ switch (attr->id) {
+ case SWITCHDEV_ATTR_PORT_PARENT_ID:
+ attr->ppid.id_len = sizeof(ds->index);
+ memcpy(&attr->ppid.id, &ds->index, attr->ppid.id_len);
+ break;
+ default:
+ return -EOPNOTSUPP;
+ }
return 0;
}
@@ -676,7 +682,7 @@ static const struct net_device_ops dsa_slave_netdev_ops = {
};
static const struct switchdev_ops dsa_slave_switchdev_ops = {
- .switchdev_parent_id_get = dsa_slave_parent_id_get,
+ .switchdev_port_attr_get = dsa_slave_port_attr_get,
.switchdev_port_stp_update = dsa_slave_stp_update,
};