virstoragefile.h 3.8 KB
Newer Older
1
/*
2
 * virstoragefile.h: file utility functions for FS storage backend
3
 *
E
Eric Blake 已提交
4
 * Copyright (C) 2007-2009, 2012 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 "util.h"
28 29

enum virStorageFileFormat {
30
    VIR_STORAGE_FILE_AUTO_SAFE = -2,
31
    VIR_STORAGE_FILE_AUTO = -1,
E
Eric Blake 已提交
32 33
    VIR_STORAGE_FILE_NONE = 0,
    VIR_STORAGE_FILE_RAW,
34 35 36 37 38 39 40 41
    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 已提交
42
    VIR_STORAGE_FILE_QED,
43 44
    VIR_STORAGE_FILE_VMDK,
    VIR_STORAGE_FILE_VPC,
E
Eric Blake 已提交
45 46 47
    VIR_STORAGE_FILE_FAT,
    VIR_STORAGE_FILE_VHD,

48 49 50 51 52
    VIR_STORAGE_FILE_LAST,
};

VIR_ENUM_DECL(virStorageFileFormat);

53 54 55
typedef struct _virStorageFileMetadata virStorageFileMetadata;
typedef virStorageFileMetadata *virStorageFileMetadataPtr;
struct _virStorageFileMetadata {
56 57
    char *backingStore; /* Canonical name (absolute file, or protocol) */
    char *backingStoreRaw; /* If file, original name, possibly relative */
58
    int backingStoreFormat; /* enum virStorageFileFormat */
A
Adam Litke 已提交
59
    bool backingStoreIsFile;
60
    virStorageFileMetadataPtr backingMeta;
61 62
    unsigned long long capacity;
    bool encrypted;
63
};
64

65 66 67 68
# ifndef DEV_BSIZE
#  define DEV_BSIZE 512
# endif

69
int virStorageFileProbeFormat(const char *path, uid_t uid, gid_t gid);
70 71 72
int virStorageFileProbeFormatFromFD(const char *path,
                                    int fd);

73 74 75 76
virStorageFileMetadataPtr virStorageFileGetMetadata(const char *path,
                                                    int format,
                                                    uid_t uid, gid_t gid,
                                                    bool allow_probe);
77 78 79
virStorageFileMetadataPtr virStorageFileGetMetadataFromFD(const char *path,
                                                          int fd,
                                                          int format);
80

81 82 83 84 85 86 87
const char *virStorageFileChainLookup(virStorageFileMetadataPtr chain,
                                      const char *start,
                                      const char *name,
                                      virStorageFileMetadataPtr *meta,
                                      const char **parent)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);

88
void virStorageFileFreeMetadata(virStorageFileMetadataPtr meta);
89

90 91
int virStorageFileResize(const char *path, unsigned long long capacity);

92 93 94 95 96 97 98
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),
};

99
int virStorageFileIsSharedFS(const char *path);
100
int virStorageFileIsClusterFS(const char *path);
101 102
int virStorageFileIsSharedFSType(const char *path,
                                 int fstypes);
103

104 105 106 107
int virStorageFileGetLVMKey(const char *path,
                            char **key);
int virStorageFileGetSCSIKey(const char *path,
                             char **key);
108

109
#endif /* __VIR_STORAGE_FILE_H__ */