Re: [PATCH linux-next 4/9] vdpa_sim_net: Enable user to set mac address and mtu

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

 



On Wed, Feb 24, 2021 at 08:18:39AM +0200, Parav Pandit wrote:
> Enable user to set the mac address and mtu so that each vdpa device
> can have its own user specified mac address and mtu.
> This is done by implementing the management device's configuration
> layout fields setting callback routine.
> 
> Now that user is enabled to set the mac address, remove the module
> parameter for same.

Will likely break some testing setups ...
Not too hard to keep it around, is it?

> 
> And example of setting mac addr and mtu:
> $ vdpa mgmtdev show
> 
> $ vdpa dev add name bar mgmtdev vdpasim_net
> $ vdpa dev config set bar mac 00:11:22:33:44:55 mtu 9000
> 
> View the config after setting:
> $ vdpa dev config show
> 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>
> ---
>  drivers/vdpa/vdpa_sim/vdpa_sim_net.c | 39 ++++++++++++++++------------
>  1 file changed, 22 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim_net.c b/drivers/vdpa/vdpa_sim/vdpa_sim_net.c
> index 240a5f1306b5..6e941b0e7935 100644
> --- a/drivers/vdpa/vdpa_sim/vdpa_sim_net.c
> +++ b/drivers/vdpa/vdpa_sim/vdpa_sim_net.c
> @@ -29,12 +29,6 @@
>  
>  #define VDPASIM_NET_VQ_NUM	2
>  
> -static char *macaddr;
> -module_param(macaddr, charp, 0);
> -MODULE_PARM_DESC(macaddr, "Ethernet MAC address");
> -
> -static u8 macaddr_buf[ETH_ALEN];
> -
>  static void vdpasim_net_work(struct work_struct *work)
>  {
>  	struct vdpasim *vdpasim = container_of(work, struct vdpasim, work);
> @@ -113,9 +107,7 @@ static void vdpasim_net_get_config(struct vdpasim *vdpasim, void *config)
>  	struct virtio_net_config *net_config =
>  		(struct virtio_net_config *)config;
>  
> -	net_config->mtu = cpu_to_vdpasim16(vdpasim, 1500);
>  	net_config->status = cpu_to_vdpasim16(vdpasim, VIRTIO_NET_S_LINK_UP);
> -	memcpy(net_config->mac, macaddr_buf, ETH_ALEN);
>  }
>  
>  static void vdpasim_net_mgmtdev_release(struct device *dev)
> @@ -134,6 +126,7 @@ static struct device vdpasim_net_mgmtdev_dummy = {
>  
>  static int vdpasim_net_dev_add(struct vdpa_mgmt_dev *mdev, const char *name)
>  {
> +	struct virtio_net_config *cfg;
>  	struct vdpasim_dev_attr dev_attr = {};
>  	struct vdpasim *simdev;
>  	int ret;
> @@ -152,6 +145,10 @@ static int vdpasim_net_dev_add(struct vdpa_mgmt_dev *mdev, const char *name)
>  	if (IS_ERR(simdev))
>  		return PTR_ERR(simdev);
>  
> +	cfg = simdev->config;
> +	eth_random_addr(cfg->mac);
> +	cfg->mtu = cpu_to_vdpasim16(simdev, 1500);
> +
>  	ret = _vdpa_register_device(&simdev->vdpa);
>  	if (ret)
>  		goto reg_err;

Hmm moving it here is problematic:
this part happens before set_features so I suspect
endian-ness will be wrong for BE hosts ...


> @@ -171,9 +168,25 @@ static void vdpasim_net_dev_del(struct vdpa_mgmt_dev *mdev,
>  	_vdpa_unregister_device(&simdev->vdpa);
>  }
>  
> +static int
> +vdpasim_net_dev_config_set(struct vdpa_mgmt_dev *mdev,
> +			   struct vdpa_device *dev,
> +			   const struct vdpa_dev_config_set_attr *attrs)
> +{
> +	struct vdpasim *simdev = container_of(dev, struct vdpasim, vdpa);
> +	struct virtio_net_config *dev_cfg = simdev->config;
> +
> +	if (attrs->mask.mac_valid)
> +		memcpy(dev_cfg->mac, attrs->cfg.mac, sizeof(dev_cfg->mac));
> +	if (attrs->mask.mtu_valid)
> +		dev_cfg->mtu = cpu_to_vdpasim16(simdev, attrs->cfg.mtu);
> +	return 0;
> +}
> +
>  static const struct vdpa_mgmtdev_ops vdpasim_net_mgmtdev_ops = {
>  	.dev_add = vdpasim_net_dev_add,
> -	.dev_del = vdpasim_net_dev_del
> +	.dev_del = vdpasim_net_dev_del,
> +	.dev_config_set = vdpasim_net_dev_config_set,
>  };
>  
>  static struct virtio_device_id id_table[] = {
> @@ -198,14 +211,6 @@ static int __init vdpasim_net_init(void)
>  {
>  	int ret;
>  
> -	if (macaddr) {
> -		mac_pton(macaddr, macaddr_buf);
> -		if (!is_valid_ether_addr(macaddr_buf))
> -			return -EADDRNOTAVAIL;
> -	} else {
> -		eth_random_addr(macaddr_buf);
> -	}
> -
>  	ret = device_register(&vdpasim_net_mgmtdev);
>  	if (ret)
>  		return ret;
> -- 
> 2.26.2

_______________________________________________
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