virstoragefile.h 3.9 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 "virutil.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
    VIR_STORAGE_FILE_FAT,
    VIR_STORAGE_FILE_VHD,
47
    VIR_STORAGE_FILE_VDI,
E
Eric Blake 已提交
48

49 50 51 52 53
    VIR_STORAGE_FILE_LAST,
};

VIR_ENUM_DECL(virStorageFileFormat);

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

67 68 69 70
# ifndef DEV_BSIZE
#  define DEV_BSIZE 512
# endif

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

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

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

90
void virStorageFileFreeMetadata(virStorageFileMetadataPtr meta);
91

92 93
int virStorageFileResize(const char *path, unsigned long long capacity);

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

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

106 107 108 109
int virStorageFileGetLVMKey(const char *path,
                            char **key);
int virStorageFileGetSCSIKey(const char *path,
                             char **key);
110

111
#endif /* __VIR_STORAGE_FILE_H__ */