int nnodes;
size_t i;
g_autofree char *path = NULL;
- g_autofree char *model = NULL;
- g_autofree char *backend = NULL;
- g_autofree char *version = NULL;
g_autofree char *secretuuid = NULL;
g_autofree char *persistent_state = NULL;
g_autofree xmlNodePtr *backends = NULL;
def = g_new0(virDomainTPMDef, 1);
- model = virXMLPropString(node, "model");
- if (model != NULL &&
- (def->model = virDomainTPMModelTypeFromString(model)) <= 0) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("Unknown TPM frontend model '%s'"), model);
+ if (virXMLPropEnum(node, "model",
+ virDomainTPMModelTypeFromString,
+ VIR_XML_PROP_NONZERO,
+ &def->model) < 0)
goto error;
- }
ctxt->node = node;
goto error;
}
- if (!(backend = virXMLPropString(backends[0], "type"))) {
- virReportError(VIR_ERR_XML_ERROR, "%s",
- _("missing TPM device backend type"));
- goto error;
- }
-
- if ((def->type = virDomainTPMBackendTypeFromString(backend)) < 0) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("Unknown TPM backend type '%s'"),
- backend);
+ if (virXMLPropEnum(backends[0], "type",
+ virDomainTPMBackendTypeFromString,
+ VIR_XML_PROP_REQUIRED,
+ &def->type) < 0)
goto error;
- }
switch (def->type) {
case VIR_DOMAIN_TPM_TYPE_PASSTHROUGH:
def->data.passthrough.source->data.file.path = g_steal_pointer(&path);
break;
case VIR_DOMAIN_TPM_TYPE_EMULATOR:
- version = virXMLPropString(backends[0], "version");
- if (version &&
- (def->data.emulator.version = virDomainTPMVersionTypeFromString(version)) <= 0) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("Unsupported TPM version '%s'"),
- version);
+ if (virXMLPropEnum(backends[0], "version",
+ virDomainTPMVersionTypeFromString,
+ VIR_XML_PROP_NONZERO,
+ &def->data.emulator.version) < 0)
goto error;
- }
if (!(def->data.emulator.source = virDomainChrSourceDefNew(xmlopt)))
goto error;
#define VIR_DOMAIN_TPM_DEFAULT_DEVICE "/dev/tpm0"
struct _virDomainTPMDef {
- int type; /* virDomainTPMBackendType */
+ virDomainTPMModel model;
+ virDomainTPMBackendType type;
virDomainDeviceInfo info;
- int model; /* virDomainTPMModel */
union {
struct {
virDomainChrSourceDef *source;
} passthrough;
struct {
- int version; /* virDomainTPMVersion */
+ virDomainTPMVersion version;
virDomainChrSourceDef *source;
char *storagepath;
char *logfile;