storage_util.h 7.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
/*
 * storage_util.h: utility functions for storage driver
 *
 * 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
 * <http://www.gnu.org/licenses/>.
 */

#ifndef __VIR_STORAGE_UTIL_H__
# define __VIR_STORAGE_UTIL_H__

# include <sys/stat.h>

# include "internal.h"
# include "vircommand.h"
# include "storage_driver.h"
# include "storage_backend.h"

/* File creation/cloning functions used for cloning between backends */
30 31

int
32
virStorageBackendCreateVolUsingQemuImg(virStoragePoolObjPtr pool,
33 34 35 36
                                       virStorageVolDefPtr vol,
                                       virStorageVolDefPtr inputvol,
                                       unsigned int flags);

37 38 39 40
virStorageBackendBuildVolFrom
virStorageBackendGetBuildVolFromFunction(virStorageVolDefPtr vol,
                                         virStorageVolDefPtr inputvol);

41
int virStorageBackendVolCreateLocal(virStoragePoolObjPtr pool,
42
                                    virStorageVolDefPtr vol);
43

44
int virStorageBackendVolBuildLocal(virStoragePoolObjPtr pool,
45 46 47
                                   virStorageVolDefPtr vol,
                                   unsigned int flags);

48
int virStorageBackendVolBuildFromLocal(virStoragePoolObjPtr pool,
49 50 51 52
                                       virStorageVolDefPtr vol,
                                       virStorageVolDefPtr inputvol,
                                       unsigned int flags);

53
int virStorageBackendVolDeleteLocal(virStoragePoolObjPtr pool,
54 55
                                    virStorageVolDefPtr vol,
                                    unsigned int flags);
56

57
int virStorageBackendVolRefreshLocal(virStoragePoolObjPtr pool,
58
                                     virStorageVolDefPtr vol);
59

60
int virStorageBackendVolResizeLocal(virStoragePoolObjPtr pool,
61 62 63
                                    virStorageVolDefPtr vol,
                                    unsigned long long capacity,
                                    unsigned int flags);
64

65
int virStorageBackendVolUploadLocal(virStoragePoolObjPtr pool,
66 67 68 69 70
                                    virStorageVolDefPtr vol,
                                    virStreamPtr stream,
                                    unsigned long long offset,
                                    unsigned long long len,
                                    unsigned int flags);
71

72
int virStorageBackendVolDownloadLocal(virStoragePoolObjPtr pool,
73 74 75 76 77 78
                                      virStorageVolDefPtr vol,
                                      virStreamPtr stream,
                                      unsigned long long offset,
                                      unsigned long long len,
                                      unsigned int flags);

79
int virStorageBackendVolWipeLocal(virStoragePoolObjPtr pool,
80 81 82 83
                                  virStorageVolDefPtr vol,
                                  unsigned int algorithm,
                                  unsigned int flags);

84 85 86
/* Local/Common Storage Pool Backend APIs */
int virStorageBackendBuildLocal(virStoragePoolObjPtr pool);

87
int virStorageBackendDeleteLocal(virStoragePoolObjPtr pool,
88 89
                                 unsigned int flags);

90 91 92
int
virStorageBackendRefreshVolTargetUpdate(virStorageVolDefPtr vol);

93
int virStorageBackendRefreshLocal(virStoragePoolObjPtr pool);
94

95 96 97 98
int virStorageUtilGlusterExtractPoolSources(const char *host,
                                            const char *xml,
                                            virStoragePoolSourceListPtr list,
                                            virStoragePoolType pooltype);
99
int virStorageBackendFindGlusterPoolSources(const char *host,
100
                                            virStoragePoolType pooltype,
101 102 103
                                            virStoragePoolSourceListPtr list,
                                            bool report);

104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
bool virStorageBackendDeviceIsEmpty(const char *devpath,
                                    const char *format,
                                    bool writelabel);

