qemu-devel
[Top][All Lists]
Advanced

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

[RFC] virtio-net: check the mac address for vdpa device


From: Cindy Lu
Subject: [RFC] virtio-net: check the mac address for vdpa device
Date: Tue, 9 Jul 2024 10:27:07 +0800

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>
---
 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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]