[libvirt] [PATCH 1/8] Add new API virDomainBlockPull* to headers

Adam Litke agl at us.ibm.com
Tue Jun 14 14:36:47 UTC 2011


Set up the types for the block pull functions and insert them into the
virDriver structure definition.  Symbols are exported in this patch to prevent
documentation compile failures.

* include/libvirt/libvirt.h.in: new API
* src/driver.h: add the new entry to the driver structure
* python/generator.py: fix compiler errors, the actual python bindings are
  implemented later
* src/libvirt_public.syms: export symbols

Signed-off-by: Adam Litke <agl at us.ibm.com>
Acked-by: Daniel P. Berrange <berrange at redhat.com>
---
 include/libvirt/libvirt.h.in |   39 +++++++++++++++++++++++++++++++++++++++
 python/generator.py          |    3 +++
 src/driver.h                 |   22 ++++++++++++++++++++++
 src/libvirt_public.syms      |    7 +++++++
 4 files changed, 71 insertions(+), 0 deletions(-)

diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index df213f1..ba547c1 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -1156,6 +1156,45 @@ int virDomainUpdateDeviceFlags(virDomainPtr domain,
                                const char *xml, unsigned int flags);
 
 /*
+ * BlockPull API
+ */
+
+/* An iterator for initiating and monitoring block pull operations */
+typedef unsigned long long virDomainBlockPullCursor;
+
+typedef struct _virDomainBlockPullInfo virDomainBlockPullInfo;
+struct _virDomainBlockPullInfo {
+    /*
+     * The following fields provide an indication of block pull progress.  @cur
+     * indicates the current position and will be between 0 and @end.  @end is
+     * the final cursor position for this operation and represents completion.
+     * To approximate progress, divide @cur by @end.
+     */
+    virDomainBlockPullCursor cur;
+    virDomainBlockPullCursor end;
+};
+typedef virDomainBlockPullInfo *virDomainBlockPullInfoPtr;
+
+int                 virDomainBlockPull(virDomainPtr dom,
+                                       const char *path,
+                                       virDomainBlockPullInfoPtr info,
+                                       unsigned int flags);
+
+int                 virDomainBlockPullAll(virDomainPtr dom,
+                                          const char *path,
+                                          unsigned int flags);
+
+int                 virDomainBlockPullAbort(virDomainPtr dom,
+                                            const char *path,
+                                            unsigned int flags);
+
+int                 virDomainGetBlockPullInfo(virDomainPtr dom,
+                                              const char *path,
+                                              virDomainBlockPullInfoPtr info,
+                                              unsigned int flags);
+
+
+/*
  * NUMA support
  */
 
diff --git a/python/generator.py b/python/generator.py
index 7c38fdd..43e7414 100755
--- a/python/generator.py
+++ b/python/generator.py
@@ -178,6 +178,8 @@ def enum(type, name, value):
 functions_failed = []
 functions_skipped = [
     "virConnectListDomains",
+    'virDomainBlockPull',
+    'virDomainGetBlockPullInfo',
 ]
 
 skipped_modules = {
@@ -192,6 +194,7 @@ skipped_types = {
      'virConnectDomainEventIOErrorCallback': "No function types in python",
      'virConnectDomainEventGraphicsCallback': "No function types in python",
      'virEventAddHandleFunc': "No function types in python",
+     'virDomainBlockPullInfoPtr': "Not implemented yet",
 }
 
 #######################################################################
diff --git a/src/driver.h b/src/driver.h
index 5df798a..4b30390 100644
--- a/src/driver.h
+++ b/src/driver.h
@@ -615,6 +615,24 @@ typedef int
                      unsigned long flags,
                      int cancelled);
 
+typedef int
+    (*virDrvDomainBlockPull)(virDomainPtr dom, const char *path,
+                             virDomainBlockPullInfoPtr info,
+                             unsigned int flags);
+
+typedef int
+    (*virDrvDomainBlockPullAll)(virDomainPtr dom, const char *path,
+                                unsigned int flags);
+
+typedef int
+    (*virDrvDomainBlockPullAbort)(virDomainPtr dom, const char *path,
+                                  unsigned int flags);
+
+typedef int
+    (*virDrvDomainGetBlockPullInfo)(virDomainPtr dom, const char *path,
+                                    virDomainBlockPullInfoPtr info,
+                                    unsigned int flags);
+
 /**
  * _virDriver:
  *
@@ -749,6 +767,10 @@ struct _virDriver {
     virDrvDomainMigratePerform3	domainMigratePerform3;
     virDrvDomainMigrateFinish3	domainMigrateFinish3;
     virDrvDomainMigrateConfirm3	domainMigrateConfirm3;
+    virDrvDomainBlockPull domainBlockPull;
+    virDrvDomainBlockPullAll domainBlockPullAll;
+    virDrvDomainBlockPullAbort domainBlockPullAbort;
+    virDrvDomainGetBlockPullInfo domainGetBlockPullInfo;
 };
 
 typedef int
diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
index 4d4299a..f2637ae 100644
--- a/src/libvirt_public.syms
+++ b/src/libvirt_public.syms
@@ -451,3 +451,10 @@ LIBVIRT_0.9.2 {
 } LIBVIRT_0.9.0;
 
 # .... define new API here using predicted next version number ....
+LIBVIRT_0.9.3 {
+    global:
+        virDomainBlockPull;
+        virDomainBlockPullAll;
+        virDomainBlockPullAbort;
+        virDomainGetBlockPullInfo;
+} LIBVIRT_0.9.2;
-- 
1.7.3




More information about the libvir-list mailing list