mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-13 16:15:19 +00:00
vbox: Rewrite vbox-independent functions
This patch rewrites the following functions *vboxStorageOpen *vboxStorageClose *vboxConnectNumOfStoragePools *vboxConnectListStoragePools *vboxStoragePoolLookupByName These functions do not call any vbox API, so I directly move it from vbox_tmpl.c to vbox_storage.c A small improvement is made on vboxConnectListStoragePools. The if condition nnames == 1 is modified to nnames > 0. So if the caller put more than one slot to get active storage pools, the new function will return exactly one, while the old one would only return 0.
This commit is contained in:
parent
7d5b9419f1
commit
459886d41b
@ -698,6 +698,7 @@ VBOX_DRIVER_SOURCES = \
|
|||||||
vbox/vbox_V4_3.c vbox/vbox_CAPI_v4_3.h \
|
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_V4_3_4.c vbox/vbox_CAPI_v4_3_4.h \
|
||||||
vbox/vbox_common.c vbox/vbox_common.h \
|
vbox/vbox_common.c vbox/vbox_common.h \
|
||||||
|
vbox/vbox_storage.c \
|
||||||
vbox/vbox_uniformed_api.h \
|
vbox/vbox_uniformed_api.h \
|
||||||
vbox/vbox_get_driver.h
|
vbox/vbox_get_driver.h
|
||||||
|
|
||||||
|
106
src/vbox/vbox_storage.c
Normal file
106
src/vbox/vbox_storage.c
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2014 Taowei Luo (uaedante@gmail.com)
|
||||||
|
* Copyright (C) 2010-2014 Red Hat, Inc.
|
||||||
|
* Copyright (C) 2008-2009 Sun Microsystems, Inc.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#include "internal.h"
|
||||||
|
#include "datatypes.h"
|
||||||
|
#include "domain_conf.h"
|
||||||
|
#include "domain_event.h"
|
||||||
|
#include "virlog.h"
|
||||||
|
#include "virstring.h"
|
||||||
|
|
||||||
|
#include "vbox_common.h"
|
||||||
|
#include "vbox_uniformed_api.h"
|
||||||
|
|
||||||
|
#define VIR_FROM_THIS VIR_FROM_VBOX
|
||||||
|
|
||||||
|
VIR_LOG_INIT("vbox.vbox_storage");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Storage Functions here on
|
||||||
|
*/
|
||||||
|
|
||||||
|
virDrvOpenStatus vboxStorageOpen(virConnectPtr conn,
|
||||||
|
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
|
||||||
|
unsigned int flags)
|
||||||
|
{
|
||||||
|
vboxGlobalData *data = conn->privateData;
|
||||||
|
|
||||||
|
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
|
||||||
|
|
||||||
|
if (STRNEQ(conn->driver->name, "VBOX"))
|
||||||
|
return VIR_DRV_OPEN_DECLINED;
|
||||||
|
|
||||||
|
if ((!data->pFuncs) || (!data->vboxObj) || (!data->vboxSession))
|
||||||
|
return VIR_DRV_OPEN_ERROR;
|
||||||
|
|
||||||
|
VIR_DEBUG("vbox storage initialized");
|
||||||
|
/* conn->storagePrivateData = some storage specific data */
|
||||||
|
return VIR_DRV_OPEN_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
int vboxStorageClose(virConnectPtr conn)
|
||||||
|
{
|
||||||
|
VIR_DEBUG("vbox storage uninitialized");
|
||||||
|
conn->storagePrivateData = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int vboxConnectNumOfStoragePools(virConnectPtr conn ATTRIBUTE_UNUSED)
|
||||||
|
{
|
||||||
|
|
||||||
|
/** Currently only one pool supported, the default one
|
||||||
|
* given by ISystemProperties::defaultHardDiskFolder()
|
||||||
|
*/
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int vboxConnectListStoragePools(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||||
|
char **const names, int nnames)
|
||||||
|
{
|
||||||
|
int numActive = 0;
|
||||||
|
|
||||||
|
if (nnames > 0 &&
|
||||||
|
VIR_STRDUP(names[numActive], "default-pool") > 0)
|
||||||
|
numActive++;
|
||||||
|
return numActive;
|
||||||
|
}
|
||||||
|
|
||||||
|
virStoragePoolPtr vboxStoragePoolLookupByName(virConnectPtr conn, const char *name)
|
||||||
|
{
|
||||||
|
virStoragePoolPtr ret = NULL;
|
||||||
|
|
||||||
|
/** Current limitation of the function: since
|
||||||
|
* the default pool doesn't have UUID just assign
|
||||||
|
* one till vbox can handle pools
|
||||||
|
*/
|
||||||
|
if (STREQ("default-pool", name)) {
|
||||||
|
unsigned char uuid[VIR_UUID_BUFLEN];
|
||||||
|
const char *uuidstr = "1deff1ff-1481-464f-967f-a50fe8936cc4";
|
||||||
|
|
||||||
|
ignore_value(virUUIDParse(uuidstr, uuid));
|
||||||
|
|
||||||
|
ret = virGetStoragePool(conn, name, uuid, NULL, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
@ -2033,75 +2033,6 @@ _registerDomainEvent(virHypervisorDriverPtr driver)
|
|||||||
* The Storage Functions here on
|
* The Storage Functions here on
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static virDrvOpenStatus vboxStorageOpen(virConnectPtr conn,
|
|
||||||
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
|
|
||||||
unsigned int flags)
|
|
||||||
{
|
|
||||||
vboxGlobalData *data = conn->privateData;
|
|
||||||
|
|
||||||
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
|
|
||||||
|
|
||||||
if (STRNEQ(conn->driver->name, "VBOX"))
|
|
||||||
return VIR_DRV_OPEN_DECLINED;
|
|
||||||
|
|
||||||
if ((data->pFuncs == NULL) ||
|
|
||||||
(data->vboxObj == NULL) ||
|
|
||||||
(data->vboxSession == NULL))
|
|
||||||
return VIR_DRV_OPEN_ERROR;
|
|
||||||
|
|
||||||
VIR_DEBUG("vbox storage initialized");
|
|
||||||
/* conn->storagePrivateData = some storage specific data */
|
|
||||||
return VIR_DRV_OPEN_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int vboxStorageClose(virConnectPtr conn)
|
|
||||||
{
|
|
||||||
VIR_DEBUG("vbox storage uninitialized");
|
|
||||||
conn->storagePrivateData = NULL;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int vboxConnectNumOfStoragePools(virConnectPtr conn ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
|
|
||||||
/** Currently only one pool supported, the default one
|
|
||||||
* given by ISystemProperties::defaultHardDiskFolder()
|
|
||||||
*/
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int vboxConnectListStoragePools(virConnectPtr conn ATTRIBUTE_UNUSED,
|
|
||||||
char **const names, int nnames) {
|
|
||||||
int numActive = 0;
|
|
||||||
|
|
||||||
if (nnames == 1 &&
|
|
||||||
VIR_STRDUP(names[numActive], "default-pool") > 0)
|
|
||||||
numActive++;
|
|
||||||
return numActive;
|
|
||||||
}
|
|
||||||
|
|
||||||
static virStoragePoolPtr
|
|
||||||
vboxStoragePoolLookupByName(virConnectPtr conn, const char *name)
|
|
||||||
{
|
|
||||||
virStoragePoolPtr ret = NULL;
|
|
||||||
|
|
||||||
/** Current limitation of the function: since
|
|
||||||
* the default pool doesn't have UUID just assign
|
|
||||||
* one till vbox can handle pools
|
|
||||||
*/
|
|
||||||
if (STREQ("default-pool", name)) {
|
|
||||||
unsigned char uuid[VIR_UUID_BUFLEN];
|
|
||||||
const char *uuidstr = "1deff1ff-1481-464f-967f-a50fe8936cc4";
|
|
||||||
|
|
||||||
ignore_value(virUUIDParse(uuidstr, uuid));
|
|
||||||
|
|
||||||
ret = virGetStoragePool(conn, name, uuid, NULL, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int vboxStoragePoolNumOfVolumes(virStoragePoolPtr pool)
|
static int vboxStoragePoolNumOfVolumes(virStoragePoolPtr pool)
|
||||||
{
|
{
|
||||||
VBOX_OBJECT_CHECK(pool->conn, int, -1);
|
VBOX_OBJECT_CHECK(pool->conn, int, -1);
|
||||||
|
@ -586,6 +586,12 @@ typedef struct {
|
|||||||
|
|
||||||
virDomainPtr vboxDomainLookupByUUID(virConnectPtr conn,
|
virDomainPtr vboxDomainLookupByUUID(virConnectPtr conn,
|
||||||
const unsigned char *uuid);
|
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);
|
||||||
|
|
||||||
/* Version specified functions for installing uniformed API */
|
/* Version specified functions for installing uniformed API */
|
||||||
void vbox22InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI);
|
void vbox22InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user