[libvirt] [PATCH RFC v3 09/15] FSPool: implementation of remote protocol

Olga Krishtal okrishtal at virtuozzo.com
Fri Dec 2 15:38:14 UTC 2016


Signed-off-by: Olga Krishtal <okrishtal at virtuozzo.com>
---
 daemon/remote.c              |  35 ++++
 src/Makefile.am              |   6 +-
 src/check-driverimpls.pl     |   2 +
 src/remote/remote_driver.c   |  66 ++++++
 src/remote/remote_protocol.x | 466 ++++++++++++++++++++++++++++++++++++++++++-
 src/remote_protocol-structs  | 165 +++++++++++++++
 src/rpc/gendispatch.pl       |  23 ++-
 7 files changed, 753 insertions(+), 10 deletions(-)

diff --git a/daemon/remote.c b/daemon/remote.c
index e414f92..33e5e77 100644
--- a/daemon/remote.c
+++ b/daemon/remote.c
@@ -88,6 +88,8 @@ static virNetworkPtr get_nonnull_network(virConnectPtr conn, remote_nonnull_netw
 static virInterfacePtr get_nonnull_interface(virConnectPtr conn, remote_nonnull_interface iface);
 static virStoragePoolPtr get_nonnull_storage_pool(virConnectPtr conn, remote_nonnull_storage_pool pool);
 static virStorageVolPtr get_nonnull_storage_vol(virConnectPtr conn, remote_nonnull_storage_vol vol);
+static virFSPoolPtr get_nonnull_fspool(virConnectPtr conn, remote_nonnull_fspool fspool);
+static virFSItemPtr get_nonnull_fsitem(virConnectPtr conn, remote_nonnull_fsitem item);
 static virSecretPtr get_nonnull_secret(virConnectPtr conn, remote_nonnull_secret secret);
 static virNWFilterPtr get_nonnull_nwfilter(virConnectPtr conn, remote_nonnull_nwfilter nwfilter);
 static virDomainSnapshotPtr get_nonnull_domain_snapshot(virDomainPtr dom, remote_nonnull_domain_snapshot snapshot);
@@ -97,6 +99,8 @@ static void make_nonnull_network(remote_nonnull_network *net_dst, virNetworkPtr
 static void make_nonnull_interface(remote_nonnull_interface *interface_dst, virInterfacePtr interface_src);
 static void make_nonnull_storage_pool(remote_nonnull_storage_pool *pool_dst, virStoragePoolPtr pool_src);
 static void make_nonnull_storage_vol(remote_nonnull_storage_vol *vol_dst, virStorageVolPtr vol_src);
+static void make_nonnull_fspool(remote_nonnull_fspool *fspool_dst, virFSPoolPtr fspool_src);
+static void make_nonnull_fsitem(remote_nonnull_fsitem *item_dst, virFSItemPtr item_src);
 static void make_nonnull_node_device(remote_nonnull_node_device *dev_dst, virNodeDevicePtr dev_src);
 static void make_nonnull_secret(remote_nonnull_secret *secret_dst, virSecretPtr secret_src);
 static void make_nonnull_nwfilter(remote_nonnull_nwfilter *net_dst, virNWFilterPtr nwfilter_src);
@@ -6660,6 +6664,22 @@ get_nonnull_domain_snapshot(virDomainPtr dom, remote_nonnull_domain_snapshot sna
     return virGetDomainSnapshot(dom, snapshot.name);
 }
 
+static virFSPoolPtr
+get_nonnull_fspool(virConnectPtr conn, remote_nonnull_fspool fspool)
+{
+    return virGetFSPool(conn, fspool.name, BAD_CAST fspool.uuid,
+                        NULL, NULL);
+}
+
+static virFSItemPtr
+get_nonnull_fsitem(virConnectPtr conn, remote_nonnull_fsitem item)
+{
+    virFSItemPtr ret;
+    ret = virGetFSItem(conn, item.fspool, item.name, item.key,
+                       NULL, NULL);
+    return ret;
+}
+
 static virNodeDevicePtr
 get_nonnull_node_device(virConnectPtr conn, remote_nonnull_node_device dev)
 {
@@ -6706,6 +6726,21 @@ make_nonnull_storage_vol(remote_nonnull_storage_vol *vol_dst, virStorageVolPtr v
 }
 
 static void
+make_nonnull_fspool(remote_nonnull_fspool *fspool_dst, virFSPoolPtr fspool_src)
+{
+    ignore_value(VIR_STRDUP_QUIET(fspool_dst->name, fspool_src->name));
+    memcpy(fspool_dst->uuid, fspool_src->uuid, VIR_UUID_BUFLEN);
+}
+
+static void
+make_nonnull_fsitem(remote_nonnull_fsitem *item_dst, virFSItemPtr item_src)
+{
+    ignore_value(VIR_STRDUP_QUIET(item_dst->fspool, item_src->pool));
+    ignore_value(VIR_STRDUP_QUIET(item_dst->name, item_src->name));
+    ignore_value(VIR_STRDUP_QUIET(item_dst->key, item_src->key));
+}
+
+static void
 make_nonnull_node_device(remote_nonnull_node_device *dev_dst, virNodeDevicePtr dev_src)
 {
     ignore_value(VIR_STRDUP_QUIET(dev_dst->name, dev_src->name));
diff --git a/src/Makefile.am b/src/Makefile.am
index 13a4976..2c9d675 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -233,7 +233,8 @@ DRIVER_SOURCES =							\
 		locking/lock_driver_nop.h locking/lock_driver_nop.c	\
 		locking/domain_lock.h locking/domain_lock.c		\
 		logging/log_manager.c logging/log_manager.h		\
-		$(NULL)
+		libvirt-fs.c                       \
+        $(NULL)
 
 LOCK_DRIVER_SANLOCK_SOURCES = \
 		locking/lock_driver_sanlock.c
@@ -2400,7 +2401,8 @@ libvirt_setuid_rpc_client_la_SOURCES = 		\
 		libvirt-storage.c		\
 		libvirt-stream.c		\
 		libvirt-lxc.c			\
-		$(NULL)
+	    libvirt-fs.c            \
+        $(NULL)
 
 libvirt_setuid_rpc_client_la_LDFLAGS =		\
 		$(AM_LDFLAGS)			\
diff --git a/src/check-driverimpls.pl b/src/check-driverimpls.pl
index e320558..bd86886 100755
--- a/src/check-driverimpls.pl
+++ b/src/check-driverimpls.pl
@@ -54,6 +54,8 @@ while (<>) {
             if ($api !~ /^$mainprefix/) {
                 $suffix =~ s/^[a-z]+(?:Unified)?//;
                 $suffix =~ s/^([A-Z]+)/lc $1/e;
+                $suffix =~ s/fsitem/fsItem/;
+                $suffix =~ s/fspool/fsPool/;
             }
 
             if ($api ne $suffix) {
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
index a3cd7cd..b08d598 100644
--- a/src/remote/remote_driver.c
+++ b/src/remote/remote_driver.c
@@ -144,6 +144,8 @@ static virNWFilterPtr get_nonnull_nwfilter(virConnectPtr conn, remote_nonnull_nw
 static virInterfacePtr get_nonnull_interface(virConnectPtr conn, remote_nonnull_interface iface);
 static virStoragePoolPtr get_nonnull_storage_pool(virConnectPtr conn, remote_nonnull_storage_pool pool);
 static virStorageVolPtr get_nonnull_storage_vol(virConnectPtr conn, remote_nonnull_storage_vol vol);
+static virFSPoolPtr get_nonnull_fspool(virConnectPtr conn, remote_nonnull_fspool fspool);
+static virFSItemPtr get_nonnull_fsitem(virConnectPtr conn, remote_nonnull_fsitem item);
 static virNodeDevicePtr get_nonnull_node_device(virConnectPtr conn, remote_nonnull_node_device dev);
 static virSecretPtr get_nonnull_secret(virConnectPtr conn, remote_nonnull_secret secret);
 static virDomainSnapshotPtr get_nonnull_domain_snapshot(virDomainPtr domain, remote_nonnull_domain_snapshot snapshot);
@@ -152,6 +154,8 @@ static void make_nonnull_network(remote_nonnull_network *net_dst, virNetworkPtr
 static void make_nonnull_interface(remote_nonnull_interface *interface_dst, virInterfacePtr interface_src);
 static void make_nonnull_storage_pool(remote_nonnull_storage_pool *pool_dst, virStoragePoolPtr vol_src);
 static void make_nonnull_storage_vol(remote_nonnull_storage_vol *vol_dst, virStorageVolPtr vol_src);
+static void make_nonnull_fspool(remote_nonnull_fspool *fspool_dst, virFSPoolPtr fspool_src);
+static void make_nonnull_fsitem(remote_nonnull_fsitem *item_dst, virFSItemPtr item_src);
 static void
 make_nonnull_node_device(remote_nonnull_node_device *dev_dst, virNodeDevicePtr dev_src);
 static void make_nonnull_secret(remote_nonnull_secret *secret_dst, virSecretPtr secret_src);
@@ -7841,6 +7845,19 @@ get_nonnull_storage_vol(virConnectPtr conn, remote_nonnull_storage_vol vol)
                             NULL, NULL);
 }
 
+static virFSPoolPtr
+get_nonnull_fspool(virConnectPtr conn, remote_nonnull_fspool fspool)
+{
+    return virGetFSPool(conn, fspool.name, BAD_CAST fspool.uuid,
+                        NULL, NULL);
+}
+
+static virFSItemPtr
+get_nonnull_fsitem(virConnectPtr conn, remote_nonnull_fsitem item)
+{
+    return virGetFSItem(conn, item.fspool, item.name, item.key,
+                        NULL, NULL);
+}
 static virNodeDevicePtr
 get_nonnull_node_device(virConnectPtr conn, remote_nonnull_node_device dev)
 {
@@ -7906,6 +7923,21 @@ make_nonnull_storage_vol(remote_nonnull_storage_vol *vol_dst, virStorageVolPtr v
 }
 
 static void
+make_nonnull_fspool(remote_nonnull_fspool *fspool_dst, virFSPoolPtr fspool_src)
+{
+    fspool_dst->name = fspool_src->name;
+    memcpy(fspool_dst->uuid, fspool_src->uuid, VIR_UUID_BUFLEN);
+}
+
+static void
+make_nonnull_fsitem(remote_nonnull_fsitem *item_dst, virFSItemPtr item_src)
+{
+    item_dst->fspool = item_src->pool;
+    item_dst->name = item_src->name;
+    item_dst->key = item_src->key;
+}
+
+static void
 make_nonnull_secret(remote_nonnull_secret *secret_dst, virSecretPtr secret_src)
 {
     memcpy(secret_dst->uuid, secret_src->uuid, VIR_UUID_BUFLEN);
@@ -8296,6 +8328,39 @@ static virNWFilterDriver nwfilter_driver = {
     .connectListAllNWFilters     = remoteConnectListAllNWFilters, /* 0.10.2 */
 };
 
+static virFSDriver fspool_driver = {
+    .fsPoolLookupByName = remoteFSPoolLookupByName,
+    .fsPoolLookupByUUID = remoteFSPoolLookupByUUID,
+    .fsPoolLookupByItem = remoteFSPoolLookupByItem,
+    .fsPoolCreateXML = remoteFSPoolCreateXML,
+    .fsPoolDefineXML = remoteFSPoolDefineXML,
+    .fsPoolBuild = remoteFSPoolBuild,
+    .fsPoolUndefine = remoteFSPoolUndefine,
+    .fsPoolCreate = remoteFSPoolCreate,
+    .fsPoolDestroy = remoteFSPoolDestroy,
+    .fsPoolDelete = remoteFSPoolDelete,
+    .fsPoolRefresh = remoteFSPoolRefresh,
+    .fsPoolGetInfo = remoteFSPoolGetInfo,
+    .fsPoolGetXMLDesc = remoteFSPoolGetXMLDesc,
+    .fsPoolGetAutostart = remoteFSPoolGetAutostart,
+    .fsPoolSetAutostart = remoteFSPoolSetAutostart,
+    .fsPoolNumOfItems = remoteFSPoolNumOfItems,
+    .fsPoolListItems = remoteFSPoolListItems,
+    .fsPoolListAllItems = remoteFSPoolListAllItems,
+    .fsItemLookupByName = remoteFSItemLookupByName,
+    .fsItemLookupByKey = remoteFSItemLookupByKey,
+    .fsItemLookupByPath = remoteFSItemLookupByPath,
+    .fsItemCreateXML = remoteFSItemCreateXML,
+    .fsItemCreateXMLFrom = remoteFSItemCreateXMLFrom,
+    .fsItemDelete = remoteFSItemDelete,
+    .fsItemGetInfo = remoteFSItemGetInfo,
+    .fsItemGetXMLDesc = remoteFSItemGetXMLDesc,
+    .fsItemGetPath = remoteFSItemGetPath,
+    .fsPoolIsActive = remoteFSPoolIsActive,
+    .fsPoolIsPersistent = remoteFSPoolIsPersistent,
+    .connectListAllFSPools = remoteConnectListAllFSPools,
+};
+
 static virConnectDriver connect_driver = {
     .hypervisorDriver = &hypervisor_driver,
     .interfaceDriver = &interface_driver,
@@ -8304,6 +8369,7 @@ static virConnectDriver connect_driver = {
     .nwfilterDriver = &nwfilter_driver,
     .secretDriver = &secret_driver,
     .storageDriver = &storage_driver,
+    .fsDriver = &fspool_driver,
 };
 
 static virStateDriver state_driver = {
diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
index e8382dc..d1493fc 100644
--- a/src/remote/remote_protocol.x
+++ b/src/remote/remote_protocol.x
@@ -85,6 +85,12 @@ const REMOTE_STORAGE_POOL_LIST_MAX = 4096;
 /* Upper limit on lists of storage vols. */
 const REMOTE_STORAGE_VOL_LIST_MAX = 16384;
 
+/* Upper limit on lists of fspools. */
+const REMOTE_FSPOOL_LIST_MAX = 4096;
+
+/* Upper limit on lists of fsitems. */
+const REMOTE_FSITEM_LIST_MAX = 16384;
+
 /* Upper limit on lists of node devices. */
 const REMOTE_NODE_DEVICE_LIST_MAX = 16384;
 
@@ -294,6 +300,19 @@ struct remote_nonnull_storage_vol {
     remote_nonnull_string key;
 };
 
+/* A fspool which may not be NULL. */
+struct remote_nonnull_fspool {
+    remote_nonnull_string name;
+    remote_uuid uuid;
+};
+
+/* A fsitem which may not be NULL. */
+struct remote_nonnull_fsitem {
+    remote_nonnull_string fspool;
+    remote_nonnull_string name;
+    remote_nonnull_string key;
+};
+
 /* A node device which may not be NULL. */
 struct remote_nonnull_node_device {
     remote_nonnull_string name;
@@ -318,6 +337,8 @@ typedef remote_nonnull_network *remote_network;
 typedef remote_nonnull_nwfilter *remote_nwfilter;
 typedef remote_nonnull_storage_pool *remote_storage_pool;
 typedef remote_nonnull_storage_vol *remote_storage_vol;
+typedef remote_nonnull_fspool *remote_fspool;
+typedef remote_nonnull_fsitem *remote_fsitem;
 typedef remote_nonnull_node_device *remote_node_device;
 
 /* Error message. See <virterror.h> for explanation of fields. */
@@ -1955,6 +1976,206 @@ struct remote_storage_vol_resize_args {
     unsigned int flags;
 };
 
+/* FS pool calls: */
+
+struct remote_fspool_lookup_by_uuid_args {
+    remote_uuid uuid;
+};
+
+struct remote_fspool_lookup_by_uuid_ret {
+    remote_nonnull_fspool pool;
+};
+
+struct remote_fspool_lookup_by_name_args {
+    remote_nonnull_string name;
+};
+
+struct remote_fspool_lookup_by_name_ret {
+    remote_nonnull_fspool fspool;
+};
+
+struct remote_fspool_lookup_by_item_args {
+    remote_nonnull_fsitem item;
+};
+
+struct remote_fspool_lookup_by_item_ret {
+    remote_nonnull_fspool fspool;
+};
+
+struct remote_fspool_create_xml_args {
+    remote_nonnull_string xml;
+    unsigned int flags;
+};
+
+struct remote_fspool_create_xml_ret {
+    remote_nonnull_fspool fspool;
+};
+
+struct remote_fspool_define_xml_args {
+    remote_nonnull_string xml;
+    unsigned int flags;
+};
+
+struct remote_fspool_define_xml_ret {
+    remote_nonnull_fspool fspool;
+};
+
+struct remote_fspool_build_args {
+    remote_nonnull_fspool fspool;
+    unsigned int flags;
+};
+
+struct remote_fspool_undefine_args {
+    remote_nonnull_fspool fspool;
+};
+
+struct remote_fspool_create_args {
+    remote_nonnull_fspool fspool;
+    unsigned int flags;
+};
+
+struct remote_fspool_destroy_args {
+    remote_nonnull_fspool fspool;
+};
+struct remote_fspool_delete_args {
+    remote_nonnull_fspool fspool;
+    unsigned int flags;
+};
+
+struct remote_fspool_get_xml_desc_args {
+    remote_nonnull_fspool fspool;
+    unsigned int flags;
+};
+
+struct remote_fs_pool_get_xml_desc_ret {
+    remote_nonnull_string xml;
+};
+
+struct remote_fspool_get_info_args {
+    remote_nonnull_fspool fspool;
+};
+
+struct remote_fspool_get_info_ret { /* insert at 1 */
+    unsigned char state;
+    unsigned hyper capacity;
+    unsigned hyper allocation;
+    unsigned hyper available;
+};
+
+struct remote_fspool_get_autostart_args {
+    remote_nonnull_fspool fspool;
+};
+
+struct remote_fspool_get_autostart_ret {
+    int autostart;
+};
+
+struct remote_fspool_set_autostart_args {
+    remote_nonnull_fspool fspool;
+    int autostart;
+};
+
+struct remote_fspool_num_of_items_args {
+    remote_nonnull_fspool fspool;
+};
+
+struct remote_fspool_num_of_items_ret {
+    int num;
+};
+
+struct remote_fspool_list_items_args {
+    remote_nonnull_fspool fspool;
+    int maxnames;
+};
+
+struct remote_fspool_list_items_ret {
+    remote_nonnull_string names<REMOTE_FSITEM_LIST_MAX>; /* insert at 1 */
+};
+struct remote_fspool_refresh_args {
+    remote_nonnull_fspool fspool;
+    unsigned int flags;
+};
+
+/* FS item calls: */
+
+struct remote_fsitem_lookup_by_name_args {
+    remote_nonnull_fspool fspool;
+    remote_nonnull_string name;
+};
+
+struct remote_fsitem_lookup_by_name_ret {
+    remote_nonnull_fsitem item;
+};
+
+struct remote_fsitem_lookup_by_key_args {
+    remote_nonnull_string key;
+};
+
+struct remote_fsitem_lookup_by_key_ret {
+    remote_nonnull_fsitem item;
+};
+
+struct remote_fsitem_lookup_by_path_args {
+    remote_nonnull_string path;
+};
+
+struct remote_fsitem_lookup_by_path_ret {
+    remote_nonnull_fsitem item;
+};
+
+struct remote_fsitem_create_xml_args {
+    remote_nonnull_fspool fspool;
+    remote_nonnull_string xml;
+    unsigned int flags;
+};
+
+struct remote_fsitem_create_xml_ret {
+    remote_nonnull_fsitem item;
+};
+
+struct remote_fsitem_create_xml_from_args {
+    remote_nonnull_fspool fspool;
+    remote_nonnull_string xml;
+    remote_nonnull_fsitem cloneitem;
+    unsigned int flags;
+};
+
+struct remote_fsitem_create_xml_from_ret {
+    remote_nonnull_fsitem item;
+};
+
+struct remote_fsitem_delete_args {
+    remote_nonnull_fsitem item;
+    unsigned int flags;
+};
+
+struct remote_fsitem_get_xml_desc_args {
+    remote_nonnull_fsitem item;
+    unsigned int flags;
+};
+
+struct remote_fsitem_get_xml_desc_ret {
+    remote_nonnull_string xml;
+};
+
+struct remote_fsitem_get_info_args {
+    remote_nonnull_fsitem item;
+};
+
+struct remote_fsitem_get_info_ret { /* insert at 1 */
+    char type;
+    unsigned hyper capacity;
+    unsigned hyper allocation;
+};
+
+struct remote_fsitem_get_path_args {
+    remote_nonnull_fsitem item;
+};
+
+struct remote_fsitem_get_path_ret {
+    remote_nonnull_string name;
+};
+
 /* Node driver calls: */
 
 struct remote_node_num_of_devices_args {
@@ -2244,7 +2465,21 @@ struct remote_storage_pool_is_persistent_ret {
     int persistent;
 };
 
+struct remote_fspool_is_active_args {
+    remote_nonnull_fspool fspool;
+};
 
+struct remote_fspool_is_active_ret {
+    int active;
+};
+
+struct remote_fspool_is_persistent_args {
+    remote_nonnull_fspool fspool;
+};
+
+struct remote_fspool_is_persistent_ret {
+    int persistent;
+};
 struct remote_interface_is_active_args {
     remote_nonnull_interface iface;
 };
@@ -2874,6 +3109,27 @@ struct remote_storage_pool_list_all_volumes_ret { /* insert at 1 */
     unsigned int ret;
 };
 
+struct remote_connect_list_all_fspools_args {
+    int need_results;
+    unsigned int flags;
+};
+
+struct remote_connect_list_all_fspools_ret { /* insert at 1 */
+    remote_nonnull_fspool fspools<REMOTE_FSPOOL_LIST_MAX>;
+    unsigned int ret;
+};
+
+struct remote_fspool_list_all_items_args {
+    remote_nonnull_fspool fspool;
+    int need_results;
+    unsigned int flags;
+};
+
+struct remote_fspool_list_all_items_ret { /* insert at 1 */
+    remote_nonnull_fsitem items<REMOTE_FSITEM_LIST_MAX>;
+    unsigned int ret;
+};
+
 struct remote_connect_list_all_networks_args {
     int need_results;
     unsigned int flags;
@@ -5934,5 +6190,213 @@ enum remote_procedure {
      * @generate: both
      * @acl: none
      */
-    REMOTE_PROC_NODE_DEVICE_EVENT_UPDATE = 377
+    REMOTE_PROC_NODE_DEVICE_EVENT_UPDATE = 377,
+
+    /**
+     * @generate: both
+     * @acl: fspool:start
+     * @acl: fspool:write
+     */
+    REMOTE_PROC_FSPOOL_CREATE_XML = 382,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fspool:write
+     * @acl: fspool:save
+     */
+    REMOTE_PROC_FSPOOL_DEFINE_XML = 383,
+
+    /**
+     * @generate: both
+     * @acl: fspool:format
+     */
+    REMOTE_PROC_FSPOOL_BUILD = 384,
+
+    /**
+     * @generate: both
+     * @acl: fspool:format
+     */
+    REMOTE_PROC_FSPOOL_DELETE = 385,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fspool:delete
+     */
+    REMOTE_PROC_FSPOOL_UNDEFINE = 386,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fspool:getattr
+     */
+    REMOTE_PROC_FSPOOL_LOOKUP_BY_NAME = 387,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fspool:getattr
+     */
+    REMOTE_PROC_FSPOOL_LOOKUP_BY_UUID = 388,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fspool:getattr
+     */
+    REMOTE_PROC_FSPOOL_LOOKUP_BY_ITEM = 389,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fspool:read
+     */
+    REMOTE_PROC_FSPOOL_GET_INFO = 390,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fspool:read
+     */
+    REMOTE_PROC_FSPOOL_GET_XML_DESC = 391,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fspool:search_items
+     * @aclfilter: fsitem:getattr
+     */
+    REMOTE_PROC_FSPOOL_NUM_OF_ITEMS = 392,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fspool:search_items
+     * @aclfilter: fsitem:getattr
+     */
+    REMOTE_PROC_FSPOOL_LIST_ITEMS = 393,
+
+    /**
+     * @generate: both
+     * @acl: fsitem:create
+     */
+    REMOTE_PROC_FSITEM_CREATE_XML = 394,
+
+    /**
+     * @generate: both
+     * @acl: fsitem:delete
+     */
+    REMOTE_PROC_FSITEM_DELETE = 395,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fsitem:getattr
+     */
+    REMOTE_PROC_FSITEM_LOOKUP_BY_NAME = 396,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fsitem:getattr
+     */
+    REMOTE_PROC_FSITEM_LOOKUP_BY_KEY = 397,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fsitem:getattr
+     */
+    REMOTE_PROC_FSITEM_LOOKUP_BY_PATH = 398,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fsitem:read
+     */
+    REMOTE_PROC_FSITEM_GET_INFO = 399,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fsitem:read
+     */
+    REMOTE_PROC_FSITEM_GET_XML_DESC = 400,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fsitem:read
+     */
+    REMOTE_PROC_FSITEM_GET_PATH = 401,
+
+    /**
+     * @generate: both
+     * @acl: fsitem:create
+     */
+    REMOTE_PROC_FSITEM_CREATE_XML_FROM = 402,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: connect:search_fspools
+     * @aclfilter: fspool:getattr
+     */
+    REMOTE_PROC_CONNECT_LIST_ALL_FSPOOLS = 403,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fspool:search_items
+     * @aclfilter: fsitem:getattr
+     */
+    REMOTE_PROC_FSPOOL_LIST_ALL_ITEMS = 404,
+
+    /**
+     * @generate: both
+     * @acl: fspool:refresh
+     */
+    REMOTE_PROC_FSPOOL_REFRESH = 405,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fspool:read
+     */
+    REMOTE_PROC_FSPOOL_IS_ACTIVE = 406,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fspool:read
+     */
+    REMOTE_PROC_FSPOOL_IS_PERSISTENT = 407,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fspool:read
+     */
+    REMOTE_PROC_FSPOOL_GET_AUTOSTART = 408,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fspool:write
+     */
+    REMOTE_PROC_FSPOOL_SET_AUTOSTART = 409,
+
+    /**
+     * @generate: both
+     * @acl: fspool:start
+     */
+    REMOTE_PROC_FSPOOL_CREATE = 410,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fspool:stop
+     */
+    REMOTE_PROC_FSPOOL_DESTROY = 411
 };
diff --git a/src/remote_protocol-structs b/src/remote_protocol-structs
index b71accc..bac0efb 100644
--- a/src/remote_protocol-structs
+++ b/src/remote_protocol-structs
@@ -34,6 +34,15 @@ struct remote_nonnull_storage_vol {
         remote_nonnull_string      name;
         remote_nonnull_string      key;
 };
+struct remote_nonnull_fspool {
+    remote_nonnull_string name;
+    remote_uuid uuid;
+};
+struct remote_nonnull_fsitem {
+    remote_nonnull_string fspool;
+    remote_nonnull_string name;
+    remote_nonnull_string key;
+};
 struct remote_nonnull_node_device {
         remote_nonnull_string      name;
 };
@@ -1483,6 +1492,162 @@ struct remote_storage_vol_resize_args {
         uint64_t                   capacity;
         u_int                      flags;
 };
+struct remote_fspool_lookup_by_uuid_args {
+    remote_uuid uuid;
+};
+struct remote_fspool_lookup_by_uuid_ret {
+    remote_nonnull_fspool pool;
+};
+struct remote_fspool_lookup_by_name_args {
+    remote_nonnull_string name;
+};
+struct remote_fspool_lookup_by_name_ret {
+    remote_nonnull_fspool fspool;
+};
+struct remote_fspool_lookup_by_item_args {
+    remote_nonnull_fsitem item;
+};
+struct remote_fspool_lookup_by_item_ret {
+    remote_nonnull_fspool fspool;
+};
+struct remote_fspool_create_xml_args {
+    remote_nonnull_string xml;
+    unsigned int flags;
+};
+struct remote_fspool_create_xml_ret {
+    remote_nonnull_fspool fspool;
+};
+struct remote_fspool_define_xml_args {
+    remote_nonnull_string xml;
+    unsigned int flags;
+};
+struct remote_fspool_define_xml_ret {
+    remote_nonnull_fspool fspool;
+};
+struct remote_fspool_build_args {
+    remote_nonnull_fspool fspool;
+    unsigned int flags;
+};
+struct remote_fspool_undefine_args {
+    remote_nonnull_fspool fspool;
+};
+struct remote_fspool_create_args {
+    remote_nonnull_fspool fspool;
+    unsigned int flags;
+};
+
+struct remote_fspool_destroy_args {
+    remote_nonnull_fspool fspool;
+};
+struct remote_fspool_delete_args {
+    remote_nonnull_fspool fspool;
+    unsigned int flags;
+};
+struct remote_fspool_get_xml_desc_args {
+    remote_nonnull_fspool fspool;
+    unsigned int flags;
+};
+struct remote_fs_pool_get_xml_desc_ret {
+    remote_nonnull_string xml;
+};
+struct remote_fspool_get_info_args {
+    remote_nonnull_fspool fspool;
+};
+struct remote_fspool_get_info_ret {
+    unsigned char state;
+    unsigned hyper capacity;
+    unsigned hyper allocation;
+    unsigned hyper available;
+};
+struct remote_fspool_get_autostart_args {
+    remote_nonnull_fspool fspool;
+};
+struct remote_fspool_get_autostart_ret {
+    int autostart;
+};
+struct remote_fspool_set_autostart_args {
+    remote_nonnull_fspool fspool;
+    int autostart;
+};
+struct remote_fspool_num_of_items_args {
+    remote_nonnull_fspool fspool;
+};
+struct remote_fspool_num_of_items_ret {
+    int num;
+};
+struct remote_fspool_list_items_args {
+    remote_nonnull_fspool fspool;
+    int maxnames;
+};
+
+struct remote_fspool_list_items_ret {
+    remote_nonnull_string names<REMOTE_FSITEM_LIST_MAX>;
+};
+struct remote_fspool_refresh_args {
+    remote_nonnull_fspool fspool;
+    unsigned int flags;
+};
+struct remote_fsitem_lookup_by_name_args {
+    remote_nonnull_fspool fspool;
+    remote_nonnull_string name;
+};
+struct remote_fsitem_lookup_by_name_ret {
+    remote_nonnull_fsitem item;
+};
+struct remote_fsitem_lookup_by_key_args {
+    remote_nonnull_string key;
+};
+struct remote_fsitem_lookup_by_key_ret {
+    remote_nonnull_fsitem item;
+};
+struct remote_fsitem_lookup_by_path_args {
+    remote_nonnull_string path;
+};
+struct remote_fsitem_lookup_by_path_ret {
+    remote_nonnull_fsitem item;
+};
+struct remote_fsitem_create_xml_args {
+    remote_nonnull_fspool fspool;
+    remote_nonnull_string xml;
+    unsigned int flags;
+};
+struct remote_fsitem_create_xml_ret {
+    remote_nonnull_fsitem item;
+};
+struct remote_fsitem_create_xml_from_args {
+    remote_nonnull_fspool fspool;
+    remote_nonnull_string xml;
+    remote_nonnull_fsitem cloneitem;
+    unsigned int flags;
+};
+struct remote_fsitem_create_xml_from_ret {
+    remote_nonnull_fsitem item;
+};
+struct remote_fsitem_delete_args {
+    remote_nonnull_fsitem item;
+    unsigned int flags;
+};
+struct remote_fsitem_get_xml_desc_args {
+    remote_nonnull_fsitem item;
+    unsigned int flags;
+};
+struct remote_fsitem_get_xml_desc_ret {
+    remote_nonnull_string xml;
+};
+struct remote_fsitem_get_info_args {
+    remote_nonnull_fsitem item;
+};
+struct remote_fsitem_get_info_ret {
+    char type;
+    unsigned hyper capacity;
+    unsigned hyper allocation;
+};
+struct remote_fsitem_get_path_args {
+    remote_nonnull_fsitem item;
+};
+struct remote_fsitem_get_path_ret {
+    remote_nonnull_string name;
+};
 struct remote_node_num_of_devices_args {
         remote_string              cap;
         u_int                      flags;
diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl
index 173189c..7fd0bbd 100755
--- a/src/rpc/gendispatch.pl
+++ b/src/rpc/gendispatch.pl
@@ -56,6 +56,8 @@ sub fixup_name {
     my $name = shift;
 
     $name =~ s/Nwfilter/NWFilter/;
+    $name =~ s/Fspool/FSPool/;
+    $name =~ s/Fsitem/FSItem/;
     $name =~ s/Xml$/XML/;
     $name =~ s/Uri$/URI/;
     $name =~ s/Uuid$/UUID/;
@@ -500,7 +502,7 @@ elsif ($mode eq "server") {
                 if ($args_member =~ m/^remote_nonnull_string name;/ and $has_node_device) {
                     # ignore the name arg for node devices
                     next
-                } elsif ($args_member =~ m/^remote_nonnull_(domain|network|storage_pool|storage_vol|interface|secret|nwfilter) (\S+);/) {
+                } elsif ($args_member =~ m/^remote_nonnull_(domain|network|storage_pool|storage_vol|interface|secret|nwfilter|fspool|fsitem) (\S+);/) {
                     my $type_name = name_to_TypeName($1);
 
                     push(@vars_list, "vir${type_name}Ptr $2 = NULL");
@@ -665,7 +667,7 @@ elsif ($mode eq "server") {
                         if (!$modern_ret_as_list) {
                             push(@ret_list, "ret->$3 = tmp.$3;");
                         }
-                    } elsif ($ret_member =~ m/(?:admin|remote)_nonnull_(secret|nwfilter|node_device|interface|network|storage_vol|storage_pool|domain_snapshot|domain|server|client) (\S+)<(\S+)>;/) {
+                    } elsif ($ret_member =~ m/(?:admin|remote)_nonnull_(secret|nwfilter|node_device|interface|network|storage_vol|storage_pool|domain_snapshot|domain|server|client|fspool|fsitem) (\S+)<(\S+)>;/) {
                         $modern_ret_struct_name = $1;
                         $single_ret_list_error_msg_type = $1;
                         $single_ret_list_name = $2;
@@ -723,7 +725,7 @@ elsif ($mode eq "server") {
                     $single_ret_var = $1;
                     $single_ret_by_ref = 0;
                     $single_ret_check = " == NULL";
-                } elsif ($ret_member =~ m/^remote_nonnull_(domain|network|storage_pool|storage_vol|interface|node_device|secret|nwfilter|domain_snapshot) (\S+);/) {
+                } elsif ($ret_member =~ m/^remote_nonnull_(domain|network|storage_pool|storage_vol|interface|node_device|secret|nwfilter|domain_snapshot|fspool|fsitem) (\S+);/) {
                     my $type_name = name_to_TypeName($1);
 
                     if ($call->{ProcName} eq "DomainCreateWithFlags") {
@@ -1268,7 +1270,7 @@ elsif ($mode eq "client") {
                     $priv_src = "dev->conn";
                     push(@args_list, "virNodeDevicePtr dev");
                     push(@setters_list, "args.name = dev->name;");
-                } elsif ($args_member =~ m/^remote_nonnull_(domain|network|storage_pool|storage_vol|interface|secret|nwfilter|domain_snapshot) (\S+);/) {
+                } elsif ($args_member =~ m/^remote_nonnull_(domain|network|storage_pool|storage_vol|interface|secret|nwfilter|domain_snapshot|fspool|fsitem) (\S+);/) {
                     my $name = $1;
                     my $arg_name = $2;
                     my $type_name = name_to_TypeName($name);
@@ -1461,7 +1463,7 @@ elsif ($mode eq "client") {
                         }
 
                         push(@ret_list, "memcpy(result->$3, ret.$3, sizeof(result->$3));");
-                    } elsif ($ret_member =~ m/(?:admin|remote)_nonnull_(secret|nwfilter|node_device|interface|network|storage_vol|storage_pool|domain_snapshot|domain|server|client) (\S+)<(\S+)>;/) {
+                    } elsif ($ret_member =~ m/(?:admin|remote)_nonnull_(secret|nwfilter|node_device|interface|network|storage_vol|storage_pool|domain_snapshot|domain|server|client|fspool|fsitem) (\S+)<(\S+)>;/) {
                         my $proc_name = name_to_TypeName($1);
 
                         if ($structprefix eq "admin") {
@@ -1513,7 +1515,7 @@ elsif ($mode eq "client") {
                     push(@ret_list, "VIR_FREE(ret.$1);");
                     $single_ret_var = "char *rv = NULL";
                     $single_ret_type = "char *";
-                } elsif ($ret_member =~ m/^remote_nonnull_(domain|network|storage_pool|storage_vol|node_device|interface|secret|nwfilter|domain_snapshot) (\S+);/) {
+                } elsif ($ret_member =~ m/^remote_nonnull_(domain|network|storage_pool|storage_vol|node_device|interface|secret|nwfilter|domain_snapshot|fspool|fsitem) (\S+);/) {
                     my $name = $1;
                     my $arg_name = $2;
                     my $type_name = name_to_TypeName($name);
@@ -1968,7 +1970,8 @@ elsif ($mode eq "client") {
             "storage_conf.h",
             "nwfilter_conf.h",
             "node_device_conf.h",
-            "interface_conf.h"
+            "interface_conf.h",
+            "fs_conf.h"
             );
         foreach my $hdr (@headers) {
             print "#include \"$hdr\"\n";
@@ -2053,6 +2056,8 @@ elsif ($mode eq "client") {
             $object =~ s/^(\w)/uc $1/e;
             $object =~ s/_(\w)/uc $1/e;
             $object =~ s/Nwfilter/NWFilter/;
+            $object =~ s/Fspool/FSPool/;
+            $object =~ s/Fsitem/FSItem/;
             my $objecttype = $prefix . $object . "DefPtr";
             $apiname .= $action . "ACL";
 
@@ -2065,6 +2070,8 @@ elsif ($mode eq "client") {
             if ($object ne "Connect") {
                 if ($object eq "StorageVol") {
                     push @argdecls, "virStoragePoolDefPtr pool";
+                } elsif ($object eq "FSItem") {
+                    push @argdecls, "virFSPoolDefPtr fspool";
                 }
                 push @argdecls, "$objecttype $arg";
             }
@@ -2094,6 +2101,8 @@ elsif ($mode eq "client") {
                 if ($object ne "Connect") {
                     if ($object eq "StorageVol") {
                         push @argvars, "pool";
+                    } elsif ($object eq "FSItem") {
+                        push @argvars, "fspool";
                     }
                     push @argvars, $arg;
                 }
-- 
1.8.3.1




More information about the libvir-list mailing list