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 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