libshare_impl.h revision 2
4bff34e37def8a90f9194d81bc345c52ba20086athurlow/*
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * CDDL HEADER START
4bff34e37def8a90f9194d81bc345c52ba20086athurlow *
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * The contents of this file are subject to the terms of the
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * Common Development and Distribution License (the "License").
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * You may not use this file except in compliance with the License.
4bff34e37def8a90f9194d81bc345c52ba20086athurlow *
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * or http://www.opensolaris.org/os/licensing.
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * See the License for the specific language governing permissions
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * and limitations under the License.
4bff34e37def8a90f9194d81bc345c52ba20086athurlow *
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * When distributing Covered Code, include this CDDL HEADER in each
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * If applicable, add the following below this CDDL HEADER, with the
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * fields enclosed by brackets "[]" replaced with your own identifying
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * information: Portions Copyright [yyyy] [name of copyright owner]
4bff34e37def8a90f9194d81bc345c52ba20086athurlow *
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * CDDL HEADER END
4bff34e37def8a90f9194d81bc345c52ba20086athurlow */
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
4bff34e37def8a90f9194d81bc345c52ba20086athurlow/*
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
4bff34e37def8a90f9194d81bc345c52ba20086athurlow */
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
4bff34e37def8a90f9194d81bc345c52ba20086athurlow/*
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * basic declarations for implementation of the share management
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * libraries.
4bff34e37def8a90f9194d81bc345c52ba20086athurlow */
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#ifndef _LIBSHARE_IMPL_H
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#define _LIBSHARE_IMPL_H
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#include <dirent.h>
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#include <libshare.h>
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross#include <sharefs/share.h>
ae3d7f90695ef456a6da4f7bdccd448ebe0b99e1Gordon Ross#include <libscf.h>
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#ifdef __cplusplus
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern "C" {
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#endif
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#ifdef NDEBUG
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#define sa_verify(x) ((void)(x))
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#else
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#define sa_verify(x) assert(x)
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#endif
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#ifdef VERIFY
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#undef VERIFY
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#endif
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#define VERIFY sa_verify
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#define SA_LIBSHARE_VERSION 200
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
4bff34e37def8a90f9194d81bc345c52ba20086athurlow/* directory to find plugin modules in */
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#define SA_PLUGIN_ROOT_PROTO "/lib/share/proto"
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#define SA_PLUGIN_ROOT_FS "/lib/share/fs"
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#define SA_PLUGIN_ROOT_CACHE "/lib/share/cache"
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross#define PLUGIN_LIB_PREFIX "libshare_"
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#define MAXISALEN 257 /* based on sysinfo(2) man page */
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#define MAX_MANGLE_NUMBER 10000
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
4bff34e37def8a90f9194d81bc345c52ba20086athurlow/* SMF information for legacy shares */
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#define LEGACY_FMRI "svc:/network/shares"
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#define LEGACY_PG "shares"
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
4bff34e37def8a90f9194d81bc345c52ba20086athurlow/*
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * handle used by share read routines
4bff34e37def8a90f9194d81bc345c52ba20086athurlow */
4bff34e37def8a90f9194d81bc345c52ba20086athurlowtypedef struct sa_read_hdl_s {
4bff34e37def8a90f9194d81bc345c52ba20086athurlow sa_proto_t srh_proto; /* protocol to find */
4bff34e37def8a90f9194d81bc345c52ba20086athurlow char *srh_mntpnt; /* active fs mntpnt */
4bff34e37def8a90f9194d81bc345c52ba20086athurlow FILE *srh_mnttab_fp; /* file pointer for mnttab */
4bff34e37def8a90f9194d81bc345c52ba20086athurlow void *srh_handle; /* fs-specific data pointer */
4bff34e37def8a90f9194d81bc345c52ba20086athurlow scf_iter_t *srh_smf_iter;
4bff34e37def8a90f9194d81bc345c52ba20086athurlow scf_value_t *srh_smf_value;
4bff34e37def8a90f9194d81bc345c52ba20086athurlow scf_property_t *srh_smf_prop;
02d09e03eb27f3a2dc299de704e45dae5173f43fGordon Ross scf_propertygroup_t *srh_smf_pg;
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross boolean_t srh_include_invalid_shares;
02d09e03eb27f3a2dc299de704e45dae5173f43fGordon Ross} sa_read_hdl_t;
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross/*
02d09e03eb27f3a2dc299de704e45dae5173f43fGordon Ross * Conversions between sa_fs_t and plugin handle index
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross */
02d09e03eb27f3a2dc299de704e45dae5173f43fGordon Ross#define SAFS_INDEX(_safs) ((_safs) >= SA_FS_NOTFOUND ? -1 : (_safs) - 1)
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross#define SAFS_N (SA_FS_NOTFOUND - 1)
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#define SAFS_TYPE(_i) \
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross ((_i) >= 0 && (_i) < SAFS_N ? (_i) + 1 : SA_FS_NOTFOUND)
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross/*
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross * FS plugin flags
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross */
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross#define SAFS_CLOSE_NEEDED 0x1 /* FS handle initialized by plugin */
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross/*
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross * Handle passed between libshare and the FS plugins.
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross */
430b4c467020edf2445feb0c21db01c88b86243aGordon Rossstruct libshare_handle {
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross void *safs_plugin_handles[SAFS_N];
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross uint8_t safs_flags[SAFS_N];
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross};
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross/*
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross * libshare plugin library types
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross */
430b4c467020edf2445feb0c21db01c88b86243aGordon Rosstypedef enum {
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross SA_PLUGIN_FS = 0,
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross SA_PLUGIN_PROTO,
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross SA_PLUGIN_CACHE
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross} sa_plugin_type_t;
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross
430b4c467020edf2445feb0c21db01c88b86243aGordon Rosstypedef enum {
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross SA_NOTIFY_OP_PUBLISH,
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross SA_NOTIFY_OP_UNPUBLISH
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross} sa_notify_op_t;
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross/*
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross * nvlist tags
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross */
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross#define SA_PROTO_TAG_NFS "nfs"
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross#define SA_PROTO_TAG_SMB "smb"
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross#define SA_PROTO_TAG_ANY "any"
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross/*
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross * plugin library common ops
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross */
430b4c467020edf2445feb0c21db01c88b86243aGordon Rosstypedef struct {
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross sa_plugin_type_t pi_ptype; /* plugin type */
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross uint32_t pi_type; /* instance type */
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross char *pi_name; /* instance name */
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross uint32_t pi_version; /* plugin version */
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross uint32_t pi_flags; /* Informational flags */
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross int (*pi_init)(void);
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross void (*pi_fini)(void);
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross} sa_plugin_ops_t;
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross/*
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross * Each plugin library is maintained in a list
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross * of sa_plugin_t structures. There is a list
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross * for each plugin type.
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross */
430b4c467020edf2445feb0c21db01c88b86243aGordon Rosstypedef struct sa_plugin_s {
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross struct sa_plugin_s *pi_next;
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross sa_plugin_ops_t *pi_ops;
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross void *pi_hdl;
4bff34e37def8a90f9194d81bc345c52ba20086athurlow} sa_plugin_t;
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross
4bff34e37def8a90f9194d81bc345c52ba20086athurlow/*
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross * Specific plugin library type ops tables
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross * Each contains a sa_plugin_ops_t as first member.
4bff34e37def8a90f9194d81bc345c52ba20086athurlow */
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross/*
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross * File system plugin type ops table
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross */
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Rosstypedef struct {
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross sa_plugin_ops_t saf_hdr;
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross void *(*saf_open)(libshare_handle_t *);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow void (*saf_close)(void *);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross void (*saf_reset)(libshare_handle_t *);
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross int (*saf_share_write)(libshare_handle_t *, nvlist_t *, boolean_t);
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross int (*saf_share_read)(libshare_handle_t *, const char *, const char *,
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross nvlist_t **);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*saf_share_read_init)(libshare_handle_t *, sa_read_hdl_t *);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*saf_share_read_next)(libshare_handle_t *, sa_read_hdl_t *,
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross nvlist_t **);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*saf_share_read_fini)(libshare_handle_t *, sa_read_hdl_t *);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*saf_share_remove)(libshare_handle_t *, const char *,
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross const char *, boolean_t);
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross int (*saf_share_get_acl)(libshare_handle_t *, const char *,
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross const char *, acl_t **);
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross int (*saf_share_set_acl)(libshare_handle_t *, const char *,
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross const char *, acl_t *);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*saf_get_mntpnt_for_path)(libshare_handle_t *, const char *,
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross char *, size_t, char *, size_t, char *, size_t);
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross int (*saf_sharing_enabled)(libshare_handle_t *, const char *,
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross const char *, sa_proto_t *);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*saf_sharing_get_prop)(libshare_handle_t *, const char *,
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross const char *, sa_proto_t, char **);
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross int (*saf_sharing_set_prop)(libshare_handle_t *, const char *,
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross const char *, sa_proto_t, const char *);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*saf_is_legacy)(libshare_handle_t *, const char *, boolean_t *);
02d09e03eb27f3a2dc299de704e45dae5173f43fGordon Ross int (*saf_is_zoned)(libshare_handle_t *, const char *, boolean_t *);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross void (*saf_share_notify)(libshare_handle_t *, const char *,
ae3d7f90695ef456a6da4f7bdccd448ebe0b99e1Gordon Ross sa_notify_op_t, nvlist_t *);
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross} sa_fs_ops_t;
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross/*
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross * Protocol plugin type ops table
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross */
430b4c467020edf2445feb0c21db01c88b86243aGordon Rosstypedef struct {
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross sa_plugin_ops_t sap_hdr;
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*sap_share_parse)(const char *, int, nvlist_t **, char *, size_t);
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross int (*sap_share_merge)(nvlist_t *, nvlist_t *, int, char *, size_t);
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross int (*sap_share_set_def_proto)(nvlist_t *);
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross int (*sap_share_validate_name)(const char *, sa_validate_flags_t,
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross char *, size_t);
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross int (*sap_share_validate)(libshare_handle_t *, nvlist_t *,
4bff34e37def8a90f9194d81bc345c52ba20086athurlow sa_validate_flags_t, char *, size_t);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow int (*sap_share_publish)(nvlist_t *, int);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow int (*sap_share_unpublish)(nvlist_t *, int);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow int (*sap_share_unpublish_byname)(const char *, const char *, int);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow int (*sap_share_publish_admin)(const char *);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*sap_fs_publish)(nvlist_t *, int);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*sap_fs_unpublish)(nvlist_t *, int);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow int (*sap_share_prop_format)(nvlist_t *, char **);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow int (*sap_share_proplist_from_share)(nvlist_t *, sa_share_props_t *);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow int (*sap_proto_get_propdefs)(nvlist_t **, nvlist_t **);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*sap_proto_parse_proplist)(nvlist_t *, nvlist_t **, char *,
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross size_t);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross /* sharectl protocol property management routines */
4bff34e37def8a90f9194d81bc345c52ba20086athurlow int (*sap_proto_get_features)(uint64_t *);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*sap_proto_get_proplist)(nvlist_t **);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*sap_proto_get_status)(char **);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*sap_proto_get_property)(const char *, const char *, char **);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*sap_proto_set_property)(const char *, const char *, const char *);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow int (*sap_proto_rem_section)(const char *);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow} sa_proto_ops_t;
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross/*
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * Share cache plugin type ops table
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross */
430b4c467020edf2445feb0c21db01c88b86243aGordon Rosstypedef struct {
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross sa_plugin_ops_t sac_hdr;
4bff34e37def8a90f9194d81bc345c52ba20086athurlow int (*sac_init)(void *);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross void (*sac_fini)(void *);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow int (*sac_share_add)(nvlist_t *);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow int (*sac_share_update)(nvlist_t *);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*sac_share_remove)(const char *);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow int (*sac_flush)(void);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*sac_share_lookup)(const char *, const char *, sa_proto_t,
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross nvlist_t **);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*sac_share_find_init)(const char *, sa_proto_t, void **);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*sac_share_find_next)(void *, nvlist_t **);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*sac_share_find_fini)(void *);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow int (*sac_share_ds_find_init)(const char *, sa_proto_t, void **);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow int (*sac_share_ds_find_get)(void *, nvlist_t **);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow int (*sac_share_ds_find_fini)(void *);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
ae3d7f90695ef456a6da4f7bdccd448ebe0b99e1Gordon Ross int (*sac_share_validate_name)(const char *, sa_validate_flags_t);
ae3d7f90695ef456a6da4f7bdccd448ebe0b99e1Gordon Ross} sa_cache_ops_t;
ae3d7f90695ef456a6da4f7bdccd448ebe0b99e1Gordon Ross
ae3d7f90695ef456a6da4f7bdccd448ebe0b99e1Gordon Ross/*
ae3d7f90695ef456a6da4f7bdccd448ebe0b99e1Gordon Ross * libshare_plugin.c
ae3d7f90695ef456a6da4f7bdccd448ebe0b99e1Gordon Ross */
ae3d7f90695ef456a6da4f7bdccd448ebe0b99e1Gordon Rossextern void saplugin_unload_all(void);
ae3d7f90695ef456a6da4f7bdccd448ebe0b99e1Gordon Rossextern sa_plugin_ops_t *saplugin_find_ops(sa_plugin_type_t, uint32_t);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Rossextern sa_plugin_ops_t *saplugin_next_ops(sa_plugin_type_t, sa_plugin_ops_t *);
ae3d7f90695ef456a6da4f7bdccd448ebe0b99e1Gordon Rossextern int saplugin_get_protos(sa_proto_t **);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross/*
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross * libshare_util.c
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross */
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Rossextern int sa_fstype(const char *, char **);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Rossextern void sa_free_fstype(char *);
ae3d7f90695ef456a6da4f7bdccd448ebe0b99e1Gordon Rossextern char *sa_fixup_path(char *);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Rossextern int sa_resolve_share_name_conflict(libshare_handle_t *, nvlist_t *,
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross nvlist_t **, int);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Rossextern int sa_share_from_path(libshare_handle_t *, const char *, nvlist_t **,
02d09e03eb27f3a2dc299de704e45dae5173f43fGordon Ross boolean_t *);
02d09e03eb27f3a2dc299de704e45dae5173f43fGordon Rossextern char *sa_strchr_escape(char *, char);
02d09e03eb27f3a2dc299de704e45dae5173f43fGordon Rossextern char *sa_strip_escape(char *);
ae3d7f90695ef456a6da4f7bdccd448ebe0b99e1Gordon Rossextern boolean_t sa_fstype_is_shareable(const char *);
ae3d7f90695ef456a6da4f7bdccd448ebe0b99e1Gordon Ross
ae3d7f90695ef456a6da4f7bdccd448ebe0b99e1Gordon Ross/*
ae3d7f90695ef456a6da4f7bdccd448ebe0b99e1Gordon Ross * libshare_cache.c
02d09e03eb27f3a2dc299de704e45dae5173f43fGordon Ross */
02d09e03eb27f3a2dc299de704e45dae5173f43fGordon Rossextern int sacache_init(void *);
02d09e03eb27f3a2dc299de704e45dae5173f43fGordon Rossextern void sacache_fini(void *);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Rossextern int sacache_share_add(nvlist_t *);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Rossextern int sacache_share_update(nvlist_t *);
430b4c467020edf2445feb0c21db01c88b86243aGordon Rossextern int sacache_share_remove(const char *);
430b4c467020edf2445feb0c21db01c88b86243aGordon Rossextern int sacache_flush(void);
430b4c467020edf2445feb0c21db01c88b86243aGordon Rossextern int sacache_share_lookup(const char *, const char *, sa_proto_t,
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross nvlist_t **);
430b4c467020edf2445feb0c21db01c88b86243aGordon Rossextern int sacache_share_find_init(const char *, sa_proto_t, void **);
430b4c467020edf2445feb0c21db01c88b86243aGordon Rossextern int sacache_share_find_next(void *, nvlist_t **);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Rossextern int sacache_share_find_fini(void *);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Rossextern int sacache_share_ds_find_init(const char *, sa_proto_t, void **);
430b4c467020edf2445feb0c21db01c88b86243aGordon Rossextern int sacache_share_ds_find_get(void *, nvlist_t **);
430b4c467020edf2445feb0c21db01c88b86243aGordon Rossextern int sacache_share_ds_find_fini(void *);
430b4c467020edf2445feb0c21db01c88b86243aGordon Rossextern int sacache_share_validate_name(const char *, sa_validate_flags_t);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
4bff34e37def8a90f9194d81bc345c52ba20086athurlow/*
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * libshare_proto.c
4bff34e37def8a90f9194d81bc345c52ba20086athurlow */
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int saproto_init(void);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Rossextern int saproto_fini(void);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int saproto_share_parse(sa_proto_t, const char *, int, nvlist_t **,
4bff34e37def8a90f9194d81bc345c52ba20086athurlow char *, size_t);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Rossextern int saproto_share_merge(sa_proto_t, nvlist_t *, nvlist_t *, int,
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross char *, size_t);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Rossextern int saproto_share_set_def_proto(sa_proto_t, nvlist_t *);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int saproto_share_validate_name(const char *, sa_proto_t,
4bff34e37def8a90f9194d81bc345c52ba20086athurlow sa_validate_flags_t, char *, size_t);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int saproto_share_validate(libshare_handle_t *, nvlist_t *, sa_proto_t,
4bff34e37def8a90f9194d81bc345c52ba20086athurlow sa_validate_flags_t, char *, size_t);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int saproto_share_format_props(nvlist_t *, sa_proto_t, char **);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int saproto_share_publish(nvlist_t *, sa_proto_t, int);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int saproto_share_unpublish(nvlist_t *, sa_proto_t, int);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int saproto_share_unpublish_byname(const char *, const char *,
4bff34e37def8a90f9194d81bc345c52ba20086athurlow sa_proto_t, int);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int saproto_share_publish_admin(const char *, sa_proto_t);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int saproto_fs_publish(nvlist_t *, sa_proto_t, int);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int saproto_fs_unpublish(nvlist_t *, sa_proto_t, int);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int sa_proto_count(void);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern sa_proto_t sa_proto_get_type(int);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern char *sa_proto_get_name(int);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int sa_proto_get_index(sa_proto_t);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int saproto_get_propdefs(nvlist_t **, nvlist_t **, sa_proto_t);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int saproto_parse_proplist(sa_proto_t, nvlist_t *, nvlist_t **, char *,
4bff34e37def8a90f9194d81bc345c52ba20086athurlow size_t);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int saproto_share_proplist_from_share(sa_proto_t, nvlist_t *,
4bff34e37def8a90f9194d81bc345c52ba20086athurlow sa_share_props_t *);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow
4bff34e37def8a90f9194d81bc345c52ba20086athurlow/*
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross * libshare_fs.c
4bff34e37def8a90f9194d81bc345c52ba20086athurlow */
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int safs_init(void);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int safs_fini(void);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int safs_init_fs_handle(libshare_handle_t *, sa_fs_t, void *);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int safs_get_fs_handle(libshare_handle_t *, sa_fs_t, void **);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern void safs_close(libshare_handle_t *, sa_fs_t);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern void safs_reset(libshare_handle_t *, sa_fs_t);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int safs_share_write(libshare_handle_t *, nvlist_t *, boolean_t);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int safs_share_read(libshare_handle_t *, const char *, const char *,
4bff34e37def8a90f9194d81bc345c52ba20086athurlow nvlist_t **);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int safs_share_read_init(libshare_handle_t *, sa_read_hdl_t *);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int safs_share_read_next(libshare_handle_t *, sa_read_hdl_t *,
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross nvlist_t **);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int safs_share_read_fini(libshare_handle_t *, sa_read_hdl_t *);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Rossextern int safs_share_remove(libshare_handle_t *, const char *, const char *,
4bff34e37def8a90f9194d81bc345c52ba20086athurlow boolean_t);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern boolean_t safs_is_zoned(libshare_handle_t *, const char *);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int safs_share_get_acl(libshare_handle_t *, const char *, const char *,
4bff34e37def8a90f9194d81bc345c52ba20086athurlow acl_t **);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int safs_share_set_acl(libshare_handle_t *, const char *, const char *,
4bff34e37def8a90f9194d81bc345c52ba20086athurlow acl_t *);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int safs_get_mntpnt_for_path(libshare_handle_t *, const char *, char *,
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross size_t, sa_fs_t *, char *, size_t, char *, size_t);
430b4c467020edf2445feb0c21db01c88b86243aGordon Rossextern int safs_sharing_get_prop(libshare_handle_t *, const char *,
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross const char *, sa_proto_t, char **);
430b4c467020edf2445feb0c21db01c88b86243aGordon Rossextern int safs_sharing_set_prop(libshare_handle_t *, const char *,
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross const char *, sa_proto_t, const char *);
430b4c467020edf2445feb0c21db01c88b86243aGordon Rossextern int safs_sharing_enabled(libshare_handle_t *, const char *,
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross const char *, sa_proto_t *);
430b4c467020edf2445feb0c21db01c88b86243aGordon Rossextern void safs_share_notify(libshare_handle_t *, sa_fs_t, const char *,
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross sa_notify_op_t, nvlist_t *);
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross
430b4c467020edf2445feb0c21db01c88b86243aGordon Rossextern sa_fs_t safs_path_to_fstype(libshare_handle_t *, const char *);
430b4c467020edf2445feb0c21db01c88b86243aGordon Rossextern const char *safs_get_name(sa_fs_t fstype);
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross#ifdef __cplusplus
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross}
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross#endif
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross#endif /* _LIBSHARE_IMPL_H */
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross