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