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