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

#ifndef	_LIBSHADOWFS_H
#define	_LIBSHADOWFS_H

#include <sys/types.h>
#include <sys/list.h>
#include <stdarg.h>
#include <synch.h>
#include <paths.h>
#include <libscf.h>
#include <libscf_priv.h>
#include <libshadowfs_impl.h>

#ifdef	__cplusplus
extern "C" {
#endif

typedef struct shadow_conspiracy shadow_conspiracy_t;

#define	SHADOWD_INST_NAME	"system/filesystem/shadowd:default"
#define	SHADOWD_INST_FMRI	\
    SCF_FMRI_SVC_PREFIX SCF_FMRI_SERVICE_PREFIX SHADOWD_INST_NAME

extern boolean_t shadow_migrate_done(shadow_handle_t *);

extern int shadow_migrate_iter(shadow_handle_t *,
    void (*)(const char *, void *), void *);
extern void shadow_migrate_delay(shadow_handle_t *, uint32_t);
extern void *shadow_migrate_read_fidlist(int, const size_t, size_t *);

extern shadow_conspiracy_t *shadcons_init(const char *);
extern int shadcons_enable_output(shadow_conspiracy_t *, const char *,
    boolean_t);
extern void shadcons_disable_output(shadow_conspiracy_t *);
extern size_t shadcons_hash_count(shadow_conspiracy_t *);
extern const char *shadcons_hashentry_dataset(shadow_conspiracy_t *, void *);
extern void *shadcons_hash_first(shadow_conspiracy_t *);
extern void *shadcons_hash_next(shadow_conspiracy_t *, void *);
extern void shadcons_hash_remove(shadow_conspiracy_t *, void *);
extern void shadcons_fini(shadow_conspiracy_t *);
extern void shadcons_lock(shadow_conspiracy_t *);
extern void shadcons_unlock(shadow_conspiracy_t *);

extern int shadcons_bounded_fn(shadow_conspiracy_t *, int (*workfn)(void*),
    void *, uint64_t, int (*canaryfn)(void*), void *, uint64_t);

extern void shadcons_stop(shadow_conspiracy_t *, const char *);
extern int shadcons_cancel(shadow_conspiracy_t *, const char *);
extern int shadcons_svc_refresh(shadow_conspiracy_t *);
extern int shadcons_svc_start(shadow_conspiracy_t *);
extern int shadcons_svc_stop(shadow_conspiracy_t *);
extern int shadcons_start(shadow_conspiracy_t *, const char *, const char *,
    const char *, boolean_t *);

extern nvlist_t *shadcons_status_all(shadow_conspiracy_t *, int *);
extern nvlist_t *shadcons_status(shadow_conspiracy_t *, const char *, int *);
extern nvlist_t *shadcons_errors(shadow_conspiracy_t *, const char *, int *);
extern nvlist_t *shadcons_errors_all(shadow_conspiracy_t *, int *);
extern boolean_t shadcons_quiesce_all(shadow_conspiracy_t *);
extern void shadcons_resume_all(shadow_conspiracy_t *);

extern void shadcons_dprintf(shadow_conspiracy_t *, const char *, ...);
extern void shadcons_warn(shadow_conspiracy_t *, const char *, ...);

extern uint64_t shadcons_mount_timeout(shadow_conspiracy_t *);
extern uint64_t shadcons_mount_retry_wait(shadow_conspiracy_t *);
extern uint64_t shadcons_mount_max_retry_wait(shadow_conspiracy_t *);
extern uint64_t shadcons_mount_freq(shadow_conspiracy_t *);

extern int shadow_mntent_match(FILE *, boolean_t, struct mnttab *,
    struct mnttab *);
extern char *shadow_mntent_extract_src(shadow_conspiracy_t *,
    struct mnttab *);

#ifdef	__cplusplus
}
#endif

#endif	/* _LIBSHADOWFS_H */