1/*
2 * These structs are used by the system-use-sharing protocol, in which the
3 * Rock Ridge extensions are embedded.  It is quite possible that other
4 * extensions are present on the disk, and this is fine as long as they
5 * all use SUSP
6 */
7
8struct SU_SP_s {
9	unsigned char magic[2];
10	unsigned char skip;
11} __attribute__ ((packed));
12
13struct SU_CE_s {
14	char extent[8];
15	char offset[8];
16	char size[8];
17};
18
19struct SU_ER_s {
20	unsigned char len_id;
21	unsigned char len_des;
22	unsigned char len_src;
23	unsigned char ext_ver;
24	char data[0];
25} __attribute__ ((packed));
26
27struct RR_RR_s {
28	char flags[1];
29} __attribute__ ((packed));
30
31struct RR_PX_s {
32	char mode[8];
33	char n_links[8];
34	char uid[8];
35	char gid[8];
36};
37
38struct RR_PN_s {
39	char dev_high[8];
40	char dev_low[8];
41};
42
43struct SL_component {
44	unsigned char flags;
45	unsigned char len;
46	char text[0];
47} __attribute__ ((packed));
48
49struct RR_SL_s {
50	unsigned char flags;
51	struct SL_component link;
52} __attribute__ ((packed));
53
54struct RR_NM_s {
55	unsigned char flags;
56	char name[0];
57} __attribute__ ((packed));
58
59struct RR_CL_s {
60	char location[8];
61};
62
63struct RR_PL_s {
64	char location[8];
65};
66
67struct stamp {
68	char time[7];
69} __attribute__ ((packed));
70
71struct RR_TF_s {
72	char flags;
73	struct stamp times[0];	/* Variable number of these beasts */
74} __attribute__ ((packed));
75
76/* Linux-specific extension for transparent decompression */
77struct RR_ZF_s {
78	char algorithm[2];
79	char parms[2];
80	char real_size[8];
81};
82
83/*
84 * These are the bits and their meanings for flags in the TF structure.
85 */
86#define TF_CREATE 1
87#define TF_MODIFY 2
88#define TF_ACCESS 4
89#define TF_ATTRIBUTES 8
90#define TF_BACKUP 16
91#define TF_EXPIRATION 32
92#define TF_EFFECTIVE 64
93#define TF_LONG_FORM 128
94
95struct rock_ridge {
96	char signature[2];
97	unsigned char len;
98	unsigned char version;
99	union {
100		struct SU_SP_s SP;
101		struct SU_CE_s CE;
102		struct SU_ER_s ER;
103		struct RR_RR_s RR;
104		struct RR_PX_s PX;
105		struct RR_PN_s PN;
106		struct RR_SL_s SL;
107		struct RR_NM_s NM;
108		struct RR_CL_s CL;
109		struct RR_PL_s PL;
110		struct RR_TF_s TF;
111		struct RR_ZF_s ZF;
112	} u;
113};
114
115#define RR_PX 1			/* POSIX attributes */
116#define RR_PN 2			/* POSIX devices */
117#define RR_SL 4			/* Symbolic link */
118#define RR_NM 8			/* Alternate Name */
119#define RR_CL 16		/* Child link */
120#define RR_PL 32		/* Parent link */
121#define RR_RE 64		/* Relocation directory */
122#define RR_TF 128		/* Timestamps */
123