*/
virConnectPtr virStoragePoolGetConnect (virStoragePoolPtr pool);
+/* Storage Pool capabilities */
+char *virConnectGetStoragePoolCapabilities(virConnectPtr conn,
+ unsigned int flags);
+
/*
* List active storage pools
*/
const char *srcSpec,
unsigned int flags);
+typedef char *
+(*virDrvConnectGetStoragePoolCapabilities)(virConnectPtr conn,
+ unsigned int flags);
+
typedef virStoragePoolPtr
(*virDrvStoragePoolLookupByName)(virConnectPtr conn,
const char *name);
virDrvConnectFindStoragePoolSources connectFindStoragePoolSources;
virDrvConnectStoragePoolEventRegisterAny connectStoragePoolEventRegisterAny;
virDrvConnectStoragePoolEventDeregisterAny connectStoragePoolEventDeregisterAny;
+ virDrvConnectGetStoragePoolCapabilities connectGetStoragePoolCapabilities;
virDrvStoragePoolLookupByName storagePoolLookupByName;
virDrvStoragePoolLookupByUUID storagePoolLookupByUUID;
virDrvStoragePoolLookupByVolume storagePoolLookupByVolume;
virDispatchError(conn);
return -1;
}
+
+
+/**
+ * virConnectGetStoragePoolCapabilities:
+ * @conn: pointer to the hypervisor connection
+ * @flags: extra flags; not used yet, so callers should always pass 0
+ *
+ * Prior creating a storage pool (for instance via virStoragePoolCreateXML
+ * or virStoragePoolDefineXML) it may be suitable to know what pool types
+ * are supported along with the file/disk formats for each pool.
+ *
+ * Returns NULL in case of error or an XML string defining the capabilities.
+ */
+char *
+virConnectGetStoragePoolCapabilities(virConnectPtr conn,
+ unsigned int flags)
+{
+ VIR_DEBUG("conn=%p, flags=0x%x", conn, flags);
+
+ virResetLastError();
+
+ virCheckConnectReturn(conn, NULL);
+
+ if (conn->storageDriver &&
+ conn->storageDriver->connectGetStoragePoolCapabilities) {
+ char *ret;
+ ret = conn->storageDriver->connectGetStoragePoolCapabilities(conn,
+ flags);
+ if (!ret)
+ goto error;
+ VIR_DEBUG("conn=%p, ret=%s", conn, ret);
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(conn);
+ return NULL;
+}
virDomainSetIOThreadParams;
} LIBVIRT_4.5.0;
+LIBVIRT_5.2.0 {
+ global:
+ virConnectGetStoragePoolCapabilities;
+} LIBVIRT_4.10.0;
+
# .... define new API here using predicted next version number ....
.connectFindStoragePoolSources = remoteConnectFindStoragePoolSources, /* 0.4.5 */
.connectStoragePoolEventDeregisterAny = remoteConnectStoragePoolEventDeregisterAny, /* 2.0.0 */
.connectStoragePoolEventRegisterAny = remoteConnectStoragePoolEventRegisterAny, /* 2.0.0 */
+ .connectGetStoragePoolCapabilities = remoteConnectGetStoragePoolCapabilities, /* 5.2.0 */
.storagePoolLookupByName = remoteStoragePoolLookupByName, /* 0.4.1 */
.storagePoolLookupByUUID = remoteStoragePoolLookupByUUID, /* 0.4.1 */
.storagePoolLookupByVolume = remoteStoragePoolLookupByVolume, /* 0.4.1 */
unsigned int ret;
};
+struct remote_connect_get_storage_pool_capabilities_args {
+ unsigned int flags;
+};
+
+struct remote_connect_get_storage_pool_capabilities_ret {
+ remote_nonnull_string capabilities;
+};
+
/*----- Protocol. -----*/
/* Define the program number, protocol version and procedure numbers here. */
* @acl: domain:save:!VIR_DOMAIN_AFFECT_CONFIG|VIR_DOMAIN_AFFECT_LIVE
* @acl: domain:save:VIR_DOMAIN_AFFECT_CONFIG
*/
- REMOTE_PROC_DOMAIN_SET_IOTHREAD_PARAMS = 402
+ REMOTE_PROC_DOMAIN_SET_IOTHREAD_PARAMS = 402,
+ /**
+ * @generate: both
+ * @acl: connect:read
+ */
+ REMOTE_PROC_CONNECT_GET_STORAGE_POOL_CAPABILITIES = 403
};
} bindings;
u_int ret;
};
+struct remote_connect_get_storage_pool_capabilities_args {
+ u_int flags;
+};
+struct remote_connect_get_storage_pool_capabilities_ret {
+ remote_nonnull_string capabilities;
+};
enum remote_procedure {
REMOTE_PROC_CONNECT_OPEN = 1,
REMOTE_PROC_CONNECT_CLOSE = 2,
REMOTE_PROC_NWFILTER_BINDING_DELETE = 400,
REMOTE_PROC_CONNECT_LIST_ALL_NWFILTER_BINDINGS = 401,
REMOTE_PROC_DOMAIN_SET_IOTHREAD_PARAMS = 402,
+ REMOTE_PROC_CONNECT_GET_STORAGE_POOL_CAPABILITIES = 403,
};