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