[PATCH v3 06/12] conf: Add tpm helpers for future use

Luke Yue lukedyue at gmail.com
Wed Nov 10 14:24:25 UTC 2021


Currently it will only be used in the test driver.

Signed-off-by: Luke Yue <lukedyue at 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




More information about the libvir-list mailing list