netdevsim: add switch_id attribute

Grouping netdevsim devices into "ASICs" will soon be supported.
Add switch_id attribute to all netdevsims.  For now each netdevsim
will have its switch_id matching the device id.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
This commit is contained in:
Jakub Kicinski 2018-07-17 10:53:19 -07:00 committed by Daniel Borkmann
parent c23e014a4b
commit 5f07655b80
2 changed files with 25 additions and 0 deletions

View File

@ -22,6 +22,7 @@
#include <net/netlink.h> #include <net/netlink.h>
#include <net/pkt_cls.h> #include <net/pkt_cls.h>
#include <net/rtnetlink.h> #include <net/rtnetlink.h>
#include <net/switchdev.h>
#include "netdevsim.h" #include "netdevsim.h"
@ -144,12 +145,34 @@ static struct device_type nsim_dev_type = {
.release = nsim_dev_release, .release = nsim_dev_release,
}; };
static int
nsim_port_attr_get(struct net_device *dev, struct switchdev_attr *attr)
{
struct netdevsim *ns = netdev_priv(dev);
switch (attr->id) {
case SWITCHDEV_ATTR_ID_PORT_PARENT_ID:
attr->u.ppid.id_len = sizeof(ns->switch_id);
memcpy(&attr->u.ppid.id, &ns->switch_id,
attr->u.ppid.id_len);
return 0;
default:
return -EOPNOTSUPP;
}
}
static const struct switchdev_ops nsim_switchdev_ops = {
.switchdev_port_attr_get = nsim_port_attr_get,
};
static int nsim_init(struct net_device *dev) static int nsim_init(struct net_device *dev)
{ {
struct netdevsim *ns = netdev_priv(dev); struct netdevsim *ns = netdev_priv(dev);
int err; int err;
ns->netdev = dev; ns->netdev = dev;
ns->switch_id = nsim_dev_id;
ns->ddir = debugfs_create_dir(netdev_name(dev), nsim_ddir); ns->ddir = debugfs_create_dir(netdev_name(dev), nsim_ddir);
if (IS_ERR_OR_NULL(ns->ddir)) if (IS_ERR_OR_NULL(ns->ddir))
return -ENOMEM; return -ENOMEM;
@ -166,6 +189,7 @@ static int nsim_init(struct net_device *dev)
goto err_bpf_uninit; goto err_bpf_uninit;
SET_NETDEV_DEV(dev, &ns->dev); SET_NETDEV_DEV(dev, &ns->dev);
SWITCHDEV_SET_OPS(dev, &nsim_switchdev_ops);
err = nsim_devlink_setup(ns); err = nsim_devlink_setup(ns);
if (err) if (err)

View File

@ -59,6 +59,7 @@ struct netdevsim {
struct u64_stats_sync syncp; struct u64_stats_sync syncp;
struct device dev; struct device dev;
u32 switch_id;
struct dentry *ddir; struct dentry *ddir;