virstorageobj.h 6.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 36 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
/*
 * 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;
    int autostart;
    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 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 111 112 113 114 115 116 117
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,
                              int autostart);

unsigned int
virStoragePoolObjGetAsyncjobs(virStoragePoolObjPtr obj);

void
virStoragePoolObjIncrAsyncjobs(virStoragePoolObjPtr obj);

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

119
int
120 121 122
virStoragePoolObjLoadAllConfigs(virStoragePoolObjListPtr pools,
                                const char *configDir,
                                const char *autostartDir);
J
John Ferlan 已提交
123

124
int
125 126
virStoragePoolObjLoadAllState(virStoragePoolObjListPtr pools,
                              const char *stateDir);
127

J
John Ferlan 已提交
128 129 130
virStoragePoolObjPtr
virStoragePoolObjFindByUUID(virStoragePoolObjListPtr pools,
                            const unsigned char *uuid);
131

J
John Ferlan 已提交
132 133 134
virStoragePoolObjPtr
virStoragePoolObjFindByName(virStoragePoolObjListPtr pools,
                            const char *name);
135

J
John Ferlan 已提交
136
virStorageVolDefPtr
137
virStorageVolDefFindByKey(virStoragePoolObjPtr obj,
J
John Ferlan 已提交
138
                          const char *key);
139

J
John Ferlan 已提交
140
virStorageVolDefPtr
141
virStorageVolDefFindByPath(virStoragePoolObjPtr obj,
J
John Ferlan 已提交
142
                           const char *path);
143

J
John Ferlan 已提交
144
virStorageVolDefPtr
145
virStorageVolDefFindByName(virStoragePoolObjPtr obj,
J
John Ferlan 已提交
146 147
                           const char *name);

148
void
149
virStoragePoolObjClearVols(virStoragePoolObjPtr obj);
J
John Ferlan 已提交
150

151 152 153 154 155 156
typedef bool
(*virStoragePoolVolumeACLFilter)(virConnectPtr conn,
                                 virStoragePoolDefPtr pool,
                                 virStorageVolDefPtr def);

int
157
virStoragePoolObjNumOfVolumes(virStoragePoolObjPtr obj,
158
                              virConnectPtr conn,
159
                              virStoragePoolVolumeACLFilter filter);
160

161
int
162
virStoragePoolObjVolumeGetNames(virStoragePoolObjPtr obj,
163
                                virConnectPtr conn,
164
                                virStoragePoolVolumeACLFilter filter,
165 166 167
                                char **const names,
                                int maxnames);

168 169
int
virStoragePoolObjVolumeListExport(virConnectPtr conn,
170
                                  virStoragePoolObjPtr obj,
171
                                  virStorageVolPtr **vols,
172
                                  virStoragePoolVolumeACLFilter filter);
173

J
John Ferlan 已提交
174 175 176 177
virStoragePoolObjPtr
virStoragePoolObjAssignDef(virStoragePoolObjListPtr pools,
                           virStoragePoolDefPtr def);

178 179
int
virStoragePoolObjSaveDef(virStorageDriverStatePtr driver,
180
                         virStoragePoolObjPtr obj,
181 182 183
                         virStoragePoolDefPtr def);

int
184
virStoragePoolObjDeleteDef(virStoragePoolObjPtr obj);
185

186 187 188 189 190 191 192
typedef bool (*virStoragePoolObjListACLFilter)(virConnectPtr conn,
                                               virStoragePoolDefPtr def);

int
virStoragePoolObjNumOfStoragePools(virStoragePoolObjListPtr pools,
                                   virConnectPtr conn,
                                   bool wantActive,
193
                                   virStoragePoolObjListACLFilter filter);
194

195 196 197 198
int
virStoragePoolObjGetNames(virStoragePoolObjListPtr pools,
                          virConnectPtr conn,
                          bool wantActive,
199
                          virStoragePoolObjListACLFilter filter,
200 201 202
                          char **const names,
                          int maxnames);

203
void
204
virStoragePoolObjFree(virStoragePoolObjPtr obj);
205 206 207 208 209 210

void
virStoragePoolObjListFree(virStoragePoolObjListPtr pools);

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

213 214 215 216
int
virStoragePoolObjIsDuplicate(virStoragePoolObjListPtr pools,
                             virStoragePoolDefPtr def,
                             unsigned int check_active);
J
John Ferlan 已提交
217

218
int
219 220 221
virStoragePoolObjSourceFindDuplicate(virConnectPtr conn,
                                     virStoragePoolObjListPtr pools,
                                     virStoragePoolDefPtr def);
J
John Ferlan 已提交
222

223 224
void
virStoragePoolObjLock(virStoragePoolObjPtr obj);
J
John Ferlan 已提交
225

226 227
void
virStoragePoolObjUnlock(virStoragePoolObjPtr obj);
J
John Ferlan 已提交
228

229 230
int
virStoragePoolObjListExport(virConnectPtr conn,
J
John Ferlan 已提交
231
                            virStoragePoolObjListPtr poolobjs,
232 233 234
                            virStoragePoolPtr **pools,
                            virStoragePoolObjListFilter filter,
                            unsigned int flags);
J
John Ferlan 已提交
235 236

#endif /* __VIRSTORAGEOBJ_H__ */