[libvirt] [PATCHv5 4/4] Install vboxUniformedAPI

Taowei uaedante at gmail.com
Wed Jul 2 16:53:05 UTC 2014


Install vboxUniformedAPI in the new way.
With the prototype:

void vboxRegisterUniformedAPI(uint32_t uVersion);

And leave the install job to the vbox_common.c
---
 src/vbox/vbox_common.c        |   30 ++++++++++++++++++++++++++++++
 src/vbox/vbox_driver.c        |   22 ++++++++++++++++++----
 src/vbox/vbox_uniformed_api.h |    2 ++
 3 files changed, 50 insertions(+), 4 deletions(-)

diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c
index 3f95abb..12b3e33 100644
--- a/src/vbox/vbox_common.c
+++ b/src/vbox/vbox_common.c
@@ -75,6 +75,36 @@ static int openSessionForMachine(vboxGlobalData *data, vboxIIDUnion *iid, const
     return 0;
 }
 
+void vboxRegisterUniformedAPI(uint32_t uVersion)
+{
+    /* Install gVBoxAPI according to the vbox API version.
+     * This function don't check the validation of the
+     * uVersion, it assumes the vboxRegister will do this
+     * job.
+     */
+    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);
+    }
+}
+
 int vboxInitialize(vboxGlobalData *data)
 {
     if (gVBoxAPI.pfnInitialize(data) != 0)
diff --git a/src/vbox/vbox_driver.c b/src/vbox/vbox_driver.c
index 7d004b2..0b71a5a 100644
--- a/src/vbox/vbox_driver.c
+++ b/src/vbox/vbox_driver.c
@@ -39,6 +39,9 @@
 #include "vbox_glue.h"
 #include "virerror.h"
 #include "virutil.h"
+#include "domain_event.h"
+#include "domain_conf.h"
+#include "vbox_uniformed_api.h"
 
 #define VIR_FROM_THIS VIR_FROM_VBOX
 
@@ -144,10 +147,10 @@ int vboxRegister(void)
             networkDriver = &vbox42NetworkDriver;
             storageDriver = &vbox42StorageDriver;
         } else if (uVersion >= 4002020 && uVersion < 4002051) {
-           VIR_DEBUG("VirtualBox API version: 4.2.20 or higher");
-           driver         = &vbox42_20Driver;
-           networkDriver  = &vbox42_20NetworkDriver;
-           storageDriver  = &vbox42_20StorageDriver;
+            VIR_DEBUG("VirtualBox API version: 4.2.20 or higher");
+            driver         = &vbox42_20Driver;
+            networkDriver  = &vbox42_20NetworkDriver;
+            storageDriver  = &vbox42_20StorageDriver;
         } else if (uVersion >= 4002051 && uVersion < 4003004) {
             VIR_DEBUG("VirtualBox API version: 4.3");
             driver        = &vbox43Driver;
@@ -161,6 +164,17 @@ int vboxRegister(void)
         } else {
             VIR_DEBUG("Unsupported VirtualBox API version: %u", uVersion);
         }
+        /* Register vboxUniformedAPI. The dummy driver will not
+         * use vboxAPI, so the register step is only for validate
+         * vbox API versions.
+         * When the vbox driver is fully redesigned, and there is no
+         * vbox**Driver or vbox**NetworkDriver or vbox**StorageDriver any
+         * more, the registerAPI function will handle all jobs in this
+         * vboxRegister (eg. API version check, return a dummy driver
+         * for unsupported version).
+         * But the current design is a solution for compatibility.
+         */
+        vboxRegisterUniformedAPI(uVersion);
     } else {
         VIR_DEBUG("VBoxCGlueInit failed, using dummy driver");
     }
diff --git a/src/vbox/vbox_uniformed_api.h b/src/vbox/vbox_uniformed_api.h
index a052a0f..8aede4c 100644
--- a/src/vbox/vbox_uniformed_api.h
+++ b/src/vbox/vbox_uniformed_api.h
@@ -206,4 +206,6 @@ void vbox42_20InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI);
 void vbox43InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI);
 void vbox43_4InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI);
 
+void vboxRegisterUniformedAPI(uint32_t uVersion);
+
 #endif /* VBOX_UNIFORMED_API_H */
-- 
1.7.9.5




More information about the libvir-list mailing list