]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Validate RNG model
authorMichal Privoznik <mprivozn@redhat.com>
Fri, 13 Nov 2020 19:29:30 +0000 (20:29 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Mon, 16 Nov 2020 17:26:41 +0000 (18:26 +0100)
The aim is to eliminate virDomainCapsDeviceDefValidate(). And in
order to do so, the domain RNG model has to be validated in
qemuValidateDomainRNGDef().

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
src/conf/domain_capabilities.c
src/qemu/qemu_validate.c

index 6ee8730111c4af6b5585d5c8bbd60d9394ea901a..b886ba70904c316483b0f7d89402448129968a78 100644 (file)
@@ -640,20 +640,6 @@ virDomainCapsFormat(const virDomainCaps *caps)
     } while (0)
 
 
-static int
-virDomainCapsDeviceRNGDefValidate(const virDomainCaps *caps,
-                                  const virDomainRNGDef *dev)
-{
-    if (ENUM_VALUE_MISSING(caps->rng.model, dev->model)) {
-        ENUM_VALUE_ERROR("rng model",
-                         virDomainRNGModelTypeToString(dev->model));
-        return -1;
-    }
-
-    return 0;
-}
-
-
 static int
 virDomainCapsDeviceVideoDefValidate(const virDomainCaps *caps,
                                     const virDomainVideoDef *dev)
@@ -676,9 +662,6 @@ virDomainCapsDeviceDefValidate(const virDomainCaps *caps,
     int ret = 0;
 
     switch ((virDomainDeviceType) dev->type) {
-    case VIR_DOMAIN_DEVICE_RNG:
-        ret = virDomainCapsDeviceRNGDefValidate(caps, dev->data.rng);
-        break;
     case VIR_DOMAIN_DEVICE_VIDEO:
         ret = virDomainCapsDeviceVideoDefValidate(caps, dev->data.video);
         break;
@@ -706,6 +689,7 @@ virDomainCapsDeviceDefValidate(const virDomainCaps *caps,
     case VIR_DOMAIN_DEVICE_HUB:
     case VIR_DOMAIN_DEVICE_MEMBALLOON:
     case VIR_DOMAIN_DEVICE_NVRAM:
+    case VIR_DOMAIN_DEVICE_RNG:
     case VIR_DOMAIN_DEVICE_TPM:
     case VIR_DOMAIN_DEVICE_PANIC:
     case VIR_DOMAIN_DEVICE_IOMMU:
index 79e765a21296d8a3c602c72a4e26583c54967fe2..c18865367eb198f168395c53f9facdeb7f93dcb7 100644 (file)
@@ -1883,6 +1883,31 @@ qemuValidateDomainRNGDef(const virDomainRNGDef *def,
         return -1;
     }
 
+    switch ((virDomainRNGModel) def->model) {
+    case VIR_DOMAIN_RNG_MODEL_VIRTIO:
+        if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_RNG)) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("domain configuration does not support rng model '%s'"),
+                           virDomainRNGModelTypeToString(def->model));
+            return -1;
+        }
+        break;
+
+    case VIR_DOMAIN_RNG_MODEL_VIRTIO_TRANSITIONAL:
+    case VIR_DOMAIN_RNG_MODEL_VIRTIO_NON_TRANSITIONAL:
+        if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PCI_TRANSITIONAL) &&
+            !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY)) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("domain configuration does not support rng model '%s'"),
+                           virDomainRNGModelTypeToString(def->model));
+            return -1;
+        }
+        break;
+
+    case VIR_DOMAIN_RNG_MODEL_LAST:
+        break;
+    }
+
     if (qemuValidateDomainVirtioOptions(def->virtio, qemuCaps) < 0)
         return -1;