From: Peter Krempa Date: Mon, 2 Jun 2025 14:55:16 +0000 (+0200) Subject: qemu: command: Don't attempt to set backend MTU for networks which don't use host... X-Git-Tag: v11.5.0-rc1~85 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c61d6d060667020521b813af152560d8da8d63ab;p=thirdparty%2Flibvirt.git qemu: command: Don't attempt to set backend MTU for networks which don't use host backend directly Attempting to set MTU for network types which don't actually use the network device on the host results in a failure. The 'mtu' property is also used e.g. for the 'host_mtu' property of e.g. 'virtio-net-pci' which is applied even in vhost-user mode. Use the existing switch which selects devices without a network device backend on the host side and skip setting the MTU. Tested by running 'passt' in vhost-user mode manually: passt -f --vhost-user -s /tmp/vh.sock and the following XML:
The OS in the guest reports MTU 9999. Closes: https://gitlab.com/libvirt/libvirt/-/issues/717 Closes: https://gitlab.com/libvirt/libvirt/-/issues/192 Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index fec48edfc1..edafe1588c 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -8713,6 +8713,7 @@ qemuBuildInterfaceCommandLine(virQEMUDriver *driver, bool requireNicdev = false; g_autoptr(virJSONValue) hostnetprops = NULL; qemuDomainNetworkPrivate *netpriv = QEMU_DOMAIN_NETWORK_PRIVATE(net); + bool setBackendMTU = true; GSList *n; if (qemuDomainValidateActualNetDef(net, qemuCaps) < 0) @@ -8802,6 +8803,7 @@ qemuBuildInterfaceCommandLine(virQEMUDriver *driver, case VIR_DOMAIN_NET_TYPE_NULL: case VIR_DOMAIN_NET_TYPE_VDS: case VIR_DOMAIN_NET_TYPE_LAST: + setBackendMTU = false; /* These types don't use a network device on the host, but * instead use some other type of connection to the emulated * device in the qemu process. @@ -8842,7 +8844,7 @@ qemuBuildInterfaceCommandLine(virQEMUDriver *driver, } } - if (net->mtu && net->managed_tap != VIR_TRISTATE_BOOL_NO && + if (net->mtu && setBackendMTU && net->managed_tap != VIR_TRISTATE_BOOL_NO && virNetDevSetMTU(net->ifname, net->mtu) < 0) goto cleanup;