On Fri, Aug 19, 2016 at 06:03:29PM +0300, Olga Krishtal wrote: > API follows the API of storage pools closely in parts which > do not differ for filesystems. > > Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@xxxxxxxxxxxxx> > --- > include/libvirt/libvirt-fs.h | 273 +++++++++++++++++++++++++++++++++++++++++++ > include/libvirt/libvirt.h | 1 + > 2 files changed, 274 insertions(+) > create mode 100644 include/libvirt/libvirt-fs.h > > diff --git a/include/libvirt/libvirt-fs.h b/include/libvirt/libvirt-fs.h > new file mode 100644 > index 0000000..4385220 > --- /dev/null > +++ b/include/libvirt/libvirt-fs.h > +typedef enum { > + VIR_FS_POOL_CREATE_NORMAL = 0, > + > + /* Create the fspool and perform fspool build without any flags */ > + VIR_FS_POOL_CREATE_WITH_BUILD = 1 << 0, > + > + /* Create the fspool and perform fspool build using the > + * exclusive to VIR_FS_POOL_CREATE_WITH_BUILD_NO_OVERWRITE */ > + VIR_FS_POOL_CREATE_WITH_BUILD_OVERWRITE = 1 << 1, > + > + /* Create the pool and perform pool build using the > + * VIR_FS_POOL_BUILD_NO_OVERWRITE flag. This is mutually > + * exclusive to VIR_FS_POOL_CREATE_WITH_BUILD_OVERWRITE */ > + VIR_FS_POOL_CREATE_WITH_BUILD_NO_OVERWRITE = 1 << 2, > +} virFsPoolCreateFlags; nitpick, I suggest we use virFSPool, not virFsPool, since 'fs' is an abbreviation and thus normal to capitalize both parts. > + > +typedef enum { > + VIR_FS_POOL_BUILD_NEW = 0, /* Regular build from scratch */ > + VIR_FS_POOL_BUILD_NO_OVERWRITE = (1 << 2), /* Do not overwrite existing pool */ > + VIR_FS_POOL_BUILD_OVERWRITE = (1 << 3), /* Overwrite data */ > +} virFsPoolBuildFlags; > + > +/** > + * virFsPool: > + * > + * a virFsPool is a private structure representing a fspool > + */ > +typedef struct _virFsPool virFsPool; > + > +/** > + * virFsPoolPtr: > + * > + * a virFSPoolPtr is pointer to a virFsPool private structure, this is the > + * type used to reference a fspool in the API. > + */ > +typedef virFsPool *virFsPoolPtr; > + > +typedef enum { > + VIR_FS_POOL_INACTIVE = 0, > + VIR_FS_POOL_BUILDING = 1, > + VIR_FS_POOL_RUNNING = 2, > + > +# ifdef VIR_ENUM_SENTINELS > + VIR_FS_POOL_STATE_LAST > +# endif > +} virFsPoolState; > + > +typedef struct _virFsPoolInfo virFsPoolInfo; > + > +struct _virFsPoolInfo { > + int state; /* virFsPoolState flags */ > + unsigned long long capacity; /* Logical size bytes */ > + unsigned long long allocation; /* Current allocation bytes */ > + unsigned long long available; /* Remaining free space bytes */ > +}; > + > +typedef virFsPoolInfo *virFsPoolInfoPtr; > + > +/** > + * virFsItem: > + * > + * a virFsItem is a private structure representing a fspool item > + */ > +typedef struct _virFsItem virFsItem; > + > +/** > + * virFsItemPtr: > + * > + * a virFsItemPtr is pointer to a virFsItem private structure, this is the > + * type used to reference a fspool item in the API. > + */ > +typedef virFsItem *virFsItemPtr; > + > +typedef struct _virFsItemInfo virFsItemInfo; > + > +typedef enum { > + VIR_FS_ITEM_DIR = 0, > + VIR_FS_ITEM_LAST > +} virFsItemType; > + > +struct _virFsItemInfo { > + int type; /* virFsItemType flags */ > + unsigned long long capacity; /* Logical size bytes */ > + unsigned long long allocation; /* Current allocation bytes */ > +}; > + > +typedef virFsItemInfo *virFsItemInfoPtr; > +/* > + * Get connection from fspool. > + */ > +virConnectPtr virFsPoolGetConnect (virFsPoolPtr fsool); No need to copy the crazy whitespace we have in other headers - a single ' ' between return value and function name, is fine and no space at all between function name and '(' > + > +/* > + * List active fspools > + */ > +int virConnectNumOfFsPools (virConnectPtr conn); > +int virConnectListFsPools (virConnectPtr conn, > + char **const names, > + int maxnames); > + > +/* > + * List inactive fspools > + */ > +int virConnectNumOfDefinedFsPools(virConnectPtr conn); > +int virConnectListDefinedFsPools(virConnectPtr conn, > + char **const names, > + int maxnames); The 4 apis follow our old model for listing objects which we discourage apps from using since they require O(N) API calls and have a designed in race condition. So, I suggest just skip these 4 APis and exclusively rely on the virConnectListAllFsPools API, as we have no need for back compat with old apps for this new stuff. > + > +/* > + * virConnectListAllFsPoolsFlags: > + * > + * Flags used to tune fspools returned by virConnectListAllFsPools(). > + * Note that these flags come in groups; if all bits from a group are 0, > + * then that group is not used to filter results. > + */ > +typedef enum { > + VIR_CONNECT_LIST_FS_POOLS_INACTIVE = 1 << 0, > + VIR_CONNECT_LIST_FS_POOLS_ACTIVE = 1 << 1, > + > + VIR_CONNECT_LIST_FS_POOLS_PERSISTENT = 1 << 2, > + VIR_CONNECT_LIST_FS_POOLS_TRANSIENT = 1 << 3, > + > + VIR_CONNECT_LIST_FS_POOLS_AUTOSTART = 1 << 4, > + VIR_CONNECT_LIST_FS_POOLS_NO_AUTOSTART = 1 << 5, > + > + /* List fspools by type */ > + VIR_CONNECT_LIST_FS_POOLS_DIR = 1 << 6, > +} virConnectListAllFsPoolsFlags; > + > +typedef enum { > + VIR_FS_XML_INACTIVE = (1 << 0), /* dump inactive fspool/item information */ > +} virFsXMLFlags; > + > + > +int virConnectListAllFsPools(virConnectPtr conn, > + virFsPoolPtr **fspools, > + unsigned int flags); > + > +/* > + * Lookup fspool by name or uuid > + */ > +virFsPoolPtr virFsPoolLookupByName (virConnectPtr conn, > + const char *name); > +virFsPoolPtr virFsPoolLookupByUUID (virConnectPtr conn, > + const unsigned char *uuid); > +virFsPoolPtr virFsPoolLookupByUUIDString (virConnectPtr conn, > + const char *uuid); > +virFsPoolPtr virFsPoolLookupByItem (virFsItemPtr item); > + > + > +/* > + * Creating/destroying fspools > + */ > +virFsPoolPtr virFsPoolCreateXML (virConnectPtr conn, > + const char *xmlDesc, > + unsigned int flags); > +virFsPoolPtr virFsPoolDefineXML (virConnectPtr conn, > + const char *xmlDesc, > + unsigned int flags); > +int virFsPoolBuild (virFsPoolPtr fsool, > + unsigned int flags); > +int virFsPoolRefresh (virFsPoolPtr fsool, > + unsigned int flags); > +int virFsPoolUndefine (virFsPoolPtr fsool); > +int virFsPoolCreate (virFsPoolPtr pool, > + unsigned int flags); > +int virFsPoolDestroy (virFsPoolPtr fsool); > +int virFsPoolDelete (virFsPoolPtr fsool, > + unsigned int flags); > +int virFsPoolRefresh (virFsPoolPtr fsool, > + unsigned int flags); > +int virFsPoolRef (virFsPoolPtr fspool); > +int virFsPoolFree (virFsPoolPtr fspool); > + > +/* > + * FsPool information > + */ > +const char* virFsPoolGetName (virFsPoolPtr fsool); > +int virFsPoolGetUUID (virFsPoolPtr fsool, > + unsigned char *uuid); > +int virFsPoolGetUUIDString (virFsPoolPtr fsool, > + char *buf); > + > +int virFsPoolGetInfo (virFsPoolPtr item, > + virFsPoolInfoPtr info); > + > +char * virFsPoolGetXMLDesc (virFsPoolPtr fsool, > + unsigned int flags); > +int virFsPoolGetAutostart (virFsPoolPtr pool, > + int *autostart); > +int virFsPoolSetAutostart (virFsPoolPtr pool, > + int autostart); > + > + > +/* > + * List/lookup fs items within a fsool > + */ > +int virFsPoolNumOfItems (virFsPoolPtr fsool); > +int virFsPoolListItems (virFsPoolPtr fsool, > + char **const names, > + int maxnames); > +int virFsPoolListAllItems (virFsPoolPtr fsool, > + virFsItemPtr **items, > + unsigned int flags); > + > +virConnectPtr virFsItemGetConnect (virFsItemPtr item); > + > +/* > + * Lookup itemumes based on various attributes > + */ > +virFsItemPtr virFsItemLookupByName (virFsPoolPtr fsool, > + const char *name); > +virFsItemPtr virFsItemLookupByKey (virConnectPtr conn, > + const char *key); > +virFsItemPtr virFsItemLookupByPath (virConnectPtr conn, > + const char *path); > + > + > +const char* virFsItemGetName (virFsItemPtr item); > +const char* virFsItemGetKey (virFsItemPtr item); > + > +virFsItemPtr virFsItemCreateXML (virFsPoolPtr fsool, > + const char *xmldesc, > + unsigned int flags); > +virFsItemPtr virFsItemCreateXMLFrom (virFsPoolPtr fsool, > + const char *xmldesc, > + virFsItemPtr cloneitem, > + unsigned int flags); > + > +int virFsItemDelete (virFsItemPtr item, > + unsigned int flags); > +int virFsItemRef (virFsItemPtr item); > +int virFsItemFree (virFsItemPtr item); > + > +int virFsItemGetInfo (virFsItemPtr item, > + virFsItemInfoPtr info); > +char * virFsItemGetXMLDesc (virFsItemPtr item, > + unsigned int flags); > + > +char * virFsItemGetPath (virFsItemPtr item); > + > +int virFsPoolIsActive(virFsPoolPtr fspool); > +int virFsPoolIsPersistent(virFsPoolPtr fspool); All this looks fine to me. Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list