]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
a089221c AM |
2 | /* |
3 | * These structs are used by the system-use-sharing protocol, in which the | |
4 | * Rock Ridge extensions are embedded. It is quite possible that other | |
5 | * extensions are present on the disk, and this is fine as long as they | |
6 | * all use SUSP | |
7 | */ | |
8 | ||
642217c1 | 9 | struct SU_SP_s { |
cb917757 AB |
10 | __u8 magic[2]; |
11 | __u8 skip; | |
a089221c AM |
12 | } __attribute__ ((packed)); |
13 | ||
642217c1 | 14 | struct SU_CE_s { |
cb917757 AB |
15 | __u8 extent[8]; |
16 | __u8 offset[8]; | |
17 | __u8 size[8]; | |
1da177e4 LT |
18 | }; |
19 | ||
642217c1 | 20 | struct SU_ER_s { |
cb917757 AB |
21 | __u8 len_id; |
22 | __u8 len_des; | |
23 | __u8 len_src; | |
24 | __u8 ext_ver; | |
5e01fdff | 25 | __u8 data[]; |
a089221c AM |
26 | } __attribute__ ((packed)); |
27 | ||
642217c1 | 28 | struct RR_RR_s { |
cb917757 | 29 | __u8 flags[1]; |
a089221c AM |
30 | } __attribute__ ((packed)); |
31 | ||
642217c1 | 32 | struct RR_PX_s { |
cb917757 AB |
33 | __u8 mode[8]; |
34 | __u8 n_links[8]; | |
35 | __u8 uid[8]; | |
36 | __u8 gid[8]; | |
1da177e4 LT |
37 | }; |
38 | ||
642217c1 | 39 | struct RR_PN_s { |
cb917757 AB |
40 | __u8 dev_high[8]; |
41 | __u8 dev_low[8]; | |
1da177e4 LT |
42 | }; |
43 | ||
a089221c | 44 | struct SL_component { |
cb917757 AB |
45 | __u8 flags; |
46 | __u8 len; | |
5e01fdff | 47 | __u8 text[]; |
a089221c | 48 | } __attribute__ ((packed)); |
1da177e4 | 49 | |
642217c1 | 50 | struct RR_SL_s { |
cb917757 | 51 | __u8 flags; |
a089221c AM |
52 | struct SL_component link; |
53 | } __attribute__ ((packed)); | |
1da177e4 | 54 | |
642217c1 | 55 | struct RR_NM_s { |
cb917757 | 56 | __u8 flags; |
5e01fdff | 57 | char name[]; |
a089221c | 58 | } __attribute__ ((packed)); |
1da177e4 | 59 | |
642217c1 | 60 | struct RR_CL_s { |
cb917757 | 61 | __u8 location[8]; |
1da177e4 LT |
62 | }; |
63 | ||
642217c1 | 64 | struct RR_PL_s { |
cb917757 | 65 | __u8 location[8]; |
1da177e4 LT |
66 | }; |
67 | ||
a089221c | 68 | struct stamp { |
34be4dbf | 69 | __u8 time[7]; /* actually 6 unsigned, 1 signed */ |
a089221c | 70 | } __attribute__ ((packed)); |
1da177e4 | 71 | |
642217c1 | 72 | struct RR_TF_s { |
cb917757 | 73 | __u8 flags; |
5e01fdff | 74 | struct stamp times[]; /* Variable number of these beasts */ |
a089221c | 75 | } __attribute__ ((packed)); |
1da177e4 LT |
76 | |
77 | /* Linux-specific extension for transparent decompression */ | |
642217c1 | 78 | struct RR_ZF_s { |
cb917757 AB |
79 | __u8 algorithm[2]; |
80 | __u8 parms[2]; | |
81 | __u8 real_size[8]; | |
1da177e4 LT |
82 | }; |
83 | ||
a089221c AM |
84 | /* |
85 | * These are the bits and their meanings for flags in the TF structure. | |
86 | */ | |
1da177e4 LT |
87 | #define TF_CREATE 1 |
88 | #define TF_MODIFY 2 | |
89 | #define TF_ACCESS 4 | |
90 | #define TF_ATTRIBUTES 8 | |
91 | #define TF_BACKUP 16 | |
92 | #define TF_EXPIRATION 32 | |
93 | #define TF_EFFECTIVE 64 | |
94 | #define TF_LONG_FORM 128 | |
95 | ||
a089221c | 96 | struct rock_ridge { |
cb917757 AB |
97 | __u8 signature[2]; |
98 | __u8 len; | |
99 | __u8 version; | |
a089221c | 100 | union { |
642217c1 AM |
101 | struct SU_SP_s SP; |
102 | struct SU_CE_s CE; | |
103 | struct SU_ER_s ER; | |
104 | struct RR_RR_s RR; | |
105 | struct RR_PX_s PX; | |
106 | struct RR_PN_s PN; | |
107 | struct RR_SL_s SL; | |
108 | struct RR_NM_s NM; | |
109 | struct RR_CL_s CL; | |
110 | struct RR_PL_s PL; | |
111 | struct RR_TF_s TF; | |
112 | struct RR_ZF_s ZF; | |
a089221c | 113 | } u; |
1da177e4 LT |
114 | }; |
115 | ||
a089221c AM |
116 | #define RR_PX 1 /* POSIX attributes */ |
117 | #define RR_PN 2 /* POSIX devices */ | |
118 | #define RR_SL 4 /* Symbolic link */ | |
119 | #define RR_NM 8 /* Alternate Name */ | |
120 | #define RR_CL 16 /* Child link */ | |
121 | #define RR_PL 32 /* Parent link */ | |
122 | #define RR_RE 64 /* Relocation directory */ | |
123 | #define RR_TF 128 /* Timestamps */ |