---
src/Makefile.am | 3 +-
src/libvirt-php.c | 1188 +------------------------------------------------
src/libvirt-php.h | 49 --
src/libvirt-storage.c | 1129 ++++++++++++++++++++++++++++++++++++++++++++++
src/libvirt-storage.h | 138 ++++++
5 files changed, 1271 insertions(+), 1236 deletions(-)
create mode 100644 src/libvirt-storage.c
create mode 100644 src/libvirt-storage.h
diff --git a/src/Makefile.am b/src/Makefile.am
index 4ae01db..32b23cf 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -26,7 +26,8 @@ libvirt_php_la_SOURCES = \
libvirt-node.c libvirt-node.h \
libvirt-stream.c libvirt-stream.h \
libvirt-domain.c libvirt-domain.h \
- libvirt-network.c libvirt-network.h
+ libvirt-network.c libvirt-network.h \
+ libvirt-storage.c libvirt-storage.h
libvirt_php_la_CFLAGS = \
$(AM_CFLAGS) \
-DCOMPILE_DL_LIBVIRT=1
diff --git a/src/libvirt-php.c b/src/libvirt-php.c
index 9e43a71..1f0d058 100644
--- a/src/libvirt-php.c
+++ b/src/libvirt-php.c
@@ -25,6 +25,7 @@
#include "libvirt-stream.h"
#include "libvirt-domain.h"
#include "libvirt-network.h"
+#include "libvirt-storage.h"
DEBUG_INIT("core");
@@ -38,8 +39,6 @@ const char *features_binaries[] = { NULL };
#endif
/* ZEND thread safe per request globals definition */
-int le_libvirt_storagepool;
-int le_libvirt_volume;
int le_libvirt_nodedev;
int le_libvirt_snapshot;
int le_libvirt_nwfilter;
@@ -485,38 +484,7 @@ static zend_function_entry libvirt_functions[] = {
PHP_FE(libvirt_domain_snapshot_revert, arginfo_libvirt_conn_optflags)
PHP_FE(libvirt_domain_snapshot_delete, arginfo_libvirt_conn_optflags)
PHP_FE(libvirt_domain_snapshot_lookup_by_name,
arginfo_libvirt_domain_snapshot_lookup_by_name)
- /* Storagepool functions */
- PHP_FE(libvirt_storagepool_lookup_by_name, arginfo_libvirt_conn_name)
- PHP_FE(libvirt_storagepool_lookup_by_volume, arginfo_libvirt_conn)
- PHP_FE(libvirt_storagepool_get_info, arginfo_libvirt_conn)
- PHP_FE(libvirt_storagevolume_lookup_by_name, arginfo_libvirt_conn_name)
- PHP_FE(libvirt_storagevolume_lookup_by_path,
arginfo_libvirt_storagevolume_lookup_by_path)
- PHP_FE(libvirt_storagevolume_get_name, arginfo_libvirt_conn)
- PHP_FE(libvirt_storagevolume_get_path, arginfo_libvirt_conn)
- PHP_FE(libvirt_storagevolume_get_info, arginfo_libvirt_conn)
- PHP_FE(libvirt_storagevolume_get_xml_desc,
arginfo_libvirt_storagevolume_get_xml_desc)
- PHP_FE(libvirt_storagevolume_create_xml, arginfo_libvirt_conn_xml)
-
PHP_FE(libvirt_storagevolume_create_xml_from,arginfo_libvirt_storagevolume_create_xml_from)
- PHP_FE(libvirt_storagevolume_delete, arginfo_libvirt_conn_optflags)
- PHP_FE(libvirt_storagevolume_download, arginfo_libvirt_storagevolume_download)
- PHP_FE(libvirt_storagevolume_upload, arginfo_libvirt_storagevolume_download)
- PHP_FE(libvirt_storagevolume_resize, arginfo_libvirt_storagevolume_resize)
- PHP_FE(libvirt_storagepool_get_uuid_string, arginfo_libvirt_conn)
- PHP_FE(libvirt_storagepool_get_name, arginfo_libvirt_conn)
- PHP_FE(libvirt_storagepool_lookup_by_uuid_string, arginfo_libvirt_conn_uuid)
- PHP_FE(libvirt_storagepool_get_xml_desc, arginfo_libvirt_conn_xpath)
- PHP_FE(libvirt_storagepool_define_xml, arginfo_libvirt_storagepool_define_xml)
- PHP_FE(libvirt_storagepool_undefine, arginfo_libvirt_conn)
- PHP_FE(libvirt_storagepool_create, arginfo_libvirt_conn)
- PHP_FE(libvirt_storagepool_destroy, arginfo_libvirt_conn)
- PHP_FE(libvirt_storagepool_is_active, arginfo_libvirt_conn)
- PHP_FE(libvirt_storagepool_get_volume_count, arginfo_libvirt_conn)
- PHP_FE(libvirt_storagepool_refresh, arginfo_libvirt_conn_optflags)
- PHP_FE(libvirt_storagepool_set_autostart, arginfo_libvirt_conn_flags)
- PHP_FE(libvirt_storagepool_get_autostart, arginfo_libvirt_conn)
- PHP_FE(libvirt_storagepool_build, arginfo_libvirt_conn)
- PHP_FE(libvirt_storagepool_delete, arginfo_libvirt_conn)
- /* Network functions */
+ PHP_FE_LIBVIRT_STORAGE
PHP_FE_LIBVIRT_NETWORK
PHP_FE_LIBVIRT_NODE
/* Nodedev functions */
@@ -537,10 +505,6 @@ static zend_function_entry libvirt_functions[] = {
/* List functions */
PHP_FE(libvirt_list_domain_snapshots, arginfo_libvirt_conn_optflags)
PHP_FE(libvirt_list_nodedevs, arginfo_libvirt_conn_optcap)
- PHP_FE(libvirt_list_storagepools, arginfo_libvirt_conn)
- PHP_FE(libvirt_list_active_storagepools, arginfo_libvirt_conn)
- PHP_FE(libvirt_list_inactive_storagepools, arginfo_libvirt_conn)
- PHP_FE(libvirt_storagepool_list_volumes, arginfo_libvirt_conn)
PHP_FE(libvirt_list_all_nwfilters, arginfo_libvirt_conn)
PHP_FE(libvirt_list_nwfilters, arginfo_libvirt_conn)
/* Version information and common function */
@@ -578,7 +542,6 @@ zend_module_entry libvirt_module_entry = {
ZEND_GET_MODULE(libvirt)
#endif
-
/* PHP init options */
PHP_INI_BEGIN()
STD_PHP_INI_ENTRY("libvirt.longlong_to_string", "1", PHP_INI_ALL,
OnUpdateBool, longlong_to_string_ini, zend_libvirt_globals, libvirt_globals)
@@ -1223,60 +1186,6 @@ int is_local_connection(virConnectPtr conn)
#endif
}
-/* Destructor for storagepool resource */
-static void php_libvirt_storagepool_dtor(virt_resource *rsrc TSRMLS_DC)
-{
- php_libvirt_storagepool *pool = (php_libvirt_storagepool *)rsrc->ptr;
- int rv = 0;
-
- if (pool != NULL) {
- if (pool->pool != NULL) {
- if (!check_resource_allocation(NULL, INT_RESOURCE_STORAGEPOOL, pool->pool
TSRMLS_CC)) {
- pool->pool = NULL;
- efree(pool);
- return;
- }
- rv = virStoragePoolFree(pool->pool);
- if (rv != 0) {
- DPRINTF("%s: virStoragePoolFree(%p) returned %d (%s)\n",
__FUNCTION__, pool->pool, rv, LIBVIRT_G(last_error));
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "virStoragePoolFree
failed with %i on destructor: %s", rv, LIBVIRT_G(last_error));
- } else {
- DPRINTF("%s: virStoragePoolFree(%p) completed successfully\n",
__FUNCTION__, pool->pool);
- resource_change_counter(INT_RESOURCE_STORAGEPOOL, NULL, pool->pool, 0
TSRMLS_CC);
- }
- pool->pool = NULL;
- }
- efree(pool);
- }
-}
-
-/* Destructor for volume resource */
-static void php_libvirt_volume_dtor(virt_resource *rsrc TSRMLS_DC)
-{
- php_libvirt_volume *volume = (php_libvirt_volume *)rsrc->ptr;
- int rv = 0;
-
- if (volume != NULL) {
- if (volume->volume != NULL) {
- if (!check_resource_allocation(NULL, INT_RESOURCE_VOLUME, volume->volume
TSRMLS_CC)) {
- volume->volume = NULL;
- efree(volume);
- return;
- }
- rv = virStorageVolFree(volume->volume);
- if (rv != 0) {
- DPRINTF("%s: virStorageVolFree(%p) returned %d (%s)\n",
__FUNCTION__, volume->volume, rv, LIBVIRT_G(last_error));
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "virStorageVolFree
failed with %i on destructor: %s", rv, LIBVIRT_G(last_error));
- } else {
- DPRINTF("%s: virStorageVolFree(%p) completed successfully\n",
__FUNCTION__, volume->volume);
- resource_change_counter(INT_RESOURCE_VOLUME, NULL, volume->volume, 0
TSRMLS_CC);
- }
- volume->volume = NULL;
- }
- efree(volume);
- }
-}
-
/* Destructor for nodedev resource */
static void php_libvirt_nodedev_dtor(virt_resource *rsrc TSRMLS_DC)
{
@@ -1697,32 +1606,6 @@ PHP_MSHUTDOWN_FUNCTION(libvirt)
RETURN_FALSE;
\
} while (0)
-#define GET_STORAGEPOOL_FROM_ARGS(args, ...)
\
- do {
\
- reset_error(TSRMLS_C);
\
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, args, __VA_ARGS__) ==
FAILURE) { \
- set_error("Invalid arguments" TSRMLS_CC);
\
- RETURN_FALSE;
\
- }
\
-
\
- VIRT_FETCH_RESOURCE(pool, php_libvirt_storagepool*, &zpool,
PHP_LIBVIRT_STORAGEPOOL_RES_NAME, le_libvirt_storagepool);\
- if ((pool == NULL) || (pool->pool == NULL))
\
- RETURN_FALSE;
\
- } while (0)
\
-
-#define GET_VOLUME_FROM_ARGS(args, ...)
\
- do {
\
- reset_error(TSRMLS_C);
\
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, args, __VA_ARGS__) ==
FAILURE) { \
- set_error("Invalid arguments" TSRMLS_CC);
\
- RETURN_FALSE;
\
- }
\
-
\
- VIRT_FETCH_RESOURCE(volume, php_libvirt_volume*, &zvolume,
PHP_LIBVIRT_VOLUME_RES_NAME, le_libvirt_volume);\
- if ((volume == NULL) || (volume->volume == NULL))
\
- RETURN_FALSE;
\
- } while (0)
\
-
#define GET_SNAPSHOT_FROM_ARGS(args, ...)
\
do {
\
reset_error(TSRMLS_C);
\
@@ -2929,1075 +2812,8 @@ PHP_FUNCTION(libvirt_list_domain_snapshots)
efree(names);
}
-/* Storagepool functions */
-
-/*
- * Function name: libvirt_storagepool_lookup_by_name
- * Since version: 0.4.1(-1)
- * Description: Function is used to lookup for storage pool by it's name
- * Arguments: @res [resource]: libvirt connection resource
- * @name [string]: storage pool name
- * Returns: libvirt storagepool resource
- */
-PHP_FUNCTION(libvirt_storagepool_lookup_by_name)
-{
- php_libvirt_connection *conn = NULL;
- zval *zconn;
- strsize_t name_len;
- char *name = NULL;
- virStoragePoolPtr pool = NULL;
- php_libvirt_storagepool *res_pool;
-
- GET_CONNECTION_FROM_ARGS("rs", &zconn, &name, &name_len);
-
- if ((name == NULL) || (name_len < 1))
- RETURN_FALSE;
- pool = virStoragePoolLookupByName(conn->conn, name);
- DPRINTF("%s: virStoragePoolLookupByName(%p, %s) returned %p\n", PHPFUNC,
conn->conn, name, pool);
- if (pool == NULL)
- RETURN_FALSE;
-
- res_pool = (php_libvirt_storagepool *)emalloc(sizeof(php_libvirt_storagepool));
- res_pool->pool = pool;
- res_pool->conn = conn;
-
- DPRINTF("%s: returning %p\n", PHPFUNC, res_pool->pool);
- resource_change_counter(INT_RESOURCE_STORAGEPOOL, conn->conn, res_pool->pool, 1
TSRMLS_CC);
-
- VIRT_REGISTER_RESOURCE(res_pool, le_libvirt_storagepool);
-}
-
-/* Storagepool functions */
-
-/*
- * Function name: libvirt_storagepool_lookup_by_volume
- * Since version: 0.4.1(-1)
- * Description: Function is used to lookup for storage pool by a volume
- * Arguments: @res [volume]: volume resource of storage pool
- * Returns: libvirt storagepool resource
- */
-PHP_FUNCTION(libvirt_storagepool_lookup_by_volume)
-{
- php_libvirt_volume *volume;
- zval *zvolume;
- virStoragePoolPtr pool = NULL;
- php_libvirt_storagepool *res_pool;
-
- GET_VOLUME_FROM_ARGS("r", &zvolume);
-
- pool = virStoragePoolLookupByVolume(volume->volume);
- DPRINTF("%s: virStoragePoolLookupByVolume(%p) returned %p\n", PHPFUNC,
volume->volume, pool);
- if (pool == NULL)
- RETURN_FALSE;
-
- res_pool = (php_libvirt_storagepool *)emalloc(sizeof(php_libvirt_storagepool));
- res_pool->pool = pool;
- res_pool->conn = volume->conn;
-
- DPRINTF("%s: returning %p\n", PHPFUNC, res_pool->pool);
- resource_change_counter(INT_RESOURCE_STORAGEPOOL, res_pool->conn->conn,
res_pool->pool, 1 TSRMLS_CC);
-
- VIRT_REGISTER_RESOURCE(res_pool, le_libvirt_storagepool);
-}
-
-/*
- * Function name: libvirt_storagepool_list_volumes
- * Since version: 0.4.1(-1)
- * Description: Function is used to list volumes in the specified storage pool
- * Arguments: @res [resource]: libvirt storagepool resource
- * Returns: list of storage volume names in the storage pool in an array using
default keys (indexes)
- */
-PHP_FUNCTION(libvirt_storagepool_list_volumes)
-{
- php_libvirt_storagepool *pool = NULL;
- zval *zpool;
- char **names = NULL;
- int expectedcount = -1;
- int i;
- int count = -1;
-
- GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
-
- if ((expectedcount = virStoragePoolNumOfVolumes(pool->pool)) < 0)
- RETURN_FALSE;
-
- DPRINTF("%s: virStoragePoolNumOfVolumes(%p) returned %d\n", PHPFUNC,
pool->pool, expectedcount);
- names = (char **)emalloc(expectedcount*sizeof(char *));
-
- count = virStoragePoolListVolumes(pool->pool, names, expectedcount);
- DPRINTF("%s: virStoragePoolListVolumes(%p, %p, %d) returned %d\n", PHPFUNC,
pool->pool, names, expectedcount, count);
- array_init(return_value);
-
- if ((count != expectedcount) || (count < 0))
- RETURN_FALSE;
- for (i = 0; i < count; i++) {
- VIRT_ADD_NEXT_INDEX_STRING(return_value, names[i]);
- free(names[i]);
- }
-
- efree(names);
-}
-
-/*
- * Function name: libvirt_storagepool_get_info
- * Since version: 0.4.1(-1)
- * Description: Function is used to get information about the storage pool
- * Arguments: @res [resource]: libvirt storagepool resource
- * Returns: storage pool information array of state, capacity, allocation and
available space
- */
-PHP_FUNCTION(libvirt_storagepool_get_info)
-{
- php_libvirt_storagepool *pool = NULL;
- zval *zpool;
- virStoragePoolInfo poolInfo;
- int retval;
-
- GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
-
- retval = virStoragePoolGetInfo(pool->pool, &poolInfo);
- DPRINTF("%s: virStoragePoolGetInfo(%p, <info>) returned %d\n",
PHPFUNC, pool->pool, retval);
- if (retval != 0)
- RETURN_FALSE;
-
- array_init(return_value);
-
- // @todo: fix the long long returns
- LONGLONG_INIT;
- add_assoc_long(return_value, "state", (long)poolInfo.state);
- LONGLONG_ASSOC(return_value, "capacity", poolInfo.capacity);
- LONGLONG_ASSOC(return_value, "allocation", poolInfo.allocation);
- LONGLONG_ASSOC(return_value, "available", poolInfo.available);
-}
-
-/*
- * Function name: libvirt_storagevolume_lookup_by_name
- * Since version: 0.4.1(-1)
- * Description: Function is used to lookup for storage volume by it's name
- * Arguments: @res [resource]: libvirt storagepool resource
- * @name [string]: name of the storage volume to look for
- * Returns: libvirt storagevolume resource
- */
-PHP_FUNCTION(libvirt_storagevolume_lookup_by_name)
-{
- php_libvirt_storagepool *pool = NULL;
- php_libvirt_volume *res_volume;
- zval *zpool;
- strsize_t name_len;
- char *name = NULL;
- virStorageVolPtr volume = NULL;
-
- GET_STORAGEPOOL_FROM_ARGS("rs", &zpool, &name, &name_len);
- if ((name == NULL) || (name_len < 1))
- RETURN_FALSE;
-
- volume = virStorageVolLookupByName(pool->pool, name);
- DPRINTF("%s: virStorageVolLookupByName(%p, %s) returned %p\n", PHPFUNC,
pool->pool, name, volume);
- if (volume == NULL)
- RETURN_FALSE;
-
- res_volume = (php_libvirt_volume *)emalloc(sizeof(php_libvirt_volume));
- res_volume->volume = volume;
- res_volume->conn = pool->conn;
-
- DPRINTF("%s: returning %p\n", PHPFUNC, res_volume->volume);
- resource_change_counter(INT_RESOURCE_VOLUME, pool->conn->conn,
res_volume->volume, 1 TSRMLS_CC);
-
- VIRT_REGISTER_RESOURCE(res_volume, le_libvirt_volume);
-}
-
-/*
- * Function name: libvirt_storagevolume_lookup_by_path
- * Since version: 0.4.1(-2)
- * Description: Function is used to lookup for storage volume by it's path
- * Arguments: @res [resource]: libvirt connection resource
- * @path [string]: path of the storage volume to look for
- * Returns: libvirt storagevolume resource
- */
-PHP_FUNCTION(libvirt_storagevolume_lookup_by_path)
-{
- php_libvirt_connection *conn = NULL;
- php_libvirt_volume *res_volume;
- zval *zconn;
- strsize_t name_len;
- char *name = NULL;
- virStorageVolPtr volume = NULL;
-
- GET_CONNECTION_FROM_ARGS("rs", &zconn, &name, &name_len);
- if ((name == NULL) || (name_len < 1))
- RETURN_FALSE;
-
- volume = virStorageVolLookupByPath(conn->conn, name);
- DPRINTF("%s: virStorageVolLookupByPath(%p, %s) returned %p\n", PHPFUNC,
conn->conn, name, volume);
- if (volume == NULL) {
- set_error_if_unset("Cannot find storage volume on requested path"
TSRMLS_CC);
- RETURN_FALSE;
- }
-
- res_volume = (php_libvirt_volume *)emalloc(sizeof(php_libvirt_volume));
- res_volume->volume = volume;
- res_volume->conn = conn;
-
- DPRINTF("%s: returning %p\n", PHPFUNC, res_volume->volume);
- resource_change_counter(INT_RESOURCE_VOLUME, conn->conn, res_volume->volume, 1
TSRMLS_CC);
-
- VIRT_REGISTER_RESOURCE(res_volume, le_libvirt_volume);
-}
-
-/*
- * Function name: libvirt_storagevolume_get_name
- * Since version: 0.4.1(-2)
- * Description: Function is used to get the storage volume name
- * Arguments: @res [resource]: libvirt storagevolume resource
- * Returns: storagevolume name
- */
-PHP_FUNCTION(libvirt_storagevolume_get_name)
-{
- php_libvirt_volume *volume = NULL;
- zval *zvolume;
- const char *retval;
-
- GET_VOLUME_FROM_ARGS("r", &zvolume);
-
- retval = virStorageVolGetName(volume->volume);
- DPRINTF("%s: virStorageVolGetName(%p) returned %s\n", PHPFUNC,
volume->volume, retval);
- if (retval == NULL)
- RETURN_FALSE;
-
- VIRT_RETURN_STRING(retval);
-}
-
-/*
- * Function name: libvirt_storagevolume_get_path
- * Since version: 0.4.1(-2)
- * Description: Function is used to get the storage volume path
- * Arguments: @res [resource]: libvirt storagevolume resource
- * Returns: storagevolume path
- */
-PHP_FUNCTION(libvirt_storagevolume_get_path)
-{
- php_libvirt_volume *volume = NULL;
- zval *zvolume;
- char *retval;
-
- GET_VOLUME_FROM_ARGS("r", &zvolume);
-
- retval = virStorageVolGetPath(volume->volume);
- DPRINTF("%s: virStorageVolGetPath(%p) returned %s\n", PHPFUNC,
volume->volume, retval);
- if (retval == NULL)
- RETURN_FALSE;
-
- VIRT_RETVAL_STRING(retval);
- free(retval);
-}
-
-/*
- * Function name: libvirt_storagevolume_get_info
- * Since version: 0.4.1(-1)
- * Description: Function is used to get the storage volume information
- * Arguments: @res [resource]: libvirt storagevolume resource
- * Returns: storage volume information array of type, allocation and capacity
- */
-PHP_FUNCTION(libvirt_storagevolume_get_info)
-{
- php_libvirt_volume *volume = NULL;
- zval *zvolume;
- virStorageVolInfo volumeInfo;
- int retval;
-
- GET_VOLUME_FROM_ARGS("r", &zvolume);
-
- retval = virStorageVolGetInfo(volume->volume, &volumeInfo);
- DPRINTF("%s: virStorageVolGetInfo(%p, <info>) returned %d\n",
PHPFUNC, volume->volume, retval);
- if (retval != 0)
- RETURN_FALSE;
-
- array_init(return_value);
- LONGLONG_INIT;
- add_assoc_long(return_value, "type", (long)volumeInfo.type);
- LONGLONG_ASSOC(return_value, "capacity", volumeInfo.capacity);
- LONGLONG_ASSOC(return_value, "allocation", volumeInfo.allocation);
-}
-
-/*
- * Function name: libvirt_storagevolume_get_xml_desc
- * Since version: 0.4.1(-1), changed 0.4.2
- * Description: Function is used to get the storage volume XML description
- * Arguments: @res [resource]: libvirt storagevolume resource
- * @xpath [string]: optional xPath expression string to get just this
entry, can be NULL
- * @flags [int]: optional flags
- * Returns: storagevolume XML description or result of xPath expression
- */
-PHP_FUNCTION(libvirt_storagevolume_get_xml_desc)
-{
- php_libvirt_volume *volume = NULL;
- zval *zvolume;
- char *tmp = NULL;
- char *xml;
- char *xpath = NULL;
- strsize_t xpath_len;
- zend_long flags = 0;
- int retval = -1;
-
- GET_VOLUME_FROM_ARGS("rs|l", &zvolume, &xpath, &xpath_len,
&flags);
- if (xpath_len < 1)
- xpath = NULL;
-
- DPRINTF("%s: volume = %p, xpath = %s, flags = %ld\n", PHPFUNC,
volume->volume, xpath, flags);
-
- xml = virStorageVolGetXMLDesc(volume->volume, flags);
- if (xml == NULL) {
- set_error_if_unset("Cannot get the XML description" TSRMLS_CC);
- RETURN_FALSE;
- }
-
- tmp = get_string_from_xpath(xml, xpath, NULL, &retval);
- if ((tmp == NULL) || (retval < 0)) {
- VIRT_RETVAL_STRING(xml);
- } else {
- VIRT_RETVAL_STRING(tmp);
- }
-
- free(xml);
- free(tmp);
-}
-
-/*
- * Function name: libvirt_storagevolume_create_xml
- * Since version: 0.4.1(-1)
- * Description: Function is used to create the new storage pool and return the handle
to new storage pool
- * Arguments: @res [resource]: libvirt storagepool resource
- * @xml [string]: XML string to create the storage volume in the storage
pool
- * @flags [int]: virStorageVolCreateXML flags
- * Returns: libvirt storagevolume resource
- */
-PHP_FUNCTION(libvirt_storagevolume_create_xml)
-{
- php_libvirt_volume *res_volume = NULL;
- php_libvirt_storagepool *pool = NULL;
- zval *zpool;
- virStorageVolPtr volume = NULL;
- char *xml;
- zend_long flags = 0;
- strsize_t xml_len;
-
- GET_STORAGEPOOL_FROM_ARGS("rs|l", &zpool, &xml, &xml_len,
&flags);
-
- volume = virStorageVolCreateXML(pool->pool, xml, flags);
- DPRINTF("%s: virStorageVolCreateXML(%p, <xml>, 0) returned %p\n",
PHPFUNC, pool->pool, volume);
- if (volume == NULL)
- RETURN_FALSE;
-
- res_volume = (php_libvirt_volume *)emalloc(sizeof(php_libvirt_volume));
- res_volume->volume = volume;
- res_volume->conn = pool->conn;
-
- DPRINTF("%s: returning %p\n", PHPFUNC, res_volume->volume);
- resource_change_counter(INT_RESOURCE_VOLUME, pool->conn->conn,
res_volume->volume, 1 TSRMLS_CC);
-
- VIRT_REGISTER_RESOURCE(res_volume, le_libvirt_volume);
-}
-
-/*
- * Function name: libvirt_storagevolume_create_xml_from
- * Since version: 0.4.1(-2)
- * Description: Function is used to clone the new storage volume into pool from the
orignial volume
- * Arguments: @pool [resource]: libvirt storagepool resource
- * @xml [string]: XML string to create the storage volume in the storage
pool
- * @original_volume [resource]: libvirt storagevolume resource
- * Returns: libvirt storagevolume resource
- */
-PHP_FUNCTION(libvirt_storagevolume_create_xml_from)
-{
- php_libvirt_volume *res_volume = NULL;
- php_libvirt_storagepool *pool = NULL;
- zval *zpool;
-
- php_libvirt_volume *pl_volume = NULL;
- zval *zvolume;
-
- virStorageVolPtr volume = NULL;
- char *xml;
- strsize_t xml_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsr", &zpool,
&xml, &xml_len, &zvolume) == FAILURE) {
- set_error("Invalid pool resource, XML or volume resouce" TSRMLS_CC);
- RETURN_FALSE;
- }
-
- VIRT_FETCH_RESOURCE(pool, php_libvirt_storagepool*, &zpool,
PHP_LIBVIRT_STORAGEPOOL_RES_NAME, le_libvirt_storagepool);
- if ((pool == NULL) || (pool->pool == NULL))
- RETURN_FALSE;
- VIRT_FETCH_RESOURCE(pl_volume, php_libvirt_volume*, &zvolume,
PHP_LIBVIRT_VOLUME_RES_NAME, le_libvirt_volume);
- if ((pl_volume == NULL) || (pl_volume->volume == NULL))
- RETURN_FALSE;
- resource_change_counter(INT_RESOURCE_VOLUME, NULL, pl_volume->volume, 1
TSRMLS_CC);
-
- volume = virStorageVolCreateXMLFrom(pool->pool, xml, pl_volume->volume, 0);
- DPRINTF("%s: virStorageVolCreateXMLFrom(%p, <xml>, %p, 0) returned
%p\n", PHPFUNC, pool->pool, pl_volume->volume, volume);
- if (volume == NULL)
- RETURN_FALSE;
-
- res_volume = (php_libvirt_volume *)emalloc(sizeof(php_libvirt_volume));
- res_volume->volume = volume;
- res_volume->conn = pool->conn;
-
- DPRINTF("%s: returning %p\n", PHPFUNC, res_volume->volume);
- resource_change_counter(INT_RESOURCE_VOLUME, pool->conn->conn,
res_volume->volume, 1 TSRMLS_CC);
-
- VIRT_REGISTER_RESOURCE(res_volume, le_libvirt_volume);
-}
-
-/*
- * Function name: libvirt_storagevolume_delete
- * Since version: 0.4.2
- * Description: Function is used to delete to volume identified by it's resource
- * Arguments: @res [resource]: libvirt storagevolume resource
- * @flags [int]: optional flags for the storage volume deletion for
virStorageVolDelete()
- * Returns: TRUE for success, FALSE on error
- */
-PHP_FUNCTION(libvirt_storagevolume_delete)
-{
- php_libvirt_volume *volume = NULL;
- zval *zvolume;
- zend_long flags = 0;
- int retval = 0;
-
- GET_VOLUME_FROM_ARGS("r|l", &zvolume, &flags);
-
- retval = virStorageVolDelete(volume->volume, flags);
- DPRINTF("%s: virStorageVolDelete(%p, %d) returned %d\n", PHPFUNC,
volume->volume, (int) flags, retval);
- if (retval != 0) {
- set_error_if_unset("Cannot delete storage volume" TSRMLS_CC);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-
-/*
- * Function name: libvirt_storagevolume_resize
- * Since version: 0.5.0
- * Description: Function is used to resize volume identified by it's resource
- * Arguments: @res [resource]: libvirt storagevolume resource
- * @capacity [int]: capacity for the storage volume
- * @flags [int]: optional flags for the storage volume resize for
virStorageVolResize()
- * Returns: int
- */
-PHP_FUNCTION(libvirt_storagevolume_resize)
-{
- php_libvirt_volume *volume = NULL;
- zval *zvolume;
- zend_long flags = 0;
- zend_long capacity = 0;
- int retval = -1;
-
- GET_VOLUME_FROM_ARGS("rl|l", &zvolume, &capacity, &flags);
-
- retval = virStorageVolResize(volume->volume, capacity, flags);
- DPRINTF("%s: virStorageVolResize(%p, %d, %d) returned %d\n", PHPFUNC,
volume->volume, (int) capacity, (int) flags, retval);
- if (retval != 0) {
- set_error_if_unset("Cannot resize storage volume" TSRMLS_CC);
- RETURN_LONG(retval);
- }
-
- RETURN_LONG(retval);
-}
-
-/*
- * Function name: libvirt_storagevolume_download
- * Since version: 0.5.0
- * Description: Function is used to download volume identified by it's resource
- * Arguments: @res [resource]: libvirt storagevolume resource
- * @stream [resource]: stream to use as output
- * @offset [int]: position to start reading from
- * @length [int] : limit on amount of data to download
- * @flags [int]: optional flags for the storage volume download for
virStorageVolDownload()
- * Returns: int
- */
-PHP_FUNCTION(libvirt_storagevolume_download)
-{
- php_libvirt_volume *volume = NULL;
- php_libvirt_stream *stream = NULL;
- zval *zvolume;
- zval *zstream;
- zend_long flags = 0;
- zend_long offset = 0;
- zend_long length = 0;
- int retval = -1;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr|l|l|l",
&zvolume, &zstream, &offset, &length, &flags) == FAILURE)
- RETURN_LONG(retval);
- VIRT_FETCH_RESOURCE(volume, php_libvirt_volume*, &zvolume,
PHP_LIBVIRT_VOLUME_RES_NAME, le_libvirt_volume);
- if ((volume == NULL) || (volume->volume == NULL))
- RETURN_LONG(retval);
- VIRT_FETCH_RESOURCE(stream, php_libvirt_stream*, &zstream,
PHP_LIBVIRT_STREAM_RES_NAME, le_libvirt_stream);
- if ((stream == NULL) || (stream->stream == NULL))
- RETURN_LONG(retval);
-
- retval = virStorageVolDownload(volume->volume, stream->stream, offset, length,
flags);
- DPRINTF("%s: virStorageVolDownload(%p, %p, %d, %d, %d) returned %d\n",
PHPFUNC, volume->volume, stream->stream, (int) offset, (int) length, (int) flags,
retval);
-
- if (retval == -1) {
- set_error("Cannot download from stream" TSRMLS_CC);
- RETURN_LONG(retval);
- }
-
- RETURN_LONG(retval);
-}
-
-/*
- * Function name: libvirt_storagevolume_upload
- * Since version: 0.5.0
- * Description: Function is used to upload volume identified by it's resource
- * Arguments: @res [resource]: libvirt storagevolume resource
- * @stream [resource]: stream to use as input
- * @offset [int]: position to start writing to
- * @length [int] : limit on amount of data to upload
- * @flags [int]: optional flags for the storage volume upload for
virStorageVolUpload()
- * Returns: int
- */
-PHP_FUNCTION(libvirt_storagevolume_upload)
-{
- php_libvirt_volume *volume = NULL;
- php_libvirt_stream *stream = NULL;
- zval *zvolume;
- zval *zstream;
- zend_long flags = 0;
- zend_long offset = 0;
- zend_long length = 0;
- int retval = -1;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr|l|l|l",
&zvolume, &zstream, &offset, &length, &flags) == FAILURE)
- RETURN_LONG(retval);
- VIRT_FETCH_RESOURCE(volume, php_libvirt_volume*, &zvolume,
PHP_LIBVIRT_VOLUME_RES_NAME, le_libvirt_volume);
- if ((volume == NULL) || (volume->volume == NULL))
- RETURN_LONG(retval);
- VIRT_FETCH_RESOURCE(stream, php_libvirt_stream*, &zstream,
PHP_LIBVIRT_STREAM_RES_NAME, le_libvirt_stream);
- if ((stream == NULL) || (stream->stream == NULL))
- RETURN_LONG(retval);
-
- retval = virStorageVolUpload(volume->volume, stream->stream, offset, length,
flags);
- DPRINTF("%s: virStorageVolUpload(%p, %p, %d, %d, %d) returned %d\n",
PHPFUNC, volume->volume, stream->stream, (int) offset, (int) length, (int) flags,
retval);
-
- if (retval == -1) {
- set_error_if_unset("Cannot upload storage volume" TSRMLS_CC);
- RETURN_LONG(retval);
- }
-
- RETURN_LONG(retval);
-}
-
-/*
- * Function name: libvirt_storagepool_get_uuid_string
- * Since version: 0.4.1(-1)
- * Description: Function is used to get storage pool by UUID string
- * Arguments: @res [resource]: libvirt storagepool resource
- * Returns: storagepool UUID string
- */
-PHP_FUNCTION(libvirt_storagepool_get_uuid_string)
-{
- php_libvirt_storagepool *pool = NULL;
- zval *zpool;
- char *uuid;
- int retval;
-
- GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
-
- uuid = (char *)emalloc(VIR_UUID_STRING_BUFLEN);
- retval = virStoragePoolGetUUIDString(pool->pool, uuid);
- DPRINTF("%s: virStoragePoolGetUUIDString(%p, %p) returned %d (%s)\n",
PHPFUNC, pool->pool, uuid, retval, uuid);
- if (retval != 0)
- RETURN_FALSE;
-
- VIRT_RETVAL_STRING(uuid);
- efree(uuid);
-}
-
-/*
- * Function name: libvirt_storagepool_get_name
- * Since version: 0.4.1(-1)
- * Description: Function is used to get storage pool name from the storage pool
resource
- * Arguments: @res [resource]: libvirt storagepool resource
- * Returns: storagepool name string
- */
-PHP_FUNCTION(libvirt_storagepool_get_name)
-{
- php_libvirt_storagepool *pool = NULL;
- zval *zpool;
- const char *name = NULL;
-
- GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
-
- name = virStoragePoolGetName(pool->pool);
- DPRINTF("%s: virStoragePoolGetName(%p) returned %s\n", PHPFUNC,
pool->pool, name);
- if (name == NULL)
- RETURN_FALSE;
-
- VIRT_RETURN_STRING(name);
-}
-
-/*
- * Function name: libvirt_storagepool_lookup_by_uuid_string
- * Since version: 0.4.1(-1)
- * Description: Function is used to lookup for storage pool identified by UUID
string
- * Arguments: @res [resource]: libvirt connection resource
- * @uuid [string]: UUID string to look for storagepool
- * Returns: libvirt storagepool resource
- */
-PHP_FUNCTION(libvirt_storagepool_lookup_by_uuid_string)
-{
- php_libvirt_connection *conn = NULL;
- zval *zconn;
- char *uuid = NULL;
- strsize_t uuid_len;
- virStoragePoolPtr storage = NULL;
- php_libvirt_storagepool *res_pool;
-
- GET_CONNECTION_FROM_ARGS("rs", &zconn, &uuid, &uuid_len);
-
- if ((uuid == NULL) || (uuid_len < 1))
- RETURN_FALSE;
-
- storage = virStoragePoolLookupByUUIDString(conn->conn, uuid);
- DPRINTF("%s: virStoragePoolLookupByUUIDString(%p, %s) returned %p\n",
PHPFUNC, conn->conn, uuid, storage);
- if (storage == NULL)
- RETURN_FALSE;
-
- res_pool = (php_libvirt_storagepool *)emalloc(sizeof(php_libvirt_storagepool));
- res_pool->pool = storage;
- res_pool->conn = conn;
-
- DPRINTF("%s: returning %p\n", PHPFUNC, res_pool->pool);
- resource_change_counter(INT_RESOURCE_STORAGEPOOL, conn->conn, res_pool->pool, 1
TSRMLS_CC);
-
- VIRT_REGISTER_RESOURCE(res_pool, le_libvirt_storagepool);
-}
-
-/*
- * Function name: libvirt_storagepool_get_xml_desc
- * Since version: 0.4.1(-1), changed 0.4.2
- * Description: Function is used to get the XML description for the storage pool
identified by res
- * Arguments: @res [resource]: libvirt storagepool resource
- * @xpath [string]: optional xPath expression string to get just this
entry, can be NULL
- * Returns: storagepool XML description string or result of xPath expression
- */
-PHP_FUNCTION(libvirt_storagepool_get_xml_desc)
-{
- php_libvirt_storagepool *pool = NULL;
- zval *zpool;
- char *xml;
- char *xpath = NULL;
- char *tmp = NULL;
- zend_long flags = 0;
- strsize_t xpath_len;
- int retval = -1;
-
- GET_STORAGEPOOL_FROM_ARGS("r|s", &zpool, &xpath, &xpath_len,
&flags);
- if (xpath_len < 1)
- xpath = NULL;
-
- DPRINTF("%s: pool = %p, flags = %ld, xpath = %s\n", PHPFUNC, pool->pool,
flags, xpath);
-
- xml = virStoragePoolGetXMLDesc(pool->pool, flags);
- if (xml == NULL) {
- set_error_if_unset("Cannot get the XML description" TSRMLS_CC);
- RETURN_FALSE;
- }
-
- tmp = get_string_from_xpath(xml, xpath, NULL, &retval);
- if ((tmp == NULL) || (retval < 0)) {
- VIRT_RETVAL_STRING(xml);
- } else {
- VIRT_RETVAL_STRING(tmp);
- }
-
- free(xml);
- free(tmp);
-}
-
-/*
- * Function name: libvirt_storagepool_define_xml
- * Since version: 0.4.1(-1)
- * Description: Function is used to define the storage pool from XML string and
return it's resource
- * Arguments: @res [resource]: libvirt connection resource
- * @xml [string]: XML string definition of storagepool
- * @flags [int]: flags to define XML
- * Returns: libvirt storagepool resource
- */
-PHP_FUNCTION(libvirt_storagepool_define_xml)
-{
- php_libvirt_storagepool *res_pool = NULL;
- php_libvirt_connection *conn = NULL;
- zval *zconn;
- virStoragePoolPtr pool = NULL;
- char *xml;
- strsize_t xml_len;
- zend_long flags = 0;
-
-
- GET_CONNECTION_FROM_ARGS("rs|l", &zconn, &xml, &xml_len,
&flags);
-
- pool = virStoragePoolDefineXML(conn->conn, xml, (unsigned int)flags);
- DPRINTF("%s: virStoragePoolDefineXML(%p, <xml>) returned %p\n",
PHPFUNC, conn->conn, pool);
- if (pool == NULL)
- RETURN_FALSE;
-
- res_pool = (php_libvirt_storagepool *)emalloc(sizeof(php_libvirt_storagepool));
- res_pool->pool = pool;
- res_pool->conn = conn;
-
- DPRINTF("%s: returning %p\n", PHPFUNC, res_pool->pool);
- resource_change_counter(INT_RESOURCE_STORAGEPOOL, conn->conn, res_pool->pool, 1
TSRMLS_CC);
-
- VIRT_REGISTER_RESOURCE(res_pool, le_libvirt_storagepool);
-}
-
-/*
- * Function name: libvirt_storagepool_undefine
- * Since version: 0.4.1(-1)
- * Description: Function is used to undefine the storage pool identified by it's
resource
- * Arguments: @res [resource]: libvirt storagepool resource
- * Returns: TRUE if success, FALSE on error
- */
-PHP_FUNCTION(libvirt_storagepool_undefine)
-{
- php_libvirt_storagepool *pool = NULL;
- zval *zpool;
- int retval = 0;
-
- GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
-
- retval = virStoragePoolUndefine(pool->pool);
- DPRINTF("%s: virStoragePoolUndefine(%p) returned %d\n", PHPFUNC,
pool->pool, retval);
- if (retval != 0)
- RETURN_FALSE;
-
- RETURN_TRUE;
-}
-
-/*
- * Function name: libvirt_storagepool_create
- * Since version: 0.4.1(-1)
- * Description: Function is used to create/start the storage pool
- * Arguments: @res [resource]: libvirt storagepool resource
- * Returns: TRUE if success, FALSE on error
- */
-PHP_FUNCTION(libvirt_storagepool_create)
-{
- php_libvirt_storagepool *pool = NULL;
- zval *zpool;
- int retval;
-
- GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
-
- retval = virStoragePoolCreate(pool->pool, 0);
- DPRINTF("%s: virStoragePoolCreate(%p, 0) returned %d\n", PHPFUNC,
pool->pool, retval);
- if (retval != 0)
- RETURN_FALSE;
- RETURN_TRUE;
-}
-
-/*
- * Function name: libvirt_storagepool_destroy
- * Since version: 0.4.1(-1)
- * Description: Function is used to destory the storage pool
- * Arguments: @res [resource]: libvirt storagepool resource
- * Returns: TRUE if success, FALSE on error
- */
-PHP_FUNCTION(libvirt_storagepool_destroy)
-{
- php_libvirt_storagepool *pool = NULL;
- zval *zpool;
- int retval;
-
- GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
-
- retval = virStoragePoolDestroy(pool->pool);
- DPRINTF("%s: virStoragePoolDestroy(%p) returned %d\n", PHPFUNC,
pool->pool, retval);
- if (retval != 0)
- RETURN_FALSE;
- RETURN_TRUE;
-}
-
-/*
- * Function name: libvirt_storagepool_is_active
- * Since version: 0.4.1(-1)
- * Description: Function is used to get information whether storage pool is active or
not
- * Arguments: @res [resource]: libvirt storagepool resource
- * Returns: result of virStoragePoolIsActive
- */
-PHP_FUNCTION(libvirt_storagepool_is_active)
-{
- php_libvirt_storagepool *pool = NULL;
- zval *zpool;
-
- GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
-
- RETURN_LONG(virStoragePoolIsActive(pool->pool));
-}
-
-/*
- * Function name: libvirt_storagepool_get_volume_count
- * Since version: 0.4.1(-1)
- * Description: Function is used to get storage volume count in the storage pool
- * Arguments: @res [resource]: libvirt storagepool resource
- * Returns: number of volumes in the pool
- */
-PHP_FUNCTION(libvirt_storagepool_get_volume_count)
-{
- php_libvirt_storagepool *pool = NULL;
- zval *zpool;
-
- GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
-
- RETURN_LONG(virStoragePoolNumOfVolumes(pool->pool));
-}
-
-/*
- * Function name: libvirt_storagepool_refresh
- * Since version: 0.4.1(-1)
- * Description: Function is used to refresh the storage pool information
- * Arguments: @res [resource]: libvirt storagepool resource
- * @flags [int]: refresh flags
- * Returns: TRUE if success, FALSE on error
- */
-PHP_FUNCTION(libvirt_storagepool_refresh)
-{
- php_libvirt_storagepool *pool = NULL;
- zval *zpool;
- zend_long flags = 0;
- int retval;
-
- GET_STORAGEPOOL_FROM_ARGS("r|l", &zpool, &flags);
-
- retval = virStoragePoolRefresh(pool->pool, flags);
- DPRINTF("%s: virStoragePoolRefresh(%p, %ld) returned %d\n", PHPFUNC,
pool->pool, flags, retval);
- if (retval < 0)
- RETURN_FALSE;
- RETURN_TRUE;
-}
-
-/*
- * Function name: libvirt_storagepool_set_autostart
- * Since version: 0.4.1(-1)
- * Description: Function is used to set autostart of the storage pool
- * Arguments: @res [resource]: libvirt storagepool resource
- * @flags [int]: flags to set autostart
- * Returns: result on setting storagepool autostart value
- */
-PHP_FUNCTION(libvirt_storagepool_set_autostart)
-{
- php_libvirt_storagepool *pool = NULL;
- zval *zpool;
- zend_bool flags = 0;
- int retval;
-
- GET_STORAGEPOOL_FROM_ARGS("rb", &zpool, &flags);
-
- retval = virStoragePoolSetAutostart(pool->pool, flags);
- DPRINTF("%s: virStoragePoolSetAutostart(%p, %d) returned %d\n", PHPFUNC,
pool->pool, flags, retval);
- if (retval != 0)
- RETURN_FALSE;
- RETURN_TRUE;
-}
-
-/*
- * Function name: libvirt_storagepool_get_autostart
- * Since version: 0.4.1(-1)
- * Description: Function is used to get autostart of the storage pool
- * Arguments: @res [resource]: libvirt storagepool resource
- * Returns: TRUE for autostart enabled, FALSE for autostart disabled, FALSE with
last_error set for error
- */
-PHP_FUNCTION(libvirt_storagepool_get_autostart)
-{
- php_libvirt_storagepool *pool = NULL;
- zval *zpool;
- int autostart;
-
- GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
-
- if (virStoragePoolGetAutostart(pool->pool, &autostart) == 0 &&
- autostart != 0)
- RETURN_TRUE;
-
- RETURN_FALSE;
-}
-
-/*
- * Function name: libvirt_storagepool_build
- * Since version: 0.4.2
- * Description: Function is used to Build the underlying storage pool, e.g. create
the destination directory for NFS
- * Arguments: @res [resource]: libvirt storagepool resource
- * Returns: TRUE if success, FALSE on error
- */
-PHP_FUNCTION(libvirt_storagepool_build)
-{
- php_libvirt_storagepool *pool = NULL;
- zval *zpool;
- int flags = 0;
- int retval;
-
- GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
-
- retval = virStoragePoolBuild(pool->pool, flags);
- DPRINTF("%s: virStoragePoolBuild(%p, %d) returned %d\n", PHPFUNC,
pool->pool, flags, retval);
- if (retval == 0)
- RETURN_TRUE;
-
- RETURN_FALSE;
-}
-
-/*
- * Function name: libvirt_storagepool_delete
- * Since version: 0.4.6
- * Description: Function is used to Delete the underlying storage pool, e.g. remove
the destination directory for NFS
- * Arguments: @res [resource]: libvirt storagepool resource
- * Returns: TRUE if success, FALSE on error
- */
-PHP_FUNCTION(libvirt_storagepool_delete)
-{
- php_libvirt_storagepool *pool = NULL;
- zval *zpool;
- int flags = 0;
- int retval;
-
- GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
-
- retval = virStoragePoolDelete(pool->pool, flags);
- DPRINTF("%s: virStoragePoolDelete(%p, %d) returned %d\n", PHPFUNC,
pool->pool, flags, retval);
- if (retval == 0)
- RETURN_TRUE;
-
- RETURN_FALSE;
-}
-
/* Listing functions */
/*
- * Function name: libvirt_list_storagepools
- * Since version: 0.4.1(-1)
- * Description: Function is used to list storage pools on the connection
- * Arguments: @res [resource]: libvirt connection resource
- * Returns: libvirt storagepool names array for the connection
- */
-PHP_FUNCTION(libvirt_list_storagepools)
-{
- php_libvirt_connection *conn = NULL;
- zval *zconn;
- int count = -1;
- int expectedcount = -1;
- char **names;
- int i;
-
- GET_CONNECTION_FROM_ARGS("r", &zconn);
-
- if ((expectedcount = virConnectNumOfStoragePools(conn->conn)) < 0)
- RETURN_FALSE;
-
- names = (char **)emalloc(expectedcount*sizeof(char *));
- count = virConnectListStoragePools(conn->conn, names, expectedcount);
-
- if ((count != expectedcount) || (count < 0)) {
- efree(names);
- RETURN_FALSE;
- }
-
- array_init(return_value);
- for (i = 0; i < count; i++) {
- VIRT_ADD_NEXT_INDEX_STRING(return_value, names[i]);
- free(names[i]);
- }
- efree(names);
-
-
- if ((expectedcount = virConnectNumOfDefinedStoragePools(conn->conn)) < 0)
- RETURN_FALSE;
- names = (char **)emalloc(expectedcount * sizeof(char *));
- count = virConnectListDefinedStoragePools(conn->conn, names, expectedcount);
- if ((count != expectedcount) || (count < 0)) {
- efree(names);
- RETURN_FALSE;
- }
-
- for (i = 0; i < count; i++) {
- VIRT_ADD_NEXT_INDEX_STRING(return_value, names[i]);
- free(names[i]);
- }
- efree(names);
-}
-
-/*
- * Function name: libvirt_list_active_storagepools
- * Since version: 0.4.1(-1)
- * Description: Function is used to list active storage pools on the connection
- * Arguments: @res [resource]: libvirt connection resource
- * Returns: libvirt storagepool names array for the connection
- */
-PHP_FUNCTION(libvirt_list_active_storagepools)
-{
- php_libvirt_connection *conn = NULL;
- zval *zconn;
- int count = -1;
- int expectedcount = -1;
- char **names;
- int i;
-
- GET_CONNECTION_FROM_ARGS("r", &zconn);
-
- if ((expectedcount = virConnectNumOfStoragePools(conn->conn)) < 0)
- RETURN_FALSE;
-
- names = (char **)emalloc(expectedcount*sizeof(char *));
- count = virConnectListStoragePools(conn->conn, names, expectedcount);
-
- if ((count != expectedcount) || (count < 0)) {
- efree(names);
- RETURN_FALSE;
- }
- array_init(return_value);
- for (i = 0; i < count; i++) {
- VIRT_ADD_NEXT_INDEX_STRING(return_value, names[i]);
- free(names[i]);
- }
- efree(names);
-}
-
-/*
- * Function name: libvirt_list_inactive_storagepools
- * Since version: 0.4.1(-1)
- * Description: Function is used to list inactive storage pools on the connection
- * Arguments: @res [resource]: libvirt connection resource
- * Returns: libvirt storagepool names array for the connection
- */
-PHP_FUNCTION(libvirt_list_inactive_storagepools)
-{
- php_libvirt_connection *conn = NULL;
- zval *zconn;
- int count = -1;
- int expectedcount = -1;
- char **names;
- int i;
-
- GET_CONNECTION_FROM_ARGS("r", &zconn);
-
- if ((expectedcount = virConnectNumOfDefinedStoragePools(conn->conn)) < 0)
- RETURN_FALSE;
-
- names = (char **)emalloc(expectedcount * sizeof(char *));
- count = virConnectListDefinedStoragePools(conn->conn, names, expectedcount);
- if ((count != expectedcount) || (count < 0)) {
- efree(names);
- RETURN_FALSE;
- }
-
- array_init(return_value);
- for (i = 0; i < count; i++) {
- VIRT_ADD_NEXT_INDEX_STRING(return_value, names[i]);
- free(names[i]);
- }
- efree(names);
-}
-
-/*
* Function name: libvirt_list_nodedevs
* Since version: 0.4.1(-1)
* Description: Function is used to list node devices on the connection
diff --git a/src/libvirt-php.h b/src/libvirt-php.h
index 7670582..1505878 100644
--- a/src/libvirt-php.h
+++ b/src/libvirt-php.h
@@ -129,8 +129,6 @@ typedef uint64_t arch_uint;
/* Internal resource identifier objects */
#define INT_RESOURCE_NODEDEV 0x08
-#define INT_RESOURCE_STORAGEPOOL 0x10
-#define INT_RESOURCE_VOLUME 0x20
#define INT_RESOURCE_SNAPSHOT 0x40
#define INT_RESOURCE_NWFILTER 0x60
@@ -176,16 +174,6 @@ typedef struct _php_libvirt_nodedev {
php_libvirt_connection* conn;
} php_libvirt_nodedev;
-typedef struct _php_libvirt_storagepool {
- virStoragePoolPtr pool;
- php_libvirt_connection* conn;
-} php_libvirt_storagepool;
-
-typedef struct _php_libvirt_volume {
- virStorageVolPtr volume;
- php_libvirt_connection* conn;
-} php_libvirt_volume;
-
typedef struct _php_libvirt_nwfilter {
virNWFilterPtr nwfilter;
php_libvirt_connection* conn;
@@ -243,8 +231,6 @@ const char *get_feature_binary(const char *name);
long get_next_free_numeric_value(virDomainPtr domain, char *xpath);
int get_subnet_bits(char *ip);
-#define PHP_LIBVIRT_STORAGEPOOL_RES_NAME "Libvirt storagepool"
-#define PHP_LIBVIRT_VOLUME_RES_NAME "Libvirt volume"
#define PHP_LIBVIRT_NODEDEV_RES_NAME "Libvirt node device"
#define PHP_LIBVIRT_SNAPSHOT_RES_NAME "Libvirt domain snapshot"
#define PHP_LIBVIRT_NWFILTER_RES_NAME "Libvirt nwfilter"
@@ -264,38 +250,6 @@ PHP_FUNCTION(libvirt_domain_snapshot_lookup_by_name);
PHP_FUNCTION(libvirt_domain_snapshot_get_xml);
PHP_FUNCTION(libvirt_domain_snapshot_revert);
PHP_FUNCTION(libvirt_domain_snapshot_delete);
-/* Storage pool and storage volume functions */
-PHP_FUNCTION(libvirt_storagepool_lookup_by_name);
-PHP_FUNCTION(libvirt_storagepool_lookup_by_volume);
-PHP_FUNCTION(libvirt_storagepool_list_volumes);
-PHP_FUNCTION(libvirt_storagepool_get_info);
-PHP_FUNCTION(libvirt_storagevolume_lookup_by_name);
-PHP_FUNCTION(libvirt_storagevolume_lookup_by_path);
-PHP_FUNCTION(libvirt_storagevolume_get_name);
-PHP_FUNCTION(libvirt_storagevolume_get_path);
-PHP_FUNCTION(libvirt_storagevolume_get_info);
-PHP_FUNCTION(libvirt_storagevolume_get_xml_desc);
-PHP_FUNCTION(libvirt_storagevolume_create_xml);
-PHP_FUNCTION(libvirt_storagevolume_create_xml_from);
-PHP_FUNCTION(libvirt_storagevolume_delete);
-PHP_FUNCTION(libvirt_storagevolume_download);
-PHP_FUNCTION(libvirt_storagevolume_upload);
-PHP_FUNCTION(libvirt_storagevolume_resize);
-PHP_FUNCTION(libvirt_storagepool_get_uuid_string);
-PHP_FUNCTION(libvirt_storagepool_get_name);
-PHP_FUNCTION(libvirt_storagepool_lookup_by_uuid_string);
-PHP_FUNCTION(libvirt_storagepool_get_xml_desc);
-PHP_FUNCTION(libvirt_storagepool_define_xml);
-PHP_FUNCTION(libvirt_storagepool_undefine);
-PHP_FUNCTION(libvirt_storagepool_create);
-PHP_FUNCTION(libvirt_storagepool_destroy);
-PHP_FUNCTION(libvirt_storagepool_is_active);
-PHP_FUNCTION(libvirt_storagepool_get_volume_count);
-PHP_FUNCTION(libvirt_storagepool_refresh);
-PHP_FUNCTION(libvirt_storagepool_set_autostart);
-PHP_FUNCTION(libvirt_storagepool_get_autostart);
-PHP_FUNCTION(libvirt_storagepool_build);
-PHP_FUNCTION(libvirt_storagepool_delete);
/* Nodedev functions */
PHP_FUNCTION(libvirt_nodedev_get);
PHP_FUNCTION(libvirt_nodedev_capabilities);
@@ -316,9 +270,6 @@ PHP_FUNCTION(libvirt_list_nodedevs);
PHP_FUNCTION(libvirt_list_all_nwfilters);
PHP_FUNCTION(libvirt_list_nwfilters);
PHP_FUNCTION(libvirt_list_domain_snapshots);
-PHP_FUNCTION(libvirt_list_storagepools);
-PHP_FUNCTION(libvirt_list_active_storagepools);
-PHP_FUNCTION(libvirt_list_inactive_storagepools);
/* Common functions */
PHP_FUNCTION(libvirt_version);
PHP_FUNCTION(libvirt_check_version);
diff --git a/src/libvirt-storage.c b/src/libvirt-storage.c
new file mode 100644
index 0000000..b620902
--- /dev/null
+++ b/src/libvirt-storage.c
@@ -0,0 +1,1129 @@
+/*
+ * libvirt-storage.c: The PHP bindings to libvirt storage API
+ *
+ * See COPYING for the license of this software
+ */
+
+#include <libvirt/libvirt.h>
+
+#include "libvirt-storage.h"
+#include "libvirt-stream.h"
+
+DEBUG_INIT("storage");
+
+void
+php_libvirt_storagepool_dtor(virt_resource *rsrc TSRMLS_DC)
+{
+ php_libvirt_storagepool *pool = (php_libvirt_storagepool *)rsrc->ptr;
+ int rv = 0;
+
+ if (pool != NULL) {
+ if (pool->pool != NULL) {
+ if (!check_resource_allocation(NULL, INT_RESOURCE_STORAGEPOOL, pool->pool
TSRMLS_CC)) {
+ pool->pool = NULL;
+ efree(pool);
+ return;
+ }
+ rv = virStoragePoolFree(pool->pool);
+ if (rv != 0) {
+ DPRINTF("%s: virStoragePoolFree(%p) returned %d (%s)\n",
__FUNCTION__, pool->pool, rv, LIBVIRT_G(last_error));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "virStoragePoolFree
failed with %i on destructor: %s", rv, LIBVIRT_G(last_error));
+ } else {
+ DPRINTF("%s: virStoragePoolFree(%p) completed successfully\n",
__FUNCTION__, pool->pool);
+ resource_change_counter(INT_RESOURCE_STORAGEPOOL, NULL, pool->pool, 0
TSRMLS_CC);
+ }
+ pool->pool = NULL;
+ }
+ efree(pool);
+ }
+}
+
+void
+php_libvirt_volume_dtor(virt_resource *rsrc TSRMLS_DC)
+{
+ php_libvirt_volume *volume = (php_libvirt_volume *)rsrc->ptr;
+ int rv = 0;
+
+ if (volume != NULL) {
+ if (volume->volume != NULL) {
+ if (!check_resource_allocation(NULL, INT_RESOURCE_VOLUME, volume->volume
TSRMLS_CC)) {
+ volume->volume = NULL;
+ efree(volume);
+ return;
+ }
+ rv = virStorageVolFree(volume->volume);
+ if (rv != 0) {
+ DPRINTF("%s: virStorageVolFree(%p) returned %d (%s)\n",
__FUNCTION__, volume->volume, rv, LIBVIRT_G(last_error));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "virStorageVolFree
failed with %i on destructor: %s", rv, LIBVIRT_G(last_error));
+ } else {
+ DPRINTF("%s: virStorageVolFree(%p) completed successfully\n",
__FUNCTION__, volume->volume);
+ resource_change_counter(INT_RESOURCE_VOLUME, NULL, volume->volume, 0
TSRMLS_CC);
+ }
+ volume->volume = NULL;
+ }
+ efree(volume);
+ }
+}
+
+/*
+ * Function name: libvirt_storagepool_lookup_by_name
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to lookup for storage pool by it's name
+ * Arguments: @res [resource]: libvirt connection resource
+ * @name [string]: storage pool name
+ * Returns: libvirt storagepool resource
+ */
+PHP_FUNCTION(libvirt_storagepool_lookup_by_name)
+{
+ php_libvirt_connection *conn = NULL;
+ zval *zconn;
+ strsize_t name_len;
+ char *name = NULL;
+ virStoragePoolPtr pool = NULL;
+ php_libvirt_storagepool *res_pool;
+
+ GET_CONNECTION_FROM_ARGS("rs", &zconn, &name, &name_len);
+
+ if ((name == NULL) || (name_len < 1))
+ RETURN_FALSE;
+ pool = virStoragePoolLookupByName(conn->conn, name);
+ DPRINTF("%s: virStoragePoolLookupByName(%p, %s) returned %p\n", PHPFUNC,
conn->conn, name, pool);
+ if (pool == NULL)
+ RETURN_FALSE;
+
+ res_pool = (php_libvirt_storagepool *)emalloc(sizeof(php_libvirt_storagepool));
+ res_pool->pool = pool;
+ res_pool->conn = conn;
+
+ DPRINTF("%s: returning %p\n", PHPFUNC, res_pool->pool);
+ resource_change_counter(INT_RESOURCE_STORAGEPOOL, conn->conn, res_pool->pool, 1
TSRMLS_CC);
+
+ VIRT_REGISTER_RESOURCE(res_pool, le_libvirt_storagepool);
+}
+
+/*
+ * Function name: libvirt_storagepool_lookup_by_volume
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to lookup for storage pool by a volume
+ * Arguments: @res [volume]: volume resource of storage pool
+ * Returns: libvirt storagepool resource
+ */
+PHP_FUNCTION(libvirt_storagepool_lookup_by_volume)
+{
+ php_libvirt_volume *volume;
+ zval *zvolume;
+ virStoragePoolPtr pool = NULL;
+ php_libvirt_storagepool *res_pool;
+
+ GET_VOLUME_FROM_ARGS("r", &zvolume);
+
+ pool = virStoragePoolLookupByVolume(volume->volume);
+ DPRINTF("%s: virStoragePoolLookupByVolume(%p) returned %p\n", PHPFUNC,
volume->volume, pool);
+ if (pool == NULL)
+ RETURN_FALSE;
+
+ res_pool = (php_libvirt_storagepool *)emalloc(sizeof(php_libvirt_storagepool));
+ res_pool->pool = pool;
+ res_pool->conn = volume->conn;
+
+ DPRINTF("%s: returning %p\n", PHPFUNC, res_pool->pool);
+ resource_change_counter(INT_RESOURCE_STORAGEPOOL, res_pool->conn->conn,
res_pool->pool, 1 TSRMLS_CC);
+
+ VIRT_REGISTER_RESOURCE(res_pool, le_libvirt_storagepool);
+}
+
+/*
+ * Function name: libvirt_storagepool_list_volumes
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to list volumes in the specified storage pool
+ * Arguments: @res [resource]: libvirt storagepool resource
+ * Returns: list of storage volume names in the storage pool in an array using
default keys (indexes)
+ */
+PHP_FUNCTION(libvirt_storagepool_list_volumes)
+{
+ php_libvirt_storagepool *pool = NULL;
+ zval *zpool;
+ char **names = NULL;
+ int expectedcount = -1;
+ int i;
+ int count = -1;
+
+ GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
+
+ if ((expectedcount = virStoragePoolNumOfVolumes(pool->pool)) < 0)
+ RETURN_FALSE;
+
+ DPRINTF("%s: virStoragePoolNumOfVolumes(%p) returned %d\n", PHPFUNC,
pool->pool, expectedcount);
+ names = (char **)emalloc(expectedcount*sizeof(char *));
+
+ count = virStoragePoolListVolumes(pool->pool, names, expectedcount);
+ DPRINTF("%s: virStoragePoolListVolumes(%p, %p, %d) returned %d\n", PHPFUNC,
pool->pool, names, expectedcount, count);
+ array_init(return_value);
+
+ if ((count != expectedcount) || (count < 0))
+ RETURN_FALSE;
+ for (i = 0; i < count; i++) {
+ VIRT_ADD_NEXT_INDEX_STRING(return_value, names[i]);
+ free(names[i]);
+ }
+
+ efree(names);
+}
+
+/*
+ * Function name: libvirt_storagepool_get_info
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to get information about the storage pool
+ * Arguments: @res [resource]: libvirt storagepool resource
+ * Returns: storage pool information array of state, capacity, allocation and
available space
+ */
+PHP_FUNCTION(libvirt_storagepool_get_info)
+{
+ php_libvirt_storagepool *pool = NULL;
+ zval *zpool;
+ virStoragePoolInfo poolInfo;
+ int retval;
+
+ GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
+
+ retval = virStoragePoolGetInfo(pool->pool, &poolInfo);
+ DPRINTF("%s: virStoragePoolGetInfo(%p, <info>) returned %d\n",
PHPFUNC, pool->pool, retval);
+ if (retval != 0)
+ RETURN_FALSE;
+
+ array_init(return_value);
+
+ // @todo: fix the long long returns
+ LONGLONG_INIT;
+ add_assoc_long(return_value, "state", (long)poolInfo.state);
+ LONGLONG_ASSOC(return_value, "capacity", poolInfo.capacity);
+ LONGLONG_ASSOC(return_value, "allocation", poolInfo.allocation);
+ LONGLONG_ASSOC(return_value, "available", poolInfo.available);
+}
+
+/*
+ * Function name: libvirt_storagepool_get_uuid_string
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to get storage pool by UUID string
+ * Arguments: @res [resource]: libvirt storagepool resource
+ * Returns: storagepool UUID string
+ */
+PHP_FUNCTION(libvirt_storagepool_get_uuid_string)
+{
+ php_libvirt_storagepool *pool = NULL;
+ zval *zpool;
+ char *uuid;
+ int retval;
+
+ GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
+
+ uuid = (char *)emalloc(VIR_UUID_STRING_BUFLEN);
+ retval = virStoragePoolGetUUIDString(pool->pool, uuid);
+ DPRINTF("%s: virStoragePoolGetUUIDString(%p, %p) returned %d (%s)\n",
PHPFUNC, pool->pool, uuid, retval, uuid);
+ if (retval != 0)
+ RETURN_FALSE;
+
+ VIRT_RETVAL_STRING(uuid);
+ efree(uuid);
+}
+
+/*
+ * Function name: libvirt_storagepool_get_name
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to get storage pool name from the storage pool
resource
+ * Arguments: @res [resource]: libvirt storagepool resource
+ * Returns: storagepool name string
+ */
+PHP_FUNCTION(libvirt_storagepool_get_name)
+{
+ php_libvirt_storagepool *pool = NULL;
+ zval *zpool;
+ const char *name = NULL;
+
+ GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
+
+ name = virStoragePoolGetName(pool->pool);
+ DPRINTF("%s: virStoragePoolGetName(%p) returned %s\n", PHPFUNC,
pool->pool, name);
+ if (name == NULL)
+ RETURN_FALSE;
+
+ VIRT_RETURN_STRING(name);
+}
+
+/*
+ * Function name: libvirt_storagepool_lookup_by_uuid_string
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to lookup for storage pool identified by UUID
string
+ * Arguments: @res [resource]: libvirt connection resource
+ * @uuid [string]: UUID string to look for storagepool
+ * Returns: libvirt storagepool resource
+ */
+PHP_FUNCTION(libvirt_storagepool_lookup_by_uuid_string)
+{
+ php_libvirt_connection *conn = NULL;
+ zval *zconn;
+ char *uuid = NULL;
+ strsize_t uuid_len;
+ virStoragePoolPtr storage = NULL;
+ php_libvirt_storagepool *res_pool;
+
+ GET_CONNECTION_FROM_ARGS("rs", &zconn, &uuid, &uuid_len);
+
+ if ((uuid == NULL) || (uuid_len < 1))
+ RETURN_FALSE;
+
+ storage = virStoragePoolLookupByUUIDString(conn->conn, uuid);
+ DPRINTF("%s: virStoragePoolLookupByUUIDString(%p, %s) returned %p\n",
PHPFUNC, conn->conn, uuid, storage);
+ if (storage == NULL)
+ RETURN_FALSE;
+
+ res_pool = (php_libvirt_storagepool *)emalloc(sizeof(php_libvirt_storagepool));
+ res_pool->pool = storage;
+ res_pool->conn = conn;
+
+ DPRINTF("%s: returning %p\n", PHPFUNC, res_pool->pool);
+ resource_change_counter(INT_RESOURCE_STORAGEPOOL, conn->conn, res_pool->pool, 1
TSRMLS_CC);
+
+ VIRT_REGISTER_RESOURCE(res_pool, le_libvirt_storagepool);
+}
+
+/*
+ * Function name: libvirt_storagepool_get_xml_desc
+ * Since version: 0.4.1(-1), changed 0.4.2
+ * Description: Function is used to get the XML description for the storage pool
identified by res
+ * Arguments: @res [resource]: libvirt storagepool resource
+ * @xpath [string]: optional xPath expression string to get just this
entry, can be NULL
+ * Returns: storagepool XML description string or result of xPath expression
+ */
+PHP_FUNCTION(libvirt_storagepool_get_xml_desc)
+{
+ php_libvirt_storagepool *pool = NULL;
+ zval *zpool;
+ char *xml;
+ char *xpath = NULL;
+ char *tmp = NULL;
+ zend_long flags = 0;
+ strsize_t xpath_len;
+ int retval = -1;
+
+ GET_STORAGEPOOL_FROM_ARGS("r|s", &zpool, &xpath, &xpath_len,
&flags);
+ if (xpath_len < 1)
+ xpath = NULL;
+
+ DPRINTF("%s: pool = %p, flags = %ld, xpath = %s\n", PHPFUNC, pool->pool,
flags, xpath);
+
+ xml = virStoragePoolGetXMLDesc(pool->pool, flags);
+ if (xml == NULL) {
+ set_error_if_unset("Cannot get the XML description" TSRMLS_CC);
+ RETURN_FALSE;
+ }
+
+ tmp = get_string_from_xpath(xml, xpath, NULL, &retval);
+ if ((tmp == NULL) || (retval < 0)) {
+ VIRT_RETVAL_STRING(xml);
+ } else {
+ VIRT_RETVAL_STRING(tmp);
+ }
+
+ free(xml);
+ free(tmp);
+}
+
+/*
+ * Function name: libvirt_storagepool_define_xml
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to define the storage pool from XML string and
return it's resource
+ * Arguments: @res [resource]: libvirt connection resource
+ * @xml [string]: XML string definition of storagepool
+ * @flags [int]: flags to define XML
+ * Returns: libvirt storagepool resource
+ */
+PHP_FUNCTION(libvirt_storagepool_define_xml)
+{
+ php_libvirt_storagepool *res_pool = NULL;
+ php_libvirt_connection *conn = NULL;
+ zval *zconn;
+ virStoragePoolPtr pool = NULL;
+ char *xml;
+ strsize_t xml_len;
+ zend_long flags = 0;
+
+
+ GET_CONNECTION_FROM_ARGS("rs|l", &zconn, &xml, &xml_len,
&flags);
+
+ pool = virStoragePoolDefineXML(conn->conn, xml, (unsigned int)flags);
+ DPRINTF("%s: virStoragePoolDefineXML(%p, <xml>) returned %p\n",
PHPFUNC, conn->conn, pool);
+ if (pool == NULL)
+ RETURN_FALSE;
+
+ res_pool = (php_libvirt_storagepool *)emalloc(sizeof(php_libvirt_storagepool));
+ res_pool->pool = pool;
+ res_pool->conn = conn;
+
+ DPRINTF("%s: returning %p\n", PHPFUNC, res_pool->pool);
+ resource_change_counter(INT_RESOURCE_STORAGEPOOL, conn->conn, res_pool->pool, 1
TSRMLS_CC);
+
+ VIRT_REGISTER_RESOURCE(res_pool, le_libvirt_storagepool);
+}
+
+/*
+ * Function name: libvirt_storagepool_undefine
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to undefine the storage pool identified by it's
resource
+ * Arguments: @res [resource]: libvirt storagepool resource
+ * Returns: TRUE if success, FALSE on error
+ */
+PHP_FUNCTION(libvirt_storagepool_undefine)
+{
+ php_libvirt_storagepool *pool = NULL;
+ zval *zpool;
+ int retval = 0;
+
+ GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
+
+ retval = virStoragePoolUndefine(pool->pool);
+ DPRINTF("%s: virStoragePoolUndefine(%p) returned %d\n", PHPFUNC,
pool->pool, retval);
+ if (retval != 0)
+ RETURN_FALSE;
+
+ RETURN_TRUE;
+}
+
+/*
+ * Function name: libvirt_storagepool_create
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to create/start the storage pool
+ * Arguments: @res [resource]: libvirt storagepool resource
+ * Returns: TRUE if success, FALSE on error
+ */
+PHP_FUNCTION(libvirt_storagepool_create)
+{
+ php_libvirt_storagepool *pool = NULL;
+ zval *zpool;
+ int retval;
+
+ GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
+
+ retval = virStoragePoolCreate(pool->pool, 0);
+ DPRINTF("%s: virStoragePoolCreate(%p, 0) returned %d\n", PHPFUNC,
pool->pool, retval);
+ if (retval != 0)
+ RETURN_FALSE;
+ RETURN_TRUE;
+}
+
+/*
+ * Function name: libvirt_storagepool_destroy
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to destory the storage pool
+ * Arguments: @res [resource]: libvirt storagepool resource
+ * Returns: TRUE if success, FALSE on error
+ */
+PHP_FUNCTION(libvirt_storagepool_destroy)
+{
+ php_libvirt_storagepool *pool = NULL;
+ zval *zpool;
+ int retval;
+
+ GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
+
+ retval = virStoragePoolDestroy(pool->pool);
+ DPRINTF("%s: virStoragePoolDestroy(%p) returned %d\n", PHPFUNC,
pool->pool, retval);
+ if (retval != 0)
+ RETURN_FALSE;
+ RETURN_TRUE;
+}
+
+/*
+ * Function name: libvirt_storagepool_is_active
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to get information whether storage pool is active or
not
+ * Arguments: @res [resource]: libvirt storagepool resource
+ * Returns: result of virStoragePoolIsActive
+ */
+PHP_FUNCTION(libvirt_storagepool_is_active)
+{
+ php_libvirt_storagepool *pool = NULL;
+ zval *zpool;
+
+ GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
+
+ RETURN_LONG(virStoragePoolIsActive(pool->pool));
+}
+
+/*
+ * Function name: libvirt_storagepool_get_volume_count
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to get storage volume count in the storage pool
+ * Arguments: @res [resource]: libvirt storagepool resource
+ * Returns: number of volumes in the pool
+ */
+PHP_FUNCTION(libvirt_storagepool_get_volume_count)
+{
+ php_libvirt_storagepool *pool = NULL;
+ zval *zpool;
+
+ GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
+
+ RETURN_LONG(virStoragePoolNumOfVolumes(pool->pool));
+}
+
+/*
+ * Function name: libvirt_storagepool_refresh
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to refresh the storage pool information
+ * Arguments: @res [resource]: libvirt storagepool resource
+ * @flags [int]: refresh flags
+ * Returns: TRUE if success, FALSE on error
+ */
+PHP_FUNCTION(libvirt_storagepool_refresh)
+{
+ php_libvirt_storagepool *pool = NULL;
+ zval *zpool;
+ zend_long flags = 0;
+ int retval;
+
+ GET_STORAGEPOOL_FROM_ARGS("r|l", &zpool, &flags);
+
+ retval = virStoragePoolRefresh(pool->pool, flags);
+ DPRINTF("%s: virStoragePoolRefresh(%p, %ld) returned %d\n", PHPFUNC,
pool->pool, flags, retval);
+ if (retval < 0)
+ RETURN_FALSE;
+ RETURN_TRUE;
+}
+
+/*
+ * Function name: libvirt_storagepool_set_autostart
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to set autostart of the storage pool
+ * Arguments: @res [resource]: libvirt storagepool resource
+ * @flags [int]: flags to set autostart
+ * Returns: result on setting storagepool autostart value
+ */
+PHP_FUNCTION(libvirt_storagepool_set_autostart)
+{
+ php_libvirt_storagepool *pool = NULL;
+ zval *zpool;
+ zend_bool flags = 0;
+ int retval;
+
+ GET_STORAGEPOOL_FROM_ARGS("rb", &zpool, &flags);
+
+ retval = virStoragePoolSetAutostart(pool->pool, flags);
+ DPRINTF("%s: virStoragePoolSetAutostart(%p, %d) returned %d\n", PHPFUNC,
pool->pool, flags, retval);
+ if (retval != 0)
+ RETURN_FALSE;
+ RETURN_TRUE;
+}
+
+/*
+ * Function name: libvirt_storagepool_get_autostart
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to get autostart of the storage pool
+ * Arguments: @res [resource]: libvirt storagepool resource
+ * Returns: TRUE for autostart enabled, FALSE for autostart disabled, FALSE with
last_error set for error
+ */
+PHP_FUNCTION(libvirt_storagepool_get_autostart)
+{
+ php_libvirt_storagepool *pool = NULL;
+ zval *zpool;
+ int autostart;
+
+ GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
+
+ if (virStoragePoolGetAutostart(pool->pool, &autostart) == 0 &&
+ autostart != 0)
+ RETURN_TRUE;
+
+ RETURN_FALSE;
+}
+
+/*
+ * Function name: libvirt_storagepool_build
+ * Since version: 0.4.2
+ * Description: Function is used to Build the underlying storage pool, e.g. create
the destination directory for NFS
+ * Arguments: @res [resource]: libvirt storagepool resource
+ * Returns: TRUE if success, FALSE on error
+ */
+PHP_FUNCTION(libvirt_storagepool_build)
+{
+ php_libvirt_storagepool *pool = NULL;
+ zval *zpool;
+ int flags = 0;
+ int retval;
+
+ GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
+
+ retval = virStoragePoolBuild(pool->pool, flags);
+ DPRINTF("%s: virStoragePoolBuild(%p, %d) returned %d\n", PHPFUNC,
pool->pool, flags, retval);
+ if (retval == 0)
+ RETURN_TRUE;
+
+ RETURN_FALSE;
+}
+
+/*
+ * Function name: libvirt_storagepool_delete
+ * Since version: 0.4.6
+ * Description: Function is used to Delete the underlying storage pool, e.g. remove
the destination directory for NFS
+ * Arguments: @res [resource]: libvirt storagepool resource
+ * Returns: TRUE if success, FALSE on error
+ */
+PHP_FUNCTION(libvirt_storagepool_delete)
+{
+ php_libvirt_storagepool *pool = NULL;
+ zval *zpool;
+ int flags = 0;
+ int retval;
+
+ GET_STORAGEPOOL_FROM_ARGS("r", &zpool);
+
+ retval = virStoragePoolDelete(pool->pool, flags);
+ DPRINTF("%s: virStoragePoolDelete(%p, %d) returned %d\n", PHPFUNC,
pool->pool, flags, retval);
+ if (retval == 0)
+ RETURN_TRUE;
+
+ RETURN_FALSE;
+}
+
+/*
+ * Function name: libvirt_storagevolume_lookup_by_name
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to lookup for storage volume by it's name
+ * Arguments: @res [resource]: libvirt storagepool resource
+ * @name [string]: name of the storage volume to look for
+ * Returns: libvirt storagevolume resource
+ */
+PHP_FUNCTION(libvirt_storagevolume_lookup_by_name)
+{
+ php_libvirt_storagepool *pool = NULL;
+ php_libvirt_volume *res_volume;
+ zval *zpool;
+ strsize_t name_len;
+ char *name = NULL;
+ virStorageVolPtr volume = NULL;
+
+ GET_STORAGEPOOL_FROM_ARGS("rs", &zpool, &name, &name_len);
+ if ((name == NULL) || (name_len < 1))
+ RETURN_FALSE;
+
+ volume = virStorageVolLookupByName(pool->pool, name);
+ DPRINTF("%s: virStorageVolLookupByName(%p, %s) returned %p\n", PHPFUNC,
pool->pool, name, volume);
+ if (volume == NULL)
+ RETURN_FALSE;
+
+ res_volume = (php_libvirt_volume *)emalloc(sizeof(php_libvirt_volume));
+ res_volume->volume = volume;
+ res_volume->conn = pool->conn;
+
+ DPRINTF("%s: returning %p\n", PHPFUNC, res_volume->volume);
+ resource_change_counter(INT_RESOURCE_VOLUME, pool->conn->conn,
res_volume->volume, 1 TSRMLS_CC);
+
+ VIRT_REGISTER_RESOURCE(res_volume, le_libvirt_volume);
+}
+
+/*
+ * Function name: libvirt_storagevolume_lookup_by_path
+ * Since version: 0.4.1(-2)
+ * Description: Function is used to lookup for storage volume by it's path
+ * Arguments: @res [resource]: libvirt connection resource
+ * @path [string]: path of the storage volume to look for
+ * Returns: libvirt storagevolume resource
+ */
+PHP_FUNCTION(libvirt_storagevolume_lookup_by_path)
+{
+ php_libvirt_connection *conn = NULL;
+ php_libvirt_volume *res_volume;
+ zval *zconn;
+ strsize_t name_len;
+ char *name = NULL;
+ virStorageVolPtr volume = NULL;
+
+ GET_CONNECTION_FROM_ARGS("rs", &zconn, &name, &name_len);
+ if ((name == NULL) || (name_len < 1))
+ RETURN_FALSE;
+
+ volume = virStorageVolLookupByPath(conn->conn, name);
+ DPRINTF("%s: virStorageVolLookupByPath(%p, %s) returned %p\n", PHPFUNC,
conn->conn, name, volume);
+ if (volume == NULL) {
+ set_error_if_unset("Cannot find storage volume on requested path"
TSRMLS_CC);
+ RETURN_FALSE;
+ }
+
+ res_volume = (php_libvirt_volume *)emalloc(sizeof(php_libvirt_volume));
+ res_volume->volume = volume;
+ res_volume->conn = conn;
+
+ DPRINTF("%s: returning %p\n", PHPFUNC, res_volume->volume);
+ resource_change_counter(INT_RESOURCE_VOLUME, conn->conn, res_volume->volume, 1
TSRMLS_CC);
+
+ VIRT_REGISTER_RESOURCE(res_volume, le_libvirt_volume);
+}
+
+/*
+ * Function name: libvirt_storagevolume_get_name
+ * Since version: 0.4.1(-2)
+ * Description: Function is used to get the storage volume name
+ * Arguments: @res [resource]: libvirt storagevolume resource
+ * Returns: storagevolume name
+ */
+PHP_FUNCTION(libvirt_storagevolume_get_name)
+{
+ php_libvirt_volume *volume = NULL;
+ zval *zvolume;
+ const char *retval;
+
+ GET_VOLUME_FROM_ARGS("r", &zvolume);
+
+ retval = virStorageVolGetName(volume->volume);
+ DPRINTF("%s: virStorageVolGetName(%p) returned %s\n", PHPFUNC,
volume->volume, retval);
+ if (retval == NULL)
+ RETURN_FALSE;
+
+ VIRT_RETURN_STRING(retval);
+}
+
+/*
+ * Function name: libvirt_storagevolume_get_path
+ * Since version: 0.4.1(-2)
+ * Description: Function is used to get the storage volume path
+ * Arguments: @res [resource]: libvirt storagevolume resource
+ * Returns: storagevolume path
+ */
+PHP_FUNCTION(libvirt_storagevolume_get_path)
+{
+ php_libvirt_volume *volume = NULL;
+ zval *zvolume;
+ char *retval;
+
+ GET_VOLUME_FROM_ARGS("r", &zvolume);
+
+ retval = virStorageVolGetPath(volume->volume);
+ DPRINTF("%s: virStorageVolGetPath(%p) returned %s\n", PHPFUNC,
volume->volume, retval);
+ if (retval == NULL)
+ RETURN_FALSE;
+
+ VIRT_RETVAL_STRING(retval);
+ free(retval);
+}
+
+/*
+ * Function name: libvirt_storagevolume_get_info
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to get the storage volume information
+ * Arguments: @res [resource]: libvirt storagevolume resource
+ * Returns: storage volume information array of type, allocation and capacity
+ */
+PHP_FUNCTION(libvirt_storagevolume_get_info)
+{
+ php_libvirt_volume *volume = NULL;
+ zval *zvolume;
+ virStorageVolInfo volumeInfo;
+ int retval;
+
+ GET_VOLUME_FROM_ARGS("r", &zvolume);
+
+ retval = virStorageVolGetInfo(volume->volume, &volumeInfo);
+ DPRINTF("%s: virStorageVolGetInfo(%p, <info>) returned %d\n",
PHPFUNC, volume->volume, retval);
+ if (retval != 0)
+ RETURN_FALSE;
+
+ array_init(return_value);
+ LONGLONG_INIT;
+ add_assoc_long(return_value, "type", (long)volumeInfo.type);
+ LONGLONG_ASSOC(return_value, "capacity", volumeInfo.capacity);
+ LONGLONG_ASSOC(return_value, "allocation", volumeInfo.allocation);
+}
+
+/*
+ * Function name: libvirt_storagevolume_get_xml_desc
+ * Since version: 0.4.1(-1), changed 0.4.2
+ * Description: Function is used to get the storage volume XML description
+ * Arguments: @res [resource]: libvirt storagevolume resource
+ * @xpath [string]: optional xPath expression string to get just this
entry, can be NULL
+ * @flags [int]: optional flags
+ * Returns: storagevolume XML description or result of xPath expression
+ */
+PHP_FUNCTION(libvirt_storagevolume_get_xml_desc)
+{
+ php_libvirt_volume *volume = NULL;
+ zval *zvolume;
+ char *tmp = NULL;
+ char *xml;
+ char *xpath = NULL;
+ strsize_t xpath_len;
+ zend_long flags = 0;
+ int retval = -1;
+
+ GET_VOLUME_FROM_ARGS("rs|l", &zvolume, &xpath, &xpath_len,
&flags);
+ if (xpath_len < 1)
+ xpath = NULL;
+
+ DPRINTF("%s: volume = %p, xpath = %s, flags = %ld\n", PHPFUNC,
volume->volume, xpath, flags);
+
+ xml = virStorageVolGetXMLDesc(volume->volume, flags);
+ if (xml == NULL) {
+ set_error_if_unset("Cannot get the XML description" TSRMLS_CC);
+ RETURN_FALSE;
+ }
+
+ tmp = get_string_from_xpath(xml, xpath, NULL, &retval);
+ if ((tmp == NULL) || (retval < 0)) {
+ VIRT_RETVAL_STRING(xml);
+ } else {
+ VIRT_RETVAL_STRING(tmp);
+ }
+
+ free(xml);
+ free(tmp);
+}
+
+/*
+ * Function name: libvirt_storagevolume_create_xml
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to create the new storage pool and return the handle
to new storage pool
+ * Arguments: @res [resource]: libvirt storagepool resource
+ * @xml [string]: XML string to create the storage volume in the storage
pool
+ * @flags [int]: virStorageVolCreateXML flags
+ * Returns: libvirt storagevolume resource
+ */
+PHP_FUNCTION(libvirt_storagevolume_create_xml)
+{
+ php_libvirt_volume *res_volume = NULL;
+ php_libvirt_storagepool *pool = NULL;
+ zval *zpool;
+ virStorageVolPtr volume = NULL;
+ char *xml;
+ zend_long flags = 0;
+ strsize_t xml_len;
+
+ GET_STORAGEPOOL_FROM_ARGS("rs|l", &zpool, &xml, &xml_len,
&flags);
+
+ volume = virStorageVolCreateXML(pool->pool, xml, flags);
+ DPRINTF("%s: virStorageVolCreateXML(%p, <xml>, 0) returned %p\n",
PHPFUNC, pool->pool, volume);
+ if (volume == NULL)
+ RETURN_FALSE;
+
+ res_volume = (php_libvirt_volume *)emalloc(sizeof(php_libvirt_volume));
+ res_volume->volume = volume;
+ res_volume->conn = pool->conn;
+
+ DPRINTF("%s: returning %p\n", PHPFUNC, res_volume->volume);
+ resource_change_counter(INT_RESOURCE_VOLUME, pool->conn->conn,
res_volume->volume, 1 TSRMLS_CC);
+
+ VIRT_REGISTER_RESOURCE(res_volume, le_libvirt_volume);
+}
+
+/*
+ * Function name: libvirt_storagevolume_create_xml_from
+ * Since version: 0.4.1(-2)
+ * Description: Function is used to clone the new storage volume into pool from the
orignial volume
+ * Arguments: @pool [resource]: libvirt storagepool resource
+ * @xml [string]: XML string to create the storage volume in the storage
pool
+ * @original_volume [resource]: libvirt storagevolume resource
+ * Returns: libvirt storagevolume resource
+ */
+PHP_FUNCTION(libvirt_storagevolume_create_xml_from)
+{
+ php_libvirt_volume *res_volume = NULL;
+ php_libvirt_storagepool *pool = NULL;
+ zval *zpool;
+
+ php_libvirt_volume *pl_volume = NULL;
+ zval *zvolume;
+
+ virStorageVolPtr volume = NULL;
+ char *xml;
+ strsize_t xml_len;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsr", &zpool,
&xml, &xml_len, &zvolume) == FAILURE) {
+ set_error("Invalid pool resource, XML or volume resouce" TSRMLS_CC);
+ RETURN_FALSE;
+ }
+
+ VIRT_FETCH_RESOURCE(pool, php_libvirt_storagepool*, &zpool,
PHP_LIBVIRT_STORAGEPOOL_RES_NAME, le_libvirt_storagepool);
+ if ((pool == NULL) || (pool->pool == NULL))
+ RETURN_FALSE;
+ VIRT_FETCH_RESOURCE(pl_volume, php_libvirt_volume*, &zvolume,
PHP_LIBVIRT_VOLUME_RES_NAME, le_libvirt_volume);
+ if ((pl_volume == NULL) || (pl_volume->volume == NULL))
+ RETURN_FALSE;
+ resource_change_counter(INT_RESOURCE_VOLUME, NULL, pl_volume->volume, 1
TSRMLS_CC);
+
+ volume = virStorageVolCreateXMLFrom(pool->pool, xml, pl_volume->volume, 0);
+ DPRINTF("%s: virStorageVolCreateXMLFrom(%p, <xml>, %p, 0) returned
%p\n", PHPFUNC, pool->pool, pl_volume->volume, volume);
+ if (volume == NULL)
+ RETURN_FALSE;
+
+ res_volume = (php_libvirt_volume *)emalloc(sizeof(php_libvirt_volume));
+ res_volume->volume = volume;
+ res_volume->conn = pool->conn;
+
+ DPRINTF("%s: returning %p\n", PHPFUNC, res_volume->volume);
+ resource_change_counter(INT_RESOURCE_VOLUME, pool->conn->conn,
res_volume->volume, 1 TSRMLS_CC);
+
+ VIRT_REGISTER_RESOURCE(res_volume, le_libvirt_volume);
+}
+
+/*
+ * Function name: libvirt_storagevolume_delete
+ * Since version: 0.4.2
+ * Description: Function is used to delete to volume identified by it's resource
+ * Arguments: @res [resource]: libvirt storagevolume resource
+ * @flags [int]: optional flags for the storage volume deletion for
virStorageVolDelete()
+ * Returns: TRUE for success, FALSE on error
+ */
+PHP_FUNCTION(libvirt_storagevolume_delete)
+{
+ php_libvirt_volume *volume = NULL;
+ zval *zvolume;
+ zend_long flags = 0;
+ int retval = 0;
+
+ GET_VOLUME_FROM_ARGS("r|l", &zvolume, &flags);
+
+ retval = virStorageVolDelete(volume->volume, flags);
+ DPRINTF("%s: virStorageVolDelete(%p, %d) returned %d\n", PHPFUNC,
volume->volume, (int) flags, retval);
+ if (retval != 0) {
+ set_error_if_unset("Cannot delete storage volume" TSRMLS_CC);
+ RETURN_FALSE;
+ }
+
+ RETURN_TRUE;
+}
+
+/*
+ * Function name: libvirt_storagevolume_download
+ * Since version: 0.5.0
+ * Description: Function is used to download volume identified by it's resource
+ * Arguments: @res [resource]: libvirt storagevolume resource
+ * @stream [resource]: stream to use as output
+ * @offset [int]: position to start reading from
+ * @length [int] : limit on amount of data to download
+ * @flags [int]: optional flags for the storage volume download for
virStorageVolDownload()
+ * Returns: int
+ */
+PHP_FUNCTION(libvirt_storagevolume_download)
+{
+ php_libvirt_volume *volume = NULL;
+ php_libvirt_stream *stream = NULL;
+ zval *zvolume;
+ zval *zstream;
+ zend_long flags = 0;
+ zend_long offset = 0;
+ zend_long length = 0;
+ int retval = -1;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr|l|l|l",
&zvolume, &zstream, &offset, &length, &flags) == FAILURE)
+ RETURN_LONG(retval);
+ VIRT_FETCH_RESOURCE(volume, php_libvirt_volume*, &zvolume,
PHP_LIBVIRT_VOLUME_RES_NAME, le_libvirt_volume);
+ if ((volume == NULL) || (volume->volume == NULL))
+ RETURN_LONG(retval);
+ VIRT_FETCH_RESOURCE(stream, php_libvirt_stream*, &zstream,
PHP_LIBVIRT_STREAM_RES_NAME, le_libvirt_stream);
+ if ((stream == NULL) || (stream->stream == NULL))
+ RETURN_LONG(retval);
+
+ retval = virStorageVolDownload(volume->volume, stream->stream, offset, length,
flags);
+ DPRINTF("%s: virStorageVolDownload(%p, %p, %d, %d, %d) returned %d\n",
PHPFUNC, volume->volume, stream->stream, (int) offset, (int) length, (int) flags,
retval);
+
+ if (retval == -1) {
+ set_error("Cannot download from stream" TSRMLS_CC);
+ RETURN_LONG(retval);
+ }
+
+ RETURN_LONG(retval);
+}
+
+/*
+ * Function name: libvirt_storagevolume_upload
+ * Since version: 0.5.0
+ * Description: Function is used to upload volume identified by it's resource
+ * Arguments: @res [resource]: libvirt storagevolume resource
+ * @stream [resource]: stream to use as input
+ * @offset [int]: position to start writing to
+ * @length [int] : limit on amount of data to upload
+ * @flags [int]: optional flags for the storage volume upload for
virStorageVolUpload()
+ * Returns: int
+ */
+PHP_FUNCTION(libvirt_storagevolume_upload)
+{
+ php_libvirt_volume *volume = NULL;
+ php_libvirt_stream *stream = NULL;
+ zval *zvolume;
+ zval *zstream;
+ zend_long flags = 0;
+ zend_long offset = 0;
+ zend_long length = 0;
+ int retval = -1;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr|l|l|l",
&zvolume, &zstream, &offset, &length, &flags) == FAILURE)
+ RETURN_LONG(retval);
+ VIRT_FETCH_RESOURCE(volume, php_libvirt_volume*, &zvolume,
PHP_LIBVIRT_VOLUME_RES_NAME, le_libvirt_volume);
+ if ((volume == NULL) || (volume->volume == NULL))
+ RETURN_LONG(retval);
+ VIRT_FETCH_RESOURCE(stream, php_libvirt_stream*, &zstream,
PHP_LIBVIRT_STREAM_RES_NAME, le_libvirt_stream);
+ if ((stream == NULL) || (stream->stream == NULL))
+ RETURN_LONG(retval);
+
+ retval = virStorageVolUpload(volume->volume, stream->stream, offset, length,
flags);
+ DPRINTF("%s: virStorageVolUpload(%p, %p, %d, %d, %d) returned %d\n",
PHPFUNC, volume->volume, stream->stream, (int) offset, (int) length, (int) flags,
retval);
+
+ if (retval == -1) {
+ set_error_if_unset("Cannot upload storage volume" TSRMLS_CC);
+ RETURN_LONG(retval);
+ }
+
+ RETURN_LONG(retval);
+}
+
+/*
+ * Function name: libvirt_storagevolume_resize
+ * Since version: 0.5.0
+ * Description: Function is used to resize volume identified by it's resource
+ * Arguments: @res [resource]: libvirt storagevolume resource
+ * @capacity [int]: capacity for the storage volume
+ * @flags [int]: optional flags for the storage volume resize for
virStorageVolResize()
+ * Returns: int
+ */
+PHP_FUNCTION(libvirt_storagevolume_resize)
+{
+ php_libvirt_volume *volume = NULL;
+ zval *zvolume;
+ zend_long flags = 0;
+ zend_long capacity = 0;
+ int retval = -1;
+
+ GET_VOLUME_FROM_ARGS("rl|l", &zvolume, &capacity, &flags);
+
+ retval = virStorageVolResize(volume->volume, capacity, flags);
+ DPRINTF("%s: virStorageVolResize(%p, %d, %d) returned %d\n", PHPFUNC,
volume->volume, (int) capacity, (int) flags, retval);
+ if (retval != 0) {
+ set_error_if_unset("Cannot resize storage volume" TSRMLS_CC);
+ RETURN_LONG(retval);
+ }
+
+ RETURN_LONG(retval);
+}
+
+/*
+ * Function name: libvirt_list_storagepools
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to list storage pools on the connection
+ * Arguments: @res [resource]: libvirt connection resource
+ * Returns: libvirt storagepool names array for the connection
+ */
+PHP_FUNCTION(libvirt_list_storagepools)
+{
+ php_libvirt_connection *conn = NULL;
+ zval *zconn;
+ int count = -1;
+ int expectedcount = -1;
+ char **names;
+ int i;
+
+ GET_CONNECTION_FROM_ARGS("r", &zconn);
+
+ if ((expectedcount = virConnectNumOfStoragePools(conn->conn)) < 0)
+ RETURN_FALSE;
+
+ names = (char **)emalloc(expectedcount*sizeof(char *));
+ count = virConnectListStoragePools(conn->conn, names, expectedcount);
+
+ if ((count != expectedcount) || (count < 0)) {
+ efree(names);
+ RETURN_FALSE;
+ }
+
+ array_init(return_value);
+ for (i = 0; i < count; i++) {
+ VIRT_ADD_NEXT_INDEX_STRING(return_value, names[i]);
+ free(names[i]);
+ }
+ efree(names);
+
+
+ if ((expectedcount = virConnectNumOfDefinedStoragePools(conn->conn)) < 0)
+ RETURN_FALSE;
+ names = (char **)emalloc(expectedcount * sizeof(char *));
+ count = virConnectListDefinedStoragePools(conn->conn, names, expectedcount);
+ if ((count != expectedcount) || (count < 0)) {
+ efree(names);
+ RETURN_FALSE;
+ }
+
+ for (i = 0; i < count; i++) {
+ VIRT_ADD_NEXT_INDEX_STRING(return_value, names[i]);
+ free(names[i]);
+ }
+ efree(names);
+}
+
+/*
+ * Function name: libvirt_list_active_storagepools
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to list active storage pools on the connection
+ * Arguments: @res [resource]: libvirt connection resource
+ * Returns: libvirt storagepool names array for the connection
+ */
+PHP_FUNCTION(libvirt_list_active_storagepools)
+{
+ php_libvirt_connection *conn = NULL;
+ zval *zconn;
+ int count = -1;
+ int expectedcount = -1;
+ char **names;
+ int i;
+
+ GET_CONNECTION_FROM_ARGS("r", &zconn);
+
+ if ((expectedcount = virConnectNumOfStoragePools(conn->conn)) < 0)
+ RETURN_FALSE;
+
+ names = (char **)emalloc(expectedcount*sizeof(char *));
+ count = virConnectListStoragePools(conn->conn, names, expectedcount);
+
+ if ((count != expectedcount) || (count < 0)) {
+ efree(names);
+ RETURN_FALSE;
+ }
+ array_init(return_value);
+ for (i = 0; i < count; i++) {
+ VIRT_ADD_NEXT_INDEX_STRING(return_value, names[i]);
+ free(names[i]);
+ }
+ efree(names);
+}
+
+/*
+ * Function name: libvirt_list_inactive_storagepools
+ * Since version: 0.4.1(-1)
+ * Description: Function is used to list inactive storage pools on the connection
+ * Arguments: @res [resource]: libvirt connection resource
+ * Returns: libvirt storagepool names array for the connection
+ */
+PHP_FUNCTION(libvirt_list_inactive_storagepools)
+{
+ php_libvirt_connection *conn = NULL;
+ zval *zconn;
+ int count = -1;
+ int expectedcount = -1;
+ char **names;
+ int i;
+
+ GET_CONNECTION_FROM_ARGS("r", &zconn);
+
+ if ((expectedcount = virConnectNumOfDefinedStoragePools(conn->conn)) < 0)
+ RETURN_FALSE;
+
+ names = (char **)emalloc(expectedcount * sizeof(char *));
+ count = virConnectListDefinedStoragePools(conn->conn, names, expectedcount);
+ if ((count != expectedcount) || (count < 0)) {
+ efree(names);
+ RETURN_FALSE;
+ }
+
+ array_init(return_value);
+ for (i = 0; i < count; i++) {
+ VIRT_ADD_NEXT_INDEX_STRING(return_value, names[i]);
+ free(names[i]);
+ }
+ efree(names);
+}
diff --git a/src/libvirt-storage.h b/src/libvirt-storage.h
new file mode 100644
index 0000000..2f6f5b3
--- /dev/null
+++ b/src/libvirt-storage.h
@@ -0,0 +1,138 @@
+/*
+ * libvirt-storage.h: The PHP bindings to libvirt storage API
+ *
+ * See COPYING for the license of this software
+ */
+
+#ifndef __LIBVIRT_STORAGE_H__
+# define __LIBVIRT_STORAGE_H__
+
+# include "util.h"
+# include "libvirt-connection.h"
+
+# define PHP_LIBVIRT_STORAGEPOOL_RES_NAME "Libvirt storagepool"
+# define PHP_LIBVIRT_VOLUME_RES_NAME "Libvirt volume"
+# define INT_RESOURCE_STORAGEPOOL 0x10
+# define INT_RESOURCE_VOLUME 0x20
+
+# define PHP_FE_LIBVIRT_STORAGE
\
+ PHP_FE(libvirt_storagepool_lookup_by_name, arginfo_libvirt_conn_name)
\
+ PHP_FE(libvirt_storagepool_lookup_by_volume, arginfo_libvirt_conn)
\
+ PHP_FE(libvirt_storagepool_list_volumes, arginfo_libvirt_conn)
\
+ PHP_FE(libvirt_storagepool_get_info, arginfo_libvirt_conn)
\
+ PHP_FE(libvirt_storagepool_get_uuid_string, arginfo_libvirt_conn)
\
+ PHP_FE(libvirt_storagepool_get_name, arginfo_libvirt_conn)
\
+ PHP_FE(libvirt_storagepool_lookup_by_uuid_string, arginfo_libvirt_conn_uuid)
\
+ PHP_FE(libvirt_storagepool_get_xml_desc, arginfo_libvirt_conn_xpath)
\
+ PHP_FE(libvirt_storagepool_define_xml,
arginfo_libvirt_storagepool_define_xml) \
+ PHP_FE(libvirt_storagepool_undefine, arginfo_libvirt_conn)
\
+ PHP_FE(libvirt_storagepool_create, arginfo_libvirt_conn)
\
+ PHP_FE(libvirt_storagepool_destroy, arginfo_libvirt_conn)
\
+ PHP_FE(libvirt_storagepool_is_active, arginfo_libvirt_conn)
\
+ PHP_FE(libvirt_storagepool_get_volume_count, arginfo_libvirt_conn)
\
+ PHP_FE(libvirt_storagepool_refresh, arginfo_libvirt_conn_optflags)
\
+ PHP_FE(libvirt_storagepool_set_autostart, arginfo_libvirt_conn_flags)
\
+ PHP_FE(libvirt_storagepool_get_autostart, arginfo_libvirt_conn)
\
+ PHP_FE(libvirt_storagepool_build, arginfo_libvirt_conn)
\
+ PHP_FE(libvirt_storagepool_delete, arginfo_libvirt_conn)
\
+ PHP_FE(libvirt_storagevolume_lookup_by_name, arginfo_libvirt_conn_name)
\
+ PHP_FE(libvirt_storagevolume_lookup_by_path,
arginfo_libvirt_storagevolume_lookup_by_path) \
+ PHP_FE(libvirt_storagevolume_get_name, arginfo_libvirt_conn)
\
+ PHP_FE(libvirt_storagevolume_get_path, arginfo_libvirt_conn)
\
+ PHP_FE(libvirt_storagevolume_get_info, arginfo_libvirt_conn)
\
+ PHP_FE(libvirt_storagevolume_get_xml_desc,
arginfo_libvirt_storagevolume_get_xml_desc) \
+ PHP_FE(libvirt_storagevolume_create_xml, arginfo_libvirt_conn_xml)
\
+ PHP_FE(libvirt_storagevolume_create_xml_from,
arginfo_libvirt_storagevolume_create_xml_from) \
+ PHP_FE(libvirt_storagevolume_delete, arginfo_libvirt_conn_optflags)
\
+ PHP_FE(libvirt_storagevolume_download,
arginfo_libvirt_storagevolume_download) \
+ PHP_FE(libvirt_storagevolume_upload,
arginfo_libvirt_storagevolume_download) \
+ PHP_FE(libvirt_storagevolume_resize,
arginfo_libvirt_storagevolume_resize) \
+ PHP_FE(libvirt_list_storagepools, arginfo_libvirt_conn)
\
+ PHP_FE(libvirt_list_active_storagepools, arginfo_libvirt_conn)
\
+ PHP_FE(libvirt_list_inactive_storagepools, arginfo_libvirt_conn)
+
+# define GET_STORAGEPOOL_FROM_ARGS(args, ...) \
+ do { \
+ reset_error(TSRMLS_C); \
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \
+ args, \
+ __VA_ARGS__) == FAILURE) { \
+ set_error("Invalid arguments" TSRMLS_CC);
\
+ RETURN_FALSE; \
+ } \
+ \
+ VIRT_FETCH_RESOURCE(pool, php_libvirt_storagepool*, &zpool, \
+ PHP_LIBVIRT_STORAGEPOOL_RES_NAME, \
+ le_libvirt_storagepool); \
+ if ((pool == NULL) || (pool->pool == NULL)) \
+ RETURN_FALSE; \
+ } while (0) \
+
+# define GET_VOLUME_FROM_ARGS(args, ...) \
+ do { \
+ reset_error(TSRMLS_C); \
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \
+ args, \
+ __VA_ARGS__) == FAILURE) { \
+ set_error("Invalid arguments" TSRMLS_CC);
\
+ RETURN_FALSE; \
+ } \
+ \
+ VIRT_FETCH_RESOURCE(volume, php_libvirt_volume*, &zvolume, \
+ PHP_LIBVIRT_VOLUME_RES_NAME, le_libvirt_volume); \
+ if ((volume == NULL) || (volume->volume == NULL)) \
+ RETURN_FALSE; \
+ } while (0) \
+
+int le_libvirt_storagepool;
+int le_libvirt_volume;
+
+typedef struct _php_libvirt_storagepool {
+ virStoragePoolPtr pool;
+ php_libvirt_connection* conn;
+} php_libvirt_storagepool;
+
+typedef struct _php_libvirt_volume {
+ virStorageVolPtr volume;
+ php_libvirt_connection* conn;
+} php_libvirt_volume;
+
+void php_libvirt_storagepool_dtor(virt_resource *rsrc TSRMLS_DC);
+void php_libvirt_volume_dtor(virt_resource *rsrc TSRMLS_DC);
+
+PHP_FUNCTION(libvirt_storagepool_lookup_by_name);
+PHP_FUNCTION(libvirt_storagepool_lookup_by_volume);
+PHP_FUNCTION(libvirt_storagepool_list_volumes);
+PHP_FUNCTION(libvirt_storagepool_get_info);
+PHP_FUNCTION(libvirt_storagepool_get_uuid_string);
+PHP_FUNCTION(libvirt_storagepool_get_name);
+PHP_FUNCTION(libvirt_storagepool_lookup_by_uuid_string);
+PHP_FUNCTION(libvirt_storagepool_get_xml_desc);
+PHP_FUNCTION(libvirt_storagepool_define_xml);
+PHP_FUNCTION(libvirt_storagepool_undefine);
+PHP_FUNCTION(libvirt_storagepool_create);
+PHP_FUNCTION(libvirt_storagepool_destroy);
+PHP_FUNCTION(libvirt_storagepool_is_active);
+PHP_FUNCTION(libvirt_storagepool_get_volume_count);
+PHP_FUNCTION(libvirt_storagepool_refresh);
+PHP_FUNCTION(libvirt_storagepool_set_autostart);
+PHP_FUNCTION(libvirt_storagepool_get_autostart);
+PHP_FUNCTION(libvirt_storagepool_build);
+PHP_FUNCTION(libvirt_storagepool_delete);
+PHP_FUNCTION(libvirt_storagevolume_lookup_by_name);
+PHP_FUNCTION(libvirt_storagevolume_lookup_by_path);
+PHP_FUNCTION(libvirt_storagevolume_get_name);
+PHP_FUNCTION(libvirt_storagevolume_get_path);
+PHP_FUNCTION(libvirt_storagevolume_get_info);
+PHP_FUNCTION(libvirt_storagevolume_get_xml_desc);
+PHP_FUNCTION(libvirt_storagevolume_create_xml);
+PHP_FUNCTION(libvirt_storagevolume_create_xml_from);
+PHP_FUNCTION(libvirt_storagevolume_delete);
+PHP_FUNCTION(libvirt_storagevolume_download);
+PHP_FUNCTION(libvirt_storagevolume_upload);
+PHP_FUNCTION(libvirt_storagevolume_resize);
+PHP_FUNCTION(libvirt_list_storagepools);
+PHP_FUNCTION(libvirt_list_active_storagepools);
+PHP_FUNCTION(libvirt_list_inactive_storagepools);
+
+#endif
--
2.13.3