[libvirt] [PATCH 5/7] remote: filesystem pools driver implementation

Nikolay Shirokovskiy nshirokovskiy at virtuozzo.com
Mon Jul 11 08:28:08 UTC 2016


From: Olga Krishtal <okrishtal at virtuozzo.com>

Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy at virtuozzo.com>
---
 daemon/libvirtd.c            |  10 +
 daemon/remote.c              |  35 +++
 src/driver.h                 |   1 +
 src/remote/remote_driver.c   |  72 +++++-
 src/remote/remote_protocol.x | 522 ++++++++++++++++++++++++++++++++++++++++++-
 src/rpc/gendispatch.pl       |  19 +-
 6 files changed, 650 insertions(+), 9 deletions(-)

diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c
index 95c1b1c..b6d4d80 100644
--- a/daemon/libvirtd.c
+++ b/daemon/libvirtd.c
@@ -92,6 +92,9 @@
 # ifdef WITH_STORAGE
 #  include "storage/storage_driver.h"
 # endif
+# ifdef WITH_FS
+#  include "fs/fs_driver.h"
+# endif
 # ifdef WITH_NODE_DEVICES
 #  include "node_device/node_device_driver.h"
 # endif
@@ -374,6 +377,9 @@ static void daemonInitialize(void)
 # ifdef WITH_NWFILTER
     virDriverLoadModule("nwfilter");
 # endif
+# ifdef WITH_FS
+    virDriverLoadModule("fs");
+# endif
 # ifdef WITH_XEN
     virDriverLoadModule("xen");
 # endif
@@ -398,6 +404,7 @@ static void daemonInitialize(void)
 # ifdef WITH_VZ
     virDriverLoadModule("vz");
 # endif
+
 #else
 # ifdef WITH_NETWORK
     networkRegister();
@@ -408,6 +415,9 @@ static void daemonInitialize(void)
 # ifdef WITH_STORAGE
     storageRegister();
 # endif
+# ifdef WITH_FS
+    fsRegister();
+# endif
 # ifdef WITH_NODE_DEVICES
     nodedevRegister();
 # endif
diff --git a/daemon/remote.c b/daemon/remote.c
index 4aa43c2..0493e5e 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_fs_pool(virConnectPtr conn, remote_nonnull_fs_pool fspool);
+static virFsItemPtr get_nonnull_fs_item(virConnectPtr conn, remote_nonnull_fs_item 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);
@@ -96,6 +98,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_fs_pool(remote_nonnull_fs_pool *fspool_dst, virFsPoolPtr fspool_src);
+static void make_nonnull_fs_item(remote_nonnull_fs_item *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);
@@ -6407,6 +6411,22 @@ get_nonnull_storage_vol(virConnectPtr conn, remote_nonnull_storage_vol vol)
     return ret;
 }
 
