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 <bogorodskiy(a)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