From: Michal Privoznik Date: Fri, 28 Jun 2024 07:56:46 +0000 (+0200) Subject: qemu_domain: Set 'passt' net backend if 'default' is unsupported X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=8f34fd0c4cb3549e5d834234a20425c380bb2511;p=libvirt.git qemu_domain: Set 'passt' net backend if 'default' is unsupported It may happen that QEMU is compiled without SLIRP but with support for passt. In such case it is acceptable to alter user provided configuration and switch backend to passt as it offers all the features as SLIRP. Resolves: https://issues.redhat.com/browse/RHEL-45518 Signed-off-by: Michal Privoznik Reviewed-by: Peter Krempa --- diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 1a90311ca5..2134b11038 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -5975,12 +5975,25 @@ qemuDomainDeviceNetDefPostParse(virDomainNetDef *net, virQEMUCaps *qemuCaps) { if (net->type == VIR_DOMAIN_NET_TYPE_VDPA && - !virDomainNetGetModelString(net)) + !virDomainNetGetModelString(net)) { net->model = VIR_DOMAIN_NET_MODEL_VIRTIO; - else if (net->type != VIR_DOMAIN_NET_TYPE_HOSTDEV && + } else if (net->type != VIR_DOMAIN_NET_TYPE_HOSTDEV && !virDomainNetGetModelString(net) && - virDomainNetResolveActualType(net) != VIR_DOMAIN_NET_TYPE_HOSTDEV) + virDomainNetResolveActualType(net) != VIR_DOMAIN_NET_TYPE_HOSTDEV) { net->model = qemuDomainDefaultNetModel(def, qemuCaps); + } + + if (net->type == VIR_DOMAIN_NET_TYPE_USER && + net->backend.type == VIR_DOMAIN_NET_BACKEND_DEFAULT) { + virDomainCapsDeviceNet netCaps = { }; + + virQEMUCapsFillDomainDeviceNetCaps(qemuCaps, &netCaps); + + if (!VIR_DOMAIN_CAPS_ENUM_IS_SET(netCaps.backendType, VIR_DOMAIN_NET_BACKEND_DEFAULT) && + VIR_DOMAIN_CAPS_ENUM_IS_SET(netCaps.backendType, VIR_DOMAIN_NET_BACKEND_PASST)) { + net->backend.type = VIR_DOMAIN_NET_BACKEND_PASST; + } + } return 0; }