[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC] virtio-net: check the mac address for vdpa device
From: |
Cindy Lu |
Subject: |
Re: [RFC] virtio-net: check the mac address for vdpa device |
Date: |
Tue, 9 Jul 2024 10:40:28 +0800 |
On Tue, 9 Jul 2024 at 10:33, Jason Wang <jasowang@redhat.com> wrote:
>
> On Tue, Jul 9, 2024 at 10:27 AM Cindy Lu <lulu@redhat.com> wrote:
> >
> > When using VDPA device, we should verify whether the MAC address in the
> > hardware matches the MAC address from the QEMU command line. If not,
> > we will need to update the related information.
> >
> > Signed-off-by: Cindy Lu <lulu@redhat.com>
>
> This seems to be a workaround, for example it means the mac address
> set from the qemu command line has the higher priority compared to the
> one that is provisioned by the host?
>
> At least we need to have a warning here?
>
In this design, the MAC address from the host will take higher
priority over the MAC address from the command line. I'm not sure if
this is acceptable?
sure, will add some warning here
> Thanks
>
> > ---
> > hw/net/virtio-net.c | 15 +++++++++++----
> > 1 file changed, 11 insertions(+), 4 deletions(-)
> >
> > diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
> > index 9c7e85caea..db04331b82 100644
> > --- a/hw/net/virtio-net.c
> > +++ b/hw/net/virtio-net.c
> > @@ -3739,10 +3739,17 @@ static void virtio_net_device_realize(DeviceState
> > *dev, Error **errp)
> > nc->rxfilter_notify_enabled = 1;
> >
> > if (nc->peer && nc->peer->info->type == NET_CLIENT_DRIVER_VHOST_VDPA) {
> > - struct virtio_net_config netcfg = {};
> > - memcpy(&netcfg.mac, &n->nic_conf.macaddr, ETH_ALEN);
> > - vhost_net_set_config(get_vhost_net(nc->peer),
> > - (uint8_t *)&netcfg, 0, ETH_ALEN,
> > VHOST_SET_CONFIG_TYPE_FRONTEND);
> > + struct virtio_net_config netcfg = {};
> > + static const MACAddr zero = {.a = {0, 0, 0, 0, 0, 0}};
> > + vhost_net_get_config(get_vhost_net(nc->peer), (uint8_t *)&netcfg,
> > + ETH_ALEN);
> > + if ((memcmp(&netcfg.mac, &n->nic_conf.macaddr, sizeof(MACAddr)) != 0)
> > &&
> > + memcmp(&netcfg.mac, &zero, sizeof(zero) != 0)) {
> > + memcpy(&n->nic_conf.macaddr, &netcfg.mac, sizeof(MACAddr));
> > + memcpy(&n->mac[0], &netcfg.mac, sizeof(MACAddr));
> > + }
> > + vhost_net_set_config(get_vhost_net(nc->peer), (uint8_t *)&netcfg, 0,
> > + ETH_ALEN, VHOST_SET_CONFIG_TYPE_FRONTEND);
> > }
> > QTAILQ_INIT(&n->rsc_chains);
> > n->qdev = dev;
> > --
> > 2.45.0
> >
>