RE: [PATCH linux-next v3 3/6] vdpa: Enable user to set mac and mtu of vdpa device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> From: Jason Wang <jasowang@xxxxxxxxxx>
> Sent: Tuesday, June 22, 2021 1:13 PM
> 
> 在 2021/6/17 上午3:11, Parav Pandit 写道:
> > $ vdpa dev add name bar mgmtdev vdpasim_net
> >
> > $ vdpa dev config set bar mac 00:11:22:33:44:55 mtu 9000
> >
> > $ vdpa dev config show
> > bar: mac 00:11:22:33:44:55 link up link_announce false mtu 9000 speed
> > 0 duplex 0
> >
> > $ vdpa dev config show -jp
> > {
> >      "config": {
> >          "bar": {
> >              "mac": "00:11:22:33:44:55",
> >              "link ": "up",
> >              "link_announce ": false,
> >              "mtu": 9000,
> >              "speed": 0,
> >              "duplex": 0
> >          }
> >      }
> > }
> >
> > Signed-off-by: Parav Pandit <parav@xxxxxxxxxx>
> > Reviewed-by: Eli Cohen <elic@xxxxxxxxxx>
> > ---
> > changelog:
> > v2->v3:
> >   - using new setup_config callback to setup device params via mgmt tool
> >     to avoid mixing with existing set_config().
> > ---
> >   drivers/vdpa/vdpa.c       | 91
> ++++++++++++++++++++++++++++++++++++++-
> >   include/linux/vdpa.h      | 18 ++++++++
> >   include/uapi/linux/vdpa.h |  1 +
> >   3 files changed, 109 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/vdpa/vdpa.c b/drivers/vdpa/vdpa.c index
> > 1295528244c3..40874bd92126 100644
> > --- a/drivers/vdpa/vdpa.c
> > +++ b/drivers/vdpa/vdpa.c
> > @@ -14,7 +14,6 @@
> >   #include <uapi/linux/vdpa.h>
> >   #include <net/genetlink.h>
> >   #include <linux/mod_devicetable.h>
> > -#include <linux/virtio_net.h>
> >   #include <linux/virtio_ids.h>
> >
> >   static LIST_HEAD(mdev_head);
> > @@ -849,10 +848,94 @@ vdpa_nl_cmd_dev_config_get_dumpit(struct
> sk_buff *msg, struct netlink_callback *
> >   	return msg->len;
> >   }
> >
> > +static int vdpa_dev_net_config_set(struct vdpa_device *vdev,
> > +				   struct sk_buff *skb, struct genl_info *info) {
> > +	struct nlattr **nl_attrs = info->attrs;
> > +	struct vdpa_dev_set_config config = {};
> > +	const u8 *macaddr;
> > +	int err;
> > +
> > +	if (!netlink_capable(skb, CAP_NET_ADMIN))
> > +		return -EPERM;
> 
> 
> Interesting, I wonder how cap would be used for other type of devices (e.g
> block).
> 
> 
> > +
> > +	if (!vdev->config->setup_config)
> > +		return -EOPNOTSUPP;
> > +
> > +	if (nl_attrs[VDPA_ATTR_DEV_NET_CFG_MACADDR]) {
> > +		macaddr =
> nla_data(nl_attrs[VDPA_ATTR_DEV_NET_CFG_MACADDR]);
> > +		memcpy(config.net.mac, macaddr, sizeof(config.net.mac));
> > +		config.net_mask.mac_valid = true;
> > +	}
> > +	if (nl_attrs[VDPA_ATTR_DEV_NET_CFG_MTU]) {
> > +		config.net.mtu =
> > +
> 	nla_get_u16(nl_attrs[VDPA_ATTR_DEV_NET_CFG_MTU]);
> > +		config.net_mask.mtu_valid = true;
> > +	}
> 
> 
> Instead of doing memcpy and pass the whole config structure like this. I
> wonder if it's better to switch to use:
> 
> vdev->config->setup_config(vdev, offsetof(struct virtio_net_config,
> mtu), &mtu, sizeof(mtu));
> 
Well, we need a way to differentiate that the caller is management tool and not the vhost path.

Instead of passing some flag of the caller to setup_config(), a explicitly defined callback served better.

And secondly we need to return the error status. setup_config() cb is void. This is the minor one.

> Then there's no need for the vdpa_dev_set_config structure which will
> became structure virtio_net_config gradually.
> 
> The setup_config() can fail if the offset is not at the boundary of a
> specific attribute.
> 
_______________________________________________
Virtualization mailing list
Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx
https://lists.linuxfoundation.org/mailman/listinfo/virtualization



[Index of Archives]     [KVM Development]     [Libvirt Development]     [Libvirt Users]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux