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  */
21f3861e1aSahl 
22fa9e4066Sahrens /*
2355434c77Sek110237  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
24fa9e4066Sahrens  * Use is subject to license terms.
25fa9e4066Sahrens  */
26fa9e4066Sahrens 
27fa9e4066Sahrens #ifndef	_LIBFS_IMPL_H
28fa9e4066Sahrens #define	_LIBFS_IMPL_H
29fa9e4066Sahrens 
30fa9e4066Sahrens #pragma ident	"%Z%%M%	%I%	%E% SMI"
31fa9e4066Sahrens 
32fa9e4066Sahrens #include <sys/dmu.h>
33fa9e4066Sahrens #include <sys/fs/zfs.h>
34fa9e4066Sahrens #include <sys/zfs_ioctl.h>
35fa9e4066Sahrens #include <sys/zfs_acl.h>
36ecd6cf80Smarks #include <sys/spa.h>
37fa9e4066Sahrens #include <sys/nvpair.h>
38fa9e4066Sahrens 
3999653d4eSeschrock #include <libuutil.h>
40fa9e4066Sahrens #include <libzfs.h>
4167331909Sdougm #include <libshare.h>
42fa9e4066Sahrens 
43fa9e4066Sahrens #ifdef	__cplusplus
44fa9e4066Sahrens extern "C" {
45fa9e4066Sahrens #endif
46fa9e4066Sahrens 
4799653d4eSeschrock struct libzfs_handle {
4899653d4eSeschrock 	int libzfs_error;
4999653d4eSeschrock 	int libzfs_fd;
5099653d4eSeschrock 	FILE *libzfs_mnttab;
5199653d4eSeschrock 	FILE *libzfs_sharetab;
5299653d4eSeschrock 	uu_avl_pool_t *libzfs_ns_avlpool;
5399653d4eSeschrock 	uu_avl_t *libzfs_ns_avl;
5499653d4eSeschrock 	uint64_t libzfs_ns_gen;
5599653d4eSeschrock 	int libzfs_desc_active;
5699653d4eSeschrock 	char libzfs_action[1024];
5799653d4eSeschrock 	char libzfs_desc[1024];
58ecd6cf80Smarks 	char *libzfs_log_str;
5999653d4eSeschrock 	int libzfs_printerr;
6067331909Sdougm 	void *libzfs_sharehdl; /* libshare handle */
6199653d4eSeschrock };
6299653d4eSeschrock 
63fa9e4066Sahrens struct zfs_handle {
6499653d4eSeschrock 	libzfs_handle_t *zfs_hdl;
65fa9e4066Sahrens 	char zfs_name[ZFS_MAXNAMELEN];
66a2eea2e1Sahrens 	zfs_type_t zfs_type; /* type including snapshot */
67a2eea2e1Sahrens 	zfs_type_t zfs_head_type; /* type excluding snapshot */
68fa9e4066Sahrens 	dmu_objset_stats_t zfs_dmustats;
697f7322feSeschrock 	nvlist_t *zfs_props;
70e9dbad6fSeschrock 	nvlist_t *zfs_user_props;
713bb79becSeschrock 	boolean_t zfs_mntcheck;
72fa9e4066Sahrens 	char *zfs_mntopts;
73ea8dc4b6Seschrock 	char zfs_root[MAXPATHLEN];
74fa9e4066Sahrens };
75fa9e4066Sahrens 
76e9dbad6fSeschrock /*
77e9dbad6fSeschrock  * This is different from checking zfs_type, because it will also catch
78e9dbad6fSeschrock  * snapshots of volumes.
79e9dbad6fSeschrock  */
80a2eea2e1Sahrens #define	ZFS_IS_VOLUME(zhp) ((zhp)->zfs_head_type == ZFS_TYPE_VOLUME)
81e9dbad6fSeschrock 
82fa9e4066Sahrens struct zpool_handle {
8399653d4eSeschrock 	libzfs_handle_t *zpool_hdl;
84fa9e4066Sahrens 	char zpool_name[ZPOOL_MAXNAMELEN];
85fa9e4066Sahrens 	int zpool_state;
86fa9e4066Sahrens 	size_t zpool_config_size;
87fa9e4066Sahrens 	nvlist_t *zpool_config;
88088e9d47Seschrock 	nvlist_t *zpool_old_config;
89b1b8ab34Slling 	nvlist_t *zpool_props;
908488aeb5Staylor 	diskaddr_t zpool_start_block;
91fa9e4066Sahrens };
92fa9e4066Sahrens 
93ece3d9b3Slling int zfs_error(libzfs_handle_t *, int, const char *);
94ece3d9b3Slling int zfs_error_fmt(libzfs_handle_t *, int, const char *, ...);
9599653d4eSeschrock void zfs_error_aux(libzfs_handle_t *, const char *, ...);
9699653d4eSeschrock void *zfs_alloc(libzfs_handle_t *, size_t);
97e9dbad6fSeschrock void *zfs_realloc(libzfs_handle_t *, void *, size_t, size_t);
9899653d4eSeschrock char *zfs_strdup(libzfs_handle_t *, const char *);
9999653d4eSeschrock int no_memory(libzfs_handle_t *);
100fa9e4066Sahrens 
101ece3d9b3Slling int zfs_standard_error(libzfs_handle_t *, int, const char *);
102ece3d9b3Slling int zfs_standard_error_fmt(libzfs_handle_t *, int, const char *, ...);
103ece3d9b3Slling int zpool_standard_error(libzfs_handle_t *, int, const char *);
104ece3d9b3Slling int zpool_standard_error_fmt(libzfs_handle_t *, int, const char *, ...);
105fa9e4066Sahrens 
1063bb79becSeschrock int get_dependents(libzfs_handle_t *, boolean_t, const char *, char ***,
1073bb79becSeschrock     size_t *);
108fa9e4066Sahrens 
109b1b8ab34Slling 
110*990b4856Slling int zprop_parse_value(libzfs_handle_t *, nvpair_t *, int, zfs_type_t,
111*990b4856Slling     nvlist_t *, char **, uint64_t *, const char *);
112*990b4856Slling int zprop_expand_list(libzfs_handle_t *hdl, zprop_list_t **plp,
113*990b4856Slling     zfs_type_t type);
114b1b8ab34Slling 
115fa9e4066Sahrens typedef struct prop_changelist prop_changelist_t;
116fa9e4066Sahrens 
117e9dbad6fSeschrock int zcmd_alloc_dst_nvlist(libzfs_handle_t *, zfs_cmd_t *, size_t);
118*990b4856Slling int zcmd_write_src_nvlist(libzfs_handle_t *, zfs_cmd_t *, nvlist_t *);
119*990b4856Slling int zcmd_write_conf_nvlist(libzfs_handle_t *, zfs_cmd_t *, nvlist_t *);
120e9dbad6fSeschrock int zcmd_expand_dst_nvlist(libzfs_handle_t *, zfs_cmd_t *);
121e9dbad6fSeschrock int zcmd_read_dst_nvlist(libzfs_handle_t *, zfs_cmd_t *, nvlist_t **);
122e9dbad6fSeschrock void zcmd_free_nvlists(zfs_cmd_t *);
123e9dbad6fSeschrock 
124fa9e4066Sahrens int changelist_prefix(prop_changelist_t *);
125fa9e4066Sahrens int changelist_postfix(prop_changelist_t *);
126fa9e4066Sahrens void changelist_rename(prop_changelist_t *, const char *, const char *);
127b12a1c38Slling void changelist_remove(zfs_handle_t *, prop_changelist_t *);
128fa9e4066Sahrens void changelist_free(prop_changelist_t *);
129fa9e4066Sahrens prop_changelist_t *changelist_gather(zfs_handle_t *, zfs_prop_t, int);
130fa9e4066Sahrens int changelist_unshare(prop_changelist_t *);
131fa9e4066Sahrens int changelist_haszonedchild(prop_changelist_t *);
132fa9e4066Sahrens 
133fa9e4066Sahrens void remove_mountpoint(zfs_handle_t *);
134fa9e4066Sahrens 
13599653d4eSeschrock zfs_handle_t *make_dataset_handle(libzfs_handle_t *, const char *);
136fa9e4066Sahrens 
13794de1d4cSeschrock int zpool_open_silent(libzfs_handle_t *, const char *, zpool_handle_t **);
138fa9e4066Sahrens 
13999653d4eSeschrock int zvol_create_link(libzfs_handle_t *, const char *);
14099653d4eSeschrock int zvol_remove_link(libzfs_handle_t *, const char *);
141f3861e1aSahl int zpool_iter_zvol(zpool_handle_t *, int (*)(const char *, void *), void *);
142ea8dc4b6Seschrock 
14399653d4eSeschrock void namespace_clear(libzfs_handle_t *);
144fa9e4066Sahrens 
14567331909Sdougm /*
14667331909Sdougm  * libshare (sharemgr) interfaces used internally.
14767331909Sdougm  */
14867331909Sdougm 
14967331909Sdougm extern int zfs_init_libshare(libzfs_handle_t *, int);
15067331909Sdougm extern void zfs_uninit_libshare(libzfs_handle_t *);
15167331909Sdougm extern int zfs_parse_options(char *, char *);
15267331909Sdougm 
153fa9e4066Sahrens #ifdef	__cplusplus
154fa9e4066Sahrens }
155fa9e4066Sahrens #endif
156fa9e4066Sahrens 
157fa9e4066Sahrens #endif	/* _LIBFS_IMPL_H */
158