storage_backend.h 8.9 KB
Newer Older
1 2 3
/*
 * storage_backend.h: internal storage driver backend contract
 *
4
 * Copyright (C) 2007-2010, 2012-2014 Red Hat, Inc.
5 6 7 8 9 10 11 12 13 14 15 16 17
 * 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
18
 * License along with this library.  If not, see
O
Osier Yang 已提交
19
 * <http://www.gnu.org/licenses/>.
20 21 22 23 24
 *
 * Author: Daniel P. Berrange <berrange@redhat.com>
 */

#ifndef __VIR_STORAGE_BACKEND_H__
25
# define __VIR_STORAGE_BACKEND_H__
26

E
Eric Blake 已提交
27 28
# include <sys/stat.h>

29 30
# include "internal.h"
# include "storage_conf.h"
31
# include "vircommand.h"
32
# include "storage_driver.h"
33

34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
typedef char * (*virStorageBackendFindPoolSources)(virConnectPtr conn,
                                                   const char *srcSpec,
                                                   unsigned int flags);
typedef int (*virStorageBackendCheckPool)(virConnectPtr conn,
                                          virStoragePoolObjPtr pool,
                                          bool *active);
typedef int (*virStorageBackendStartPool)(virConnectPtr conn,
                                          virStoragePoolObjPtr pool);
typedef int (*virStorageBackendBuildPool)(virConnectPtr conn,
                                          virStoragePoolObjPtr pool,
                                          unsigned int flags);
typedef int (*virStorageBackendRefreshPool)(virConnectPtr conn,
                                            virStoragePoolObjPtr pool);
typedef int (*virStorageBackendStopPool)(virConnectPtr conn,
                                         virStoragePoolObjPtr pool);
typedef int (*virStorageBackendDeletePool)(virConnectPtr conn,
                                           virStoragePoolObjPtr pool,
                                           unsigned int flags);
52
typedef int (*virStorageBackendBuildVol)(virConnectPtr conn,
53 54
                                         virStoragePoolObjPtr pool,
                                         virStorageVolDefPtr vol,
55
                                         unsigned int flags);
56 57 58 59 60 61 62 63 64 65 66 67 68 69
typedef int (*virStorageBackendCreateVol)(virConnectPtr conn,
                                          virStoragePoolObjPtr pool,
                                          virStorageVolDefPtr vol);
typedef int (*virStorageBackendRefreshVol)(virConnectPtr conn,
                                           virStoragePoolObjPtr pool,
                                           virStorageVolDefPtr vol);
typedef int (*virStorageBackendDeleteVol)(virConnectPtr conn,
                                          virStoragePoolObjPtr pool,
                                          virStorageVolDefPtr vol,
                                          unsigned int flags);
typedef int (*virStorageBackendBuildVolFrom)(virConnectPtr conn,
                                             virStoragePoolObjPtr pool,
                                             virStorageVolDefPtr origvol,
                                             virStorageVolDefPtr newvol,
70
                                             unsigned int flags);
71 72 73 74 75
typedef int (*virStorageBackendVolumeResize)(virConnectPtr conn,
                                             virStoragePoolObjPtr pool,
                                             virStorageVolDefPtr vol,
                                             unsigned long long capacity,
                                             unsigned int flags);
76

77 78
/* File creation/cloning functions used for cloning between backends */
int virStorageBackendCreateRaw(virConnectPtr conn,
79
                               virStoragePoolObjPtr pool,
80
                               virStorageVolDefPtr vol,
81 82 83
                               virStorageVolDefPtr inputvol,
                               unsigned int flags);
virStorageBackendBuildVolFrom
84
virStorageBackendGetBuildVolFromFunction(virStorageVolDefPtr vol,
85 86
                                         virStorageVolDefPtr inputvol);
int virStorageBackendFindFSImageTool(char **tool);
87
virStorageBackendBuildVolFrom
88
virStorageBackendFSImageToolTypeToFunc(int tool_type);
89

90 91 92 93

typedef struct _virStorageBackend virStorageBackend;
typedef virStorageBackend *virStorageBackendPtr;

94 95
/* Callbacks are optional unless documented otherwise; but adding more
 * callbacks provides better pool support.  */
