[PATCH 7/9] ch_domain: Allow controller and chr devices

William Douglas william.douglas at intel.com
Wed Sep 8 18:01:21 UTC 2021


With the console and serial device handling fully functional, allow
the required device types to be specified in the domain
configuration.

The configuration only supports a single serial or console device.

Signed-off-by: William Douglas <william.douglas at intel.com>
---
 src/ch/ch_domain.c | 33 +++++++++++++++++++++++++++++++--
 1 file changed, 31 insertions(+), 2 deletions(-)

diff --git a/src/ch/ch_domain.c b/src/ch/ch_domain.c
index a6b87e28e5..ed01f637b1 100644
--- a/src/ch/ch_domain.c
+++ b/src/ch/ch_domain.c
@@ -215,6 +215,8 @@ chValidateDomainDeviceDef(const virDomainDeviceDef *dev,
     case VIR_DOMAIN_DEVICE_NET:
     case VIR_DOMAIN_DEVICE_MEMORY:
     case VIR_DOMAIN_DEVICE_VSOCK:
+    case VIR_DOMAIN_DEVICE_CONTROLLER:
+    case VIR_DOMAIN_DEVICE_CHR:
         break;
 
     case VIR_DOMAIN_DEVICE_LEASE:
@@ -224,12 +226,10 @@ chValidateDomainDeviceDef(const virDomainDeviceDef *dev,
     case VIR_DOMAIN_DEVICE_VIDEO:
     case VIR_DOMAIN_DEVICE_HOSTDEV:
     case VIR_DOMAIN_DEVICE_WATCHDOG:
-    case VIR_DOMAIN_DEVICE_CONTROLLER:
     case VIR_DOMAIN_DEVICE_GRAPHICS:
     case VIR_DOMAIN_DEVICE_HUB:
     case VIR_DOMAIN_DEVICE_REDIRDEV:
     case VIR_DOMAIN_DEVICE_SMARTCARD:
-    case VIR_DOMAIN_DEVICE_CHR:
     case VIR_DOMAIN_DEVICE_MEMBALLOON:
     case VIR_DOMAIN_DEVICE_NVRAM:
     case VIR_DOMAIN_DEVICE_RNG:
@@ -254,6 +254,35 @@ chValidateDomainDeviceDef(const virDomainDeviceDef *dev,
         return -1;
     }
 
+    if ((def->nconsoles &&
+         def->consoles[0]->source->type == VIR_DOMAIN_CHR_TYPE_PTY)
+        && (def->nserials &&
+            def->serials[0]->source->type == VIR_DOMAIN_CHR_TYPE_PTY)) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("Only a single console or serial can be configured for this domain"));
+        return -1;
+    } else if (def->nconsoles > 1) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("Only a single console can be configured for this domain"));
+        return -1;
+    } else if (def->nserials > 1) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("Only a single serial can be configured for this domain"));
+        return -1;
+    }
+
+    if (def->nconsoles && def->consoles[0]->source->type != VIR_DOMAIN_CHR_TYPE_PTY) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("Console can only be enabled for a PTY"));
+        return -1;
+    }
+
+    if (def->nserials && def->serials[0]->source->type != VIR_DOMAIN_CHR_TYPE_PTY) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("Serial can only be enabled for a PTY"));
+        return -1;
+    }
+
     return 0;
 }
 
-- 
2.31.1




More information about the libvir-list mailing list