When using a VDPA device, it's important to ensure that the MAC address is correctly set. Add a new parameter in qemu cmdline to enable this check, default value is false
The usage is: .... -netdev type=vhost-vdpa,vhostdev=/dev/vhost-vdpa-0,id=vhost-vdpa0,macstrickcheck=true\ -device virtio-net-pci,netdev=vhost-vdpa0\ .... Signed-off-by: Cindy Lu <l...@redhat.com> --- include/net/net.h | 1 + net/vhost-vdpa.c | 4 ++++ qapi/net.json | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/include/net/net.h b/include/net/net.h index c8f679761b..e00651a97b 100644 --- a/include/net/net.h +++ b/include/net/net.h @@ -112,6 +112,7 @@ struct NetClientState { bool is_netdev; bool do_not_pad; /* do not pad to the minimum ethernet frame length */ bool is_datapath; + bool check_mac; QTAILQ_HEAD(, NetFilterState) filters; }; diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c index 46b02c50be..071c3ff065 100644 --- a/net/vhost-vdpa.c +++ b/net/vhost-vdpa.c @@ -1860,6 +1860,8 @@ int net_init_vhost_vdpa(const Netdev *netdev, const char *name, iova_range, features, shared, errp); if (!ncs[i]) goto err; + + ncs[i]->check_mac = opts->macstrickcheck; } if (has_cvq) { @@ -1872,6 +1874,8 @@ int net_init_vhost_vdpa(const Netdev *netdev, const char *name, errp); if (!nc) goto err; + + nc->check_mac = opts->macstrickcheck; } return 0; diff --git a/qapi/net.json b/qapi/net.json index 87fc0d0b28..7d75119858 100644 --- a/qapi/net.json +++ b/qapi/net.json @@ -510,6 +510,10 @@ # @queues: number of queues to be created for multiqueue vhost-vdpa # (default: 1) # +# @macstrickcheck: Enable the check for whether the device's MAC address +# and the MAC in QEMU command line are acceptable for booting. +# (default: false) +# # @x-svq: Start device with (experimental) shadow virtqueue. (Since # 7.1) (default: false) # @@ -524,6 +528,7 @@ '*vhostdev': 'str', '*vhostfd': 'str', '*queues': 'int', + '*macstrickcheck': 'bool', '*x-svq': {'type': 'bool', 'features' : [ 'unstable'] } } } ## -- 2.45.0