Current File : //usr/include/libshare.h
/*
 * Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved.
 */

/*
 * basic API declarations for share management
 */
#ifndef _LIBSHARE_H
#define	_LIBSHARE_H

#ifdef	__cplusplus
extern "C" {
#endif

#include <libnvpair.h>
#include <sys/sa_share.h>
#include <sys/mnttab.h>
#include <sys/acl.h>

/*
 * Feature set bit definitions (sharectl)
 */

#define	SA_FEATURE_NONE		0x0000	/* no feature flags set */
#define	SA_FEATURE_RESOURCE	0x0001	/* resource names are required */
#define	SA_FEATURE_DFSTAB	0x0002	/* need to manage in dfstab */
#define	SA_FEATURE_ALLOWSUBDIRS	0x0004	/* allow subdirs to be shared */
#define	SA_FEATURE_ALLOWPARDIRS	0x0008	/* allow parent dirs to be shared */
#define	SA_FEATURE_HAS_SECTIONS	0x0010	/* protocol supports sections */
#define	SA_FEATURE_ADD_PROPERTIES	0x0020	/* can add properties */
#define	SA_FEATURE_SERVER	0x0040	/* protocol supports server mode */
#define	SA_FEATURE_MULT_RESOURCES 0x0100 /* supports multiple resources */

#define	SA_MAX_SHARE_NAME	80	/* Maximum length of share name */

typedef struct sa_share_props {
	nvlist_t *sp_nvl;	/* flattened list of dotted names */
	char *sp_sharenfs;	/* legacy sharenfs */
	char *sp_sharesmb;	/* legacy sharesmb */
} sa_share_props_t;

/*
 * Flags for sa_share_validate and sa_validate_share_name
 */
typedef uint32_t sa_validate_flags_t;
#define	SA_VALIDATE_NAME	0x1	/* global share name uniqueness */
#define	SA_VALIDATE_NOPATH	0x2	/* skip path validation */
#define	SA_VALIDATE_ENABLE	0x4	/* enable-time publishability check */
#define	SA_VALIDATE_SYNTAX	0x8	/* create- and set-time syntax check */

extern libshare_handle_t *sa_open(void);
extern void sa_close(libshare_handle_t *);
extern int sa_init_fs_handle(libshare_handle_t *, sa_fs_t, void *);
extern void *sa_get_fs_handle(libshare_handle_t *, sa_fs_t, int *);

extern int sa_share_parse(const char *, int, nvlist_t **, char *,
    size_t);
extern int sa_share_merge(nvlist_t *, nvlist_t *, int, char *, size_t);
extern int sa_share_validate_name(const char *, const char *,
    sa_validate_flags_t, sa_proto_t, char *, size_t);
extern int sa_share_validate(libshare_handle_t *, nvlist_t *,
    sa_validate_flags_t, char *, size_t);
extern int sa_share_publish(libshare_handle_t *, nvlist_t *, sa_proto_t, int,
    boolean_t);
extern int sa_share_unpublish(libshare_handle_t *, nvlist_t *, sa_proto_t, int);
extern int sa_fs_publish(libshare_handle_t *, const char *, sa_proto_t, int);
extern int sa_fs_unpublish(libshare_handle_t *, const char *, sa_proto_t, int);

extern int sa_share_write(libshare_handle_t *, nvlist_t *, boolean_t,
    boolean_t);
extern void sa_default_shr_name(const char *, sa_proto_t, char *, size_t);
extern void sa_path_to_shr_name(char *);
extern int sa_share_read_oldprop_shares(const char *, const char *,
    const char *, const char *, nvlist_t **, nvlist_t **, boolean_t);
extern int sa_share_remove(libshare_handle_t *, const char *, const char *,
    boolean_t);

extern int sa_share_lookup(const char *, const char *, sa_proto_t,
    nvlist_t **);
extern char *sa_strerror(int);

extern int sa_share_find_init(const char *, sa_proto_t, void **);
extern int sa_share_find_next(void *, nvlist_t **);
extern void sa_share_find_fini(void *);

extern int sa_share_read(libshare_handle_t *, const char *, const char *,
    nvlist_t **);
extern int sa_share_read_init(libshare_handle_t *, const char *, boolean_t,
    void **);
extern int sa_share_read_next(libshare_handle_t *, void *, nvlist_t **);
extern void sa_share_read_fini(libshare_handle_t *, void *);
extern sa_proto_t sa_sharing_enabled(libshare_handle_t *, const char *,
    const char *);
extern boolean_t sa_sharing_prop_enabled(libshare_handle_t *, const char *,
    const char *, sa_proto_t);
extern int sa_sharing_get_prop(libshare_handle_t *, const char *, const char *,
    sa_proto_t, char **);
extern int sa_sharing_set_prop(libshare_handle_t *, const char *, const char *,
    sa_proto_t, const char *);
extern int sa_share_get_acl(libshare_handle_t *, const char *, const char *,
    acl_t **);
extern int sa_share_set_acl(libshare_handle_t *, const char *, const char *,
    acl_t *);
extern int sa_get_mntpnt_for_path(libshare_handle_t *, const char *, char *,
    size_t, sa_fs_t *, char *, size_t, char *, size_t);

extern int sa_share_set_def_proto(nvlist_t *, sa_proto_t);
extern int sa_share_format_props(nvlist_t *, sa_proto_t, char **);

extern boolean_t sa_prop_empty_list(nvlist_t *);
extern int sa_prop_cmp_list(const char *, char * const *);
extern int sa_prop_case_cmp_list(const char *, char * const *);

extern int sa_path_is_shareable(libshare_handle_t *, const char *);
extern int sa_mntent_is_shareable(libshare_handle_t *, struct mnttab *);
extern boolean_t sa_path_in_current_zone(libshare_handle_t *, const char *);
extern boolean_t sa_mntpnt_in_current_zone(libshare_handle_t *, char *, char *);

extern int sa_locale_to_utf8(const char *, char **);
extern int sa_utf8_to_locale(const char *, char **);

extern int sa_share_parse_from_props(sa_share_props_t *, nvlist_t **,
    sa_validate_flags_t, char *, size_t);
extern char *sa_share_to_str(nvlist_t *);
extern int sa_share_proplist_from_share(nvlist_t *, sa_share_props_t **,
    sa_proto_t *);
extern int sa_share_parse_proplist(nvlist_t *, nvlist_t **,
    sa_validate_flags_t, char *, size_t);

/*
 * sharectl protocol property management routines
 */
extern uint64_t sa_proto_get_featureset(sa_proto_t);
extern nvlist_t *sa_proto_get_proplist(sa_proto_t);
extern char *sa_proto_get_status(sa_proto_t);
extern char *sa_proto_get_property(sa_proto_t, const char *, const char *);
extern int sa_proto_set_property(sa_proto_t, const char *, const char *,
    const char *);
extern int sa_proto_rem_section(sa_proto_t, const char *);

extern int sa_get_protocols(sa_proto_t **);

/*
 * routines for filesystem level property definitions
 */
extern int sa_prop_encode_impl(nvlist_t *, const char *, const char *,
    boolean_t, const char *, boolean_t, const char *, char *const *,
    uint_t, const char *, boolean_t, boolean_t);
extern int sa_prop_encode_string(nvlist_t *, const char *, const char *,
    boolean_t, const char *, char *const *, uint_t, const char *);
extern int sa_prop_encode_boolean(nvlist_t *, const char *, boolean_t,
    boolean_t, const char *);
extern int sa_get_propdefs(sa_proto_t, nvlist_t **, nvlist_t **, char *,
    size_t);

/*
 * routines for dtrace and logging
 */
extern void sa_trace(const char *);
extern void sa_tracef(const char *, ...);
extern void salog_error(int, const char *, ...);
extern void salog_debug(int, const char *, ...);
extern void salog_info(int, const char *, ...);
extern void salog_notice(int, const char *, ...);

extern int sa_upgrade_smf_share_group(libshare_handle_t *, char *, boolean_t);
extern boolean_t sa_is_akd_present(void);
extern uint32_t sa_protocol_valid(char *);
extern sa_proto_t sa_valid_protocols(void);
#ifdef	__cplusplus
}
#endif

#endif /* _LIBSHARE_H */