From: Peter Krempa Date: Fri, 1 Dec 2023 21:48:55 +0000 (+0100) Subject: qemu: process: Separate setup of network device objects X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=2da71d8e43c59431c0a621e7065dee02199f418a;p=libvirt.git qemu: process: Separate setup of network device objects Separate the SLIRP bits from 'qemuProcessNetworkPrepareDevices' and do the setup of the internal data when setting up domain data. This will allow tests to use the same code path to lookup data for a network. Signed-off-by: Peter Krempa Reviewed-by: Michal Privoznik --- diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 7770e7e7eb..3563ad215c 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5704,12 +5704,8 @@ qemuProcessInit(virQEMUDriver *driver, } -/** - * qemuProcessNetworkPrepareDevices - */ static int -qemuProcessNetworkPrepareDevices(virQEMUDriver *driver, - virDomainObj *vm) +qemuProcessPrepareDomainNetwork(virDomainObj *vm) { virDomainDef *def = vm->def; qemuDomainObjPrivate *priv = vm->privateData; @@ -5761,15 +5757,32 @@ qemuProcessNetworkPrepareDevices(virQEMUDriver *driver, if (virDomainHostdevInsert(def, hostdev) < 0) return -1; - } else if (actualType == VIR_DOMAIN_NET_TYPE_USER && - net->backend.type == VIR_DOMAIN_NET_BACKEND_DEFAULT && - !priv->disableSlirp && - virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DBUS_VMSTATE)) { - if (qemuInterfacePrepareSlirp(driver, net) < 0) + } + } + return 0; +} + + +static int +qemuProcessPrepareHostNetwork(virDomainObj *vm) +{ + qemuDomainObjPrivate *priv = vm->privateData; + size_t i; + + for (i = 0; i < vm->def->nnets; i++) { + virDomainNetDef *net = vm->def->nets[i]; + virDomainNetType actualType = virDomainNetGetActualType(net); + + if (actualType == VIR_DOMAIN_NET_TYPE_USER && + net->backend.type == VIR_DOMAIN_NET_BACKEND_DEFAULT && + !priv->disableSlirp && + virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DBUS_VMSTATE)) { + if (qemuInterfacePrepareSlirp(priv->driver, net) < 0) return -1; - } + } } + return 0; } @@ -6626,6 +6639,10 @@ qemuProcessPrepareDomain(virQEMUDriver *driver, if (qemuProcessPrepareDomainHostdevs(vm, priv) < 0) return -1; + VIR_DEBUG("Setting up network devices"); + if (qemuProcessPrepareDomainNetwork(vm) < 0) + return -1; + VIR_DEBUG("Prepare chardev source backends"); if (qemuProcessPrepareChardevSource(vm->def, cfg) < 0) return -1; @@ -7191,12 +7208,8 @@ qemuProcessPrepareHost(virQEMUDriver *driver, if (qemuProcessOpenVhostVsock(vm->def->vsock) < 0) return -1; } - /* network devices must be "prepared" before hostdevs, because - * setting up a network device might create a new hostdev that - * will need to be setup. - */ VIR_DEBUG("Preparing network devices"); - if (qemuProcessNetworkPrepareDevices(driver, vm) < 0) + if (qemuProcessPrepareHostNetwork(vm) < 0) return -1; /* Must be run before security labelling */