storage_conf.h 18.0 KB
Newer Older
1 2 3
/*
 * storage_conf.h: config handling for storage driver
 *
4
 * Copyright (C) 2006-2008, 2010-2016 Red Hat, Inc.
5 6 7 8 9 10 11 12 13 14 15 16 17
 * Copyright (C) 2006-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_CONF_H__
25
# define __VIR_STORAGE_CONF_H__
26

27
# include "internal.h"
28
# include "virstorageencryption.h"
E
Eric Blake 已提交
29
# include "virstoragefile.h"
30
# include "virbitmap.h"
31
# include "virthread.h"
32
# include "device_conf.h"
33
# include "node_device_conf.h"
34
# include "object_event.h"
35

36
# include <libxml/tree.h>
37

38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
/*
 * How the volume's data is stored on underlying
 * physical devices - can potentially span many
 * devices in LVM case.
 */
typedef struct _virStorageVolSourceExtent virStorageVolSourceExtent;
typedef virStorageVolSourceExtent *virStorageVolSourceExtentPtr;
struct _virStorageVolSourceExtent {
    char *path;
    unsigned long long start;
    unsigned long long end;
};

typedef struct _virStorageVolSource virStorageVolSource;
typedef virStorageVolSource *virStorageVolSourcePtr;
struct _virStorageVolSource {
54
    size_t nextent;
55
    virStorageVolSourceExtentPtr extents;
56

57
    int partType; /* virStorageVolTypeDisk, only used by disk
58
                   * backend for partition type creation */
59 60 61 62 63 64 65 66
};


typedef struct _virStorageVolDef virStorageVolDef;
typedef virStorageVolDef *virStorageVolDefPtr;
struct _virStorageVolDef {
    char *name;
    char *key;
67
    int type; /* virStorageVolType */
68

69
    bool building;
70
    unsigned int in_use;
71

72
    virStorageVolSource source;
73
    virStorageSource target;
74 75
};

76 77 78
typedef struct _virStorageVolDefList virStorageVolDefList;
typedef virStorageVolDefList *virStorageVolDefListPtr;
struct _virStorageVolDefList {
79
    size_t count;
80 81
    virStorageVolDefPtr *objs;
};
82

83
VIR_ENUM_DECL(virStorageVol)
84

85
typedef enum {
86
    VIR_STORAGE_POOL_DIR,      /* Local directory */
87 88 89 90 91 92
    VIR_STORAGE_POOL_FS,       /* Local filesystem */
    VIR_STORAGE_POOL_NETFS,    /* Networked filesystem - eg NFS, GFS, etc */
    VIR_STORAGE_POOL_LOGICAL,  /* Logical volume groups / volumes */
    VIR_STORAGE_POOL_DISK,     /* Disk partitions */
    VIR_STORAGE_POOL_ISCSI,    /* iSCSI targets */
    VIR_STORAGE_POOL_SCSI,     /* SCSI HBA */
D
Dave Allan 已提交
93
    VIR_STORAGE_POOL_MPATH,    /* Multipath devices */
94
    VIR_STORAGE_POOL_RBD,      /* RADOS Block Device */
95
    VIR_STORAGE_POOL_SHEEPDOG, /* Sheepdog device */
96
    VIR_STORAGE_POOL_GLUSTER,  /* Gluster device */
R
Roman Bogorodskiy 已提交
97
    VIR_STORAGE_POOL_ZFS,      /* ZFS */
98 99

    VIR_STORAGE_POOL_LAST,
100
} virStoragePoolType;
101

102
VIR_ENUM_DECL(virStoragePool)
103

104
typedef enum {
105 106 107 108
    VIR_STORAGE_DEVICE_TYPE_DISK = 0x00,
    VIR_STORAGE_DEVICE_TYPE_ROM = 0x05,

    VIR_STORAGE_DEVICE_TYPE_LAST,
109
} virStoragePoolDeviceType;
110

111 112 113 114 115 116 117 118 119 120 121 122

/*
 * For remote pools, info on how to reach the host
 */
