Signed-off-by: Olga Krishtal <okrishtal@xxxxxxxxxxxxx> --- 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@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@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@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@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@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@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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list