Currently, domain capabilities do not include information about the supported console device types. While most of the drivers support 'pty' console type, it's not the case for bhyve. Without this information, management software cannot always generate compatible domain configuration.
To address that, extend domain capabilities like that: <devices> ... <console supported='yes'> <enum name='type'> <value>pty</value> <value>type2</value> ... </enum> </console> ... </devices> Signed-off-by: Roman Bogorodskiy <bogorods...@gmail.com> --- src/conf/domain_capabilities.c | 12 ++++++++++++ src/conf/domain_capabilities.h | 8 ++++++++ src/conf/schemas/domaincaps.rng | 10 ++++++++++ 3 files changed, 30 insertions(+) diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c index 27551f6102..f7cce92ca1 100644 --- a/src/conf/domain_capabilities.c +++ b/src/conf/domain_capabilities.c @@ -689,6 +689,17 @@ virDomainCapsDevicePanicFormat(virBuffer *buf, } +static void +virDomainCapsDeviceConsoleFormat(virBuffer *buf, + const virDomainCapsDeviceConsole *console) +{ + FORMAT_PROLOGUE(console); + + ENUM_PROCESS(console, type, virDomainChrTypeToString); + + FORMAT_EPILOGUE(console); +} + /** * virDomainCapsFeatureGICFormat: * @buf: target buffer @@ -871,6 +882,7 @@ virDomainCapsFormat(const virDomainCaps *caps) virDomainCapsDeviceCryptoFormat(&buf, &caps->crypto); virDomainCapsDeviceNetFormat(&buf, &caps->net); virDomainCapsDevicePanicFormat(&buf, &caps->panic); + virDomainCapsDeviceConsoleFormat(&buf, &caps->console); virBufferAdjustIndent(&buf, -2); virBufferAddLit(&buf, "</devices>\n"); diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h index 69dd1a15c1..60d5fe77de 100644 --- a/src/conf/domain_capabilities.h +++ b/src/conf/domain_capabilities.h @@ -265,6 +265,13 @@ struct _virDomainCapsDevicePanic { virDomainCapsEnum model; /* virDomainPanicModel */ }; +typedef struct _virDomainCapsDeviceConsole virDomainCapsDeviceConsole; +struct _virDomainCapsDeviceConsole { + virTristateBool supported; + virDomainCapsEnum type; /* virDomainChrType */ +}; + + typedef enum { VIR_DOMAIN_CAPS_FEATURE_IOTHREADS = 0, VIR_DOMAIN_CAPS_FEATURE_VMCOREINFO, @@ -304,6 +311,7 @@ struct _virDomainCaps { virDomainCapsDeviceCrypto crypto; virDomainCapsDeviceNet net; virDomainCapsDevicePanic panic; + virDomainCapsDeviceConsole console; /* add new domain devices here */ virDomainCapsFeatureGIC gic; diff --git a/src/conf/schemas/domaincaps.rng b/src/conf/schemas/domaincaps.rng index 595dbcd634..8bc34691c7 100644 --- a/src/conf/schemas/domaincaps.rng +++ b/src/conf/schemas/domaincaps.rng @@ -237,6 +237,9 @@ <optional> <ref name="panic"/> </optional> + <optional> + <ref name="console"/> + </optional> </element> </define> @@ -317,6 +320,13 @@ </element> </define> + <define name="console"> + <element name="console"> + <ref name="supported"/> + <ref name="enum"/> + </element> + </define> + <define name="interface"> <element name="interface"> <ref name="supported"/> -- 2.49.0