[libvirt] [PATCH 18/19] vbox: New storage driver

Taowei Luo uaedante at gmail.com
Fri Oct 24 01:46:52 UTC 2014


This patch provides the new stroage driver for vbox. The work
is similar with patch 87dea4fc and the next b4022de33.
---
 src/Makefile.am               |   12 +++--
 src/vbox/vbox_driver.c        |   99 ++--------------------------------------
 src/vbox/vbox_get_driver.h    |    1 +
 src/vbox/vbox_storage.c       |  101 +++++++++++++++++++++++++++++++++--------
 src/vbox/vbox_tmpl.c          |   24 ----------
 src/vbox/vbox_uniformed_api.h |   17 -------
 6 files changed, 96 insertions(+), 158 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am
index b245dd1..1379478 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -520,6 +520,7 @@ DRIVER_SOURCE_FILES = \
 	$(UML_DRIVER_SOURCES) \
 	$(VBOX_DRIVER_SOURCES) \
 	$(VBOX_NETWORK_DRIVER_SOURCES) \
+	$(VBOX_STORAGE_DRIVER_SOURCES) \
 	vbox/vbox_tmpl.c \
 	$(VMWARE_DRIVER_SOURCES) \
 	$(XEN_DRIVER_SOURCES) \
@@ -679,7 +680,6 @@ VBOX_DRIVER_SOURCES =						\
 	vbox/vbox_V4_3.c vbox/vbox_CAPI_v4_3.h			\
 	vbox/vbox_V4_3_4.c vbox/vbox_CAPI_v4_3_4.h              \
 	vbox/vbox_common.c vbox/vbox_common.h                   \
-	vbox/vbox_storage.c                                     \
 	vbox/vbox_uniformed_api.h                               \
 	vbox/vbox_get_driver.h
 
@@ -687,6 +687,10 @@ VBOX_NETWORK_DRIVER_SOURCES =					\
 	vbox/vbox_driver.c vbox/vbox_driver.h			\
 	vbox/vbox_network.c vbox/vbox_get_driver.h
 
+VBOX_STORAGE_DRIVER_SOURCES =					\
+	vbox/vbox_driver.c vbox/vbox_driver.h			\
+	vbox/vbox_storage.c vbox/vbox_get_driver.h
+
 VBOX_DRIVER_EXTRA_DIST =					\
 		vbox/vbox_tmpl.c vbox/README			\
 		vbox/vbox_MSCOMGlue.c vbox/vbox_MSCOMGlue.h	\
@@ -1173,7 +1177,8 @@ noinst_LTLIBRARIES += libvirt_driver_vbox.la
 # GPLv2-only license requries that it be linked into
 # libvirtd and *not* libvirt.so
 #libvirt_la_BUILT_LIBADD += libvirt_driver_vbox.la
-libvirt_driver_vbox_la_LIBADD += libvirt_driver_vbox_network_impl.la
+libvirt_driver_vbox_la_LIBADD += libvirt_driver_vbox_network_impl.la \
+				 libvirt_driver_vbox_storage_impl.la
 endif ! WITH_DRIVER_MODULES
 
 libvirt_driver_vbox_impl_la_CFLAGS =				\
@@ -1205,7 +1210,8 @@ libvirt_driver_vbox_storage_impl_la_LDFLAGS = $(AM_LDFLAGS)
 libvirt_driver_vbox_storage_impl_la_LIBADD = $(DLOPEN_LIBS)		\
 		$(MSCOM_LIBS)					\
 		$(LIBXML_LIBS)
-libvirt_driver_vbox_storage_impl_la_SOURCES = $(VBOX_DRIVER_SOURCES)
+		libvirt_driver_vbox_impl.la
+libvirt_driver_vbox_storage_impl_la_SOURCES = $(VBOX_STORAGE_DRIVER_SOURCES)
 endif WITH_VBOX
 
 if WITH_XENAPI
diff --git a/src/vbox/vbox_driver.c b/src/vbox/vbox_driver.c
index 743a488..f8d1f07 100644
--- a/src/vbox/vbox_driver.c
+++ b/src/vbox/vbox_driver.c
@@ -48,101 +48,8 @@
 
 VIR_LOG_INIT("vbox.vbox_driver");
 
