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:
parent
c23e014a4b
commit
5f07655b80
@ -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)
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user