96 97 98
struct _virStorageBackend {
    int type;

99
    virStorageBackendFindPoolSources findPoolSources;
100
    virStorageBackendCheckPool checkPool;
101 102
    virStorageBackendStartPool startPool;
    virStorageBackendBuildPool buildPool;
103
    virStorageBackendRefreshPool refreshPool; /* Must be non-NULL */
104 105 106
    virStorageBackendStopPool stopPool;
    virStorageBackendDeletePool deletePool;

107
    virStorageBackendBuildVol buildVol;
108
    virStorageBackendBuildVolFrom buildVolFrom;
109 110 111
    virStorageBackendCreateVol createVol;
    virStorageBackendRefreshVol refreshVol;
    virStorageBackendDeleteVol deleteVol;
112
    virStorageBackendVolumeResize resizeVol;
113 114 115
};

virStorageBackendPtr virStorageBackendForType(int type);
116

117 118 119 120 121 122 123 124 125 126 127
int virStorageBackendVolOpen(const char *path)
ATTRIBUTE_RETURN_CHECK
ATTRIBUTE_NONNULL(1);

/* VolOpenCheckMode flags */
enum {
    VIR_STORAGE_VOL_OPEN_ERROR  = 1 << 0, /* warn if unexpected type
                                           * encountered */
    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 */
128
    VIR_STORAGE_VOL_OPEN_DIR    = 1 << 4, /* directories okay */
129 130
};

131 132 133
# define VIR_STORAGE_VOL_OPEN_DEFAULT (VIR_STORAGE_VOL_OPEN_ERROR    |\
                                       VIR_STORAGE_VOL_OPEN_REG      |\
                                       VIR_STORAGE_VOL_OPEN_BLOCK)
134

E
Eric Blake 已提交
135 136 137 138
int virStorageBackendVolOpenCheckMode(const char *path, struct stat *sb,
                                      unsigned int flags)
    ATTRIBUTE_RETURN_CHECK
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
139

140
int virStorageBackendUpdateVolInfo(virStorageVolDefPtr vol,
141
                                   bool withCapacity,
142
                                   bool withBlockVolFormat,
143
                                   unsigned int openflags);
144
int virStorageBackendUpdateVolTargetInfo(virStorageVolTargetPtr target,
145
                                         unsigned long long *allocation,
146
                                         unsigned long long *capacity,
147
                                         bool withBlockVolFormat,
148
                                         unsigned int openflags);
149
int virStorageBackendUpdateVolTargetInfoFD(virStorageVolTargetPtr target,
150
                                           int fd,
E
Eric Blake 已提交
151
                                           struct stat *sb,
152 153
                                           unsigned long long *allocation,
                                           unsigned long long *capacity);
154

155
char *virStorageBackendStablePath(virStoragePoolObjPtr pool,
156
                                  const char *devpath,
157
                                  bool loop);
158

159 160 161 162 163 164 165 166
virCommandPtr
virStorageBackendCreateQemuImgCmd(virConnectPtr conn,
                                  virStoragePoolObjPtr pool,
                                  virStorageVolDefPtr vol,
                                  virStorageVolDefPtr inputvol,
                                  unsigned int flags,
                                  const char *create_tool,
                                  int imgformat);
167

168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204
/* ------- virStorageFile backends ------------ */
typedef int
(*virStorageFileBackendInit)(virStorageFilePtr file);

typedef void
(*virStorageFileBackendDeinit)(virStorageFilePtr file);

typedef int
(*virStorageFileBackendCreate)(virStorageFilePtr file);

typedef int
(*virStorageFileBackendUnlink)(virStorageFilePtr file);

typedef int
(*virStorageFileBackendStat)(virStorageFilePtr file,
                             struct stat *st);

virStorageFileBackendPtr virStorageFileBackendForType(int type, int protocol);

struct _virStorageFileBackend {
    int type;
    int protocol;

    /* All storage file callbacks may be omitted if not implemented */

    /* The following group of callbacks is expected to set a libvirt
     * error on failure. */
    virStorageFileBackendInit backendInit;
    virStorageFileBackendDeinit backendDeinit;

    /* The following group of callbacks is expected to set errno
     * and return -1 on error. No libvirt error shall be reported */
    virStorageFileBackendCreate storageFileCreate;
    virStorageFileBackendUnlink storageFileUnlink;
    virStorageFileBackendStat   storageFileStat;
};

205
#endif /* __VIR_STORAGE_BACKEND_H__ */