]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
libvirt: introduce virDomainSaveParams public API
authorClaudio Fontana <cfontana@suse.de>
Fri, 6 May 2022 13:10:51 +0000 (15:10 +0200)
committerDaniel P. Berrangé <berrange@redhat.com>
Fri, 6 May 2022 14:34:30 +0000 (15:34 +0100)
create an alternative to virDomainSaveFlags that is more
extendible via parameters.

Signed-off-by: Claudio Fontana <cfontana@suse.de>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
include/libvirt/libvirt-domain.h
src/driver-hypervisor.h
src/libvirt-domain.c
src/libvirt_public.syms

index 2edef9c4e1c259eda5b782e55d440d5d4ee6694f..52c86f3813d79d4f57021a82eb69499a825df0de 100644 (file)
@@ -1562,6 +1562,10 @@ int                     virDomainSaveFlags      (virDomainPtr domain,
                                                  const char *to,
                                                  const char *dxml,
                                                  unsigned int flags);
+int                     virDomainSaveParams     (virDomainPtr domain,
+                                                 virTypedParameterPtr params,
+                                                 int nparams,
+                                                 unsigned int flags);
 int                     virDomainRestore        (virConnectPtr conn,
                                                  const char *from);
 int                     virDomainRestoreFlags   (virConnectPtr conn,
@@ -1569,6 +1573,28 @@ int                     virDomainRestoreFlags   (virConnectPtr conn,
                                                  const char *dxml,
                                                  unsigned int flags);
 
+/**
+ * VIR_SAVE_PARAM_FILE:
+ *
+ * the parameter used to specify the savestate file to save to or restore from.
+ *
+ * Since: 8.4.0
+ */
+# define VIR_SAVE_PARAM_FILE                     "file"
+
+/**
+ * VIR_SAVE_PARAM_DXML:
+ *
+ * an optional parameter used to adjust guest xml on restore.
+ * If the hypervisor supports it, it can be used to alter
+ * host-specific portions of the domain XML that will be used when
+ * restoring an image.  For example, it is possible to alter the
+ * device while the domain is stopped.
+ *
+ * Since: 8.4.0
+ */
+# define VIR_SAVE_PARAM_DXML                     "dxml"
+
 /* See below for virDomainSaveImageXMLFlags */
 char *          virDomainSaveImageGetXMLDesc    (virConnectPtr conn,
                                                  const char *file,
index 4423eb0885a3db089445c67c85e1a10afdce9783..434a7d7cc4e45b83c0887d9a14b44de83d46af7c 100644 (file)
@@ -240,6 +240,12 @@ typedef int
                          const char *dxml,
                          unsigned int flags);
 
+typedef int
+(*virDrvDomainSaveParams)(virDomainPtr domain,
+                          virTypedParameterPtr params,
+                          int nparams,
+                          unsigned int flags);
+
 typedef int
 (*virDrvDomainRestore)(virConnectPtr conn,
                        const char *from);
@@ -1489,6 +1495,7 @@ struct _virHypervisorDriver {
     virDrvDomainGetControlInfo domainGetControlInfo;
     virDrvDomainSave domainSave;
     virDrvDomainSaveFlags domainSaveFlags;
+    virDrvDomainSaveParams domainSaveParams;
     virDrvDomainRestore domainRestore;
     virDrvDomainRestoreFlags domainRestoreFlags;
     virDrvDomainSaveImageGetXMLDesc domainSaveImageGetXMLDesc;
index 27993829a05f3f1f501bd1b1aef3d679553631e8..ca2fe5e99d9e8f9d6cdb05ab59f6beac934419df 100644 (file)
@@ -999,6 +999,54 @@ virDomainSaveFlags(virDomainPtr domain, const char *to,
     return -1;
 }
 
+/**
+ * virDomainSaveParams:
+ * @domain: a domain object
+ * @params: save parameters
+ * @nparams: number of save parameters
+ * @flags: bitwise-OR of virDomainSaveRestoreFlags
+ *
+ * This method extends virDomainSaveFlags by adding parameters.
+ *
+ * Returns 0 in case of success and -1 in case of failure.
+ *
+ * Since: 8.4.0
+ */
+int
+virDomainSaveParams(virDomainPtr domain,
+                    virTypedParameterPtr params, int nparams,
+                    unsigned int flags)
+{
+    virConnectPtr conn;
+
+    VIR_DOMAIN_DEBUG(domain, "params=%p, nparams=%d, flags=0x%x",
+                     params, nparams, flags);
+    VIR_TYPED_PARAMS_DEBUG(params, nparams);
+
+    virResetLastError();
+
+    virCheckDomainReturn(domain, -1);
+    conn = domain->conn;
+
+    virCheckReadOnlyGoto(conn->flags, error);
+
+    VIR_EXCLUSIVE_FLAGS_GOTO(VIR_DOMAIN_SAVE_RUNNING,
+                             VIR_DOMAIN_SAVE_PAUSED,
+                             error);
+
+    if (conn->driver->domainSaveParams) {
+        if (conn->driver->domainSaveParams(domain, params, nparams, flags) < 0)
+            goto error;
+        return 0;
+    }
+
+    virReportUnsupportedError();
+
+ error:
+    virDispatchError(domain->conn);
+    return -1;
+}
+
 
 /**
  * virDomainRestore:
index f93692c427db6fba771079f85599863c2f94ee5f..32ffbbaf84c10899e31dba0ccc37560322fd8f84 100644 (file)
@@ -916,4 +916,9 @@ LIBVIRT_8.0.0 {
         virDomainSetLaunchSecurityState;
 } LIBVIRT_7.8.0;
 
+LIBVIRT_8.4.0 {
+    global:
+        virDomainSaveParams;
+} LIBVIRT_8.0.0;
+
 # .... define new API here using predicted next version number ....