+ size_t virt_size;
+ struct QBlockOptionLoc backing_loc;
+ enum QBlockFormat backing_fmt;
+ size_t cluster_size; /* unit is bytes */
+ size_t table_size; /* unit is clusters */
+};
+
+struct QBlockOption_fmt_qcow {
+ size_t virt_size;
+ struct QBlockOptionLoc backing_loc;
+ bool encrypt;
+};
+
+/* "Compatibility level (0.10 or 1.1)" */
+enum QBlockOption_fmt_qcow2_cpt {
+ QBO_FMT_QCOW2_CPT_NONE = 0,
+ QBO_FMT_QCOW2_CPT_V010,
+ QBO_FMT_QCOW2_CPT_V110,
+};
+
+/* off or metadata */
+enum QBlockOption_fmt_qcow2_prealloc {
+ QBO_FMT_QCOW2_PREALLOC_NONE = 0,
+ QBO_FMT_QCOW2_PREALLOC_OFF,
+ QBO_FMT_QCOW2_PREALLOC_METADATA,
+};
+
+struct QBlockOption_fmt_qcow2 {
+ size_t virt_size;
+ struct QBlockOptionLoc backing_loc;
+ enum QBlockFormat backing_fmt;
+ bool encrypt;
+ size_t cluster_size; /* unit is bytes */
+ enum QBlockOption_fmt_qcow2_cpt cpt_lv;
+ enum QBlockOption_fmt_qcow2_prealloc pre_mode;
+};
+
+struct QBlockOption_fmt_raw {
+ size_t virt_size;
+};
+
+struct QBlockOption_fmt_rbd {
+ size_t virt_size;
+ size_t cluster_size;
+};
+
+/* off or full */
+enum QBlockOption_fmt_sheepdog_prealloc {
+ QBO_FMT_SD_PREALLOC_NONE = 0,
+ QBO_FMT_SD_PREALLOC_OFF,
+ QBO_FMT_SD_PREALLOC_FULL,
+};
+
+struct QBlockOption_fmt_sheepdog {
+ size_t virt_size;
+ struct QBlockOptionLoc backing_loc;
+ enum QBlockOption_fmt_sheepdog_prealloc pre_mode;
+};
+
+enum QBlockOption_fmt_vdi_prealloc {
+ QBO_FMT_VDI_PREALLOC_NONE = 0,
+ QBO_FMT_VDI_PREALLOC_FALSE,
+ QBO_FMT_VDI_PREALLOC_TRUE,
+};
+
+struct QBlockOption_fmt_vdi {
+ size_t virt_size;
+ size_t cluster_size;
+ enum QBlockOption_fmt_vdi_prealloc pre_mode;
+};
+
+/* whether compact to vmdk verion 6 */
+enum QBlockOption_fmt_vmdk_cpt {
+ QBO_FMT_VMDK_CPT_NONE = 0,
+ QBO_FMT_VMDK_CPT_VMDKV6_FALSE,
+ QBO_FMT_VMDK_CPT_VMDKV6_TRUE,
+};
+
+/* vmdk flat extent format, values:
+"{monolithicSparse (default) | monolithicFlat | twoGbMaxExtentSparse |
+twoGbMaxExtentFlat | streamOptimized} */
+enum QBlockOption_fmt_vmdk_subfmt {
+ QBO_FMT_VMDK_SUBFMT_MONOLITHIC_NONE = 0,
+ QBO_FMT_VMDK_SUBFMT_MONOLITHIC_SPARSE,
+ QBO_FMT_VMDK_SUBFMT_MONOLITHIC_FLAT,
+ QBO_FMT_VMDK_SUBFMT_TWOGBMAX_EXTENT_SPARSE,
+ QBO_FMT_VMDK_SUBFMT_TWOGBMAX_EXTENT_FLAT,
+ QBO_FMT_VMDK_SUBFMT_STREAM_OPTIMIZED,
+};
+
+struct QBlockOption_fmt_vmdk {
+ size_t virt_size;
+ struct QBlockOptionLoc backing_loc;
+ enum QBlockOption_fmt_vmdk_cpt cpt_lv;
+ enum QBlockOption_fmt_vmdk_subfmt subfmt;
+};
+
+/* "{dynamic (default) | fixed} " */
+enum QBlockOption_fmt_vpc_subfmt {
+ QBO_FMT_VPC_SUBFMT_NONE = 0,
+ QBO_FMT_VPC_SUBFMT_DYNAMIC,
+ QBO_FMT_VPC_SUBFMT_FIXED,
+};
+
+struct QBlockOption_fmt_vpc {
+ size_t virt_size;
+ enum QBlockOption_fmt_vpc_subfmt subfmt;
+};
+
+union QBlockOption_fmt {
+ struct QBlockOption_fmt_cow o_cow;
+ struct QBlockOption_fmt_qed o_qed;
+ struct QBlockOption_fmt_qcow o_qcow;
+ struct QBlockOption_fmt_qcow2 o_qcow2;
+ struct QBlockOption_fmt_raw o_raw;
+ struct QBlockOption_fmt_rbd o_rbd;
+ struct QBlockOption_fmt_sheepdog o_sheepdog;
+ struct QBlockOption_fmt_vdi o_vdi;
+ struct QBlockOption_fmt_vmdk o_vmdk;
+ struct QBlockOption_fmt_vpc o_vpc;
+};
+
+struct QBlockOptionFormat {
+ enum QBlockFormat fmt_type;
+ union QBlockOption_fmt fmt_op;
+ uint8_t reserved[512];
+};
+
+/**
+ * QBlockInfoImageStatic: information about the block image.
+ *
+ * @loc: location info.
+ * @fmt_type: format type.
+ * @virt_size: virtual size in bytes.
+ * @backing_loc: backing file location, its type is QB_PROT_NONE if not exist.
+ * @allocated_size: allocated size in bytes, negative if not available.
+ * @encrypt: encrypt flag.
+ */
+struct QBlockInfoImageStatic {
+ struct QBlockOptionLoc loc;
+ enum QBlockFormat fmt_type;
+ size_t virt_size;
+ /* advance info */
+ struct QBlockOptionLoc backing_loc;
+ size_t allocated_size;
+ bool encrypt;
+};
+#endif
--
1.7.1