1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2a089221cSAndrew Morton /* 3a089221cSAndrew Morton * These structs are used by the system-use-sharing protocol, in which the 4a089221cSAndrew Morton * Rock Ridge extensions are embedded. It is quite possible that other 5a089221cSAndrew Morton * extensions are present on the disk, and this is fine as long as they 6a089221cSAndrew Morton * all use SUSP 7a089221cSAndrew Morton */ 81da177e4SLinus Torvalds 9642217c1SAndrew Morton struct SU_SP_s { 10cb917757SArnd Bergmann __u8 magic[2]; 11cb917757SArnd Bergmann __u8 skip; 121da177e4SLinus Torvalds } __attribute__ ((packed)); 131da177e4SLinus Torvalds 14642217c1SAndrew Morton struct SU_CE_s { 15cb917757SArnd Bergmann __u8 extent[8]; 16cb917757SArnd Bergmann __u8 offset[8]; 17cb917757SArnd Bergmann __u8 size[8]; 181da177e4SLinus Torvalds }; 191da177e4SLinus Torvalds 20642217c1SAndrew Morton struct SU_ER_s { 21cb917757SArnd Bergmann __u8 len_id; 22cb917757SArnd Bergmann __u8 len_des; 23cb917757SArnd Bergmann __u8 len_src; 24cb917757SArnd Bergmann __u8 ext_ver; 25*5e01fdffSGustavo A. R. Silva __u8 data[]; 261da177e4SLinus Torvalds } __attribute__ ((packed)); 271da177e4SLinus Torvalds 28642217c1SAndrew Morton struct RR_RR_s { 29cb917757SArnd Bergmann __u8 flags[1]; 301da177e4SLinus Torvalds } __attribute__ ((packed)); 311da177e4SLinus Torvalds 32642217c1SAndrew Morton struct RR_PX_s { 33cb917757SArnd Bergmann __u8 mode[8]; 34cb917757SArnd Bergmann __u8 n_links[8]; 35cb917757SArnd Bergmann __u8 uid[8]; 36cb917757SArnd Bergmann __u8 gid[8]; 371da177e4SLinus Torvalds }; 381da177e4SLinus Torvalds 39642217c1SAndrew Morton struct RR_PN_s { 40cb917757SArnd Bergmann __u8 dev_high[8]; 41cb917757SArnd Bergmann __u8 dev_low[8]; 421da177e4SLinus Torvalds }; 431da177e4SLinus Torvalds 441da177e4SLinus Torvalds struct SL_component { 45cb917757SArnd Bergmann __u8 flags; 46cb917757SArnd Bergmann __u8 len; 47*5e01fdffSGustavo A. R. Silva __u8 text[]; 481da177e4SLinus Torvalds } __attribute__ ((packed)); 491da177e4SLinus Torvalds 50642217c1SAndrew Morton struct RR_SL_s { 51cb917757SArnd Bergmann __u8 flags; 521da177e4SLinus Torvalds struct SL_component link; 531da177e4SLinus Torvalds } __attribute__ ((packed)); 541da177e4SLinus Torvalds 55642217c1SAndrew Morton struct RR_NM_s { 56cb917757SArnd Bergmann __u8 flags; 57*5e01fdffSGustavo A. R. Silva char name[]; 581da177e4SLinus Torvalds } __attribute__ ((packed)); 591da177e4SLinus Torvalds 60642217c1SAndrew Morton struct RR_CL_s { 61cb917757SArnd Bergmann __u8 location[8]; 621da177e4SLinus Torvalds }; 631da177e4SLinus Torvalds 64642217c1SAndrew Morton struct RR_PL_s { 65cb917757SArnd Bergmann __u8 location[8]; 661da177e4SLinus Torvalds }; 671da177e4SLinus Torvalds 681da177e4SLinus Torvalds struct stamp { 6934be4dbfSArnd Bergmann __u8 time[7]; /* actually 6 unsigned, 1 signed */ 701da177e4SLinus Torvalds } __attribute__ ((packed)); 711da177e4SLinus Torvalds 72642217c1SAndrew Morton struct RR_TF_s { 73cb917757SArnd Bergmann __u8 flags; 74*5e01fdffSGustavo A. R. Silva struct stamp times[]; /* Variable number of these beasts */ 751da177e4SLinus Torvalds } __attribute__ ((packed)); 761da177e4SLinus Torvalds 771da177e4SLinus Torvalds /* Linux-specific extension for transparent decompression */ 78642217c1SAndrew Morton struct RR_ZF_s { 79cb917757SArnd Bergmann __u8 algorithm[2]; 80cb917757SArnd Bergmann __u8 parms[2]; 81cb917757SArnd Bergmann __u8 real_size[8]; 821da177e4SLinus Torvalds }; 831da177e4SLinus Torvalds 84a089221cSAndrew Morton /* 85a089221cSAndrew Morton * These are the bits and their meanings for flags in the TF structure. 86a089221cSAndrew Morton */ 871da177e4SLinus Torvalds #define TF_CREATE 1 881da177e4SLinus Torvalds #define TF_MODIFY 2 891da177e4SLinus Torvalds #define TF_ACCESS 4 901da177e4SLinus Torvalds #define TF_ATTRIBUTES 8 911da177e4SLinus Torvalds #define TF_BACKUP 16 921da177e4SLinus Torvalds #define TF_EXPIRATION 32 931da177e4SLinus Torvalds #define TF_EFFECTIVE 64 941da177e4SLinus Torvalds #define TF_LONG_FORM 128 951da177e4SLinus Torvalds 961da177e4SLinus Torvalds struct rock_ridge { 97cb917757SArnd Bergmann __u8 signature[2]; 98cb917757SArnd Bergmann __u8 len; 99cb917757SArnd Bergmann __u8 version; 1001da177e4SLinus Torvalds union { 101642217c1SAndrew Morton struct SU_SP_s SP; 102642217c1SAndrew Morton struct SU_CE_s CE; 103642217c1SAndrew Morton struct SU_ER_s ER; 104642217c1SAndrew Morton struct RR_RR_s RR; 105642217c1SAndrew Morton struct RR_PX_s PX; 106642217c1SAndrew Morton struct RR_PN_s PN; 107642217c1SAndrew Morton struct RR_SL_s SL; 108642217c1SAndrew Morton struct RR_NM_s NM; 109642217c1SAndrew Morton struct RR_CL_s CL; 110642217c1SAndrew Morton struct RR_PL_s PL; 111642217c1SAndrew Morton struct RR_TF_s TF; 112642217c1SAndrew Morton struct RR_ZF_s ZF; 1131da177e4SLinus Torvalds } u; 1141da177e4SLinus Torvalds }; 1151da177e4SLinus Torvalds 1161da177e4SLinus Torvalds #define RR_PX 1 /* POSIX attributes */ 1171da177e4SLinus Torvalds #define RR_PN 2 /* POSIX devices */ 1181da177e4SLinus Torvalds #define RR_SL 4 /* Symbolic link */ 1191da177e4SLinus Torvalds #define RR_NM 8 /* Alternate Name */ 1201da177e4SLinus Torvalds #define RR_CL 16 /* Child link */ 1211da177e4SLinus Torvalds #define RR_PL 32 /* Parent link */ 1221da177e4SLinus Torvalds #define RR_RE 64 /* Relocation directory */ 1231da177e4SLinus Torvalds #define RR_TF 128 /* Timestamps */ 124