libshare_impl.h revision 2
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * CDDL HEADER START
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 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * See the License for the specific language governing permissions
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * and limitations under the License.
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 * CDDL HEADER END
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * basic declarations for implementation of the share management
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * libraries.
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern "C" {
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#define sa_verify(x) ((void)(x))
4bff34e37def8a90f9194d81bc345c52ba20086athurlow/* directory to find plugin modules in */
4bff34e37def8a90f9194d81bc345c52ba20086athurlow#define MAXISALEN 257 /* based on sysinfo(2) man page */
4bff34e37def8a90f9194d81bc345c52ba20086athurlow/* SMF information for legacy shares */
4bff34e37def8a90f9194d81bc345c52ba20086athurlow * handle used by share read routines
4bff34e37def8a90f9194d81bc345c52ba20086athurlowtypedef struct sa_read_hdl_s {
02d09e03eb27f3a2dc299de704e45dae5173f43fGordon Ross * Conversions between sa_fs_t and plugin handle index
02d09e03eb27f3a2dc299de704e45dae5173f43fGordon Ross#define SAFS_INDEX(_safs) ((_safs) >= SA_FS_NOTFOUND ? -1 : (_safs) - 1)
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross ((_i) >= 0 && (_i) < SAFS_N ? (_i) + 1 : SA_FS_NOTFOUND)
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross * FS plugin flags
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross#define SAFS_CLOSE_NEEDED 0x1 /* FS handle initialized by plugin */
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross * Handle passed between libshare and the FS plugins.
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross * libshare plugin library types
430b4c467020edf2445feb0c21db01c88b86243aGordon Rosstypedef enum {
430b4c467020edf2445feb0c21db01c88b86243aGordon Rosstypedef enum {
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross * nvlist tags
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross * plugin library common ops
430b4c467020edf2445feb0c21db01c88b86243aGordon Rosstypedef struct {
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross int (*pi_init)(void);
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross void (*pi_fini)(void);
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 Rosstypedef struct sa_plugin_s {
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross * Specific plugin library type ops tables
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross * Each contains a sa_plugin_ops_t as first member.
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross * File system plugin type ops table
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Rosstypedef struct {
4bff34e37def8a90f9194d81bc345c52ba20086athurlow void (*saf_close)(void *);
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 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 *,
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 *,
430b4c467020edf2445feb0c21db01c88b86243aGordon Ross * Protocol plugin type ops table
430b4c467020edf2445feb0c21db01c88b86243aGordon Rosstypedef struct {
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_validate_name)(const char *, sa_validate_flags_t,
9c9af2590af49bb395bc8d2eace0f2d4ea16d165Gordon Ross int (*sap_share_validate)(libshare_handle_t *, nvlist_t *,
4bff34e37def8a90f9194d81bc345c52ba20086athurlow int (*sap_share_unpublish_byname)(const char *, const char *, int);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow int (*sap_share_publish_admin)(const 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 /* sharectl protocol property management routines */
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 * Share cache plugin type ops table
430b4c467020edf2445feb0c21db01c88b86243aGordon Rosstypedef struct {
4bff34e37def8a90f9194d81bc345c52ba20086athurlow int (*sac_init)(void *);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross void (*sac_fini)(void *);
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 int (*sac_share_find_init)(const char *, sa_proto_t, void **);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Ross int (*sac_share_find_next)(void *, nvlist_t **);
4bff34e37def8a90f9194d81bc345c52ba20086athurlow int (*sac_share_ds_find_init)(const char *, sa_proto_t, void **);
ae3d7f90695ef456a6da4f7bdccd448ebe0b99e1Gordon Ross int (*sac_share_validate_name)(const char *, sa_validate_flags_t);
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 *);
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 Rossextern int sa_share_from_path(libshare_handle_t *, const char *, nvlist_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 *);
02d09e03eb27f3a2dc299de704e45dae5173f43fGordon Rossextern int sacache_init(void *);
02d09e03eb27f3a2dc299de704e45dae5173f43fGordon Rossextern void sacache_fini(void *);
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,
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);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int saproto_init(void);
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Rossextern int saproto_fini(void);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int saproto_share_parse(sa_proto_t, const char *, int, nvlist_t **,
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Rossextern int saproto_share_merge(sa_proto_t, nvlist_t *, nvlist_t *, int,
613a2f6ba31e891e3d947a356daf5e563d43c1ceGordon Rossextern int saproto_share_set_def_proto(sa_proto_t, nvlist_t *);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int saproto_share_validate_name(const char *, sa_proto_t,
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int saproto_share_validate(libshare_handle_t *, nvlist_t *, sa_proto_t,
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int saproto_share_format_props(nvlist_t *, sa_proto_t, char **);
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 *,
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);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int sa_proto_count(void);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern char *sa_proto_get_name(int);
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 *,
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int saproto_share_proplist_from_share(sa_proto_t, nvlist_t *,
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 *,
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 *,
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 *,
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern boolean_t safs_is_zoned(libshare_handle_t *, const char *);
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int safs_share_get_acl(libshare_handle_t *, const char *, const char *,
4bff34e37def8a90f9194d81bc345c52ba20086athurlowextern int safs_share_set_acl(libshare_handle_t *, const char *, const char *,
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 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#endif /* _LIBSHARE_IMPL_H */