Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5f07655b authored by Jakub Kicinski's avatar Jakub Kicinski Committed by Daniel Borkmann
Browse files

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: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: default avatarQuentin Monnet <quentin.monnet@netronome.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
parent c23e014a
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include <net/netlink.h>
#include <net/pkt_cls.h>
#include <net/rtnetlink.h>
#include <net/switchdev.h>

#include "netdevsim.h"

@@ -144,12 +145,34 @@ static struct device_type nsim_dev_type = {
	.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)
{
	struct netdevsim *ns = netdev_priv(dev);
	int err;

	ns->netdev = dev;
	ns->switch_id = nsim_dev_id;

	ns->ddir = debugfs_create_dir(netdev_name(dev), nsim_ddir);
	if (IS_ERR_OR_NULL(ns->ddir))
		return -ENOMEM;
@@ -166,6 +189,7 @@ static int nsim_init(struct net_device *dev)
		goto err_bpf_uninit;

	SET_NETDEV_DEV(dev, &ns->dev);
	SWITCHDEV_SET_OPS(dev, &nsim_switchdev_ops);

	err = nsim_devlink_setup(ns);
	if (err)
+1 −0
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ struct netdevsim {
	struct u64_stats_sync syncp;

	struct device dev;
	u32 switch_id;

	struct dentry *ddir;