domcaps: Report launchSecurity

In order to learn what types of <launchSecurity/> are supported
users can turn to domain capabilities and find <sev/> and
<s390-pv/> elements. While these may expose some additional info
on individual launchSecurity types, we are lacking clean
enumeration (like we do for say device models). And given that
SEV and SEV SNP share the same basis (info found under <sev/> is
applicable to SEV SNP too) we have no other way to report SEV SNP
support.

Therefore, report supported launchSecurity types in domain
capabilities.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Michal Privoznik 2024-06-25 09:53:57 +02:00
parent d00816209e
commit d460e17282
4 changed files with 43 additions and 0 deletions

View File

@ -798,3 +798,13 @@ are supported. The ``features`` enum corresponds to the ``<hyperv/>`` element
Please note that depending on the QEMU version some capabilities might be
missing even though QEMU does support them. This is because prior to QEMU-6.1.0
not all features were reported by QEMU.
Launch security
^^^^^^^^^^^^^^^
The ``launchSecurity`` element exposes supported aspects of encrypted guests.
The ``sectype`` enum corresponds to ``type`` attribute of ``<launchSecurity/>``
element as documented in `Launch Security
<formatdomain.html#launch-security>`__. :since:`(Since 10.5.0)` For additional
information on individual types, see sections above: `s390-pv capability`_ for
S390 PV, `SEV capabilities`_ for AMD SEV and/or AMD SEV-SNP.

View File

@ -707,6 +707,19 @@ virDomainCapsFeatureHypervFormat(virBuffer *buf,
FORMAT_EPILOGUE(hyperv);
}
static void
virDomainCapsLaunchSecurityFormat(virBuffer *buf,
const virDomainCapsLaunchSecurity *launchSecurity)
{
FORMAT_PROLOGUE(launchSecurity);
ENUM_PROCESS(launchSecurity, sectype, virDomainLaunchSecurityTypeToString);
FORMAT_EPILOGUE(launchSecurity);
}
static void
virDomainCapsFormatFeatures(const virDomainCaps *caps,
virBuffer *buf)
@ -728,6 +741,7 @@ virDomainCapsFormatFeatures(const virDomainCaps *caps,
virDomainCapsFeatureSEVFormat(&childBuf, caps->sev);
virDomainCapsFeatureSGXFormat(&childBuf, caps->sgx);
virDomainCapsFeatureHypervFormat(&childBuf, caps->hyperv);
virDomainCapsLaunchSecurityFormat(&childBuf, &caps->launchSecurity);
virXMLFormatElement(buf, "features", NULL, &childBuf);
}

View File

@ -165,6 +165,14 @@ struct _virDomainCapsFeatureHyperv {
virDomainCapsEnum features; /* Info about supported virDomainHyperv features */
};
STATIC_ASSERT_ENUM(VIR_DOMAIN_LAUNCH_SECURITY_LAST);
typedef struct _virDomainCapsLaunchSecurity virDomainCapsLaunchSecurity;
struct _virDomainCapsLaunchSecurity {
virTristateBool supported;
virDomainCapsEnum sectype; /* Info about supported virDomainLaunchSecurity */
};
typedef enum {
VIR_DOMCAPS_CPU_USABLE_UNKNOWN,
VIR_DOMCAPS_CPU_USABLE_YES,
@ -284,6 +292,7 @@ struct _virDomainCaps {
virSEVCapability *sev;
virSGXCapability *sgx;
virDomainCapsFeatureHyperv *hyperv;
virDomainCapsLaunchSecurity launchSecurity;
/* add new domain features here */
virTristateBool features[VIR_DOMAIN_CAPS_FEATURE_LAST];

View File

@ -285,6 +285,13 @@
</element>
</define>
<define name="launchSecurity">
<element name="launchSecurity">
<ref name="supported"/>
<ref name="enum"/>
</element>
</define>
<define name="features">
<element name="features">
<optional>
@ -317,6 +324,9 @@
<optional>
<ref name="hyperv"/>
</optional>
<optional>
<ref name='launchSecurity'/>
</optional>
</element>
</define>