]> xenbits.xensource.com Git - people/aperard/libvirt.git/commitdiff
qemu: process: Separate setup of network device objects
authorPeter Krempa <pkrempa@redhat.com>
Fri, 1 Dec 2023 21:48:55 +0000 (22:48 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 4 Jan 2024 21:26:10 +0000 (22:26 +0100)
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 <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_process.c

index 7770e7e7ebfbbd9ecb7033cb0df13fec65f66e3a..3563ad215c2b8a82722f8a206649a64f482e5214 100644 (file)
@@ -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 */