typedef struct _virStoragePoolSourceHost virStoragePoolSourceHost;
typedef virStoragePoolSourceHost *virStoragePoolSourceHostPtr;
struct _virStoragePoolSourceHost {
    char *name;
    int port;
};


123
/*
124 125
 * For MSDOS partitions, the free area is important when
 * creating logical partitions
126
 */
127
typedef enum {
128 129 130 131
    VIR_STORAGE_FREE_NONE = 0,
    VIR_STORAGE_FREE_NORMAL,
    VIR_STORAGE_FREE_LOGICAL,
    VIR_STORAGE_FREE_LAST
132
} virStorageFreeType;
133

134 135 136 137 138 139 140 141
/*
 * Available extents on the underlying storage
 */
typedef struct _virStoragePoolSourceDeviceExtent virStoragePoolSourceDeviceExtent;
typedef virStoragePoolSourceDeviceExtent *virStoragePoolSourceDeviceExtentPtr;
struct _virStoragePoolSourceDeviceExtent {
    unsigned long long start;
    unsigned long long end;
142
    int type; /* virStorageFreeType */
143 144
};

D
David Allan 已提交
145 146
typedef struct _virStoragePoolSourceInitiatorAttr virStoragePoolSourceInitiatorAttr;
struct _virStoragePoolSourceInitiatorAttr {
147
    char *iqn; /* Initiator IQN */
D
David Allan 已提交
148 149
};

150 151 152 153 154 155 156 157 158 159
/*
 * Pools can be backed by one or more devices, and some
 * allow us to track free space on underlying devices.
 */
typedef struct _virStoragePoolSourceDevice virStoragePoolSourceDevice;
typedef virStoragePoolSourceDevice *virStoragePoolSourceDevicePtr;
struct _virStoragePoolSourceDevice {
    int nfreeExtent;
    virStoragePoolSourceDeviceExtentPtr freeExtents;
    char *path;
160
    int format; /* Pool specific source format */
161
    int part_separator;  /* enum virTristateSwitch */
162

163
    /* When the source device is a physical disk,
164 165
     * the geometry data is needed
     */
166
    struct _geometry {
P
Peter Krempa 已提交
167
        int cylinders;
168 169 170
        int heads;
        int sectors;
    } geometry;
171 172
};

173
typedef enum {
174 175 176
    VIR_STORAGE_POOL_SOURCE_ADAPTER_TYPE_DEFAULT = 0,
    VIR_STORAGE_POOL_SOURCE_ADAPTER_TYPE_SCSI_HOST,
    VIR_STORAGE_POOL_SOURCE_ADAPTER_TYPE_FC_HOST,
177

178
    VIR_STORAGE_POOL_SOURCE_ADAPTER_TYPE_LAST,
179
} virStoragePoolSourceAdapterType;
180
VIR_ENUM_DECL(virStoragePoolSourceAdapter)
181 182

typedef struct _virStoragePoolSourceAdapter virStoragePoolSourceAdapter;
183
typedef virStoragePoolSourceAdapter *virStoragePoolSourceAdapterPtr;
184
struct _virStoragePoolSourceAdapter {
185
    int type; /* virStoragePoolSourceAdapterType */
186 187

    union {
188 189
        struct {
            char *name;
190
            virPCIDeviceAddress parentaddr; /* host address */
191 192
            int unique_id;
            bool has_parent;
193
        } scsi_host;
194 195 196 197
        struct {
            char *parent;
            char *wwnn;
            char *wwpn;
198
            int managed;        /* enum virTristateSwitch */
199 200 201
        } fchost;
    } data;
};
202 203 204 205

typedef struct _virStoragePoolSource virStoragePoolSource;
typedef virStoragePoolSource *virStoragePoolSourcePtr;
struct _virStoragePoolSource {
206 207 208
    /* An optional (maybe multiple) host(s) */
    size_t nhost;
    virStoragePoolSourceHostPtr hosts;
209 210

    /* And either one or more devices ... */
211
    size_t ndevice;
212 213 214 215 216 217
    virStoragePoolSourceDevicePtr devices;

    /* Or a directory */
    char *dir;