-extern virNetworkDriver vbox22NetworkDriver;
-extern virStorageDriver vbox22StorageDriver;
-extern virNetworkDriver vbox30NetworkDriver;
-extern virStorageDriver vbox30StorageDriver;
-extern virNetworkDriver vbox31NetworkDriver;
-extern virStorageDriver vbox31StorageDriver;
-extern virNetworkDriver vbox32NetworkDriver;
-extern virStorageDriver vbox32StorageDriver;
-extern virNetworkDriver vbox40NetworkDriver;
-extern virStorageDriver vbox40StorageDriver;
-extern virNetworkDriver vbox41NetworkDriver;
-extern virStorageDriver vbox41StorageDriver;
-extern virNetworkDriver vbox42NetworkDriver;
-extern virStorageDriver vbox42StorageDriver;
-extern virNetworkDriver vbox42_20NetworkDriver;
-extern virStorageDriver vbox42_20StorageDriver;
-extern virNetworkDriver vbox43NetworkDriver;
-extern virStorageDriver vbox43StorageDriver;
-extern virNetworkDriver vbox43_4NetworkDriver;
-extern virStorageDriver vbox43_4StorageDriver;
-
 #define VIR_FROM_THIS VIR_FROM_VBOX
 
-#if !defined(WITH_DRIVER_MODULES) || defined(VBOX_STORAGE_DRIVER)
-static void
-vboxGetDrivers(virHypervisorDriverPtr *hypervisorDriver_ret,
-               virStorageDriverPtr *storageDriver_ret)
-{
-    virStorageDriverPtr storageDriver;
-    uint32_t uVersion;
-
-    /*
-     * If the glue layer does not initialize, we register a driver
-     * with a dummy open method, so we can report nicer errors
-     * if the user requests a vbox:// URI which we know will
-     * never work
-     */
-    storageDriver = &vbox22StorageDriver;
-
-    /* Init the glue and get the API version. */
-    if (VBoxCGlueInit(&uVersion) == 0) {
-        VIR_DEBUG("VBoxCGlueInit found API version: %d.%d.%d (%u)",
-              uVersion / 1000000,
-              uVersion % 1000000 / 1000,
-              uVersion % 1000,
-              uVersion);
-
-        /* Select driver implementation based on version.
-         * Note that the VirtualBox development usually happens at build
-         * number 51, thus the version ranges in the if statements below.
-         */
-        if (uVersion >= 2001052 && uVersion < 2002051) {
-            VIR_DEBUG("VirtualBox API version: 2.2");
-            storageDriver = &vbox22StorageDriver;
-        } else if (uVersion >= 2002051 && uVersion < 3000051) {
-            VIR_DEBUG("VirtualBox API version: 3.0");
-            storageDriver = &vbox30StorageDriver;
-        } else if (uVersion >= 3000051 && uVersion < 3001051) {
-            VIR_DEBUG("VirtualBox API version: 3.1");
-            storageDriver = &vbox31StorageDriver;
-        } else if (uVersion >= 3001051 && uVersion < 3002051) {
-            VIR_DEBUG("VirtualBox API version: 3.2");
-            storageDriver = &vbox32StorageDriver;
-        } else if (uVersion >= 3002051 && uVersion < 4000051) {
-            VIR_DEBUG("VirtualBox API version: 4.0");
-            storageDriver = &vbox40StorageDriver;
-        } else if (uVersion >= 4000051 && uVersion < 4001051) {
-            VIR_DEBUG("VirtualBox API version: 4.1");
-            storageDriver = &vbox41StorageDriver;
-        } else if (uVersion >= 4001051 && uVersion < 4002020) {
-            VIR_DEBUG("VirtualBox API version: 4.2");
-            storageDriver = &vbox42StorageDriver;
-        } else if (uVersion >= 4002020 && uVersion < 4002051) {
-           VIR_DEBUG("VirtualBox API version: 4.2.20 or higher");
-           storageDriver  = &vbox42_20StorageDriver;
-        } else if (uVersion >= 4002051 && uVersion < 4003004) {
-            VIR_DEBUG("VirtualBox API version: 4.3");
-            storageDriver = &vbox43StorageDriver;
-        } else if (uVersion >= 4003004 && uVersion < 4003051) {
-            VIR_DEBUG("VirtualBox API version: 4.3.4 or higher");
-            storageDriver = &vbox43_4StorageDriver;
-        } else {
-            VIR_DEBUG("Unsupported VirtualBox API version: %u", uVersion);
-        }
-    } else {
-        VIR_DEBUG("VBoxCGlueInit failed, using dummy driver");
-    }
-
-    if (hypervisorDriver_ret)
-        *hypervisorDriver_ret = NULL;
-    if (storageDriver_ret)
-        *storageDriver_ret = storageDriver;
-}
-#endif
-
 #if !defined(WITH_DRIVER_MODULES) || defined(VBOX_NETWORK_DRIVER)
 int vboxNetworkRegister(void)
 {
@@ -161,9 +68,11 @@ int vboxNetworkRegister(void)
 #if !defined(WITH_DRIVER_MODULES) || defined(VBOX_STORAGE_DRIVER)
 int vboxStorageRegister(void)
 {
-    virStorageDriverPtr storageDriver;
+    virStorageDriverPtr storageDriver = NULL;
+    uint32_t uVersion;
 
-    vboxGetDrivers(NULL, &storageDriver);
+    if (VBoxCGlueInit(&uVersion) == 0)
+        storageDriver = vboxGetStorageDriver(uVersion);
 
     if (virRegisterStorageDriver(storageDriver) < 0)
         return -1;
diff --git a/src/vbox/vbox_get_driver.h b/src/vbox/vbox_get_driver.h
index 025236f..84a1f8a 100644
--- a/src/vbox/vbox_get_driver.h
+++ b/src/vbox/vbox_get_driver.h
@@ -23,5 +23,6 @@
 
 virHypervisorDriverPtr vboxGetHypervisorDriver(uint32_t uVersion);
 virNetworkDriverPtr vboxGetNetworkDriver(uint32_t uVersion);
+virStorageDriverPtr vboxGetStorageDriver(uint32_t uVersion);
 
 #endif /* VBOX_GET_DRIVER_H */
diff --git a/src/vbox/vbox_storage.c b/src/vbox/vbox_storage.c
index 2211630..3610a35 100644
--- a/src/vbox/vbox_storage.c
+++ b/src/vbox/vbox_storage.c
@@ -30,6 +30,7 @@
 
 #include "vbox_common.h"
 #include "vbox_uniformed_api.h"
+#include "vbox_get_driver.h"
 
 #define VIR_FROM_THIS VIR_FROM_VBOX
 
@@ -41,9 +42,10 @@ static vboxUniformedAPI gVBoxAPI;
  * The Storage Functions here on
  */
 
-virDrvOpenStatus vboxStorageOpen(virConnectPtr conn,
-                                 virConnectAuthPtr auth ATTRIBUTE_UNUSED,
-                                 unsigned int flags)
+static virDrvOpenStatus
+vboxStorageOpen(virConnectPtr conn,
+                virConnectAuthPtr auth ATTRIBUTE_UNUSED,
+                unsigned int flags)
 {
     vboxGlobalData *data = conn->privateData;
 
@@ -60,14 +62,14 @@ virDrvOpenStatus vboxStorageOpen(virConnectPtr conn,
     return VIR_DRV_OPEN_SUCCESS;
 }
 
-int vboxStorageClose(virConnectPtr conn)
+static int vboxStorageClose(virConnectPtr conn)
 {
     VIR_DEBUG("vbox storage uninitialized");
     conn->storagePrivateData = NULL;
     return 0;
 }
 
-int vboxConnectNumOfStoragePools(virConnectPtr conn ATTRIBUTE_UNUSED)
+static int vboxConnectNumOfStoragePools(virConnectPtr conn ATTRIBUTE_UNUSED)
 {
 
     /** Currently only one pool supported, the default one
@@ -77,8 +79,8 @@ int vboxConnectNumOfStoragePools(virConnectPtr conn ATTRIBUTE_UNUSED)
     return 1;
 }
 
-int vboxConnectListStoragePools(virConnectPtr conn ATTRIBUTE_UNUSED,
-                                char **const names, int nnames)
+static int vboxConnectListStoragePools(virConnectPtr conn ATTRIBUTE_UNUSED,
+                                       char **const names, int nnames)
 {
     int numActive = 0;
 
@@ -88,7 +90,8 @@ int vboxConnectListStoragePools(virConnectPtr conn ATTRIBUTE_UNUSED,
     return numActive;
 }
 
-virStoragePoolPtr vboxStoragePoolLookupByName(virConnectPtr conn, const char *name)
+static virStoragePoolPtr
+vboxStoragePoolLookupByName(virConnectPtr conn, const char *name)
 {
     virStoragePoolPtr ret = NULL;
 
@@ -108,7 +111,7 @@ virStoragePoolPtr vboxStoragePoolLookupByName(virConnectPtr conn, const char *na
     return ret;
 }
 
-int vboxStoragePoolNumOfVolumes(virStoragePoolPtr pool)
+static int vboxStoragePoolNumOfVolumes(virStoragePoolPtr pool)
 {
     vboxGlobalData *data = pool->conn->privateData;
     vboxArray hardDisks = VBOX_ARRAY_INITIALIZER;
@@ -149,7 +152,8 @@ int vboxStoragePoolNumOfVolumes(virStoragePoolPtr pool)
     return ret;
 }
 
-int vboxStoragePoolListVolumes(virStoragePoolPtr pool, char **const names, int nnames)
+static int
+vboxStoragePoolListVolumes(virStoragePoolPtr pool, char **const names, int nnames)
 {
     vboxGlobalData *data = pool->conn->privateData;
     vboxArray hardDisks = VBOX_ARRAY_INITIALIZER;
@@ -205,7 +209,8 @@ int vboxStoragePoolListVolumes(virStoragePoolPtr pool, char **const names, int n
     return ret;
 }
 
-virStorageVolPtr vboxStorageVolLookupByName(virStoragePoolPtr pool, const char *name)
+static virStorageVolPtr
+vboxStorageVolLookupByName(virStoragePoolPtr pool, const char *name)
 {
     vboxGlobalData *data = pool->conn->privateData;
     vboxArray hardDisks = VBOX_ARRAY_INITIALIZER;
@@ -278,7 +283,8 @@ virStorageVolPtr vboxStorageVolLookupByName(virStoragePoolPtr pool, const char *
     return ret;
 }
 
-virStorageVolPtr vboxStorageVolLookupByKey(virConnectPtr conn, const char *key)
+static virStorageVolPtr
+vboxStorageVolLookupByKey(virConnectPtr conn, const char *key)
 {
     vboxGlobalData *data = conn->privateData;
     vboxIIDUnion hddIID;
@@ -345,7 +351,8 @@ virStorageVolPtr vboxStorageVolLookupByKey(virConnectPtr conn, const char *key)
     return ret;
 }
 
-virStorageVolPtr vboxStorageVolLookupByPath(virConnectPtr conn, const char *path)
+static virStorageVolPtr
+vboxStorageVolLookupByPath(virConnectPtr conn, const char *path)
 {
     vboxGlobalData *data = conn->privateData;
     PRUnichar *hddPathUtf16 = NULL;
@@ -422,8 +429,9 @@ virStorageVolPtr vboxStorageVolLookupByPath(virConnectPtr conn, const char *path
     return ret;
 }
 
-virStorageVolPtr vboxStorageVolCreateXML(virStoragePoolPtr pool,
-                                        const char *xml, unsigned int flags)
+static virStorageVolPtr
+vboxStorageVolCreateXML(virStoragePoolPtr pool,
+                        const char *xml, unsigned int flags)
 {
     vboxGlobalData *data = pool->conn->privateData;
     virStorageVolDefPtr def = NULL;
@@ -531,7 +539,7 @@ virStorageVolPtr vboxStorageVolCreateXML(virStoragePoolPtr pool,
     return ret;
 }
 
-int vboxStorageVolDelete(virStorageVolPtr vol, unsigned int flags)
+static int vboxStorageVolDelete(virStorageVolPtr vol, unsigned int flags)
 {
     vboxGlobalData *data = vol->conn->privateData;
     unsigned char uuid[VIR_UUID_BUFLEN];
@@ -691,7 +699,7 @@ int vboxStorageVolDelete(virStorageVolPtr vol, unsigned int flags)
     return ret;
 }
 
-int vboxStorageVolGetInfo(virStorageVolPtr vol, virStorageVolInfoPtr info)
+static int vboxStorageVolGetInfo(virStorageVolPtr vol, virStorageVolInfoPtr info)
 {
     vboxGlobalData *data = vol->conn->privateData;
     IHardDisk *hardDisk = NULL;
@@ -747,7 +755,7 @@ int vboxStorageVolGetInfo(virStorageVolPtr vol, virStorageVolInfoPtr info)
     return ret;
 }
 
-char *vboxStorageVolGetXMLDesc(virStorageVolPtr vol, unsigned int flags)
+static char *vboxStorageVolGetXMLDesc(virStorageVolPtr vol, unsigned int flags)
 {
     vboxGlobalData *data = vol->conn->privateData;
     IHardDisk *hardDisk = NULL;
@@ -840,7 +848,7 @@ char *vboxStorageVolGetXMLDesc(virStorageVolPtr vol, unsigned int flags)
     return ret;
 }
 
-char *vboxStorageVolGetPath(virStorageVolPtr vol)
+static char *vboxStorageVolGetPath(virStorageVolPtr vol)
 {
     vboxGlobalData *data = vol->conn->privateData;
     IHardDisk *hardDisk = NULL;
@@ -894,3 +902,58 @@ char *vboxStorageVolGetPath(virStorageVolPtr vol)
     vboxIIDUnalloc(&hddIID);
     return ret;
 }
+
+/**
+ * Function Tables
+ */
+
+virStorageDriver vboxStorageDriver = {
+    .name = "VBOX",
+    .storageOpen = vboxStorageOpen, /* 0.7.1 */
+    .storageClose = vboxStorageClose, /* 0.7.1 */
+    .connectNumOfStoragePools = vboxConnectNumOfStoragePools, /* 0.7.1 */
+    .connectListStoragePools = vboxConnectListStoragePools, /* 0.7.1 */
+    .storagePoolLookupByName = vboxStoragePoolLookupByName, /* 0.7.1 */
+    .storagePoolNumOfVolumes = vboxStoragePoolNumOfVolumes, /* 0.7.1 */
+    .storagePoolListVolumes = vboxStoragePoolListVolumes, /* 0.7.1 */
+
+    .storageVolLookupByName = vboxStorageVolLookupByName, /* 0.7.1 */
+    .storageVolLookupByKey = vboxStorageVolLookupByKey, /* 0.7.1 */
+    .storageVolLookupByPath = vboxStorageVolLookupByPath, /* 0.7.1 */
+    .storageVolCreateXML = vboxStorageVolCreateXML, /* 0.7.1 */
+    .storageVolDelete = vboxStorageVolDelete, /* 0.7.1 */
+    .storageVolGetInfo = vboxStorageVolGetInfo, /* 0.7.1 */
+    .storageVolGetXMLDesc = vboxStorageVolGetXMLDesc, /* 0.7.1 */
+    .storageVolGetPath = vboxStorageVolGetPath /* 0.7.1 */
+};
+
+virStorageDriverPtr vboxGetStorageDriver(uint32_t uVersion)
+{
+    /* Install gVBoxAPI according to the vbox API version.
+     * Return -1 for unsupported version.
+     */
+    if (uVersion >= 2001052 && uVersion < 2002051) {
+        vbox22InstallUniformedAPI(&gVBoxAPI);
+    } else if (uVersion >= 2002051 && uVersion < 3000051) {
+        vbox30InstallUniformedAPI(&gVBoxAPI);
+    } else if (uVersion >= 3000051 && uVersion < 3001051) {
+        vbox31InstallUniformedAPI(&gVBoxAPI);
+    } else if (uVersion >= 3001051 && uVersion < 3002051) {
+        vbox32InstallUniformedAPI(&gVBoxAPI);
+    } else if (uVersion >= 3002051 && uVersion < 4000051) {
+        vbox40InstallUniformedAPI(&gVBoxAPI);
+    } else if (uVersion >= 4000051 && uVersion < 4001051) {
+        vbox41InstallUniformedAPI(&gVBoxAPI);
+    } else if (uVersion >= 4001051 && uVersion < 4002020) {
+        vbox42InstallUniformedAPI(&gVBoxAPI);
+    } else if (uVersion >= 4002020 && uVersion < 4002051) {
+        vbox42_20InstallUniformedAPI(&gVBoxAPI);
+    } else if (uVersion >= 4002051 && uVersion < 4003004) {
+        vbox43InstallUniformedAPI(&gVBoxAPI);
+    } else if (uVersion >= 4003004 && uVersion < 4003051) {
+        vbox43_4InstallUniformedAPI(&gVBoxAPI);
+    } else {
+        return NULL;
+    }
+    return &vboxStorageDriver;
+}
diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
index e74c3c4..b4d67c3 100644
--- a/src/vbox/vbox_tmpl.c
+++ b/src/vbox/vbox_tmpl.c
@@ -5129,27 +5129,3 @@ void NAME(InstallUniformedAPI)(vboxUniformedAPI *pVBoxAPI)
     pVBoxAPI->networkRemoveInterface = 1;
 #endif /* VBOX_API_VERSION > 2002000 */
 }
-
-/**
- * Function Tables
- */
-
-virStorageDriver NAME(StorageDriver) = {
-    .name               = "VBOX",
-    .storageOpen = vboxStorageOpen, /* 0.7.1 */
-    .storageClose = vboxStorageClose, /* 0.7.1 */
-    .connectNumOfStoragePools = vboxConnectNumOfStoragePools, /* 0.7.1 */
-    .connectListStoragePools = vboxConnectListStoragePools, /* 0.7.1 */
-    .storagePoolLookupByName = vboxStoragePoolLookupByName, /* 0.7.1 */
-    .storagePoolNumOfVolumes = vboxStoragePoolNumOfVolumes, /* 0.7.1 */
-    .storagePoolListVolumes = vboxStoragePoolListVolumes, /* 0.7.1 */
-
-    .storageVolLookupByName = vboxStorageVolLookupByName, /* 0.7.1 */
-    .storageVolLookupByKey = vboxStorageVolLookupByKey, /* 0.7.1 */
-    .storageVolLookupByPath = vboxStorageVolLookupByPath, /* 0.7.1 */
-    .storageVolCreateXML = vboxStorageVolCreateXML, /* 0.7.1 */
-    .storageVolDelete = vboxStorageVolDelete, /* 0.7.1 */
-    .storageVolGetInfo = vboxStorageVolGetInfo, /* 0.7.1 */
-    .storageVolGetXMLDesc = vboxStorageVolGetXMLDesc, /* 0.7.1 */
-    .storageVolGetPath = vboxStorageVolGetPath /* 0.7.1 */
-};
diff --git a/src/vbox/vbox_uniformed_api.h b/src/vbox/vbox_uniformed_api.h
index c426f8a..babc1e6 100644
--- a/src/vbox/vbox_uniformed_api.h
+++ b/src/vbox/vbox_uniformed_api.h
@@ -608,23 +608,6 @@ typedef struct {
 
 virDomainPtr vboxDomainLookupByUUID(virConnectPtr conn,
                                     const unsigned char *uuid);
-virDrvOpenStatus vboxStorageOpen(virConnectPtr conn, virConnectAuthPtr auth,
-                                 unsigned int flags);
-int vboxStorageClose(virConnectPtr conn);
-int vboxConnectNumOfStoragePools(virConnectPtr conn);
-int vboxConnectListStoragePools(virConnectPtr conn, char **const names, int nnames);
-virStoragePoolPtr vboxStoragePoolLookupByName(virConnectPtr conn, const char *name);
-int vboxStoragePoolNumOfVolumes(virStoragePoolPtr pool);
-int vboxStoragePoolListVolumes(virStoragePoolPtr pool, char **const names, int nnames);
-virStorageVolPtr vboxStorageVolLookupByName(virStoragePoolPtr pool, const char *name);
-virStorageVolPtr vboxStorageVolLookupByKey(virConnectPtr conn, const char *key);
-virStorageVolPtr vboxStorageVolLookupByPath(virConnectPtr conn, const char *path);
-virStorageVolPtr vboxStorageVolCreateXML(virStoragePoolPtr pool,
-                                         const char *xml, unsigned int flags);
-int vboxStorageVolDelete(virStorageVolPtr vol, unsigned int flags);
-int vboxStorageVolGetInfo(virStorageVolPtr vol, virStorageVolInfoPtr info);
-char *vboxStorageVolGetXMLDesc(virStorageVolPtr vol, unsigned int flags);
-char *vboxStorageVolGetPath(virStorageVolPtr vol);
 
 /* Version specified functions for installing uniformed API */
 void vbox22InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI);
-- 
1.7.9.5




More information about the libvir-list mailing list