Introduce the bare necessities to add privateData to _virStorageSource.
Subsequent patches will fill in more details.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/conf/domain_conf.h | 1 +
src/qemu/qemu_domain.c | 43 +++++++++++++++++++++++++++++++++++++++++++
src/qemu/qemu_domain.h | 13 +++++++++++++
src/util/virstoragefile.c | 1 +
src/util/virstoragefile.h | 3 +++
5 files changed, 61 insertions(+)
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index e11ae5247..e727de423 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2620,6 +2620,7 @@ struct _virDomainXMLPrivateDataCallbacks {
/* note that private data for devices are not copied when using
* virDomainDefCopy and similar functions */
virDomainXMLPrivateDataNewFunc diskNew;
+ virDomainXMLPrivateDataNewFunc diskSrcNew;
virDomainXMLPrivateDataNewFunc hostdevNew;
virDomainXMLPrivateDataNewFunc vcpuNew;
virDomainXMLPrivateDataNewFunc chrSourceNew;
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index cb371f1e8..9945778d9 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -926,6 +926,48 @@ qemuDomainDiskPrivateDispose(void *obj)
}
+static virClassPtr qemuDomainDiskSrcPrivateClass;
+static void qemuDomainDiskSrcPrivateDispose(void *obj);
+
+static int
+qemuDomainDiskSrcPrivateOnceInit(void)
+{
+ qemuDomainDiskSrcPrivateClass = virClassNew(virClassForObject(),
+ "qemuDomainDiskSrcPrivate",
+ sizeof(qemuDomainDiskSrcPrivate),
+ qemuDomainDiskSrcPrivateDispose);
+ if (!qemuDomainDiskSrcPrivateClass)
+ return -1;
+ else
+ return 0;
+}
+
+VIR_ONCE_GLOBAL_INIT(qemuDomainDiskSrcPrivate)
+
+static virObjectPtr
+qemuDomainDiskSrcPrivateNew(void)
+{
+ qemuDomainDiskSrcPrivatePtr priv;
+
+ if (qemuDomainDiskSrcPrivateInitialize() < 0)
+ return NULL;
+
+ if (!(priv = virObjectNew(qemuDomainDiskSrcPrivateClass)))
+ return NULL;
+
+ return (virObjectPtr) priv;
+}
+
+
+static void
+qemuDomainDiskSrcPrivateDispose(void *obj)
+{
+ qemuDomainDiskSrcPrivatePtr priv = obj;
+
+ qemuDomainSecretInfoFree(&priv->secinfo);
+}
+
+
static virClassPtr qemuDomainHostdevPrivateClass;
static void qemuDomainHostdevPrivateDispose(void *obj);
@@ -2276,6 +2318,7 @@ virDomainXMLPrivateDataCallbacks virQEMUDriverPrivateDataCallbacks =
{
.alloc = qemuDomainObjPrivateAlloc,
.free = qemuDomainObjPrivateFree,
.diskNew = qemuDomainDiskPrivateNew,
+ .diskSrcNew = qemuDomainDiskSrcPrivateNew,
.vcpuNew = qemuDomainVcpuPrivateNew,
.hostdevNew = qemuDomainHostdevPrivateNew,
.chrSourceNew = qemuDomainChrSourcePrivateNew,
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index 09201b1a4..f2c086d5d 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -359,6 +359,19 @@ struct _qemuDomainDiskPrivate {
bool removable; /* device media can be removed/changed */
};
+# define QEMU_DOMAIN_DISK_SRC_PRIVATE(src) \
+ ((qemuDomainDiskSrcPrivatePtr) (src)->privateData)
+
+typedef struct _qemuDomainDiskSrcPrivate qemuDomainDiskSrcPrivate;
+typedef qemuDomainDiskSrcPrivate *qemuDomainDiskSrcPrivatePtr;
+struct _qemuDomainDiskSrcPrivate {
+ virObject parent;
+
+ /* for each storage source using auth/secret
+ * NB: *not* to be written to qemu domain object XML */
+ qemuDomainSecretInfoPtr secinfo;
+};
+
# define QEMU_DOMAIN_HOSTDEV_PRIVATE(hostdev) \
((qemuDomainHostdevPrivatePtr) (hostdev)->privateData)
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index 488798252..011916fa4 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -2272,6 +2272,7 @@ virStorageSourceClear(virStorageSourcePtr def)
virStorageNetHostDefFree(def->nhosts, def->hosts);
virStorageAuthDefFree(def->auth);
+ virObjectUnref(def->privateData);
VIR_FREE(def->nodestorage);
VIR_FREE(def->nodeformat);
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
index b3a786b42..d31517fbc 100644
--- a/src/util/virstoragefile.h
+++ b/src/util/virstoragefile.h
@@ -27,6 +27,7 @@
# include <sys/stat.h>
# include "virbitmap.h"
+# include "virobject.h"
# include "virseclabel.h"
# include "virstorageencryption.h"
# include "virutil.h"
@@ -241,6 +242,8 @@ struct _virStorageSource {
bool authDefined;
virStorageEncryptionPtr encryption;
+ virObjectPtr privateData; /* Usable to store hypervisor specific data */
+
char *driverName;
int format; /* virStorageFileFormat in domain backing chains, but
* pool-specific enum for storage volumes */
--
2.13.5