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[] __counted_by(len); 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 RR_TF_s { 69 __u8 flags; 70 __u8 data[]; 71 } __attribute__ ((packed)); 72 73 /* Linux-specific extension for transparent decompression */ 74 struct RR_ZF_s { 75 __u8 algorithm[2]; 76 __u8 parms[2]; 77 __u8 real_size[8]; 78 }; 79 80 /* 81 * These are the bits and their meanings for flags in the TF structure. 82 */ 83 #define TF_CREATE 1 84 #define TF_MODIFY 2 85 #define TF_ACCESS 4 86 #define TF_ATTRIBUTES 8 87 #define TF_BACKUP 16 88 #define TF_EXPIRATION 32 89 #define TF_EFFECTIVE 64 90 #define TF_LONG_FORM 128 91 92 struct rock_ridge { 93 __u8 signature[2]; 94 __u8 len; 95 __u8 version; 96 union { 97 struct SU_SP_s SP; 98 struct SU_CE_s CE; 99 struct SU_ER_s ER; 100 struct RR_RR_s RR; 101 struct RR_PX_s PX; 102 struct RR_PN_s PN; 103 struct RR_SL_s SL; 104 struct RR_NM_s NM; 105 struct RR_CL_s CL; 106 struct RR_PL_s PL; 107 struct RR_TF_s TF; 108 struct RR_ZF_s ZF; 109 } u; 110 }; 111 112 #define RR_PX 1 /* POSIX attributes */ 113 #define RR_PN 2 /* POSIX devices */ 114 #define RR_SL 4 /* Symbolic link */ 115 #define RR_NM 8 /* Alternate Name */ 116 #define RR_CL 16 /* Child link */ 117 #define RR_PL 32 /* Parent link */ 118 #define RR_RE 64 /* Relocation directory */ 119 #define RR_TF 128 /* Timestamps */ 120