void virQEMUCapsFillDomainDeviceVideoCaps(virQEMUCapsPtr qemuCaps,
virDomainCapsDeviceVideoPtr dev);
+void virQEMUCapsFillDomainDeviceRNGCaps(virQEMUCapsPtr qemuCaps,
+ virDomainCapsDeviceRNGPtr rng);
bool virQEMUCapsGuestIsNative(virArch host,
virArch guest);
qemuValidateDomainRNGDef(const virDomainRNGDef *def,
virQEMUCapsPtr qemuCaps)
{
+ virDomainCapsDeviceRNG rngCaps = { 0 };
+
switch ((virDomainRNGBackend) def->backend) {
case VIR_DOMAIN_RNG_BACKEND_RANDOM:
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_RNG_RANDOM)) {
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;
+ virQEMUCapsFillDomainDeviceRNGCaps(qemuCaps, &rngCaps);
- 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 (!VIR_DOMAIN_CAPS_ENUM_IS_SET(rngCaps.model, def->model)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("domain configuration does not support rng model '%s'"),
+ virDomainRNGModelTypeToString(def->model));
+ return -1;
}
if (qemuValidateDomainVirtioOptions(def->virtio, qemuCaps) < 0)