| Current File : //usr/include/lofi.h |
/*
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/*
* This header file defines a private interface provided by liblofi.
*/
#ifndef _LOFI_H
#define _LOFI_H
#include <sys/types.h>
#include <sys/param.h>
#include <sys/lofi_common.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifndef _KERNEL
typedef struct lofi_usergroup {
uid_t lug_uid; /* out */
gid_t lug_gid; /* out */
} lofi_usergroup_t;
/* Parameters passed into liblofi for device creation. */
typedef struct lofi_setup_arg {
char ls_filepath[MAXPATHLEN];
char ls_devpath[MAXPATHLEN];
boolean_t ls_removable;
boolean_t ls_labeled;
uint32_t ls_blocksize;
char ls_key_filepath[MAXPATHLEN];
boolean_t ls_ephemeral_key;
char *ls_cipher;
char *ls_token;
boolean_t ls_usergroup_set;
lofi_usergroup_t ls_usergroup;
boolean_t ls_iocopy;
int ls_attach_delay_secs;
int ls_attach_delay_index;
uint32_t ls_io_mtbf;
boolean_t ls_nowc;
} lofi_setup_t;
/* Lofi device information reported back from liblofi. */
typedef struct lofi_info {
uint32_t li_id;
char li_filepath[MAXPATHLEN];
char li_devpath[MAXPATHLEN];
uint32_t li_ctrl;
boolean_t li_file_inaccessible;
boolean_t li_removable;
boolean_t li_labeled;
boolean_t li_encrypted;
boolean_t li_iocopy;
boolean_t li_indestructible;
lofi_io_state_t li_io_state;
uid_t li_uid;
char *li_user;
gid_t li_gid;
char *li_group;
char li_comp_algorithm[LOFI_MAXALGLEN];
uint32_t li_io_mtbf;
boolean_t li_nowc;
} lofi_info_t;
typedef enum lofi_update_cmd {
LOFI_UPDATE_INVALID = -1,
LOFI_UPDATE_USESEGMAP = 0,
LOFI_UPDATE_LBLKSZ,
LOFI_UPDATE_PBLKSZ,
LOFI_UPDATE_DDI_NO_AUTODETACH,
LOFI_UPDATE_INDESTRUCTIBLE,
LOFI_UPDATE_IOSTATE,
LOFI_UPDATE_IOMTBF,
LOFI_UPDATE_NOWC
} lofi_update_cmd_t;
/*
* Public opague handle returned from liblofi APIs.
*/
typedef struct __lofi_result *lofi_result_t;
/*
* Interfaces for major lofi operations.
*/
/* Create lofi device. Will return lofi dev info in result. */
extern lofi_result_t lofi_setup(lofi_setup_t *req, lofi_info_t *info);
/* Destroy lofi device. */
extern lofi_result_t lofi_destroy(const char *path, boolean_t force,
boolean_t cleanup);
/* Query lofi device. Will return lofi dev info in result. */
extern lofi_result_t lofi_query(const char *path, lofi_info_t *info);
/*
* Query lofi device with the next bigger ID.
* If filepath is provided, device queried must be mapped to that file.
* Will return lofi dev info in result.
*/
extern lofi_result_t lofi_query_next(uint32_t id, const char *filepath,
lofi_info_t *info);
/* Change lofi device parameters. */
extern lofi_result_t lofi_update(const char *devpath,
lofi_update_cmd_t cmd, intptr_t val);
/* Compress a file. */
extern lofi_result_t lofi_compress(const char *filepath, const char *algname,
uint32_t segsize);
/* Uncompress a file. */
extern lofi_result_t lofi_uncompress(const char *filepath);
/*
* Helper interfaces.
*/
extern lofi_result_t lofi_valid_devpath(const char *devpath);
extern lofi_result_t lofi_devpath_to_id(const char *devpath,
uint32_t *idp, boolean_t *labeledp);
extern void lofi_result_free(lofi_result_t result);
extern int lofi_result_err(lofi_result_t result);
extern const char *lofi_result_action_str(lofi_result_t result);
extern const char *lofi_result_error_str(lofi_result_t result);
extern char *lofi_property_to_str(lofi_info_t *dev);
extern lofi_result_t lofi_parse_usergroup(char *usergroup,
lofi_usergroup_t *lu);
#endif /* !_KERNEL */
#ifdef __cplusplus
}
#endif
#endif /* _LOFI_H */