    /* Or an adapter */
218
    virStoragePoolSourceAdapter adapter;
219

220 221 222
    /* Or a name */
    char *name;

D
David Allan 已提交
223 224 225
    /* Initiator IQN */
    virStoragePoolSourceInitiatorAttr initiator;

226 227
    /* Authentication information */
    virStorageAuthDefPtr auth;
228

229 230 231 232 233 234
    /* Vendor of the source */
    char *vendor;

    /* Product name of the source*/
    char *product;

235 236 237 238
    /* Pool type specific format such as filesystem type,
     * or lvm version, etc.
     */
    int format;
239 240 241 242 243
};

typedef struct _virStoragePoolTarget virStoragePoolTarget;
typedef virStoragePoolTarget *virStoragePoolTargetPtr;
struct _virStoragePoolTarget {
244 245
    char *path; /* Optional local filesystem mapping */
    virStoragePerms perms; /* Default permissions for volumes */
246 247 248 249 250 251 252
};

typedef struct _virStoragePoolDef virStoragePoolDef;
typedef virStoragePoolDef *virStoragePoolDefPtr;
struct _virStoragePoolDef {
    char *name;
    unsigned char uuid[VIR_UUID_BUFLEN];
253
    int type; /* virStoragePoolType */
254

E
Eric Blake 已提交
255 256 257
    unsigned long long allocation; /* bytes */
    unsigned long long capacity; /* bytes */
    unsigned long long available; /* bytes */
258 259 260 261 262 263 264 265 266

    virStoragePoolSource source;
    virStoragePoolTarget target;
};

typedef struct _virStoragePoolObj virStoragePoolObj;
typedef virStoragePoolObj *virStoragePoolObjPtr;

struct _virStoragePoolObj {
267
    virMutex lock;
268

269 270
    char *configFile;
    char *autostartLink;
J
John Ferlan 已提交
271
    bool active;
272
    int autostart;
273
    unsigned int asyncjobs;
274 275 276 277

    virStoragePoolDefPtr def;
    virStoragePoolDefPtr newDef;

278 279
    virStorageVolDefList volumes;
};
280

281 282 283
typedef struct _virStoragePoolObjList virStoragePoolObjList;
typedef virStoragePoolObjList *virStoragePoolObjListPtr;
struct _virStoragePoolObjList {
284
    size_t count;
285
    virStoragePoolObjPtr *objs;
286 287 288 289 290 291
};

typedef struct _virStorageDriverState virStorageDriverState;
typedef virStorageDriverState *virStorageDriverStatePtr;

