#ifndef _LIBBE_H
#define _LIBBE_H
#include <libnvpair.h>
#include <uuid/uuid.h>
#include <libzfs.h>
#ifdef __cplusplus
extern "C" {
#endif
#define BE_ATTR_ORIG_BE_NAME "orig_be_name"
#define BE_ATTR_ORIG_BE_POOL "orig_be_pool"
#define BE_ATTR_ORIG_BE_ROOT "orig_be_root"
#define BE_ATTR_SNAP_NAME "snap_name"
#define BE_ATTR_NEW_BE_NAME "new_be_name"
#define BE_ATTR_NEW_BE_POOL "new_be_pool"
#define BE_ATTR_NEW_BE_DESC "new_be_desc"
#define BE_ATTR_POLICY "policy"
#define BE_ATTR_ZFS_PROPERTIES "zfs_properties"
#define BE_ATTR_FS_NAMES "fs_names"
#define BE_ATTR_FS_NUM "fs_num"
#define BE_ATTR_SHARED_FS_NAMES "shared_fs_names"
#define BE_ATTR_SHARED_FS_NUM "shared_fs_num"
#define BE_ATTR_MOUNTPOINT "mountpoint"
#define BE_ATTR_MOUNT_FLAGS "mount_flags"
#define BE_ATTR_UNMOUNT_FLAGS "unmount_flags"
#define BE_ATTR_DESTROY_FLAGS "destroy_flags"
#define BE_ATTR_INSTALL_FLAGS "install_flags"
#define BE_ATTR_ROOT_DS "root_ds"
#define BE_ATTR_UUID_STR "uuid_str"
#define BE_ATTR_ACTIVE "active"
#define BE_ATTR_ACTIVE_ON_BOOT "active_boot"
#define BE_ATTR_ACTIVE_NEXTBOOT "active_nextboot"
#define BE_ATTR_GLOBAL_ACTIVE "global_active"
#define BE_ATTR_SPACE "space_used"
#define BE_ATTR_DATASET "dataset"
#define BE_ATTR_STATUS "status"
#define BE_ATTR_DATE "date"
#define BE_ATTR_MOUNTED "mounted"
typedef enum {
BE_SUCCESS = 0,
BE_ERR_ACCESS = 4000,
BE_ERR_ACTIVATE_CURR,
BE_ERR_AUTONAME,
BE_ERR_BE_NOENT,
BE_ERR_BUSY,
BE_ERR_CANCELED,
BE_ERR_CLONE,
BE_ERR_COPY,
BE_ERR_CREATDS,
BE_ERR_CURR_BE_NOT_FOUND,
BE_ERR_DESTROY,
BE_ERR_DEMOTE,
BE_ERR_DSTYPE,
BE_ERR_BE_EXISTS,
BE_ERR_INIT,
BE_ERR_INTR,
BE_ERR_INVAL,
BE_ERR_INVALPROP,
BE_ERR_INVALMOUNTPOINT,
BE_ERR_MOUNT,
BE_ERR_MOUNTED,
BE_ERR_NAMETOOLONG,
BE_ERR_NOENT,
BE_ERR_POOL_NOENT,
BE_ERR_NODEV,
BE_ERR_NOTMOUNTED,
BE_ERR_NOMEM,
BE_ERR_NONINHERIT,
BE_ERR_NXIO,
BE_ERR_NOSPC,
BE_ERR_NOTSUP,
BE_ERR_OPEN,
BE_ERR_PERM,
BE_ERR_UNAVAIL,
BE_ERR_PROMOTE,
BE_ERR_ROFS,
BE_ERR_READONLYDS,
BE_ERR_READONLYPROP,
BE_ERR_SS_EXISTS,
BE_ERR_SS_NOENT,
BE_ERR_UMOUNT,
BE_ERR_UMOUNT_CURR_BE,
BE_ERR_UMOUNT_SHARED,
BE_ERR_UNKNOWN,
BE_ERR_ZFS,
BE_ERR_DESTROY_CURR_BE,
BE_ERR_GEN_UUID,
BE_ERR_PARSE_UUID,
BE_ERR_NO_UUID,
BE_ERR_ZONE_NO_PARENTBE,
BE_ERR_ZONE_MULTIPLE_ACTIVE,
BE_ERR_ZONE_NO_ACTIVE_ROOT,
BE_ERR_ZONE_ROOT_NOT_LEGACY,
BE_ERR_NO_MOUNTED_ZONE,
BE_ERR_MOUNT_ZONEROOT,
BE_ERR_UMOUNT_ZONEROOT,
BE_ERR_ZONES_UNMOUNT,
BE_ERR_FAULT,
BE_ERR_RENAME_ACTIVE,
BE_ERR_NO_MENU,
BE_ERR_DEV_BUSY,
BE_ERR_BAD_MENU_PATH,
BE_ERR_ZONE_SS_EXISTS,
BE_ERR_ADD_SPLASH_ICT,
BE_ERR_BOOTFILE_INST,
BE_ERR_EXTCMD
} be_errno_t;
typedef struct be_dataset_list {
uint64_t be_ds_space_used;
boolean_t be_ds_mounted;
char *be_dataset_name;
time_t be_ds_creation;
char *be_ds_mntpt;
char *be_ds_plcy_type;
struct be_dataset_list *be_next_dataset;
} be_dataset_list_t;
typedef struct be_snapshot_list {
uint64_t be_snapshot_space_used;
char *be_snapshot_name;
time_t be_snapshot_creation;
char *be_snapshot_type;
struct be_snapshot_list *be_next_snapshot;
} be_snapshot_list_t;
typedef struct be_node_list {
boolean_t be_mounted;
boolean_t be_active_next;
boolean_t be_active_on_boot;
boolean_t be_active;
boolean_t be_global_active;
uint64_t be_space_used;
char *be_node_name;
char *be_rpool;
char *be_root_ds;
char *be_mntpt;
char *be_policy_type;
char *be_uuid_str;
time_t be_node_creation;
struct be_dataset_list *be_node_datasets;
uint_t be_node_num_datasets;
struct be_snapshot_list *be_node_snapshots;
uint_t be_node_num_snapshots;
struct be_node_list *be_next_node;
} be_node_list_t;
#define BE_MOUNT_FLAG_NULL 0x00000000
#define BE_MOUNT_FLAG_SHARED_FS 0x00000001
#define BE_MOUNT_FLAG_SHARED_RW 0x00000002
#define BE_MOUNT_FLAG_NO_ZONES 0x00000004
#define BE_UNMOUNT_FLAG_NULL 0x00000000
#define BE_UNMOUNT_FLAG_FORCE 0x00000001
#define BE_DESTROY_FLAG_NULL 0x00000000
#define BE_DESTROY_FLAG_SNAPSHOTS 0x00000001
#define BE_DESTROY_FLAG_FORCE_UNMOUNT 0x00000002
#define BE_INSTALLBOOT_FLAG_NULL 0x00000000
#define BE_INSTALLBOOT_FLAG_MBR 0x00000001
#define BE_INSTALLBOOT_FLAG_FORCE 0x00000002
#define BE_INSTALLBOOT_FLAG_VERBOSE 0x00000004
#define BE_LIST_DEFAULT 0x00000000
#define BE_LIST_SNAPSHOTS 0x00000001
#define BE_LIST_ALL BE_LIST_SNAPSHOTS
typedef enum {
BE_SORT_UNSPECIFIED = -1,
BE_SORT_DATE = 0,
BE_SORT_DATE_REV,
BE_SORT_NAME,
BE_SORT_NAME_REV,
BE_SORT_SPACE,
BE_SORT_SPACE_REV
} be_sort_t;
#define BE_ENTRY_DEFAULT (-1)
int be_init(nvlist_t *);
int be_destroy(nvlist_t *);
int be_copy(nvlist_t *);
int be_mount(nvlist_t *);
int be_unmount(nvlist_t *);
int be_rename(nvlist_t *);
int be_activate(nvlist_t *);
int be_create_snapshot(nvlist_t *);
int be_destroy_snapshot(nvlist_t *);
int be_rollback(nvlist_t *);
int be_list(char *, be_node_list_t **, uint64_t);
void be_free_list(be_node_list_t *);
int be_max_avail(char *, uint64_t *);
char *be_err_to_str(int);
int be_sort(be_node_list_t **, int);
int be_get_boot_args(char **, int);
int be_installboot(nvlist_t *);
void libbe_print_errors(boolean_t);
#ifdef __cplusplus
}
#endif
#endif