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