Refactor bhyveDomainDeviceDefValidate() to use switch/case instead of
series of ifs which makes it easier to follow.
Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
---
src/bhyve/bhyve_domain.c | 103 +++++++++++++++++++++++++++------------
1 file changed, 71 insertions(+), 32 deletions(-)
diff --git a/src/bhyve/bhyve_domain.c b/src/bhyve/bhyve_domain.c
index 63d61b9f85..16ca4b1d0f 100644
--- a/src/bhyve/bhyve_domain.c
+++ b/src/bhyve/bhyve_domain.c
@@ -248,13 +248,15 @@ bhyveDomainDeviceDefValidate(const virDomainDeviceDef *dev,
void *opaque G_GNUC_UNUSED,
void *parseOpaque G_GNUC_UNUSED)
{
- if (dev->type == VIR_DOMAIN_DEVICE_CONTROLLER &&
- dev->data.controller->type == VIR_DOMAIN_CONTROLLER_TYPE_ISA &&
- dev->data.controller->idx != 0) {
- return -1;
- }
+ switch (dev->type) {
+ case VIR_DOMAIN_DEVICE_CONTROLLER:
+ if (dev->data.controller->type == VIR_DOMAIN_CONTROLLER_TYPE_ISA &&
+ dev->data.controller->idx != 0) {
+ return -1;
+ }
+ break;
- if (dev->type == VIR_DOMAIN_DEVICE_RNG) {
+ case VIR_DOMAIN_DEVICE_RNG:
if (dev->data.rng->model == VIR_DOMAIN_RNG_MODEL_VIRTIO) {
if (dev->data.rng->backend == VIR_DOMAIN_RNG_BACKEND_RANDOM) {
if (STRNEQ(dev->data.rng->source.file, "/dev/random")) {
@@ -272,39 +274,76 @@ bhyveDomainDeviceDefValidate(const virDomainDeviceDef *dev,
_("Only 'virio' RNG device model is supported"));
return -1;
}
- } else if (dev->type == VIR_DOMAIN_DEVICE_CHR &&
- dev->data.chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL) {
- virDomainChrDef *chr = dev->data.chr;
- if (chr->source->type != VIR_DOMAIN_CHR_TYPE_NMDM &&
- chr->source->type != VIR_DOMAIN_CHR_TYPE_TCP) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("Only 'nmdm' and 'tcp' console types are supported"));
- return -1;
- }
- if (chr->target.port > 3) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("Only four serial ports are supported"));
- return -1;
- }
- if (chr->source->type == VIR_DOMAIN_CHR_TYPE_TCP) {
- if (chr->source->data.tcp.listen == false) {
+ break;
+
+ case VIR_DOMAIN_DEVICE_CHR:
+ if (dev->data.chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL) {
+ virDomainChrDef *chr = dev->data.chr;
+ if (chr->source->type != VIR_DOMAIN_CHR_TYPE_NMDM &&
+ chr->source->type != VIR_DOMAIN_CHR_TYPE_TCP) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("Only listening TCP sockets are supported"));
+ _("Only 'nmdm' and 'tcp' console types are supported"));
return -1;
}
-
- if (chr->source->data.tcp.protocol != VIR_DOMAIN_CHR_TCP_PROTOCOL_RAW) {
+ if (chr->target.port > 3) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("Only 'raw' protocol is supported for TCP sockets"));
+ _("Only four serial ports are supported"));
return -1;
}
+ if (chr->source->type == VIR_DOMAIN_CHR_TYPE_TCP) {
+ if (chr->source->data.tcp.listen == false) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("Only listening TCP sockets are supported"));
+ return -1;
+ }
+
+ if (chr->source->data.tcp.protocol != VIR_DOMAIN_CHR_TCP_PROTOCOL_RAW) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("Only 'raw' protocol is supported for TCP sockets"));
+ return -1;
+ }
+ }
}
- } else if (dev->type == VIR_DOMAIN_DEVICE_DISK &&
- dev->data.disk->rotation_rate &&
- dev->data.disk->bus != VIR_DOMAIN_DISK_BUS_SATA) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("rotation rate is only valid for SATA bus"));
- return -1;
+ break;
+
+ case VIR_DOMAIN_DEVICE_DISK: {
+ virDomainDiskDef *disk = dev->data.disk;
+
+ if (disk->rotation_rate &&
+ disk->bus != VIR_DOMAIN_DISK_BUS_SATA) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("rotation rate is only valid for SATA bus"));
+ return -1;
+ }
+
+ break;
+ }
+ case VIR_DOMAIN_DEVICE_AUDIO:
+ case VIR_DOMAIN_DEVICE_CRYPTO:
+ case VIR_DOMAIN_DEVICE_FS:
+ case VIR_DOMAIN_DEVICE_GRAPHICS:
+ case VIR_DOMAIN_DEVICE_HOSTDEV:
+ case VIR_DOMAIN_DEVICE_HUB:
+ case VIR_DOMAIN_DEVICE_INPUT:
+ case VIR_DOMAIN_DEVICE_IOMMU:
+ case VIR_DOMAIN_DEVICE_LAST:
+ case VIR_DOMAIN_DEVICE_LEASE:
+ case VIR_DOMAIN_DEVICE_MEMBALLOON:
+ case VIR_DOMAIN_DEVICE_MEMORY:
+ case VIR_DOMAIN_DEVICE_NET:
+ case VIR_DOMAIN_DEVICE_NONE:
+ case VIR_DOMAIN_DEVICE_NVRAM:
+ case VIR_DOMAIN_DEVICE_PANIC:
+ case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_REDIRDEV:
+ case VIR_DOMAIN_DEVICE_SHMEM:
+ case VIR_DOMAIN_DEVICE_SMARTCARD:
+ case VIR_DOMAIN_DEVICE_SOUND:
+ case VIR_DOMAIN_DEVICE_TPM:
+ case VIR_DOMAIN_DEVICE_VIDEO:
+ case VIR_DOMAIN_DEVICE_VSOCK:
+ case VIR_DOMAIN_DEVICE_WATCHDOG:
+ break;
}
return 0;
--
2.51.0
© 2016 - 2025 Red Hat, Inc.