struct _virStorageDriverState {
292
    virMutex lock;
293

294 295
    virStoragePoolObjList pools;

296 297
    char *configDir;
    char *autostartDir;
298
    char *stateDir;
299
    bool privileged;
300 301 302

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

305 306 307
typedef struct _virStoragePoolSourceList virStoragePoolSourceList;
typedef virStoragePoolSourceList *virStoragePoolSourceListPtr;
struct _virStoragePoolSourceList {
308
    int type;
309 310 311
    unsigned int nsources;
    virStoragePoolSourcePtr sources;
};
312

313 314
typedef bool (*virStoragePoolObjListFilter)(virConnectPtr conn,
                                            virStoragePoolDefPtr def);
315

316 317 318
static inline int
virStoragePoolObjIsActive(virStoragePoolObjPtr pool)
{
319 320 321
    return pool->active;
}

322
int virStoragePoolLoadAllConfigs(virStoragePoolObjListPtr pools,
323 324
                                 const char *configDir,
                                 const char *autostartDir);
325

326 327 328 329 330 331 332
int virStoragePoolLoadAllState(virStoragePoolObjListPtr pools,
                               const char *stateDir);

virStoragePoolObjPtr
virStoragePoolLoadState(virStoragePoolObjListPtr pools,
                        const char *stateDir,
                        const char *name);
333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351
virStoragePoolObjPtr
virStoragePoolObjFindByUUID(virStoragePoolObjListPtr pools,
                            const unsigned char *uuid);
virStoragePoolObjPtr
virStoragePoolObjFindByName(virStoragePoolObjListPtr pools,
                            const char *name);
virStoragePoolObjPtr
virStoragePoolSourceFindDuplicateDevices(virStoragePoolObjPtr pool,
                                         virStoragePoolDefPtr def);

virStorageVolDefPtr
virStorageVolDefFindByKey(virStoragePoolObjPtr pool,
                          const char *key);
virStorageVolDefPtr
virStorageVolDefFindByPath(virStoragePoolObjPtr pool,
                           const char *path);
virStorageVolDefPtr
virStorageVolDefFindByName(virStoragePoolObjPtr pool,
                           const char *name);
352 353 354

void virStoragePoolObjClearVols(virStoragePoolObjPtr pool);

355 356 357
virStoragePoolDefPtr virStoragePoolDefParseString(const char *xml);
virStoragePoolDefPtr virStoragePoolDefParseFile(const char *filename);
virStoragePoolDefPtr virStoragePoolDefParseNode(xmlDocPtr xml,
358
                                                xmlNodePtr root);
359
char *virStoragePoolDefFormat(virStoragePoolDefPtr def);
360

361 362 363
typedef enum {
    /* do not require volume capacity at all */
    VIR_VOL_XML_PARSE_NO_CAPACITY  = 1 << 0,
364 365
    /* do not require volume capacity if the volume has a backing store */
    VIR_VOL_XML_PARSE_OPT_CAPACITY = 1 << 1,
366
} virStorageVolDefParseFlags;
367 368
virStorageVolDefPtr
virStorageVolDefParseString(virStoragePoolDefPtr pool,
369 370
                            const char *xml,
                            unsigned int flags);
371 372
virStorageVolDefPtr
virStorageVolDefParseFile(virStoragePoolDefPtr pool,
373 374
                          const char *filename,
                          unsigned int flags);
375 376 377
virStorageVolDefPtr
virStorageVolDefParseNode(virStoragePoolDefPtr pool,
                          xmlDocPtr xml,
378 379
                          xmlNodePtr root,
                          unsigned int flags);
380
char *virStorageVolDefFormat(virStoragePoolDefPtr pool,
381 382
                             virStorageVolDefPtr def);

383 384 385
virStoragePoolObjPtr
virStoragePoolObjAssignDef(virStoragePoolObjListPtr pools,
                           virStoragePoolDefPtr def);
386

387 388
int virStoragePoolSaveState(const char *stateFile,
                            virStoragePoolDefPtr def);
389
int virStoragePoolSaveConfig(const char *configFile,
390
                             virStoragePoolDefPtr def);
391
int virStoragePoolObjSaveDef(virStorageDriverStatePtr driver,
392 393
                             virStoragePoolObjPtr pool,
                             virStoragePoolDefPtr def);
394
int virStoragePoolObjDeleteDef(virStoragePoolObjPtr pool);
395 396

void virStorageVolDefFree(virStorageVolDefPtr def);
397
void virStoragePoolSourceClear(virStoragePoolSourcePtr source);
398
void virStoragePoolSourceDeviceClear(virStoragePoolSourceDevicePtr dev);
399
void virStoragePoolSourceFree(virStoragePoolSourcePtr source);
400 401
void virStoragePoolDefFree(virStoragePoolDefPtr def);
void virStoragePoolObjFree(virStoragePoolObjPtr pool);
402 403
void virStoragePoolObjListFree(virStoragePoolObjListPtr pools);
void virStoragePoolObjRemove(virStoragePoolObjListPtr pools,
404 405
                             virStoragePoolObjPtr pool);

406
virStoragePoolSourcePtr
407
virStoragePoolDefParseSourceString(const char *srcSpec,
408 409
                                   int pool_type);
virStoragePoolSourcePtr
410 411
virStoragePoolSourceListNewSource(virStoragePoolSourceListPtr list);
char *virStoragePoolSourceListFormat(virStoragePoolSourceListPtr def);
412

413 414 415 416
int virStoragePoolObjIsDuplicate(virStoragePoolObjListPtr pools,
                                 virStoragePoolDefPtr def,
                                 unsigned int check_active);

417 418 419 420
char *virStoragePoolGetVhbaSCSIHostParent(virConnectPtr conn,
                                          const char *name)
    ATTRIBUTE_NONNULL(1);

421 422
int virStoragePoolSourceFindDuplicate(virConnectPtr conn,
                                      virStoragePoolObjListPtr pools,
423 424
                                      virStoragePoolDefPtr def);

D
Daniel P. Berrange 已提交
425 426 427
void virStoragePoolObjLock(virStoragePoolObjPtr obj);
void virStoragePoolObjUnlock(virStoragePoolObjPtr obj);

428

429
typedef enum {
430 431 432 433 434 435 436 437 438 439 440 441
    VIR_STORAGE_POOL_FS_AUTO = 0,
    VIR_STORAGE_POOL_FS_EXT2,
    VIR_STORAGE_POOL_FS_EXT3,
    VIR_STORAGE_POOL_FS_EXT4,
    VIR_STORAGE_POOL_FS_UFS,
    VIR_STORAGE_POOL_FS_ISO,
    VIR_STORAGE_POOL_FS_UDF,
    VIR_STORAGE_POOL_FS_GFS,
    VIR_STORAGE_POOL_FS_GFS2,
    VIR_STORAGE_POOL_FS_VFAT,
    VIR_STORAGE_POOL_FS_HFSPLUS,
    VIR_STORAGE_POOL_FS_XFS,
J
Jim Fehlig 已提交
442
    VIR_STORAGE_POOL_FS_OCFS2,
443
    VIR_STORAGE_POOL_FS_LAST,
444
} virStoragePoolFormatFileSystem;
445
VIR_ENUM_DECL(virStoragePoolFormatFileSystem)
446

447
typedef enum {
448 449
    VIR_STORAGE_POOL_NETFS_AUTO = 0,
    VIR_STORAGE_POOL_NETFS_NFS,
450
    VIR_STORAGE_POOL_NETFS_GLUSTERFS,
451
    VIR_STORAGE_POOL_NETFS_CIFS,
452
    VIR_STORAGE_POOL_NETFS_LAST,
453
} virStoragePoolFormatFileSystemNet;
454
VIR_ENUM_DECL(virStoragePoolFormatFileSystemNet)
455

456
typedef enum {
457 458 459 460 461 462 463 464 465 466
    VIR_STORAGE_POOL_DISK_UNKNOWN = 0,
    VIR_STORAGE_POOL_DISK_DOS = 1,
    VIR_STORAGE_POOL_DISK_DVH,
    VIR_STORAGE_POOL_DISK_GPT,
    VIR_STORAGE_POOL_DISK_MAC,
    VIR_STORAGE_POOL_DISK_BSD,
    VIR_STORAGE_POOL_DISK_PC98,
    VIR_STORAGE_POOL_DISK_SUN,
    VIR_STORAGE_POOL_DISK_LVM2,
    VIR_STORAGE_POOL_DISK_LAST,
467
} virStoragePoolFormatDisk;
468
VIR_ENUM_DECL(virStoragePoolFormatDisk)
469

470
typedef enum {
471 472 473
    VIR_STORAGE_POOL_LOGICAL_UNKNOWN = 0,
    VIR_STORAGE_POOL_LOGICAL_LVM2 = 1,
    VIR_STORAGE_POOL_LOGICAL_LAST,
474
} virStoragePoolFormatLogical;
475
VIR_ENUM_DECL(virStoragePoolFormatLogical)
476 477

/*
478
 * XXX: these are basically partition types.
479
 *
480 481 482
 * fdisk has a bazillion partition ID types parted has
 * practically none, and splits the * info across 3
 * different attributes.
483 484 485
 *
 * So this is a semi-generic set
 */
486
typedef enum {
487 488 489 490 491 492 493 494 495
    VIR_STORAGE_VOL_DISK_NONE = 0,
    VIR_STORAGE_VOL_DISK_LINUX,
    VIR_STORAGE_VOL_DISK_FAT16,
    VIR_STORAGE_VOL_DISK_FAT32,
    VIR_STORAGE_VOL_DISK_LINUX_SWAP,
    VIR_STORAGE_VOL_DISK_LINUX_LVM,
    VIR_STORAGE_VOL_DISK_LINUX_RAID,
    VIR_STORAGE_VOL_DISK_EXTENDED,
    VIR_STORAGE_VOL_DISK_LAST,
496
} virStorageVolFormatDisk;
497
VIR_ENUM_DECL(virStorageVolFormatDisk)
498

499
typedef enum {
500 501 502 503 504
    VIR_STORAGE_VOL_DISK_TYPE_NONE = 0,
    VIR_STORAGE_VOL_DISK_TYPE_PRIMARY,
    VIR_STORAGE_VOL_DISK_TYPE_LOGICAL,
    VIR_STORAGE_VOL_DISK_TYPE_EXTENDED,
    VIR_STORAGE_VOL_DISK_TYPE_LAST,
505
} virStorageVolTypeDisk;
506

507
/*
508 509
 * Mapping of Parted fs-types MUST be kept in the
 * same order as virStorageVolFormatDisk
510
 */
511
typedef enum {
512 513 514 515 516 517 518 519 520
    VIR_STORAGE_PARTED_FS_TYPE_NONE = 0,
    VIR_STORAGE_PARTED_FS_TYPE_LINUX,
    VIR_STORAGE_PARTED_FS_TYPE_FAT16,
    VIR_STORAGE_PARTED_FS_TYPE_FAT32,
    VIR_STORAGE_PARTED_FS_TYPE_LINUX_SWAP,
    VIR_STORAGE_PARTED_FS_TYPE_LINUX_LVM,
    VIR_STORAGE_PARTED_FS_TYPE_LINUX_RAID,
    VIR_STORAGE_PARTED_FS_TYPE_EXTENDED,
    VIR_STORAGE_PARTED_FS_TYPE_LAST,
521
} virStoragePartedFsType;
522
VIR_ENUM_DECL(virStoragePartedFs)
523

524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545
# define VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_ACTIVE   \
                (VIR_CONNECT_LIST_STORAGE_POOLS_ACTIVE | \
                 VIR_CONNECT_LIST_STORAGE_POOLS_INACTIVE)

# define VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_PERSISTENT   \
                (VIR_CONNECT_LIST_STORAGE_POOLS_PERSISTENT | \
                 VIR_CONNECT_LIST_STORAGE_POOLS_TRANSIENT)

# define VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_AUTOSTART    \
                (VIR_CONNECT_LIST_STORAGE_POOLS_AUTOSTART |  \
                 VIR_CONNECT_LIST_STORAGE_POOLS_NO_AUTOSTART)

# define VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_POOL_TYPE  \
                (VIR_CONNECT_LIST_STORAGE_POOLS_DIR      | \
                 VIR_CONNECT_LIST_STORAGE_POOLS_FS       | \
                 VIR_CONNECT_LIST_STORAGE_POOLS_NETFS    | \
                 VIR_CONNECT_LIST_STORAGE_POOLS_LOGICAL  | \
                 VIR_CONNECT_LIST_STORAGE_POOLS_DISK     | \
                 VIR_CONNECT_LIST_STORAGE_POOLS_ISCSI    | \
                 VIR_CONNECT_LIST_STORAGE_POOLS_SCSI     | \
                 VIR_CONNECT_LIST_STORAGE_POOLS_MPATH    | \
                 VIR_CONNECT_LIST_STORAGE_POOLS_RBD      | \
546
                 VIR_CONNECT_LIST_STORAGE_POOLS_SHEEPDOG | \
R
Roman Bogorodskiy 已提交
547 548
                 VIR_CONNECT_LIST_STORAGE_POOLS_GLUSTER  | \
                 VIR_CONNECT_LIST_STORAGE_POOLS_ZFS)
549 550 551 552 553 554 555

# define VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_ALL                  \
                (VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_ACTIVE     | \
                 VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_PERSISTENT | \
                 VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_AUTOSTART  | \
                 VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_POOL_TYPE)

556 557 558 559 560
int virStoragePoolObjListExport(virConnectPtr conn,
                                virStoragePoolObjList poolobjs,
                                virStoragePoolPtr **pools,
                                virStoragePoolObjListFilter filter,
                                unsigned int flags);
561

562
#endif /* __VIR_STORAGE_CONF_H__ */