162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * These structs are used by the system-use-sharing protocol, in which the 462306a36Sopenharmony_ci * Rock Ridge extensions are embedded. It is quite possible that other 562306a36Sopenharmony_ci * extensions are present on the disk, and this is fine as long as they 662306a36Sopenharmony_ci * all use SUSP 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_cistruct SU_SP_s { 1062306a36Sopenharmony_ci __u8 magic[2]; 1162306a36Sopenharmony_ci __u8 skip; 1262306a36Sopenharmony_ci} __attribute__ ((packed)); 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cistruct SU_CE_s { 1562306a36Sopenharmony_ci __u8 extent[8]; 1662306a36Sopenharmony_ci __u8 offset[8]; 1762306a36Sopenharmony_ci __u8 size[8]; 1862306a36Sopenharmony_ci}; 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_cistruct SU_ER_s { 2162306a36Sopenharmony_ci __u8 len_id; 2262306a36Sopenharmony_ci __u8 len_des; 2362306a36Sopenharmony_ci __u8 len_src; 2462306a36Sopenharmony_ci __u8 ext_ver; 2562306a36Sopenharmony_ci __u8 data[]; 2662306a36Sopenharmony_ci} __attribute__ ((packed)); 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_cistruct RR_RR_s { 2962306a36Sopenharmony_ci __u8 flags[1]; 3062306a36Sopenharmony_ci} __attribute__ ((packed)); 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_cistruct RR_PX_s { 3362306a36Sopenharmony_ci __u8 mode[8]; 3462306a36Sopenharmony_ci __u8 n_links[8]; 3562306a36Sopenharmony_ci __u8 uid[8]; 3662306a36Sopenharmony_ci __u8 gid[8]; 3762306a36Sopenharmony_ci}; 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_cistruct RR_PN_s { 4062306a36Sopenharmony_ci __u8 dev_high[8]; 4162306a36Sopenharmony_ci __u8 dev_low[8]; 4262306a36Sopenharmony_ci}; 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_cistruct SL_component { 4562306a36Sopenharmony_ci __u8 flags; 4662306a36Sopenharmony_ci __u8 len; 4762306a36Sopenharmony_ci __u8 text[]; 4862306a36Sopenharmony_ci} __attribute__ ((packed)); 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_cistruct RR_SL_s { 5162306a36Sopenharmony_ci __u8 flags; 5262306a36Sopenharmony_ci struct SL_component link; 5362306a36Sopenharmony_ci} __attribute__ ((packed)); 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cistruct RR_NM_s { 5662306a36Sopenharmony_ci __u8 flags; 5762306a36Sopenharmony_ci char name[]; 5862306a36Sopenharmony_ci} __attribute__ ((packed)); 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_cistruct RR_CL_s { 6162306a36Sopenharmony_ci __u8 location[8]; 6262306a36Sopenharmony_ci}; 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_cistruct RR_PL_s { 6562306a36Sopenharmony_ci __u8 location[8]; 6662306a36Sopenharmony_ci}; 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_cistruct stamp { 6962306a36Sopenharmony_ci __u8 time[7]; /* actually 6 unsigned, 1 signed */ 7062306a36Sopenharmony_ci} __attribute__ ((packed)); 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_cistruct RR_TF_s { 7362306a36Sopenharmony_ci __u8 flags; 7462306a36Sopenharmony_ci struct stamp times[]; /* Variable number of these beasts */ 7562306a36Sopenharmony_ci} __attribute__ ((packed)); 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci/* Linux-specific extension for transparent decompression */ 7862306a36Sopenharmony_cistruct RR_ZF_s { 7962306a36Sopenharmony_ci __u8 algorithm[2]; 8062306a36Sopenharmony_ci __u8 parms[2]; 8162306a36Sopenharmony_ci __u8 real_size[8]; 8262306a36Sopenharmony_ci}; 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci/* 8562306a36Sopenharmony_ci * These are the bits and their meanings for flags in the TF structure. 8662306a36Sopenharmony_ci */ 8762306a36Sopenharmony_ci#define TF_CREATE 1 8862306a36Sopenharmony_ci#define TF_MODIFY 2 8962306a36Sopenharmony_ci#define TF_ACCESS 4 9062306a36Sopenharmony_ci#define TF_ATTRIBUTES 8 9162306a36Sopenharmony_ci#define TF_BACKUP 16 9262306a36Sopenharmony_ci#define TF_EXPIRATION 32 9362306a36Sopenharmony_ci#define TF_EFFECTIVE 64 9462306a36Sopenharmony_ci#define TF_LONG_FORM 128 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_cistruct rock_ridge { 9762306a36Sopenharmony_ci __u8 signature[2]; 9862306a36Sopenharmony_ci __u8 len; 9962306a36Sopenharmony_ci __u8 version; 10062306a36Sopenharmony_ci union { 10162306a36Sopenharmony_ci struct SU_SP_s SP; 10262306a36Sopenharmony_ci struct SU_CE_s CE; 10362306a36Sopenharmony_ci struct SU_ER_s ER; 10462306a36Sopenharmony_ci struct RR_RR_s RR; 10562306a36Sopenharmony_ci struct RR_PX_s PX; 10662306a36Sopenharmony_ci struct RR_PN_s PN; 10762306a36Sopenharmony_ci struct RR_SL_s SL; 10862306a36Sopenharmony_ci struct RR_NM_s NM; 10962306a36Sopenharmony_ci struct RR_CL_s CL; 11062306a36Sopenharmony_ci struct RR_PL_s PL; 11162306a36Sopenharmony_ci struct RR_TF_s TF; 11262306a36Sopenharmony_ci struct RR_ZF_s ZF; 11362306a36Sopenharmony_ci } u; 11462306a36Sopenharmony_ci}; 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ci#define RR_PX 1 /* POSIX attributes */ 11762306a36Sopenharmony_ci#define RR_PN 2 /* POSIX devices */ 11862306a36Sopenharmony_ci#define RR_SL 4 /* Symbolic link */ 11962306a36Sopenharmony_ci#define RR_NM 8 /* Alternate Name */ 12062306a36Sopenharmony_ci#define RR_CL 16 /* Child link */ 12162306a36Sopenharmony_ci#define RR_PL 32 /* Parent link */ 12262306a36Sopenharmony_ci#define RR_RE 64 /* Relocation directory */ 12362306a36Sopenharmony_ci#define RR_TF 128 /* Timestamps */ 124