Extend bhyveDomainDeviceDefValidate() to check that:

 - only 'nmdm' or 'tcp' serial devices are used,
 - serial device count is not more than supported,
 - only listening raw TCP sockets are used.

Signed-off-by: Roman Bogorodskiy <bogorods...@gmail.com>
---
 src/bhyve/bhyve_domain.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/src/bhyve/bhyve_domain.c b/src/bhyve/bhyve_domain.c
index c9bbf27d83..9dec300a99 100644
--- a/src/bhyve/bhyve_domain.c
+++ b/src/bhyve/bhyve_domain.c
@@ -263,6 +263,33 @@ 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) {
+                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;
+            }
+        }
     }
 
     return 0;
-- 
2.49.0

Reply via email to