Currently it will only be used in the test driver.
Signed-off-by: Luke Yue <lukedyue(a)gmail.com>
---
src/conf/domain_conf.c | 67 ++++++++++++++++++++++++++++++++++++++++
src/conf/domain_conf.h | 6 ++++
src/libvirt_private.syms | 2 ++
3 files changed, 75 insertions(+)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 3193120b79..512bfab9e9 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -16931,6 +16931,73 @@ virDomainVsockDefEquals(const virDomainVsockDef *a,
}
+static bool
+virDomainTPMDefEquals(const virDomainTPMDef *a,
+ const virDomainTPMDef *b)
+{
+ if (a->type != b->type)
+ return false;
+
+ if (a->model != b->model)
+ return false;
+
+ if (a->version != b->version)
+ return false;
+
+ if (a->type == VIR_DOMAIN_TPM_TYPE_PASSTHROUGH) {
+ if (STRNEQ_NULLABLE(a->data.passthrough.source.data.file.path,
+ b->data.passthrough.source.data.file.path))
+ return false;
+ } else {
+ if (a->data.emulator.hassecretuuid != b->data.emulator.hassecretuuid)
+ return false;
+
+ if (a->data.emulator.hassecretuuid == true &&
+ memcmp(a->data.emulator.secretuuid,
+ b->data.emulator.secretuuid,
+ VIR_UUID_BUFLEN))
+ return false;
+
+ if (a->data.emulator.persistent_state !=
+ b->data.emulator.persistent_state)
+ return false;
+ }
+
+ if (a->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
+ !virDomainDeviceInfoAddressIsEqual(&a->info, &b->info))
+ return false;
+
+ return true;
+}
+
+
+ssize_t
+virDomainTPMDefFind(const virDomainDef *def,
+ const virDomainTPMDef *tpm)
+{
+ size_t i;
+
+ for (i = 0; i < def->ntpms; i++) {
+ if (virDomainTPMDefEquals(tpm, def->tpms[i]))
+ return i;
+ }
+
+ return -1;
+}
+
+
+virDomainTPMDef *
+virDomainTPMDefRemove(virDomainDef *def,
+ size_t idx)
+{
+ virDomainTPMDef *ret = def->tpms[idx];
+
+ VIR_DELETE_ELEMENT(def->tpms, idx, def->ntpms);
+
+ return ret;
+}
+
+
char *
virDomainDefGetDefaultEmulator(virDomainDef *def,
virCaps *caps)
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index a089b0b3de..715c8fbd16 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -3857,6 +3857,12 @@ bool virDomainVsockDefEquals(const virDomainVsockDef *a,
const virDomainVsockDef *b)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT;
+ssize_t virDomainTPMDefFind(const virDomainDef *def,
+ const virDomainTPMDef *tpm)
+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT;
+virDomainTPMDef *virDomainTPMDefRemove(virDomainDef *def, size_t idx)
+ ATTRIBUTE_NONNULL(1);
+
VIR_ENUM_DECL(virDomainTaint);
VIR_ENUM_DECL(virDomainTaintMessage);
VIR_ENUM_DECL(virDomainVirt);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 0252f7c9d6..68cc9c51cb 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -665,7 +665,9 @@ virDomainTimerTrackTypeFromString;
virDomainTimerTrackTypeToString;
virDomainTPMBackendTypeFromString;
virDomainTPMBackendTypeToString;
+virDomainTPMDefFind;
virDomainTPMDefFree;
+virDomainTPMDefRemove;
virDomainTPMModelTypeFromString;
virDomainTPMModelTypeToString;
virDomainTPMPcrBankTypeFromString;
--
2.33.1