From 2da71d8e43c59431c0a621e7065dee02199f418a Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Fri, 1 Dec 2023 22:48:55 +0100 Subject: [PATCH] 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 --- src/qemu/qemu_process.c | 45 ++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 16 deletions(-) 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 */ -- 2.39.5