/* VolOpenCheckMode flags */
enum {
    VIR_STORAGE_VOL_OPEN_NOERROR = 1 << 0, /* don't error if unexpected type
                                            * encountered, just warn */
    VIR_STORAGE_VOL_OPEN_REG     = 1 << 1, /* regular files okay */
    VIR_STORAGE_VOL_OPEN_BLOCK   = 1 << 2, /* block files okay */
    VIR_STORAGE_VOL_OPEN_CHAR    = 1 << 3, /* char files okay */
    VIR_STORAGE_VOL_OPEN_DIR     = 1 << 4, /* directories okay */
};

/* VolReadErrorMode flags
 * If flag is present, then operation won't cause fatal error for
 * specified operation, rather a VIR_WARN will be issued and a -2 returned
 * for function call
 */
enum {
    VIR_STORAGE_VOL_READ_NOERROR    = 1 << 0, /* ignore *read errors */
};

# define VIR_STORAGE_VOL_OPEN_DEFAULT (VIR_STORAGE_VOL_OPEN_REG      |\
                                       VIR_STORAGE_VOL_OPEN_BLOCK)

130 131 132 133 134
# define VIR_STORAGE_VOL_FS_OPEN_FLAGS    (VIR_STORAGE_VOL_OPEN_DEFAULT | \
                                           VIR_STORAGE_VOL_OPEN_DIR)
# define VIR_STORAGE_VOL_FS_PROBE_FLAGS   (VIR_STORAGE_VOL_FS_OPEN_FLAGS | \
                                           VIR_STORAGE_VOL_OPEN_NOERROR)

135 136 137 138 139
int virStorageBackendVolOpen(const char *path, struct stat *sb,
                             unsigned int flags)
    ATTRIBUTE_RETURN_CHECK
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);

140
# define VIR_STORAGE_DEFAULT_POOL_PERM_MODE 0711
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
# define VIR_STORAGE_DEFAULT_VOL_PERM_MODE  0600

int virStorageBackendUpdateVolInfo(virStorageVolDefPtr vol,
                                   bool withBlockVolFormat,
                                   unsigned int openflags,
                                   unsigned int readflags);
int virStorageBackendUpdateVolTargetInfoFD(virStorageSourcePtr target,
                                           int fd,
                                           struct stat *sb);

bool virStorageBackendPoolPathIsStable(const char *path);
char *virStorageBackendStablePath(virStoragePoolObjPtr pool,
                                  const char *devpath,
                                  bool loop);

156 157 158 159 160 161 162
typedef enum {
    VIR_STORAGE_VOL_ENCRYPT_NONE = 0,
    VIR_STORAGE_VOL_ENCRYPT_CREATE,
    VIR_STORAGE_VOL_ENCRYPT_CONVERT,
    VIR_STORAGE_VOL_ENCRYPT_DONE,
} virStorageVolEncryptConvertStep;

163
virCommandPtr
164
virStorageBackendCreateQemuImgCmdFromVol(virStoragePoolObjPtr pool,
165 166 167 168
                                         virStorageVolDefPtr vol,
                                         virStorageVolDefPtr inputvol,
                                         unsigned int flags,
                                         const char *create_tool,
169
                                         const char *secretPath,
170
                                         const char *inputSecretPath,
171
                                         virStorageVolEncryptConvertStep convertStep);
172

173 174 175
int virStorageBackendSCSIFindLUs(virStoragePoolObjPtr pool,
                                 uint32_t scanhost);

176 177 178 179
int
virStorageBackendZeroPartitionTable(const char *path,
                                    unsigned long long size);

180 181 182
char *
virStorageBackendFileSystemGetPoolSource(virStoragePoolObjPtr pool);

183 184 185 186
virCommandPtr
virStorageBackendFileSystemMountCmd(virStoragePoolDefPtr def,
                                    const char *src);

187
#endif /* __VIR_STORAGE_UTIL_H__ */