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
enum virStorageFileFeature {
56
    VIR_STORAGE_FILE_FEATURE_LAZY_REFCOUNTS = 0,
57 58 59 60 61 62

    VIR_STORAGE_FILE_FEATURE_LAST
};

VIR_ENUM_DECL(virStorageFileFeature);

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

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

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

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

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

101
void virStorageFileFreeMetadata(virStorageFileMetadataPtr meta);
102

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

108 109 110 111 112 113 114
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),
};

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

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

125
#endif /* __VIR_STORAGE_FILE_H__ */