virstorageobj.h 7.9 KB
Newer Older
J
John Ferlan 已提交
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 30 31 32 33 34 35
/*
 * virstorageobj.h: internal storage pool and volume objects handling
 *                  (derived from storage_conf.h)
 *
 * 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 __VIRSTORAGEOBJ_H__
# define __VIRSTORAGEOBJ_H__

# include "internal.h"

# include "storage_conf.h"

typedef struct _virStoragePoolObj virStoragePoolObj;
typedef virStoragePoolObj *virStoragePoolObjPtr;

struct _virStoragePoolObj {
    virMutex lock;

    char *configFile;
    char *autostartLink;
    bool active;
36
    bool autostart;
J
John Ferlan 已提交
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
    unsigned int asyncjobs;

    virStoragePoolDefPtr def;
    virStoragePoolDefPtr newDef;

    virStorageVolDefList volumes;
};

typedef struct _virStoragePoolObjList virStoragePoolObjList;
typedef virStoragePoolObjList *virStoragePoolObjListPtr;
struct _virStoragePoolObjList {
    size_t count;
    virStoragePoolObjPtr *objs;
};

typedef struct _virStorageDriverState virStorageDriverState;
typedef virStorageDriverState *virStorageDriverStatePtr;

struct _virStorageDriverState {
    virMutex lock;

    virStoragePoolObjList pools;

    char *configDir;
    char *autostartDir;
    char *stateDir;
    bool privileged;

    /* Immutable pointer, self-locking APIs */
    virObjectEventStatePtr storageEventState;
};

69 70 71
typedef bool
(*virStoragePoolObjListFilter)(virConnectPtr conn,
                               virStoragePoolDefPtr def);
J
John Ferlan 已提交
72

73 74 75
virStoragePoolObjPtr
virStoragePoolObjNew(void);

76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
virStoragePoolDefPtr
virStoragePoolObjGetDef(virStoragePoolObjPtr obj);

void
virStoragePoolObjSetDef(virStoragePoolObjPtr obj,
                        virStoragePoolDefPtr def);

virStoragePoolDefPtr
virStoragePoolObjGetNewDef(virStoragePoolObjPtr obj);

void
virStoragePoolObjDefUseNewDef(virStoragePoolObjPtr obj);

char *
virStoragePoolObjGetConfigFile(virStoragePoolObjPtr obj);

void
virStoragePoolObjSetConfigFile(virStoragePoolObjPtr obj,
                               char *configFile);

char *
virStoragePoolObjGetAutostartLink(virStoragePoolObjPtr obj);

bool
virStoragePoolObjIsActive(virStoragePoolObjPtr obj);

void
virStoragePoolObjSetActive(virStoragePoolObjPtr obj,
                           bool active);

bool
virStoragePoolObjIsAutostart(virStoragePoolObjPtr obj);

void
virStoragePoolObjSetAutostart(virStoragePoolObjPtr obj,
111
                              bool autostart);
112 113 114 115 116 117 118 119 120

unsigned int
virStoragePoolObjGetAsyncjobs(virStoragePoolObjPtr obj);

void
virStoragePoolObjIncrAsyncjobs(virStoragePoolObjPtr obj);

void
virStoragePoolObjDecrAsyncjobs(virStoragePoolObjPtr obj);
J
John Ferlan 已提交
121

122
int
123 124 125
virStoragePoolObjLoadAllConfigs(virStoragePoolObjListPtr pools,
                                const char *configDir,
                                const char *autostartDir);
J
John Ferlan 已提交
126

127
int
128 129
virStoragePoolObjLoadAllState(virStoragePoolObjListPtr pools,
                              const char *stateDir);
130

J
John Ferlan 已提交
131 132 133
virStoragePoolObjPtr
virStoragePoolObjFindByUUID(virStoragePoolObjListPtr pools,
                            const unsigned char *uuid);
134

J
John Ferlan 已提交
135 136 137
virStoragePoolObjPtr
virStoragePoolObjFindByName(virStoragePoolObjListPtr pools,
                            const char *name);
138

139 140 141 142 143 144 145 146 147 148 149
int
virStoragePoolObjAddVol(virStoragePoolObjPtr obj,
                        virStorageVolDefPtr voldef);

void
virStoragePoolObjRemoveVol(virStoragePoolObjPtr obj,
                           virStorageVolDefPtr voldef);

size_t
virStoragePoolObjGetVolumesCount(virStoragePoolObjPtr obj);

150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
typedef int
(*virStorageVolObjListIterator)(virStorageVolDefPtr voldef,
                                const void *opaque);

int
virStoragePoolObjForEachVolume(virStoragePoolObjPtr obj,
                               virStorageVolObjListIterator iter,
                               const void *opaque);

