diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in index 4addc62b6f..4237b7b2ce 100644 --- a/include/libvirt/libvirt.h.in +++ b/include/libvirt/libvirt.h.in @@ -733,6 +733,42 @@ int virDomainBlockPeek (virDomainPtr dom, void *buffer, unsigned int flags); + +/** virDomainBlockInfo: + * + * This struct provides information about the size of a block device backing store + * + * Examples: + * + * - Fully allocated raw file in filesystem: + * * capacity, allocation, physical: All the same + * + * - Sparse raw file in filesystem: + * * capacity: logical size of the file + * * allocation, physical: number of blocks allocated to file + * + * - qcow2 file in filesystem + * * capacity: logical size from qcow2 header + * * allocation, physical: logical size of the file / highest qcow extent (identical) + * + * - qcow2 file in a block device + * * capacity: logical size from qcow2 header + * * allocation: highest qcow extent written + * * physical: size of the block device container + */ +typedef struct _virDomainBlockInfo virDomainBlockInfo; +typedef virDomainBlockInfo *virDomainBlockInfoPtr; +struct _virDomainBlockInfo { + unsigned long long capacity; /* logical size in bytes of the block device backing image */ + unsigned long long allocation; /* highest allocated extent in bytes of the block device backing image */ + unsigned long long physical; /* physical size in bytes of the container of the backing image */ +}; + +int virDomainGetBlockInfo(virDomainPtr dom, + const char *path, + virDomainBlockInfoPtr info, + unsigned int flags); + /* Memory peeking flags. */ typedef enum { VIR_MEMORY_VIRTUAL = 1, /* addresses are virtual addresses */