/* * storage_source_conf.h: file utility functions for FS storage backend * * Copyright (C) 2007-2009, 2012-2016 Red Hat, Inc. * Copyright (C) 2007-2008 Daniel P. Berrange * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see * . */ #pragma once #include "storage_encryption_conf.h" #include "virbitmap.h" #include "virconftypes.h" #include "virenum.h" #include "virobject.h" #include "virpci.h" #include "virseclabel.h" #include "virsecret.h" /* Types of disk backends (host resource). Comparable to the public * virStorageVolType, except we have an undetermined state, don't have * a netdir type, and add a volume type for reference through a * storage pool. */ typedef enum { VIR_STORAGE_TYPE_NONE, VIR_STORAGE_TYPE_FILE, VIR_STORAGE_TYPE_BLOCK, VIR_STORAGE_TYPE_DIR, VIR_STORAGE_TYPE_NETWORK, VIR_STORAGE_TYPE_VOLUME, VIR_STORAGE_TYPE_NVME, VIR_STORAGE_TYPE_VHOST_USER, VIR_STORAGE_TYPE_LAST } virStorageType; VIR_ENUM_DECL(virStorage); typedef enum { VIR_STORAGE_FILE_AUTO_SAFE = -2, VIR_STORAGE_FILE_AUTO = -1, VIR_STORAGE_FILE_NONE = 0, VIR_STORAGE_FILE_RAW, VIR_STORAGE_FILE_DIR, VIR_STORAGE_FILE_BOCHS, VIR_STORAGE_FILE_CLOOP, VIR_STORAGE_FILE_DMG, VIR_STORAGE_FILE_ISO, VIR_STORAGE_FILE_VPC, VIR_STORAGE_FILE_VDI, /* Not direct file formats, but used for various drivers */ VIR_STORAGE_FILE_FAT, VIR_STORAGE_FILE_VHD, VIR_STORAGE_FILE_PLOOP, /* Not a format, but a marker: all formats below this point have * libvirt support for following a backing chain */ VIR_STORAGE_FILE_BACKING, VIR_STORAGE_FILE_COW = VIR_STORAGE_FILE_BACKING, VIR_STORAGE_FILE_QCOW, VIR_STORAGE_FILE_QCOW2, VIR_STORAGE_FILE_QED, VIR_STORAGE_FILE_VMDK, VIR_STORAGE_FILE_LAST, } virStorageFileFormat; VIR_ENUM_DECL(virStorageFileFormat); typedef enum { VIR_STORAGE_FILE_FEATURE_LAZY_REFCOUNTS = 0, VIR_STORAGE_FILE_FEATURE_LAST } virStorageFileFeature; VIR_ENUM_DECL(virStorageFileFeature); typedef struct _virStoragePerms virStoragePerms; struct _virStoragePerms { mode_t mode; uid_t uid; gid_t gid; char *label; }; typedef struct _virStorageTimestamps virStorageTimestamps; struct _virStorageTimestamps { struct timespec atime; struct timespec btime; /* birth time unknown if btime.tv_nsec == -1 */ struct timespec ctime; struct timespec mtime; }; /* Information related to network storage */ typedef enum { VIR_STORAGE_NET_PROTOCOL_NONE, VIR_STORAGE_NET_PROTOCOL_NBD, VIR_STORAGE_NET_PROTOCOL_RBD, VIR_STORAGE_NET_PROTOCOL_SHEEPDOG, VIR_STORAGE_NET_PROTOCOL_GLUSTER, VIR_STORAGE_NET_PROTOCOL_ISCSI, VIR_STORAGE_NET_PROTOCOL_HTTP, VIR_STORAGE_NET_PROTOCOL_HTTPS, VIR_STORAGE_NET_PROTOCOL_FTP, VIR_STORAGE_NET_PROTOCOL_FTPS, VIR_STORAGE_NET_PROTOCOL_TFTP, VIR_STORAGE_NET_PROTOCOL_SSH, VIR_STORAGE_NET_PROTOCOL_VXHS, VIR_STORAGE_NET_PROTOCOL_NFS, VIR_STORAGE_NET_PROTOCOL_LAST } virStorageNetProtocol; VIR_ENUM_DECL(virStorageNetProtocol); typedef enum { VIR_STORAGE_NET_HOST_TRANS_TCP, VIR_STORAGE_NET_HOST_TRANS_UNIX, VIR_STORAGE_NET_HOST_TRANS_RDMA, VIR_STORAGE_NET_HOST_TRANS_LAST } virStorageNetHostTransport; VIR_ENUM_DECL(virStorageNetHostTransport); typedef struct _virStorageNetHostDef virStorageNetHostDef; struct _virStorageNetHostDef { char *name; unsigned int port; int transport; /* virStorageNetHostTransport */ char *socket; /* path to unix socket */ }; typedef struct _virStorageNetCookieDef virStorageNetCookieDef; struct _virStorageNetCookieDef { char *name; char *value; }; void virStorageNetCookieDefFree(virStorageNetCookieDef *def); G_DEFINE_AUTOPTR_CLEANUP_FUNC(virStorageNetCookieDef, virStorageNetCookieDefFree); /* Information for a storage volume from a virStoragePool */ /* * Used for volume "type" disk to indicate how to represent * the disk source if the specified "pool" is of iscsi type. */ typedef enum { VIR_STORAGE_SOURCE_POOL_MODE_DEFAULT = 0, /* Use the path as it shows up on host, e.g. * /dev/disk/by-path/ip-$ip-iscsi-$iqn:iscsi.iscsi-pool0-lun-1 */ VIR_STORAGE_SOURCE_POOL_MODE_HOST, /* Use the URI from the storage pool source element host attribute. E.g. * file=iscsi://demo.org:6000/iqn.1992-01.com.example/1. */ VIR_STORAGE_SOURCE_POOL_MODE_DIRECT, VIR_STORAGE_SOURCE_POOL_MODE_LAST } virStorageSourcePoolMode; VIR_ENUM_DECL(virStorageSourcePoolMode); typedef struct _virStorageSourcePoolDef virStorageSourcePoolDef; struct _virStorageSourcePoolDef { char *pool; /* pool name */ char *volume; /* volume name */ int voltype; /* virStorageVolType, internal only */ int pooltype; /* virStoragePoolType from storage_conf.h, internal only */ int actualtype; /* virStorageType, internal only */ int mode; /* virStorageSourcePoolMode, currently makes sense only for iscsi pool */ }; typedef enum { VIR_STORAGE_AUTH_TYPE_NONE, VIR_STORAGE_AUTH_TYPE_CHAP, VIR_STORAGE_AUTH_TYPE_CEPHX, VIR_STORAGE_AUTH_TYPE_LAST, } virStorageAuthType; VIR_ENUM_DECL(virStorageAuth); typedef struct _virStorageAuthDef virStorageAuthDef; struct _virStorageAuthDef { char *username; char *secrettype; /*