typedef bool
(*virStorageVolObjListSearcher)(virStorageVolDefPtr voldef,
                                const void *opaque);

virStorageVolDefPtr
virStoragePoolObjSearchVolume(virStoragePoolObjPtr obj,
                              virStorageVolObjListSearcher iter,
                              const void *opaque);

J
John Ferlan 已提交
168
virStorageVolDefPtr
169
virStorageVolDefFindByKey(virStoragePoolObjPtr obj,
J
John Ferlan 已提交
170
                          const char *key);
171

J
John Ferlan 已提交
172
virStorageVolDefPtr
173
virStorageVolDefFindByPath(virStoragePoolObjPtr obj,
J
John Ferlan 已提交
174
                           const char *path);
175

J
John Ferlan 已提交
176
virStorageVolDefPtr
177
virStorageVolDefFindByName(virStoragePoolObjPtr obj,
J
John Ferlan 已提交
178 179
                           const char *name);

180
void
181
virStoragePoolObjClearVols(virStoragePoolObjPtr obj);
J
John Ferlan 已提交
182

183 184 185 186 187 188
typedef bool
(*virStoragePoolVolumeACLFilter)(virConnectPtr conn,
                                 virStoragePoolDefPtr pool,
                                 virStorageVolDefPtr def);

int
189
virStoragePoolObjNumOfVolumes(virStoragePoolObjPtr obj,
190
                              virConnectPtr conn,
191
                              virStoragePoolVolumeACLFilter filter);
192

193
int
194
virStoragePoolObjVolumeGetNames(virStoragePoolObjPtr obj,
195
                                virConnectPtr conn,
196
                                virStoragePoolVolumeACLFilter filter,
197 198 199
                                char **const names,
                                int maxnames);

200 201
int
virStoragePoolObjVolumeListExport(virConnectPtr conn,
202
                                  virStoragePoolObjPtr obj,
203
                                  virStorageVolPtr **vols,
204
                                  virStoragePoolVolumeACLFilter filter);
205

J
John Ferlan 已提交
206 207 208 209
virStoragePoolObjPtr
virStoragePoolObjAssignDef(virStoragePoolObjListPtr pools,
                           virStoragePoolDefPtr def);

210 211
int
virStoragePoolObjSaveDef(virStorageDriverStatePtr driver,
212
                         virStoragePoolObjPtr obj,
213 214 215
                         virStoragePoolDefPtr def);

int
216
virStoragePoolObjDeleteDef(virStoragePoolObjPtr obj);
217

218 219 220 221 222 223 224
typedef bool (*virStoragePoolObjListACLFilter)(virConnectPtr conn,
                                               virStoragePoolDefPtr def);

int
virStoragePoolObjNumOfStoragePools(virStoragePoolObjListPtr pools,
                                   virConnectPtr conn,
                                   bool wantActive,
225
                                   virStoragePoolObjListACLFilter filter);
226

227 228 229 230
int
virStoragePoolObjGetNames(virStoragePoolObjListPtr pools,
                          virConnectPtr conn,
                          bool wantActive,
231
                          virStoragePoolObjListACLFilter filter,
232 233 234
                          char **const names,
                          int maxnames);

235
void
236
virStoragePoolObjFree(virStoragePoolObjPtr obj);
237 238 239 240 241 242

void
virStoragePoolObjListFree(virStoragePoolObjListPtr pools);

void
virStoragePoolObjRemove(virStoragePoolObjListPtr pools,
243
                        virStoragePoolObjPtr obj);
J
John Ferlan 已提交
244

245 246 247 248
int
virStoragePoolObjIsDuplicate(virStoragePoolObjListPtr pools,
                             virStoragePoolDefPtr def,
                             unsigned int check_active);
J
John Ferlan 已提交
249

250
int
251 252 253
virStoragePoolObjSourceFindDuplicate(virConnectPtr conn,
                                     virStoragePoolObjListPtr pools,
                                     virStoragePoolDefPtr def);
J
John Ferlan 已提交
254

255 256
void
virStoragePoolObjLock(virStoragePoolObjPtr obj);
J
John Ferlan 已提交
257

258 259
void
virStoragePoolObjUnlock(virStoragePoolObjPtr obj);
J
John Ferlan 已提交
260

261 262
int
virStoragePoolObjListExport(virConnectPtr conn,
J
John Ferlan 已提交
263
                            virStoragePoolObjListPtr poolobjs,
264 265 266
                            virStoragePoolPtr **pools,
                            virStoragePoolObjListFilter filter,
                            unsigned int flags);
J
John Ferlan 已提交
267 268

#endif /* __VIRSTORAGEOBJ_H__ */