Refactor bhyveDomainDeviceDefValidate() to use switch/case instead of
series of ifs which makes it easier to follow.

Signed-off-by: Roman Bogorodskiy <[email protected]>
---
 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

Reply via email to