} 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)
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;
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:
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;