+static virFsPoolPtr
+get_nonnull_fs_pool(virConnectPtr conn, remote_nonnull_fs_pool fspool)
+{
+    return virGetFsPool(conn, fspool.name, BAD_CAST fspool.uuid,
+                        NULL, NULL);
+}
+
+static virFsItemPtr
+get_nonnull_fs_item(virConnectPtr conn, remote_nonnull_fs_item item)
+{
+    virFsItemPtr ret;
+    ret = virGetFsItem(conn, item.fspool, item.name, item.key,
+                       NULL, NULL);
+    return ret;
+}
+
 static virSecretPtr
 get_nonnull_secret(virConnectPtr conn, remote_nonnull_secret secret)
 {
@@ -6465,6 +6485,21 @@ make_nonnull_storage_vol(remote_nonnull_storage_vol *vol_dst, virStorageVolPtr v
 }
 
 static void
+make_nonnull_fs_pool(remote_nonnull_fs_pool *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_fs_item(remote_nonnull_fs_item *item_dst, virFsItemPtr item_src)
+{
+    ignore_value(VIR_STRDUP_QUIET(item_dst->fspool, item_src->fspool));
+    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/driver.h b/src/driver.h
index fb93083..57ad1f7 100644
--- a/src/driver.h
+++ b/src/driver.h
@@ -87,6 +87,7 @@ struct _virConnectDriver {
     virNWFilterDriverPtr nwfilterDriver;
     virSecretDriverPtr secretDriver;
     virStorageDriverPtr storageDriver;
+    virFsDriverPtr fsDriver;
 };
 
 int virRegisterConnectDriver(virConnectDriverPtr driver,
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
index e9904f8..ae7d301 100644
--- a/src/remote/remote_driver.c
+++ b/src/remote/remote_driver.c
@@ -143,6 +143,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_fs_pool(virConnectPtr conn, remote_nonnull_fs_pool fspool);
+static virFsItemPtr get_nonnull_fs_item(virConnectPtr conn, remote_nonnull_fs_item 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);
@@ -151,6 +153,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_fs_pool(remote_nonnull_fs_pool *fspool_dst, virFsPoolPtr fspool_src);
+static void make_nonnull_fs_item(remote_nonnull_fs_item *item_dst, virFsItemPtr item_src);
 static void make_nonnull_secret(remote_nonnull_secret *secret_dst, virSecretPtr secret_src);
 static void make_nonnull_nwfilter(remote_nonnull_nwfilter *nwfilter_dst, virNWFilterPtr nwfilter_src);
 static void make_nonnull_domain_snapshot(remote_nonnull_domain_snapshot *snapshot_dst, virDomainSnapshotPtr snapshot_src);
@@ -7379,7 +7383,7 @@ remoteDomainGetFSInfo(virDomainPtr dom,
 
     if (ret.info.info_len > REMOTE_DOMAIN_FSINFO_MAX) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
-                       _("Too many mountpoints in fsinfo: %d for limit %d"),
+                       _("Too many mountpoints in = remoteFsinfo: %d for limit %d"),
                        ret.info.info_len, REMOTE_DOMAIN_FSINFO_MAX);
         goto cleanup;
     }
@@ -7689,6 +7693,19 @@ get_nonnull_storage_vol(virConnectPtr conn, remote_nonnull_storage_vol vol)
                             NULL, NULL);
 }
 
+static virFsPoolPtr
+get_nonnull_fs_pool(virConnectPtr conn, remote_nonnull_fs_pool fspool)
+{
+    return virGetFsPool(conn, fspool.name, BAD_CAST fspool.uuid,
+                        NULL, NULL);
+}
+
+static virFsItemPtr
+get_nonnull_fs_item(virConnectPtr conn, remote_nonnull_fs_item 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)
 {
@@ -7754,6 +7771,21 @@ make_nonnull_storage_vol(remote_nonnull_storage_vol *vol_dst, virStorageVolPtr v
 }
 
 static void
+make_nonnull_fs_pool(remote_nonnull_fs_pool *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_fs_item(remote_nonnull_fs_item *item_dst, virFsItemPtr item_src)
+{
+    item_dst->fspool = item_src->fspool;
+    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);
@@ -8136,6 +8168,43 @@ static virNWFilterDriver nwfilter_driver = {
     .connectListAllNWFilters     = remoteConnectListAllNWFilters, /* 0.10.2 */
 };
 
+static virFsDriver fs_driver = {
+    .connectNumOfFsPools = remoteConnectNumOfFsPools,
+    .connectListFsPools = remoteConnectListFsPools,
+    .connectNumOfDefinedFsPools = remoteConnectNumOfDefinedFsPools,
+    .connectListDefinedFsPools = remoteConnectListDefinedFsPools,
+    .connectListAllFsPools = remoteConnectListAllFsPools,
+    .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,
+};
+
 static virConnectDriver connect_driver = {
     .hypervisorDriver = &hypervisor_driver,
     .interfaceDriver = &interface_driver,
@@ -8144,6 +8213,7 @@ static virConnectDriver connect_driver = {
     .nwfilterDriver = &nwfilter_driver,
     .secretDriver = &secret_driver,
     .storageDriver = &storage_driver,
+    .fsDriver = &fs_driver,
 };
 
 static virStateDriver state_driver = {
diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
index 4403714..77abf5f 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_FS_POOL_LIST_MAX = 4096;
+
+/* Upper limit on lists of fsitems. */
+const REMOTE_FS_ITEM_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_fs_pool {
+    remote_nonnull_string name;
+    remote_uuid uuid;
+};
+
+/* A fsitem which may not be NULL. */
+struct remote_nonnull_fs_item {
+    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_fs_pool *remote_fs_pool;
+typedef remote_nonnull_fs_item *remote_fs_item;
 typedef remote_nonnull_node_device *remote_node_device;
 
 /* Error message. See <virterror.h> for explanation of fields. */
@@ -1955,6 +1976,230 @@ struct remote_storage_vol_resize_args {
     unsigned int flags;
 };
 
+/* Fs pool calls: */
+
+struct remote_connect_num_of_fs_pools_ret {
+    int num;
+};
+
+struct remote_connect_list_fs_pools_args {
+    int maxnames;
+};
+
+struct remote_connect_list_fs_pools_ret {
+    remote_nonnull_string names<REMOTE_FS_POOL_LIST_MAX>; /* insert at 1 */
+};
+
+struct remote_connect_num_of_defined_fs_pools_ret {
+    int num;
+};
+
+struct remote_connect_list_defined_fs_pools_args {
+    int maxnames;
+};
+
+struct remote_connect_list_defined_fs_pools_ret {
+    remote_nonnull_string names<REMOTE_FS_POOL_LIST_MAX>; /* insert at 1 */
+};
+
+struct remote_fs_pool_lookup_by_uuid_args {
+    remote_uuid uuid;
+};
+
+struct remote_fs_pool_lookup_by_uuid_ret {
+    remote_nonnull_fs_pool pool;
+};
+
+struct remote_fs_pool_lookup_by_name_args {
+    remote_nonnull_string name;
+};
+
+struct remote_fs_pool_lookup_by_name_ret {
+    remote_nonnull_fs_pool fspool;
+};
+
+struct remote_fs_pool_lookup_by_item_args {
+    remote_nonnull_fs_item item;
+};
+
+struct remote_fs_pool_lookup_by_item_ret {
+    remote_nonnull_fs_pool fspool;
+};
+
+struct remote_fs_pool_create_xml_args {
+    remote_nonnull_string xml;
+    unsigned int flags;
+};
+
+struct remote_fs_pool_create_xml_ret {
+    remote_nonnull_fs_pool fspool;
+};
+
+struct remote_fs_pool_define_xml_args {
+    remote_nonnull_string xml;
+    unsigned int flags;
+};
+
+struct remote_fs_pool_define_xml_ret {
+    remote_nonnull_fs_pool fspool;
+};
+
+struct remote_fs_pool_build_args {
+    remote_nonnull_fs_pool fspool;
+    unsigned int flags;
+};
+
+struct remote_fs_pool_undefine_args {
+    remote_nonnull_fs_pool fspool;
+};
+
+struct remote_fs_pool_create_args {
+    remote_nonnull_fs_pool fspool;
+    unsigned int flags;
+};
+
+struct remote_fs_pool_destroy_args {
+    remote_nonnull_fs_pool fspool;
+};
+struct remote_fs_pool_delete_args {
+    remote_nonnull_fs_pool fspool;
+    unsigned int flags;
+};
+
+struct remote_fs_pool_get_xml_desc_args {
+    remote_nonnull_fs_pool fspool;
+    unsigned int flags;
+};
+
+struct remote_fs_pool_get_xml_desc_ret {
+    remote_nonnull_string xml;
+};
+
+struct remote_fs_pool_get_info_args {
+    remote_nonnull_fs_pool fspool;
+};
+
+struct remote_fs_pool_get_info_ret { /* insert at 1 */
+    unsigned char state;
+    unsigned hyper capacity;
+    unsigned hyper allocation;
+    unsigned hyper available;
+};
+
+struct remote_fs_pool_get_autostart_args {
+    remote_nonnull_fs_pool fspool;
+};
+
+struct remote_fs_pool_get_autostart_ret {
+    int autostart;
+};
+
+struct remote_fs_pool_set_autostart_args {
+    remote_nonnull_fs_pool fspool;
+    int autostart;
+};
+
+struct remote_fs_pool_num_of_items_args {
+    remote_nonnull_fs_pool fspool;
+};
+
+struct remote_fs_pool_num_of_items_ret {
+    int num;
+};
+
+struct remote_fs_pool_list_items_args {
+    remote_nonnull_fs_pool fspool;
+    int maxnames;
+};
+
+struct remote_fs_pool_list_items_ret {
+    remote_nonnull_string names<REMOTE_FS_ITEM_LIST_MAX>; /* insert at 1 */
+};
+struct remote_fs_pool_refresh_args {
+    remote_nonnull_fs_pool fspool;
+    unsigned int flags;
+};
+
+/* Fs item calls: */
+
+struct remote_fs_item_lookup_by_name_args {
+    remote_nonnull_fs_pool fspool;
+    remote_nonnull_string name;
+};
+
+struct remote_fs_item_lookup_by_name_ret {
+    remote_nonnull_fs_item item;
+};
+
+struct remote_fs_item_lookup_by_key_args {
+    remote_nonnull_string key;
+};
+
+struct remote_fs_item_lookup_by_key_ret {
+    remote_nonnull_fs_item item;
+};
+
+struct remote_fs_item_lookup_by_path_args {
+    remote_nonnull_string path;
+};
+
+struct remote_fs_item_lookup_by_path_ret {
+    remote_nonnull_fs_item item;
+};
+
+struct remote_fs_item_create_xml_args {
+    remote_nonnull_fs_pool fspool;
+    remote_nonnull_string xml;
+    unsigned int flags;
+};
+
+struct remote_fs_item_create_xml_ret {
+    remote_nonnull_fs_item item;
+};
+
+struct remote_fs_item_create_xml_from_args {
+    remote_nonnull_fs_pool fspool;
+    remote_nonnull_string xml;
+    remote_nonnull_fs_item cloneitem;
+    unsigned int flags;
+};
+
+struct remote_fs_item_create_xml_from_ret {
+    remote_nonnull_fs_item item;
+};
+
+struct remote_fs_item_delete_args {
+    remote_nonnull_fs_item item;
+    unsigned int flags;
+};
+
+struct remote_fs_item_get_xml_desc_args {
+    remote_nonnull_fs_item item;
+    unsigned int flags;
+};
+
+struct remote_fs_item_get_xml_desc_ret {
+    remote_nonnull_string xml;
+};
+
+struct remote_fs_item_get_info_args {
+    remote_nonnull_fs_item item;
+};
+
+struct remote_fs_item_get_info_ret { /* insert at 1 */
+    char type;
+    unsigned hyper capacity;
+    unsigned hyper allocation;
+};
+
+struct remote_fs_item_get_path_args {
+    remote_nonnull_fs_item item;
+};
+
+struct remote_fs_item_get_path_ret {
+    remote_nonnull_string name;
+};
+
 /* Node driver calls: */
 
 struct remote_node_num_of_devices_args {
@@ -2244,7 +2489,21 @@ struct remote_storage_pool_is_persistent_ret {
     int persistent;
 };
 
+struct remote_fs_pool_is_active_args {
+    remote_nonnull_fs_pool fspool;
+};
 
+struct remote_fs_pool_is_active_ret {
+    int active;
+};
+
+struct remote_fs_pool_is_persistent_args {
+    remote_nonnull_fs_pool fspool;
+};
+
+struct remote_fs_pool_is_persistent_ret {
+    int persistent;
+};
 struct remote_interface_is_active_args {
     remote_nonnull_interface iface;
 };
@@ -2874,6 +3133,27 @@ struct remote_storage_pool_list_all_volumes_ret { /* insert at 1 */
     unsigned int ret;
 };
 
+struct remote_connect_list_all_fs_pools_args {
+    int need_results;
+    unsigned int flags;
+};
+
+struct remote_connect_list_all_fs_pools_ret { /* insert at 1 */
+    remote_nonnull_fs_pool fspools<REMOTE_FS_POOL_LIST_MAX>;
+    unsigned int ret;
+};
+
+struct remote_fs_pool_list_all_items_args {
+    remote_nonnull_fs_pool fspool;
+    int need_results;
+    unsigned int flags;
+};
+
+struct remote_fs_pool_list_all_items_ret { /* insert at 1 */
+    remote_nonnull_fs_item items<REMOTE_FS_ITEM_LIST_MAX>;
+    unsigned int ret;
+};
+
 struct remote_connect_list_all_networks_args {
     int need_results;
     unsigned int flags;
@@ -5882,5 +6162,245 @@ enum remote_procedure {
      * @generate: both
      * @acl: none
      */
-    REMOTE_PROC_STORAGE_POOL_EVENT_REFRESH = 373
+    REMOTE_PROC_STORAGE_POOL_EVENT_REFRESH = 373,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: connect:search_fs_pools
+     * @aclfilter: fs_pool:getattr
+     */
+    REMOTE_PROC_CONNECT_NUM_OF_FS_POOLS = 374,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: connect:search_fs_pools
+     * @aclfilter: fs_pool:getattr
+     */
+    REMOTE_PROC_CONNECT_LIST_FS_POOLS = 375,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: connect:search_fs_pools
+     * @aclfilter: fs_pool:getattr
+     */
+    REMOTE_PROC_CONNECT_NUM_OF_DEFINED_FS_POOLS = 376,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: connect:search_fs_pools
+     * @aclfilter: fs_pool:getattr
+     */
+    REMOTE_PROC_CONNECT_LIST_DEFINED_FS_POOLS = 377,
+
+    /**
+     * @generate: both
+     * @acl: fs_pool:start
+     * @acl: fs_pool:write
+     */
+    REMOTE_PROC_FS_POOL_CREATE_XML = 378,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_pool:write
+     * @acl: fs_pool:save
+     */
+    REMOTE_PROC_FS_POOL_DEFINE_XML = 379,
+
+    /**
+     * @generate: both
+     * @acl: fs_pool:format
+     */
+    REMOTE_PROC_FS_POOL_BUILD = 380,
+
+    /**
+     * @generate: both
+     * @acl: fs_pool:format
+     */
+    REMOTE_PROC_FS_POOL_DELETE = 381,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_pool:delete
+     */
+    REMOTE_PROC_FS_POOL_UNDEFINE = 382,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_pool:getattr
+     */
+    REMOTE_PROC_FS_POOL_LOOKUP_BY_NAME = 383,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_pool:getattr
+     */
+    REMOTE_PROC_FS_POOL_LOOKUP_BY_UUID = 384,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_pool:getattr
+     */
+    REMOTE_PROC_FS_POOL_LOOKUP_BY_ITEM = 385,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_pool:read
+     */
+    REMOTE_PROC_FS_POOL_GET_INFO = 386,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_pool:read
+     */
+    REMOTE_PROC_FS_POOL_GET_XML_DESC = 387,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_pool:search_items
+     * @aclfilter: fs_item:getattr
+     */
+    REMOTE_PROC_FS_POOL_NUM_OF_ITEMS = 388,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_pool:search_items
+     * @aclfilter: fs_item:getattr
+     */
+    REMOTE_PROC_FS_POOL_LIST_ITEMS = 389,
+
+    /**
+     * @generate: both
+     * @acl: fs_item:create
+     */
+    REMOTE_PROC_FS_ITEM_CREATE_XML = 390,
+
+    /**
+     * @generate: both
+     * @acl: fs_item:delete
+     */
+    REMOTE_PROC_FS_ITEM_DELETE = 391,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_item:getattr
+     */
+    REMOTE_PROC_FS_ITEM_LOOKUP_BY_NAME = 392,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_item:getattr
+     */
+    REMOTE_PROC_FS_ITEM_LOOKUP_BY_KEY = 393,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_item:getattr
+     */
+    REMOTE_PROC_FS_ITEM_LOOKUP_BY_PATH = 394,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_item:read
+     */
+    REMOTE_PROC_FS_ITEM_GET_INFO = 395,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_item:read
+     */
+    REMOTE_PROC_FS_ITEM_GET_XML_DESC = 396,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_item:read
+     */
+    REMOTE_PROC_FS_ITEM_GET_PATH = 397,
+
+    /**
+     * @generate: both
+     * @acl: fs_item:create
+     */
+    REMOTE_PROC_FS_ITEM_CREATE_XML_FROM = 398,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: connect:search_fs_pools
+     * @aclfilter: fs_pool:getattr
+     */
+    REMOTE_PROC_CONNECT_LIST_ALL_FS_POOLS = 499,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_pool:search_items
+     * @aclfilter: fs_item:getattr
+     */
+    REMOTE_PROC_FS_POOL_LIST_ALL_ITEMS = 400,
+
+    /**
+     * @generate: both
+     * @acl: fs_pool:refresh
+     */
+    REMOTE_PROC_FS_POOL_REFRESH = 401,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_pool:read
+     */
+    REMOTE_PROC_FS_POOL_IS_ACTIVE = 402,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_pool:read
+     */
+    REMOTE_PROC_FS_POOL_IS_PERSISTENT = 403,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_pool:read
+     */
+    REMOTE_PROC_FS_POOL_GET_AUTOSTART = 404,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_pool:write
+     */
+    REMOTE_PROC_FS_POOL_SET_AUTOSTART = 405,
+
+    /**
+     * @generate: both
+     * @acl: fs_pool:start
+     */
+    REMOTE_PROC_FS_POOL_CREATE = 406,
+
+    /**
+     * @generate: both
+     * @priority: high
+     * @acl: fs_pool:stop
+     */
+    REMOTE_PROC_FS_POOL_DESTROY = 407
 };
diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl
index 173189c..171684b 100755
--- a/src/rpc/gendispatch.pl
+++ b/src/rpc/gendispatch.pl
@@ -500,7 +500,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|fs_pool|fs_item) (\S+);/) {
                     my $type_name = name_to_TypeName($1);
 
                     push(@vars_list, "vir${type_name}Ptr $2 = NULL");
@@ -665,7 +665,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|fs_pool|fs_item) (\S+)<(\S+)>;/) {
                         $modern_ret_struct_name = $1;
                         $single_ret_list_error_msg_type = $1;
                         $single_ret_list_name = $2;
@@ -723,7 +723,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|fs_pool|fs_item) (\S+);/) {
                     my $type_name = name_to_TypeName($1);
 
                     if ($call->{ProcName} eq "DomainCreateWithFlags") {
@@ -1268,7 +1268,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|fs_pool|fs_item) (\S+);/) {
                     my $name = $1;
                     my $arg_name = $2;
                     my $type_name = name_to_TypeName($name);
@@ -1461,7 +1461,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|fs_pool|fs_item) (\S+)<(\S+)>;/) {
                         my $proc_name = name_to_TypeName($1);
 
                         if ($structprefix eq "admin") {
@@ -1513,7 +1513,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|fs_pool|fs_item) (\S+);/) {
                     my $name = $1;
                     my $arg_name = $2;
                     my $type_name = name_to_TypeName($name);
@@ -1968,7 +1968,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";
@@ -2065,6 +2066,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 +2097,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