1234250Sobrien#------------------------------------------------------------------------------
2234250Sobrien# zfs:	file(1) magic for ZFS dumps
3234250Sobrien#
4234250Sobrien# From <rea-fbsd@codelabs.ru>
5234250Sobrien# ZFS dump header has the following structure (as per zfs_ioctl.h
6234250Sobrien# in FreeBSD with drr_type is set to DRR_BEGIN)
7234250Sobrien#
8234250Sobrien#   enum {
9234250Sobrien#	DRR_BEGIN, DRR_OBJECT, DRR_FREEOBJECTS,
10234250Sobrien#	DRR_WRITE, DRR_FREE, DRR_END,
11234250Sobrien#   } drr_type;
12234250Sobrien#   uint32_t drr_pad;
13234250Sobrien#   uint64_t drr_magic;
14234250Sobrien#   uint64_t drr_version;
15234250Sobrien#   uint64_t drr_creation_time;
16234250Sobrien#   dmu_objset_type_t drr_type;
17234250Sobrien#   uint32_t drr_pad;
18234250Sobrien#   uint64_t drr_toguid;
19234250Sobrien#   uint64_t drr_fromguid;
20234250Sobrien#   char drr_toname[MAXNAMELEN];
21234250Sobrien#
22234250Sobrien# Backup magic is 0x00000002f5bacbac (quad word)
23234250Sobrien# The drr_type is defined as
24234250Sobrien#   typedef enum dmu_objset_type {
25234250Sobrien#	  DMU_OST_NONE,
26234250Sobrien#	  DMU_OST_META,
27234250Sobrien#	  DMU_OST_ZFS,
28234250Sobrien#	  DMU_OST_ZVOL,
29234250Sobrien#	  DMU_OST_OTHER,		  /* For testing only! */
30234250Sobrien#	  DMU_OST_ANY,			  /* Be careful! */
31234250Sobrien#	  DMU_OST_NUMTYPES
32234250Sobrien#  } dmu_objset_type_t;
33234250Sobrien#
34234250Sobrien# Almost all uint64_t fields are printed as the 32-bit ones (with high
35234250Sobrien# 32 bits zeroed), because there is no simple way to print them as the
36234250Sobrien# full 64-bit values.
37234250Sobrien
38234250Sobrien# Big-endian values
39234250Sobrien8	string	\000\000\000\002\365\272\313\254 ZFS shapshot (big-endian machine),
40267843Sdelphij>20	belong	x	version %u,
41234250Sobrien>32	belong	0	type: NONE,
42234250Sobrien>32	belong	1	type: META,
43234250Sobrien>32	belong	2	type: ZFS,
44234250Sobrien>32	belong	3	type: ZVOL,
45234250Sobrien>32	belong	4	type: OTHER,
46234250Sobrien>32	belong	5	type: ANY,
47267843Sdelphij>32	belong	>5	type: UNKNOWN (%u),
48234250Sobrien>40	byte	x	destination GUID: %02X
49234250Sobrien>41	byte	x	%02X
50234250Sobrien>42	byte	x	%02X
51234250Sobrien>43	byte	x	%02X
52234250Sobrien>44	byte	x	%02X
53234250Sobrien>45	byte	x	%02X
54234250Sobrien>46	byte	x	%02X
55234250Sobrien>47	byte	x	%02X,
56234250Sobrien>48	ulong	>0
57234250Sobrien>>52	ulong	>0
58234250Sobrien>>>48	byte	x	source GUID: %02X
59234250Sobrien>>>49	byte	x	%02X
60234250Sobrien>>>50	byte	x	%02X
61234250Sobrien>>>51	byte	x	%02X
62234250Sobrien>>>52	byte	x	%02X
63234250Sobrien>>>53	byte	x	%02X
64234250Sobrien>>>54	byte	x	%02X
65234250Sobrien>>>55	byte	x	%02X,
66234250Sobrien>56	string	>\0	name: '%s'
67234250Sobrien
68234250Sobrien# Little-endian values
69234250Sobrien8	string	\254\313\272\365\002\000\000\000	ZFS shapshot (little-endian machine),
70267843Sdelphij>16	lelong	x	version %u,
71234250Sobrien>32	lelong	0	type: NONE,
72234250Sobrien>32	lelong	1	type: META,
73234250Sobrien>32	lelong	2	type: ZFS,
74234250Sobrien>32	lelong	3	type: ZVOL,
75234250Sobrien>32	lelong	4	type: OTHER,
76234250Sobrien>32	lelong	5	type: ANY,
77267843Sdelphij>32	lelong	>5	type: UNKNOWN (%u),
78234250Sobrien>47	byte	x	destination GUID: %02X
79234250Sobrien>46	byte	x	%02X
80234250Sobrien>45	byte	x	%02X
81234250Sobrien>44	byte	x	%02X
82234250Sobrien>43	byte	x	%02X
83234250Sobrien>42	byte	x	%02X
84234250Sobrien>41	byte	x	%02X
85234250Sobrien>40	byte	x	%02X,
86234250Sobrien>48	ulong	>0
87234250Sobrien>>52	ulong	>0
88234250Sobrien>>>55	byte	x	source GUID: %02X
89234250Sobrien>>>54	byte	x	%02X
90234250Sobrien>>>53	byte	x	%02X
91234250Sobrien>>>52	byte	x	%02X
92234250Sobrien>>>51	byte	x	%02X
93234250Sobrien>>>50	byte	x	%02X
94234250Sobrien>>>49	byte	x	%02X
95234250Sobrien>>>48	byte	x	%02X,
96234250Sobrien>56	string	>\0	name: '%s'
97