[PATCH v5 4/8] conf: Add tpm helpers for future use

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Luke Yue <lukedyue@xxxxxxxxx>
---
As persistent_state and is bool type and its default value is false, so I
guess it's fine that it's not explicitly assigned with false.

link to context: https://listman.redhat.com/archives/libvir-list/2021-November/msg00874.html
---
 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 e19e3deb17..27643cab16 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -16768,6 +16768,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 && a->model != VIR_DOMAIN_TPM_MODEL_DEFAULT)
+        return false;
+
+    if (a->version != b->version && a->version != VIR_DOMAIN_TPM_MODEL_DEFAULT)
+        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 3bb1092b60..89031639cb 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -3941,6 +3941,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 abdc8eaef7..b6b8606063 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -667,7 +667,9 @@ virDomainTimerTrackTypeFromString;
 virDomainTimerTrackTypeToString;
 virDomainTPMBackendTypeFromString;
 virDomainTPMBackendTypeToString;
+virDomainTPMDefFind;
 virDomainTPMDefFree;
+virDomainTPMDefRemove;
 virDomainTPMModelTypeFromString;
 virDomainTPMModelTypeToString;
 virDomainTPMPcrBankTypeFromString;
-- 
2.35.1




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux