1 | /* SPDX-License-Identifier: GPL-2.0 */ |
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 | |
9 | struct SU_SP_s { |
10 | __u8 magic[2]; |
11 | __u8 skip; |
12 | } __attribute__ ((packed)); |
13 | |
14 | struct SU_CE_s { |
15 | __u8 extent[8]; |
16 | __u8 offset[8]; |
17 | __u8 size[8]; |
18 | }; |
19 | |
20 | struct SU_ER_s { |
21 | __u8 len_id; |
22 | __u8 len_des; |
23 | __u8 len_src; |
24 | __u8 ext_ver; |
25 | __u8 data[]; |
26 | } __attribute__ ((packed)); |
27 | |
28 | struct RR_RR_s { |
29 | __u8 flags[1]; |
30 | } __attribute__ ((packed)); |
31 | |
32 | struct RR_PX_s { |
33 | __u8 mode[8]; |
34 | __u8 n_links[8]; |
35 | __u8 uid[8]; |
36 | __u8 gid[8]; |
37 | }; |
38 | |
39 | struct RR_PN_s { |
40 | __u8 dev_high[8]; |
41 | __u8 dev_low[8]; |
42 | }; |
43 | |
44 | struct SL_component { |
45 | __u8 flags; |
46 | __u8 len; |
47 | __u8 text[]; |
48 | } __attribute__ ((packed)); |
49 | |
50 | struct RR_SL_s { |
51 | __u8 flags; |
52 | struct SL_component link; |
53 | } __attribute__ ((packed)); |
54 | |
55 | struct RR_NM_s { |
56 | __u8 flags; |
57 | char name[]; |
58 | } __attribute__ ((packed)); |
59 | |
60 | struct RR_CL_s { |
61 | __u8 location[8]; |
62 | }; |
63 | |
64 | struct RR_PL_s { |
65 | __u8 location[8]; |
66 | }; |
67 | |
68 | struct stamp { |
69 | __u8 time[7]; /* actually 6 unsigned, 1 signed */ |
70 | } __attribute__ ((packed)); |
71 | |
72 | struct RR_TF_s { |
73 | __u8 flags; |
74 | struct stamp times[]; /* Variable number of these beasts */ |
75 | } __attribute__ ((packed)); |
76 | |
77 | /* Linux-specific extension for transparent decompression */ |
78 | struct RR_ZF_s { |
79 | __u8 algorithm[2]; |
80 | __u8 parms[2]; |
81 | __u8 real_size[8]; |
82 | }; |
83 | |
84 | /* |
85 | * These are the bits and their meanings for flags in the TF structure. |
86 | */ |
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 | |
96 | struct rock_ridge { |
97 | __u8 signature[2]; |
98 | __u8 len; |
99 | __u8 version; |
100 | union { |
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; |
113 | } u; |
114 | }; |
115 | |
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 */ |
124 | |