virstoragefile.h 4.3 KB
Newer Older
1
/*
2
 * virstoragefile.h: file utility functions for FS storage backend
3
 *
4
 * Copyright (C) 2007-2009, 2012-2013 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_FILE_H__
25
# define __VIR_STORAGE_FILE_H__
26

27
# include "virbitmap.h"
28
# include "virutil.h"
29 30

enum virStorageFileFormat {
31
    VIR_STORAGE_FILE_AUTO_SAFE = -2,
32
    VIR_STORAGE_FILE_AUTO = -1,
E
Eric Blake 已提交
33 34
    VIR_STORAGE_FILE_NONE = 0,
    VIR_STORAGE_FILE_RAW,
35 36 37 38 39 40 41 42
    VIR_STORAGE_FILE_DIR,
    VIR_STORAGE_FILE_BOCHS,
    VIR_STORAGE_FILE_CLOOP,
    VIR_STORAGE_FILE_COW,
    VIR_STORAGE_FILE_DMG,
    VIR_STORAGE_FILE_ISO,
    VIR_STORAGE_FILE_QCOW,
    VIR_STORAGE_FILE_QCOW2,
A
Adam Litke 已提交
43
    VIR_STORAGE_FILE_QED,
44 45
    VIR_STORAGE_FILE_VMDK,
    VIR_STORAGE_FILE_VPC,
E
Eric Blake 已提交
46 47
    VIR_STORAGE_FILE_FAT,
    VIR_STORAGE_FILE_VHD,
48
    VIR_STORAGE_FILE_VDI,
E
Eric Blake 已提交
49

50 51 52 53 54
    VIR_STORAGE_FILE_LAST,
};

VIR_ENUM_DECL(virStorageFileFormat);

55 56 57 58 59 60 61 62 63
enum virStorageFileFeature {
    VIR_STORAGE_FILE_FEATURE_NONE = -1,
    VIR_STORAGE_FILE_FEATURE_LAZY_REFCOUNTS,

    VIR_STORAGE_FILE_FEATURE_LAST
};

VIR_ENUM_DECL(virStorageFileFeature);

64 65 66
typedef struct _virStorageFileMetadata virStorageFileMetadata;
typedef virStorageFileMetadata *virStorageFileMetadataPtr;
struct _virStorageFileMetadata {
67 68
    char *backingStore; /* Canonical name (absolute file, or protocol) */
    char *backingStoreRaw; /* If file, original name, possibly relative */
69
    char *directory; /* The directory containing basename of backingStoreRaw */
70
    int backingStoreFormat; /* enum virStorageFileFormat */
A
Adam Litke 已提交
71
    bool backingStoreIsFile;
72
    virStorageFileMetadataPtr backingMeta;
73 74
    unsigned long long capacity;
    bool encrypted;
75 76
    virBitmapPtr features; /* bits described by enum virStorageFileFeature */
    char *compat;
77
};
78

79 80 81 82
# ifndef DEV_BSIZE
#  define DEV_BSIZE 512
# endif

83
int virStorageFileProbeFormat(const char *path, uid_t uid, gid_t gid);
84 85 86
int virStorageFileProbeFormatFromFD(const char *path,
                                    int fd);

87 88 89 90
virStorageFileMetadataPtr virStorageFileGetMetadata(const char *path,
                                                    int format,
                                                    uid_t uid, gid_t gid,
                                                    bool allow_probe);
91 92 93
virStorageFileMetadataPtr virStorageFileGetMetadataFromFD(const char *path,
                                                          int fd,
                                                          int format);
94

95 96 97 98 99 100 101
const char *virStorageFileChainLookup(virStorageFileMetadataPtr chain,
                                      const char *start,
                                      const char *name,
                                      virStorageFileMetadataPtr *meta,
                                      const char **parent)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);

102
void virStorageFileFreeMetadata(virStorageFileMetadataPtr meta);
103

104 105 106 107
int virStorageFileResize(const char *path,
                         unsigned long long capacity,
                         unsigned long long orig_capacity,
                         bool pre_allocate);
108

109 110 111 112 113 114 115
enum {
    VIR_STORAGE_FILE_SHFS_NFS = (1 << 0),
    VIR_STORAGE_FILE_SHFS_GFS2 = (1 << 1),
    VIR_STORAGE_FILE_SHFS_OCFS = (1 << 2),
    VIR_STORAGE_FILE_SHFS_AFS = (1 << 3),
};

116
int virStorageFileIsSharedFS(const char *path);
117
int virStorageFileIsClusterFS(const char *path);
118 119
int virStorageFileIsSharedFSType(const char *path,
                                 int fstypes);
120

121 122 123 124
int virStorageFileGetLVMKey(const char *path,
                            char **key);
int virStorageFileGetSCSIKey(const char *path,
                             char **key);
125

126
#endif /* __VIR_STORAGE_FILE_H__ */