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
* docs/apibuild.py: Extend 'unsigned long' parameter exception to this API
Signed-off-by: Adam Litke <agl(a)us.ibm.com>
---
docs/apibuild.py | 7 ++++-
include/libvirt/libvirt.h.in | 44 ++++++++++++++++++++++++++++++++++++++++++
python/generator.py | 2 +
src/driver.h | 24 ++++++++++++++++++++++
src/libvirt_public.syms | 7 ++++++
5 files changed, 82 insertions(+), 2 deletions(-)
diff --git a/docs/apibuild.py b/docs/apibuild.py
index 6e35cfb..53b3421 100755
--- a/docs/apibuild.py
+++ b/docs/apibuild.py
@@ -1641,7 +1641,9 @@ class CParser:
"virDomainMigrateSetMaxSpeed" : (False, ("bandwidth")),
"virDomainSetMaxMemory" : (False, ("memory")),
"virDomainSetMemory" : (False, ("memory")),
- "virDomainSetMemoryFlags" : (False, ("memory")) }
+ "virDomainSetMemoryFlags" : (False, ("memory")),
+ "virDomainBlockJobSetSpeed" : (False, ("bandwidth")),
+ "virDomainBlockPull" : (False, ("bandwidth")) }
def checkLongLegacyFunction(self, name, return_type, signature):
if "long" in return_type and "long long" not in return_type:
@@ -1667,7 +1669,8 @@ class CParser:
# [unsigned] long long
long_legacy_struct_fields = \
{ "_virDomainInfo" : ("maxMem",
"memory"),
- "_virNodeInfo" : ("memory") }
+ "_virNodeInfo" : ("memory"),
+ "_virDomainBlockJobInfo" : ("bandwidth") }
def checkLongLegacyStruct(self, name, fields):
for field in fields:
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index 607b5bc..23947c7 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -1375,6 +1375,50 @@ int virDomainUpdateDeviceFlags(virDomainPtr domain,
const char *xml, unsigned int flags);
/*
+ * BlockJob API
+ */
+
+/**
+ * virDomainBlockJobType:
+ *
+ * VIR_DOMAIN_BLOCK_JOB_TYPE_PULL: Block Pull (virDomainBlockPull)
+ */
+typedef enum {
+ VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN = 0,
+ VIR_DOMAIN_BLOCK_JOB_TYPE_PULL = 1,
+} virDomainBlockJobType;
+
+/* An iterator for monitoring block job operations */
+typedef unsigned long long virDomainBlockJobCursor;
+
+typedef struct _virDomainBlockJobInfo virDomainBlockJobInfo;
+struct _virDomainBlockJobInfo {
+ virDomainBlockJobType type;
+ unsigned long bandwidth;
+ /*
+ * The following fields provide an indication of block job 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.
+ */
+ virDomainBlockJobCursor cur;
+ virDomainBlockJobCursor end;
+};
+typedef virDomainBlockJobInfo *virDomainBlockJobInfoPtr;
+
+int virDomainBlockJobAbort(virDomainPtr dom, const char *path,
+ unsigned int flags);
+int virDomainGetBlockJobInfo(virDomainPtr dom, const char *path,
+ virDomainBlockJobInfoPtr info,
+ unsigned int flags);
+int virDomainBlockJobSetSpeed(virDomainPtr dom, const char *path,
+ unsigned long bandwidth, unsigned int flags);
+
+int virDomainBlockPull(virDomainPtr dom, const char *path,
+ unsigned long bandwidth, unsigned int flags);
+
+
+/*
* NUMA support
*/
diff --git a/python/generator.py b/python/generator.py
index 1cb82f5..b25c74e 100755
--- a/python/generator.py
+++ b/python/generator.py
@@ -186,6 +186,7 @@ def enum(type, name, value):
functions_failed = []
functions_skipped = [
"virConnectListDomains",
+ 'virDomainGetBlockJobInfo',
]
skipped_modules = {
@@ -202,6 +203,7 @@ skipped_types = {
'virStreamEventCallback': "No function types in python",
'virEventHandleCallback': "No function types in python",
'virEventTimeoutCallback': "No function types in python",
+ 'virDomainBlockJobInfoPtr': "Not implemented yet",
}
#######################################################################
diff --git a/src/driver.h b/src/driver.h
index 9d0d3de..776bb7f 100644
--- a/src/driver.h
+++ b/src/driver.h
@@ -661,6 +661,26 @@ typedef int
unsigned long flags,
int cancelled);
+
+typedef int
+ (*virDrvDomainBlockJobAbort)(virDomainPtr dom, const char *path,
+ unsigned int flags);
+
+typedef int
+ (*virDrvDomainGetBlockJobInfo)(virDomainPtr dom, const char *path,
+ virDomainBlockJobInfoPtr info,
+ unsigned int flags);
+
+typedef int
+ (*virDrvDomainBlockJobSetSpeed)(virDomainPtr dom,
+ const char *path, unsigned long bandwidth,
+ unsigned int flags);
+
+typedef int
+ (*virDrvDomainBlockPull)(virDomainPtr dom, const char *path,
+ unsigned long bandwidth, unsigned int flags);
+
+
/**
* _virDriver:
*
@@ -802,6 +822,10 @@ struct _virDriver {
virDrvDomainMigrateFinish3 domainMigrateFinish3;
virDrvDomainMigrateConfirm3 domainMigrateConfirm3;
virDrvDomainSendKey domainSendKey;
+ virDrvDomainBlockJobAbort domainBlockJobAbort;
+ virDrvDomainGetBlockJobInfo domainGetBlockJobInfo;
+ virDrvDomainBlockJobSetSpeed domainBlockJobSetSpeed;
+ virDrvDomainBlockPull domainBlockPull;
};
typedef int
diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
index 5f2541a..5fc6398 100644
--- a/src/libvirt_public.syms
+++ b/src/libvirt_public.syms
@@ -467,3 +467,10 @@ LIBVIRT_0.9.3 {
} LIBVIRT_0.9.2;
# .... define new API here using predicted next version number ....
+LIBVIRT_0.9.4 {
+ global:
+ virDomainBlockJobAbort;
+ virDomainGetBlockJobInfo;
+ virDomainBlockJobSetSpeed;
+ virDomainBlockPull;
+} LIBVIRT_0.9.3;
--
1.7.3