]>
git.proxmox.com Git - proxmox-backup.git/blob - src/pxar/flags.rs
1 //! Feature flags for *pxar* allow to control what is stored/restored in/from the
3 //! Flags for known supported features for a given filesystem can be derived
4 //! from the superblocks magic number.
6 // FIXME: use bitflags!() here!
8 /// FAT-style 2s time granularity
9 pub const WITH_2SEC_TIME
: u64 = 0x40;
10 /// Preserve read only flag of files
11 pub const WITH_READ_ONLY
: u64 = 0x80;
12 /// Preserve unix permissions
13 pub const WITH_PERMISSIONS
: u64 = 0x100;
14 /// Include symbolik links
15 pub const WITH_SYMLINKS
: u64 = 0x200;
16 /// Include device nodes
17 pub const WITH_DEVICE_NODES
: u64 = 0x400;
19 pub const WITH_FIFOS
: u64 = 0x800;
21 pub const WITH_SOCKETS
: u64 = 0x1000;
23 /// Preserve DOS file flag `HIDDEN`
24 pub const WITH_FLAG_HIDDEN
: u64 = 0x2000;
25 /// Preserve DOS file flag `SYSTEM`
26 pub const WITH_FLAG_SYSTEM
: u64 = 0x4000;
27 /// Preserve DOS file flag `ARCHIVE`
28 pub const WITH_FLAG_ARCHIVE
: u64 = 0x8000;
31 /// Linux file attribute `APPEND`
32 pub const WITH_FLAG_APPEND
: u64 = 0x10000;
33 /// Linux file attribute `NOATIME`
34 pub const WITH_FLAG_NOATIME
: u64 = 0x20000;
35 /// Linux file attribute `COMPR`
36 pub const WITH_FLAG_COMPR
: u64 = 0x40000;
37 /// Linux file attribute `NOCOW`
38 pub const WITH_FLAG_NOCOW
: u64 = 0x80000;
39 /// Linux file attribute `NODUMP`
40 pub const WITH_FLAG_NODUMP
: u64 = 0x0010_0000;
41 /// Linux file attribute `DIRSYNC`
42 pub const WITH_FLAG_DIRSYNC
: u64 = 0x0020_0000;
43 /// Linux file attribute `IMMUTABLE`
44 pub const WITH_FLAG_IMMUTABLE
: u64 = 0x0040_0000;
45 /// Linux file attribute `SYNC`
46 pub const WITH_FLAG_SYNC
: u64 = 0x0080_0000;
47 /// Linux file attribute `NOCOMP`
48 pub const WITH_FLAG_NOCOMP
: u64 = 0x0100_0000;
49 /// Linux file attribute `PROJINHERIT`
50 pub const WITH_FLAG_PROJINHERIT
: u64 = 0x0200_0000;
53 /// Preserve BTRFS subvolume flag
54 pub const WITH_SUBVOLUME
: u64 = 0x0400_0000;
55 /// Preserve BTRFS read-only subvolume flag
56 pub const WITH_SUBVOLUME_RO
: u64 = 0x0800_0000;
58 /// Preserve Extended Attribute metadata
59 pub const WITH_XATTRS
: u64 = 0x1000_0000;
60 /// Preserve Access Control List metadata
61 pub const WITH_ACL
: u64 = 0x2000_0000;
62 /// Preserve SELinux security context
63 pub const WITH_SELINUX
: u64 = 0x4000_0000;
64 /// Preserve "security.capability" xattr
65 pub const WITH_FCAPS
: u64 = 0x8000_0000;
67 /// Preserve XFS/ext4/ZFS project quota ID
68 pub const WITH_QUOTA_PROJID
: u64 = 0x0001_0000_0000;
70 /// Support ".pxarexclude" files
71 pub const EXCLUDE_FILE
: u64 = 0x1000_0000_0000_0000;
73 pub const EXCLUDE_SUBMOUNTS
: u64 = 0x4000_0000_0000_0000;
74 /// Exclude entries with chattr flag NODUMP
75 pub const EXCLUDE_NODUMP
: u64 = 0x8000_0000_0000_0000;
77 /// Definitions of typical feature flags for the *pxar* encoder/decoder.
78 /// By this expensive syscalls for unsupported features are avoided.
80 /// All chattr file attributes
81 pub const WITH_CHATTR
: u64 =
91 WITH_FLAG_PROJINHERIT
;
93 /// All FAT file attributes
94 pub const WITH_FAT_ATTRS
: u64 =
99 /// All bits that may also be exposed via fuse
100 pub const WITH_FUSE
: u64 =
113 /// Default feature flags for encoder/decoder
114 pub const DEFAULT
: u64 =
131 WITH_FLAG_PROJINHERIT
|
142 // form /usr/include/linux/fs.h
143 const FS_APPEND_FL
: u32 = 0x0000_0020;
144 const FS_NOATIME_FL
: u32 = 0x0000_0080;
145 const FS_COMPR_FL
: u32 = 0x0000_0004;
146 const FS_NOCOW_FL
: u32 = 0x0080_0000;
147 const FS_NODUMP_FL
: u32 = 0x0000_0040;
148 const FS_DIRSYNC_FL
: u32 = 0x0001_0000;
149 const FS_IMMUTABLE_FL
: u32 = 0x0000_0010;
150 const FS_SYNC_FL
: u32 = 0x0000_0008;
151 const FS_NOCOMP_FL
: u32 = 0x0000_0400;
152 const FS_PROJINHERIT_FL
: u32 = 0x2000_0000;
154 static CHATTR_MAP
: [(u64, u32); 10] = [
155 ( WITH_FLAG_APPEND
, FS_APPEND_FL
),
156 ( WITH_FLAG_NOATIME
, FS_NOATIME_FL
),
157 ( WITH_FLAG_COMPR
, FS_COMPR_FL
),
158 ( WITH_FLAG_NOCOW
, FS_NOCOW_FL
),
159 ( WITH_FLAG_NODUMP
, FS_NODUMP_FL
),
160 ( WITH_FLAG_DIRSYNC
, FS_DIRSYNC_FL
),
161 ( WITH_FLAG_IMMUTABLE
, FS_IMMUTABLE_FL
),
162 ( WITH_FLAG_SYNC
, FS_SYNC_FL
),
163 ( WITH_FLAG_NOCOMP
, FS_NOCOMP_FL
),
164 ( WITH_FLAG_PROJINHERIT
, FS_PROJINHERIT_FL
),
167 pub fn feature_flags_from_chattr(attr
: u32) -> u64 {
169 let mut flags
= 0u64;
171 for (fe_flag
, fs_flag
) in &CHATTR_MAP
{
172 if (attr
& fs_flag
) != 0 { flags |= fe_flag; }
178 // from /usr/include/linux/msdos_fs.h
179 const ATTR_HIDDEN
: u32 = 2;
180 const ATTR_SYS
: u32 = 4;
181 const ATTR_ARCH
: u32 = 32;
183 static FAT_ATTR_MAP
: [(u64, u32); 3] = [
184 ( WITH_FLAG_HIDDEN
, ATTR_HIDDEN
),
185 ( WITH_FLAG_SYSTEM
, ATTR_SYS
),
186 ( WITH_FLAG_ARCHIVE
, ATTR_ARCH
),
189 pub fn feature_flags_from_fat_attr(attr
: u32) -> u64 {
191 let mut flags
= 0u64;
193 for (fe_flag
, fs_flag
) in &FAT_ATTR_MAP
{
194 if (attr
& fs_flag
) != 0 { flags |= fe_flag; }
201 /// Return the supported *pxar* feature flags based on the magic number of the filesystem.
202 pub fn feature_flags_from_magic(magic
: i64) -> u64 {
203 use proxmox
::sys
::linux
::magic
::*;
205 MSDOS_SUPER_MAGIC
=> {
210 EXT4_SUPER_MAGIC
=> {
269 BTRFS_SUPER_MAGIC
=> {
304 // FUSE mounts are special as the supported feature set
305 // is not clear a priori.
306 FUSE_SUPER_MAGIC
=> {