xref: /illumos-gate/usr/src/uts/common/fs/zfs/sys/zfs_ioctl.h (revision a2eea2e101e6a163a537dcc6d4e3c4da2a0ea5b2)
1fa9e4066Sahrens /*
2fa9e4066Sahrens  * CDDL HEADER START
3fa9e4066Sahrens  *
4fa9e4066Sahrens  * The contents of this file are subject to the terms of the
5ea8dc4b6Seschrock  * Common Development and Distribution License (the "License").
6ea8dc4b6Seschrock  * You may not use this file except in compliance with the License.
7fa9e4066Sahrens  *
8fa9e4066Sahrens  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9fa9e4066Sahrens  * or http://www.opensolaris.org/os/licensing.
10fa9e4066Sahrens  * See the License for the specific language governing permissions
11fa9e4066Sahrens  * and limitations under the License.
12fa9e4066Sahrens  *
13fa9e4066Sahrens  * When distributing Covered Code, include this CDDL HEADER in each
14fa9e4066Sahrens  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15fa9e4066Sahrens  * If applicable, add the following below this CDDL HEADER, with the
16fa9e4066Sahrens  * fields enclosed by brackets "[]" replaced with your own identifying
17fa9e4066Sahrens  * information: Portions Copyright [yyyy] [name of copyright owner]
18fa9e4066Sahrens  *
19fa9e4066Sahrens  * CDDL HEADER END
20fa9e4066Sahrens  */
21fa9e4066Sahrens /*
226b90ca48Slling  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
23fa9e4066Sahrens  * Use is subject to license terms.
24fa9e4066Sahrens  */
25fa9e4066Sahrens 
26fa9e4066Sahrens #ifndef	_SYS_ZFS_IOCTL_H
27fa9e4066Sahrens #define	_SYS_ZFS_IOCTL_H
28fa9e4066Sahrens 
29fa9e4066Sahrens #pragma ident	"%Z%%M%	%I%	%E% SMI"
30fa9e4066Sahrens 
31fa9e4066Sahrens #include <sys/cred.h>
32fa9e4066Sahrens #include <sys/dmu.h>
33ea8dc4b6Seschrock #include <sys/zio.h>
34fa9e4066Sahrens 
35fa9e4066Sahrens #ifdef	__cplusplus
36fa9e4066Sahrens extern "C" {
37fa9e4066Sahrens #endif
38fa9e4066Sahrens 
39fa9e4066Sahrens /*
40fa9e4066Sahrens  * Property values for snapdir
41fa9e4066Sahrens  */
42a0965f35Sbonwick #define	ZFS_SNAPDIR_HIDDEN		0
43a0965f35Sbonwick #define	ZFS_SNAPDIR_VISIBLE		1
44fa9e4066Sahrens 
45fa9e4066Sahrens #define	DMU_BACKUP_VERSION (1ULL)
46fa9e4066Sahrens #define	DMU_BACKUP_MAGIC 0x2F5bacbacULL
47fa9e4066Sahrens 
48fa9e4066Sahrens /*
49fa9e4066Sahrens  * zfs ioctl command structure
50fa9e4066Sahrens  */
51fa9e4066Sahrens typedef struct dmu_replay_record {
52fa9e4066Sahrens 	enum {
53fa9e4066Sahrens 		DRR_BEGIN, DRR_OBJECT, DRR_FREEOBJECTS,
54fa9e4066Sahrens 		DRR_WRITE, DRR_FREE, DRR_END,
55fa9e4066Sahrens 	} drr_type;
56fa9e4066Sahrens 	uint32_t drr_pad;
57fa9e4066Sahrens 	union {
58fa9e4066Sahrens 		struct drr_begin {
59fa9e4066Sahrens 			uint64_t drr_magic;
60fa9e4066Sahrens 			uint64_t drr_version;
61fa9e4066Sahrens 			uint64_t drr_creation_time;
62fa9e4066Sahrens 			dmu_objset_type_t drr_type;
63fa9e4066Sahrens 			uint32_t drr_pad;
64fa9e4066Sahrens 			uint64_t drr_toguid;
65fa9e4066Sahrens 			uint64_t drr_fromguid;
66fa9e4066Sahrens 			char drr_toname[MAXNAMELEN];
67fa9e4066Sahrens 		} drr_begin;
68fa9e4066Sahrens 		struct drr_end {
69ea8dc4b6Seschrock 			zio_cksum_t drr_checksum;
70fa9e4066Sahrens 		} drr_end;
71fa9e4066Sahrens 		struct drr_object {
72fa9e4066Sahrens 			uint64_t drr_object;
73fa9e4066Sahrens 			dmu_object_type_t drr_type;
74fa9e4066Sahrens 			dmu_object_type_t drr_bonustype;
75fa9e4066Sahrens 			uint32_t drr_blksz;
76fa9e4066Sahrens 			uint32_t drr_bonuslen;
77fa9e4066Sahrens 			uint8_t drr_checksum;
78fa9e4066Sahrens 			uint8_t drr_compress;
79fa9e4066Sahrens 			uint8_t drr_pad[6];
80*a2eea2e1Sahrens 			/* bonus content follows */
81fa9e4066Sahrens 		} drr_object;
82fa9e4066Sahrens 		struct drr_freeobjects {
83fa9e4066Sahrens 			uint64_t drr_firstobj;
84fa9e4066Sahrens 			uint64_t drr_numobjs;
85fa9e4066Sahrens 		} drr_freeobjects;
86fa9e4066Sahrens 		struct drr_write {
87fa9e4066Sahrens 			uint64_t drr_object;
88fa9e4066Sahrens 			dmu_object_type_t drr_type;
89fa9e4066Sahrens 			uint32_t drr_pad;
90fa9e4066Sahrens 			uint64_t drr_offset;
91fa9e4066Sahrens 			uint64_t drr_length;
92*a2eea2e1Sahrens 			/* content follows */
93fa9e4066Sahrens 		} drr_write;
94fa9e4066Sahrens 		struct drr_free {
95fa9e4066Sahrens 			uint64_t drr_object;
96fa9e4066Sahrens 			uint64_t drr_offset;
97fa9e4066Sahrens 			uint64_t drr_length;
98fa9e4066Sahrens 		} drr_free;
99fa9e4066Sahrens 	} drr_u;
100fa9e4066Sahrens } dmu_replay_record_t;
101fa9e4066Sahrens 
102ea8dc4b6Seschrock typedef struct zinject_record {
103ea8dc4b6Seschrock 	uint64_t	zi_objset;
104ea8dc4b6Seschrock 	uint64_t	zi_object;
105ea8dc4b6Seschrock 	uint64_t	zi_start;
106ea8dc4b6Seschrock 	uint64_t	zi_end;
107ea8dc4b6Seschrock 	uint64_t	zi_guid;
108ea8dc4b6Seschrock 	uint32_t	zi_level;
109ea8dc4b6Seschrock 	uint32_t	zi_error;
110ea8dc4b6Seschrock 	uint64_t	zi_type;
111ea8dc4b6Seschrock 	uint32_t	zi_freq;
112ea8dc4b6Seschrock } zinject_record_t;
113ea8dc4b6Seschrock 
114ea8dc4b6Seschrock #define	ZINJECT_NULL		0x1
115ea8dc4b6Seschrock #define	ZINJECT_FLUSH_ARC	0x2
116ea8dc4b6Seschrock #define	ZINJECT_UNLOAD_SPA	0x4
117ea8dc4b6Seschrock 
118fa9e4066Sahrens typedef struct zfs_cmd {
11915f66a7fSek 	char		zc_name[MAXPATHLEN];
120e9dbad6fSeschrock 	char		zc_value[MAXPATHLEN];
121ea8dc4b6Seschrock 	uint64_t	zc_guid;
122e9dbad6fSeschrock 	uint64_t	zc_nvlist_src;	/* really (char *) */
123e9dbad6fSeschrock 	uint64_t	zc_nvlist_src_size;
124e9dbad6fSeschrock 	uint64_t	zc_nvlist_dst;	/* really (char *) */
125e9dbad6fSeschrock 	uint64_t	zc_nvlist_dst_size;
126fa9e4066Sahrens 	uint64_t	zc_cookie;
127fa9e4066Sahrens 	uint64_t	zc_cred;
128fa9e4066Sahrens 	uint64_t	zc_dev;
129fa9e4066Sahrens 	uint64_t	zc_objset_type;
130fa9e4066Sahrens 	dmu_objset_stats_t zc_objset_stats;
131fa9e4066Sahrens 	struct drr_begin zc_begin_record;
132ea8dc4b6Seschrock 	zinject_record_t zc_inject_record;
133ea8dc4b6Seschrock 	zbookmark_t	zc_bookmark;
134fa9e4066Sahrens } zfs_cmd_t;
135fa9e4066Sahrens 
136e9dbad6fSeschrock typedef struct zfs_create_data {
137e9dbad6fSeschrock 	cred_t		*zc_cred;
138e9dbad6fSeschrock 	dev_t		zc_dev;
139e9dbad6fSeschrock 	nvlist_t	*zc_props;
140e9dbad6fSeschrock } zfs_create_data_t;
141e9dbad6fSeschrock 
142a0965f35Sbonwick #define	ZVOL_MAX_MINOR	(1 << 16)
143a0965f35Sbonwick #define	ZFS_MIN_MINOR	(ZVOL_MAX_MINOR + 1)
144a0965f35Sbonwick 
145fa9e4066Sahrens #ifdef _KERNEL
146fa9e4066Sahrens 
147fa9e4066Sahrens extern dev_info_t *zfs_dip;
148fa9e4066Sahrens 
149e9dbad6fSeschrock extern int zfs_secpolicy_write(const char *dataset, cred_t *cr);
150fa9e4066Sahrens extern int zfs_busy(void);
151fa9e4066Sahrens 
152fa9e4066Sahrens #endif	/* _KERNEL */
153fa9e4066Sahrens 
154fa9e4066Sahrens #ifdef	__cplusplus
155fa9e4066Sahrens }
156fa9e4066Sahrens #endif
157fa9e4066Sahrens 
158fa9e4066Sahrens #endif	/* _SYS_ZFS_IOCTL_H */
159