| 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 */