libxnvme_cli.h#
Enums#
xnvme_cli_opt#
-
enum xnvme_cli_opt#
Command-Line Options, each command-line option can be one of xnvme_cli_opt_type.
Values:
-
enumerator XNVME_CLI_OPT_NONE#
XNVME_CLI_OPT_NONE.
-
enumerator XNVME_CLI_OPT_CDW00#
XNVME_CLI_OPT_CDW00.
-
enumerator XNVME_CLI_OPT_CDW01#
XNVME_CLI_OPT_CDW01.
-
enumerator XNVME_CLI_OPT_CDW02#
XNVME_CLI_OPT_CDW02.
-
enumerator XNVME_CLI_OPT_CDW03#
XNVME_CLI_OPT_CDW03.
-
enumerator XNVME_CLI_OPT_CDW04#
XNVME_CLI_OPT_CDW04.
-
enumerator XNVME_CLI_OPT_CDW05#
XNVME_CLI_OPT_CDW05.
-
enumerator XNVME_CLI_OPT_CDW06#
XNVME_CLI_OPT_CDW06.
-
enumerator XNVME_CLI_OPT_CDW07#
XNVME_CLI_OPT_CDW07.
-
enumerator XNVME_CLI_OPT_CDW08#
XNVME_CLI_OPT_CDW08.
-
enumerator XNVME_CLI_OPT_CDW09#
XNVME_CLI_OPT_CDW09.
-
enumerator XNVME_CLI_OPT_CDW10#
XNVME_CLI_OPT_CDW10.
-
enumerator XNVME_CLI_OPT_CDW11#
XNVME_CLI_OPT_CDW11.
-
enumerator XNVME_CLI_OPT_CDW12#
XNVME_CLI_OPT_CDW12.
-
enumerator XNVME_CLI_OPT_CDW13#
XNVME_CLI_OPT_CDW13.
-
enumerator XNVME_CLI_OPT_CDW14#
XNVME_CLI_OPT_CDW14.
-
enumerator XNVME_CLI_OPT_CDW15#
XNVME_CLI_OPT_CDW15.
-
enumerator XNVME_CLI_OPT_CMD_INPUT#
XNVME_CLI_OPT_CMD_INPUT.
-
enumerator XNVME_CLI_OPT_CMD_OUTPUT#
XNVME_CLI_OPT_CMD_OUTPUT.
-
enumerator XNVME_CLI_OPT_DATA_NBYTES#
XNVME_CLI_OPT_DATA_NBYTES.
-
enumerator XNVME_CLI_OPT_DATA_INPUT#
XNVME_CLI_OPT_DATA_INPUT.
-
enumerator XNVME_CLI_OPT_DATA_OUTPUT#
XNVME_CLI_OPT_DATA_OUTPUT.
-
enumerator XNVME_CLI_OPT_META_NBYTES#
XNVME_CLI_OPT_META_NBYTES.
-
enumerator XNVME_CLI_OPT_META_INPUT#
XNVME_CLI_OPT_META_INPUT.
-
enumerator XNVME_CLI_OPT_META_OUTPUT#
XNVME_CLI_OPT_META_OUTPUT.
-
enumerator XNVME_CLI_OPT_LBAFL#
XNVME_CLI_OPT_LBAFL.
-
enumerator XNVME_CLI_OPT_SLBA#
XNVME_CLI_OPT_SLBA.
-
enumerator XNVME_CLI_OPT_ELBA#
XNVME_CLI_OPT_ELBA.
-
enumerator XNVME_CLI_OPT_LBA#
XNVME_CLI_OPT_LBA.
-
enumerator XNVME_CLI_OPT_NLB#
XNVME_CLI_OPT_NLB.
-
enumerator XNVME_CLI_OPT_URI#
XNVME_CLI_OPT_URI.
-
enumerator XNVME_CLI_OPT_SYS_URI#
XNVME_CLI_OPT_SYS_URI.
-
enumerator XNVME_CLI_OPT_UUID#
XNVME_CLI_OPT_UUID.
-
enumerator XNVME_CLI_OPT_NSID#
XNVME_CLI_OPT_NSID.
-
enumerator XNVME_CLI_OPT_CNS#
XNVME_CLI_OPT_CNS.
-
enumerator XNVME_CLI_OPT_CSI#
XNVME_CLI_OPT_CSI.
-
enumerator XNVME_CLI_OPT_INDEX#
XNVME_CLI_OPT_INDEX.
-
enumerator XNVME_CLI_OPT_SETID#
XNVME_CLI_OPT_SETID.
-
enumerator XNVME_CLI_OPT_CNTID#
XNVME_CLI_OPT_CNTID.
-
enumerator XNVME_CLI_OPT_LID#
XNVME_CLI_OPT_LID.
-
enumerator XNVME_CLI_OPT_LSP#
XNVME_CLI_OPT_LSP.
-
enumerator XNVME_CLI_OPT_LPO_NBYTES#
XNVME_CLI_OPT_LPO_NBYTES.
-
enumerator XNVME_CLI_OPT_RAE#
XNVME_CLI_OPT_RAE.
-
enumerator XNVME_CLI_OPT_CLEAR#
XNVME_CLI_OPT_CLEAR.
-
enumerator XNVME_CLI_OPT_LBAFU#
XNVME_CLI_OPT_LBAFU.
-
enumerator XNVME_CLI_OPT_SES#
XNVME_CLI_OPT_SES.
-
enumerator XNVME_CLI_OPT_SEL#
XNVME_CLI_OPT_SEL.
-
enumerator XNVME_CLI_OPT_MSET#
XNVME_CLI_OPT_MSET.
-
enumerator XNVME_CLI_OPT_AUSE#
XNVME_CLI_OPT_AUSE.
-
enumerator XNVME_CLI_OPT_OVRPAT#
XNVME_CLI_OPT_OVRPAT.
-
enumerator XNVME_CLI_OPT_OWPASS#
XNVME_CLI_OPT_OWPASS.
-
enumerator XNVME_CLI_OPT_OIPBP#
XNVME_CLI_OPT_OIPBP.
-
enumerator XNVME_CLI_OPT_NODAS#
XNVME_CLI_OPT_NODAS.
-
enumerator XNVME_CLI_OPT_ACTION#
XNVME_CLI_OPT_ACTION.
-
enumerator XNVME_CLI_OPT_ZRMS#
XNVME_CLI_OPT_ZRMS.
-
enumerator XNVME_CLI_OPT_PI#
XNVME_CLI_OPT_PI.
-
enumerator XNVME_CLI_OPT_PIL#
XNVME_CLI_OPT_PIL.
-
enumerator XNVME_CLI_OPT_FID#
XNVME_CLI_OPT_FID.
-
enumerator XNVME_CLI_OPT_FEAT#
XNVME_CLI_OPT_FEAT.
-
enumerator XNVME_CLI_OPT_SEED#
XNVME_CLI_OPT_SEED.
-
enumerator XNVME_CLI_OPT_LIMIT#
XNVME_CLI_OPT_LIMIT.
-
enumerator XNVME_CLI_OPT_IOSIZE#
XNVME_CLI_OPT_IOSIZE.
-
enumerator XNVME_CLI_OPT_QDEPTH#
XNVME_CLI_OPT_QDEPTH.
-
enumerator XNVME_CLI_OPT_DIRECT#
XNVME_CLI_OPT_DIRECT.
-
enumerator XNVME_CLI_OPT_STATUS#
XNVME_CLI_OPT_STATUS.
-
enumerator XNVME_CLI_OPT_SAVE#
XNVME_CLI_OPT_SAVE.
-
enumerator XNVME_CLI_OPT_RESET#
XNVME_CLI_OPT_RESET.
-
enumerator XNVME_CLI_OPT_VERBOSE#
XNVME_CLI_OPT_VERBOSE.
-
enumerator XNVME_CLI_OPT_HELP#
XNVME_CLI_OPT_HELP.
-
enumerator XNVME_CLI_OPT_COUNT#
XNVME_CLI_OPT_COUNT.
-
enumerator XNVME_CLI_OPT_OFFSET#
XNVME_CLI_OPT_OFFSET.
-
enumerator XNVME_CLI_OPT_OPCODE#
XNVME_CLI_OPT_OPCODE.
-
enumerator XNVME_CLI_OPT_FLAGS#
XNVME_CLI_OPT_FLAGS.
-
enumerator XNVME_CLI_OPT_ALL#
XNVME_CLI_OPT_ALL.
-
enumerator XNVME_CLI_OPT_BE#
XNVME_CLI_OPT_BE.
-
enumerator XNVME_CLI_OPT_MEM#
XNVME_CLI_OPT_MEM.
-
enumerator XNVME_CLI_OPT_SYNC#
XNVME_CLI_OPT_SYNC.
-
enumerator XNVME_CLI_OPT_ASYNC#
XNVME_CLI_OPT_ASYNC.
-
enumerator XNVME_CLI_OPT_ADMIN#
XNVME_CLI_OPT_ADMIN.
-
enumerator XNVME_CLI_OPT_SHM_ID#
XNVME_CLI_OPT_SHM_ID.
-
enumerator XNVME_CLI_OPT_MAIN_CORE#
XNVME_CLI_OPT_MAIN_CORE.
-
enumerator XNVME_CLI_OPT_CORE_MASK#
XNVME_CLI_OPT_CORE_MASK.
-
enumerator XNVME_CLI_OPT_USE_CMB_SQS#
XNVME_CLI_OPT_USE_CMB_SQS.
-
enumerator XNVME_CLI_OPT_CSS#
XNVME_CLI_OPT_CSS.
-
enumerator XNVME_CLI_OPT_POLL_IO#
XNVME_CLI_OPT_POLL_IO.
-
enumerator XNVME_CLI_OPT_POLL_SQ#
XNVME_CLI_OPT_POLL_SQ.
-
enumerator XNVME_CLI_OPT_REGISTER_FILES#
XNVME_CLI_OPT_REGISTER_FILES.
-
enumerator XNVME_CLI_OPT_REGISTER_BUFFERS#
XNVME_CLI_OPT_REGISTER_BUFFERS.
-
enumerator XNVME_CLI_OPT_TRUNCATE#
XNVME_CLI_OPT_TRUNCATE.
-
enumerator XNVME_CLI_OPT_RDONLY#
XNVME_CLI_OPT_RDONLY.
-
enumerator XNVME_CLI_OPT_WRONLY#
XNVME_CLI_OPT_WRONLY.
-
enumerator XNVME_CLI_OPT_RDWR#
XNVME_CLI_OPT_RDWR.
-
enumerator XNVME_CLI_OPT_CREATE#
XNVME_CLI_OPT_CREATE.
-
enumerator XNVME_CLI_OPT_CREATE_MODE#
XNVME_CLI_OPT_CREATE_MODE.
-
enumerator XNVME_CLI_OPT_ADRFAM#
XNVME_CLI_OPT_ADRFAM.
-
enumerator XNVME_CLI_OPT_DEV_NSID#
XNVME_CLI_OPT_DEV_NSID.
-
enumerator XNVME_CLI_OPT_VEC_CNT#
XNVME_CLI_OPT_VEC_CNT.
-
enumerator XNVME_CLI_OPT_SUBNQN#
XNVME_OPT_SUBNQN.
-
enumerator XNVME_CLI_OPT_HOSTNQN#
XNVME_CLI_OPT_HOSTNQN.
-
enumerator XNVME_CLI_OPT_DTYPE#
XNVME_CLI_OPT_DTYPE.
-
enumerator XNVME_CLI_OPT_DSPEC#
XNVME_CLI_OPT_DSPEC.
-
enumerator XNVME_CLI_OPT_DOPER#
XNVME_CLI_OPT_DOPER.
-
enumerator XNVME_CLI_OPT_ENDIR#
XNVME_CLI_OPT_ENDIR.
-
enumerator XNVME_CLI_OPT_TGTDIR#
XNVME_CLI_OPT_TGTDIR.
-
enumerator XNVME_CLI_OPT_NSR#
XNVME_CLI_OPT_NSR.
-
enumerator XNVME_CLI_OPT_POSA_TITLE#
XNVME_CLI_OPT_POSA_TITLE.
-
enumerator XNVME_CLI_OPT_NON_POSA_TITLE#
XNVME_CLI_OPT_NON_POSA_TITLE.
-
enumerator XNVME_CLI_OPT_ORCH_TITLE#
XNVME_CLI_OPT_ORCH_TITLE.
-
enumerator XNVME_CLI_OPT_AD#
XNVME_CLI_OPT_AD.
-
enumerator XNVME_CLI_OPT_IDW#
XNVME_CLI_OPT_IDW.
-
enumerator XNVME_CLI_OPT_IDR#
XNVME_CLI_OPT_IDR.
-
enumerator XNVME_CLI_OPT_LLB#
XNVME_CLI_OPT_LLB.
-
enumerator XNVME_CLI_OPT_LSI#
XNVME_CLI_OPT_LSI.
-
enumerator XNVME_CLI_OPT_PID#
XNVME_CLI_OPT_PID.
-
enumerator XNVME_CLI_OPT_KV_KEY#
XNVME_CLI_OPT_KV_KEY.
-
enumerator XNVME_CLI_OPT_KV_VAL#
XNVME_CLI_OPT_KV_VAL.
-
enumerator XNVME_CLI_OPT_KV_STORE_UPDATE#
XNVME_CLI_OPT_KV_STORE_UPDATE.
-
enumerator XNVME_CLI_OPT_KV_STORE_ADD#
XNVME_CLI_OPT_KV_STORE_ADD.
-
enumerator XNVME_CLI_OPT_KV_STORE_COMPRESS#
XNVME_CLI_OPT_KV_STORE_COMPRESS.
-
enumerator XNVME_CLI_OPT_PRACT#
XNVME_CLI_OPT_PRACT.
-
enumerator XNVME_CLI_OPT_PRCHK#
XNVME_CLI_OPT_PRCHK.
-
enumerator XNVME_CLI_OPT_APPTAG#
XNVME_CLI_OPT_APPTAG.
-
enumerator XNVME_CLI_OPT_APPTAG_MASK#
XNVME_CLI_OPT_APPTAG_MASK.
-
enumerator XNVME_CLI_OPT_SDLBA#
-
enumerator XNVME_CLI_OPT_END#
XNVME_CLI_OPT_END.
-
enumerator XNVME_CLI_OPT_NONE#
xnvme_cli_opt_type#
-
enum xnvme_cli_opt_type#
XNVME_CLI_LFLG: .
/cli —verbose; always optional XNVME_CLI_LOPT: ./cli —arg 0x0; optionally provide a value XNVME_CLI_LREQ: ./cli —arg 0x0; require providing a value XNVME_CLI_POSA: ./cli arg1 arg2; required, ordered, and provides a value XNVME_CLI_SKIP: ; This argument is used for formatting etc.
Values:
-
enumerator XNVME_CLI_POSA#
XNVME_CLI_POSA.
-
enumerator XNVME_CLI_LFLG#
XNVME_CLI_LFLG.
-
enumerator XNVME_CLI_LOPT#
XNVME_CLI_LOPT.
-
enumerator XNVME_CLI_LREQ#
XNVME_CLI_LREQ.
-
enumerator XNVME_CLI_SKIP#
XNVME_CLI_SKIP.
-
enumerator XNVME_CLI_POSA#
xnvme_cli_opt_value_type#
xnvme_cli_opts#
Structs#
xnvme_cli#
-
struct xnvme_cli#
Public Members
-
const char *title#
Setup by user.
-
const char *descr_short#
Setup by user.
-
const char *descr_long#
Setup by user.
-
int nsubs#
Setup by user.
-
struct xnvme_cli_sub *subs#
Setup by user.
-
int (*ver_pr)(int)#
Setup by library if unset.
-
int argc#
Setup by library.
-
char **argv#
Setup by library.
-
struct xnvme_cli_args args#
Setup by library.
-
int given[XNVME_CLI_OPT_END]#
Setup by library.
-
struct xnvme_cli_sub *sub#
Setup by library.
-
struct xnvme_timer timer#
Used by xnvme_cli_timer_*.
-
const char *title#
xnvme_cli_args#
-
struct xnvme_cli_args#
Options are stored in an instance of this structure.
Public Members
-
struct xnvme_dev *dev#
Created.
-
const char *uri#
-
const char *sys_uri#
-
const char *subnqn#
-
const char *hostnqn#
-
const char *cmd_input#
-
const char *cmd_output#
-
size_t data_nbytes#
-
const char *data_input#
-
const char *data_output#
-
size_t meta_nbytes#
-
const char *meta_input#
-
const char *meta_output#
-
uint32_t cdw[16]#
-
uint64_t lbafl#
-
uint64_t lba#
-
uint32_t llb#
-
uint32_t nlb#
-
uint64_t slba#
-
uint64_t elba#
-
uint32_t uuid#
-
uint32_t nsid#
-
uint32_t dev_nsid#
-
uint32_t cns#
-
uint32_t csi#
-
uint64_t index#
-
uint32_t setid#
-
uint64_t cntid#
-
uint32_t lid#
-
uint32_t lsp#
-
uint64_t lpo_nbytes#
-
uint32_t rae#
-
uint32_t clear#
-
uint32_t lbafu#
-
uint32_t ses#
-
uint32_t sel#
-
uint32_t mset#
-
uint32_t ause#
-
uint32_t ovrpat#
-
uint32_t owpass#
-
uint32_t oipbp#
-
uint32_t nodas#
-
uint32_t action#
-
uint32_t zrms#
-
uint32_t pi#
-
uint32_t pil#
-
uint32_t fid#
-
uint32_t feat#
-
uint32_t seed#
-
uint32_t iosize#
-
uint32_t qdepth#
-
uint32_t direct#
-
uint32_t limit#
-
uint64_t count#
-
uint64_t offset#
-
uint64_t opcode#
-
uint64_t flags#
-
uint64_t all#
-
uint32_t status#
-
uint32_t save#
-
uint32_t reset#
-
uint32_t verbose#
-
uint32_t help#
-
const char *be#
-
const char *mem#
-
const char *sync#
-
const char *async#
-
const char *admin#
-
uint64_t shm_id#
-
uint32_t main_core#
-
const char *core_mask#
-
struct xnvme_opts_css css#
SPDK controller-setup: do command-set-selection.
-
uint32_t use_cmb_sqs#
-
const char *adrfam#
-
uint32_t poll_io#
-
uint32_t poll_sq#
-
uint32_t register_files#
-
uint32_t register_buffers#
-
uint32_t truncate#
-
uint32_t rdonly#
-
uint32_t wronly#
-
uint32_t rdwr#
-
uint32_t create#
-
uint32_t create_mode#
-
uint32_t nr#
-
uint32_t ad#
-
uint32_t idw#
-
uint32_t idr#
-
uint32_t vec_cnt#
-
uint32_t dtype#
-
uint32_t dspec#
-
uint32_t doper#
-
uint32_t endir#
-
uint32_t tgtdir#
-
uint32_t nsr#
-
uint32_t lsi#
-
uint32_t pid#
-
const char *kv_key#
-
const char *kv_val#
-
bool kv_store_add#
-
bool kv_store_update#
-
bool kv_store_compress#
-
bool pract#
-
uint8_t prchk#
-
uint32_t apptag#
-
uint32_t apptag_mask#
-
uint64_t sdlba#
-
struct xnvme_dev *dev#
xnvme_cli_enumeration#
-
struct xnvme_cli_enumeration#
List of devices found on the system usable with xNVMe.
Public Members
-
uint32_t capacity#
Remaining unused entries.
-
uint32_t nentries#
Used entries.
-
struct xnvme_ident entries[]#
Device entries.
-
uint32_t capacity#
xnvme_cli_opt_attr#
-
struct xnvme_cli_opt_attr#
Public Members
-
enum xnvme_cli_opt opt#
-
enum xnvme_cli_opt_value_type vtype#
-
const char *name#
-
const char *descr#
-
char getoptval#
-
enum xnvme_cli_opt opt#
xnvme_cli_sub#
-
struct xnvme_cli_sub#
Filled by the user of libxnvmc, usually statically right above main.
Public Members
-
const char *name#
Short name of the sub-command.
-
const char *descr_short#
Short sub-command description.
-
const char *descr_long#
Long sub-command description.
-
xnvme_cli_subfunc command#
Function to execute.
Options to parse into args and pass onto func
-
struct xnvme_cli_sub_opt opts[XNVME_CLI_SUB_OPTS_LEN]#
-
const char *name#
xnvme_cli_sub_opt#
-
struct xnvme_cli_sub_opt#
Functions#
xnvme_cli_args_pr#
-
void xnvme_cli_args_pr(struct xnvme_cli_args *args, int opts)#
xnvme_cli_enumeration_alloc#
-
int xnvme_cli_enumeration_alloc(struct xnvme_cli_enumeration **list, uint32_t capacity)#
xnvme_cli_enumeration_append#
-
int xnvme_cli_enumeration_append(struct xnvme_cli_enumeration *list, const struct xnvme_ident *entry)#
xnvme_cli_enumeration_fpp#
-
int xnvme_cli_enumeration_fpp(FILE *stream, struct xnvme_cli_enumeration *list, int opts)#
xnvme_cli_enumeration_fpr#
-
int xnvme_cli_enumeration_fpr(FILE *stream, struct xnvme_cli_enumeration *list, int opts)#
Prints the given xnvme_cli_enumeration to the given output stream.
- Parameters:
stream – output stream used for printing
list – pointer to structure to print
opts – printer options, see xnvme_pr
- Returns:
On success, the number of characters printed is returned.
xnvme_cli_enumeration_free#
-
void xnvme_cli_enumeration_free(struct xnvme_cli_enumeration *list)#
xnvme_cli_enumeration_pp#
-
int xnvme_cli_enumeration_pp(struct xnvme_cli_enumeration *list, int opts)#
xnvme_cli_enumeration_pr#
-
int xnvme_cli_enumeration_pr(struct xnvme_cli_enumeration *list, int opts)#
Prints the given xnvme_cli_enumeration to stdout.
- Parameters:
list – pointer to structure to print
opts – printer options, see xnvme_pr
- Returns:
On success, the number of characters printed is returned.
xnvme_cli_get_opt_attr#
-
const struct xnvme_cli_opt_attr *xnvme_cli_get_opt_attr(enum xnvme_cli_opt opt)#
xnvme_cli_perr#
-
void xnvme_cli_perr(const char *msg, int err)#
xnvme_cli_pinf#
-
void xnvme_cli_pinf(const char *format, ...)#
xnvme_cli_run#
xnvme_cli_timer_bw_pr#
xnvme_cli_timer_start#
xnvme_cli_timer_stop#
xnvme_cli_to_opts#
-
int xnvme_cli_to_opts(const struct xnvme_cli *cli, struct xnvme_opts *opts)#
Fill the given ‘opts’ with values parsed in the given ‘cli’.
- Parameters:
cli – The command-line-interface to parse arguments for
opts – The device-options to fill
- Returns:
On success, 0 is returned.
Header#
/**
* SPDX-FileCopyrightText: Samsung Electronics Co., Ltd
*
* SPDX-License-Identifier: BSD-3-Clause
*
* @headerfile libxnvme_cli.h
*/
#define XNVME_CLI_CORE_OPTS \
{XNVME_CLI_OPT_ORCH_TITLE, XNVME_CLI_SKIP}, {XNVME_CLI_OPT_SUBNQN, XNVME_CLI_LOPT}, \
{XNVME_CLI_OPT_HOSTNQN, XNVME_CLI_LOPT}, \
{ \
XNVME_CLI_OPT_BE, XNVME_CLI_LOPT \
}
#define XNVME_CLI_ADMIN_OPTS \
XNVME_CLI_CORE_OPTS, {XNVME_CLI_OPT_DEV_NSID, XNVME_CLI_LOPT}, \
{XNVME_CLI_OPT_ADMIN, XNVME_CLI_LOPT}, {XNVME_CLI_OPT_MEM, XNVME_CLI_LOPT}, \
{ \
XNVME_CLI_OPT_DIRECT, XNVME_CLI_LOPT \
}
#define XNVME_CLI_SYNC_OPTS \
XNVME_CLI_ADMIN_OPTS, { XNVME_CLI_OPT_SYNC, XNVME_CLI_LOPT }
#define XNVME_CLI_ASYNC_OPTS \
XNVME_CLI_SYNC_OPTS, { XNVME_CLI_OPT_ASYNC, XNVME_CLI_LOPT }
/**
* Options are stored in an instance of this structure
*
* @struct xnvme_cli_args
*/
struct xnvme_cli_args {
struct xnvme_dev *dev; ///< Created
const char *uri;
const char *sys_uri;
const char *subnqn;
const char *hostnqn;
const char *cmd_input;
const char *cmd_output;
size_t data_nbytes;
const char *data_input;
const char *data_output;
size_t meta_nbytes;
const char *meta_input;
const char *meta_output;
uint32_t cdw[16];
uint64_t lbafl;
uint64_t lba;
uint32_t llb;
uint32_t nlb;
uint64_t slba;
uint64_t elba;
uint32_t uuid;
uint32_t nsid;
uint32_t dev_nsid;
uint32_t cns;
uint32_t csi;
uint64_t index;
uint32_t setid;
uint64_t cntid;
uint32_t lid;
uint32_t lsp;
uint64_t lpo_nbytes;
uint32_t rae;
uint32_t clear;
uint32_t lbafu;
uint32_t ses;
uint32_t sel;
uint32_t mset;
uint32_t ause;
uint32_t ovrpat;
uint32_t owpass;
uint32_t oipbp;
uint32_t nodas;
uint32_t action;
uint32_t zrms;
uint32_t pi;
uint32_t pil;
uint32_t fid;
uint32_t feat;
uint32_t seed;
uint32_t iosize;
uint32_t qdepth;
uint32_t direct;
uint32_t limit;
uint64_t count;
uint64_t offset;
uint64_t opcode;
uint64_t flags;
uint64_t all;
uint32_t status;
uint32_t save;
uint32_t reset;
uint32_t verbose;
uint32_t help;
const char *be;
const char *mem;
const char *sync;
const char *async;
const char *admin;
uint64_t shm_id;
uint32_t main_core;
const char *core_mask;
struct xnvme_opts_css css; ///< SPDK controller-setup: do command-set-selection
uint32_t use_cmb_sqs;
const char *adrfam;
uint32_t poll_io;
uint32_t poll_sq;
uint32_t register_files;
uint32_t register_buffers;
uint32_t truncate;
uint32_t rdonly;
uint32_t wronly;
uint32_t rdwr;
uint32_t create;
uint32_t create_mode;
uint32_t nr;
uint32_t ad;
uint32_t idw;
uint32_t idr;
uint32_t vec_cnt;
uint32_t dtype;
uint32_t dspec;
uint32_t doper;
uint32_t endir;
uint32_t tgtdir;
uint32_t nsr;
uint32_t lsi;
uint32_t pid;
const char *kv_key;
const char *kv_val;
bool kv_store_add;
bool kv_store_update;
bool kv_store_compress;
bool pract;
uint8_t prchk;
uint32_t apptag;
uint32_t apptag_mask;
uint64_t sdlba;
};
void
xnvme_cli_args_pr(struct xnvme_cli_args *args, int opts);
/**
* Command-Line Options, each command-line option can be one of ::xnvme_cli_opt_type
*
* @enum xnvme_cli_opt
*/
enum xnvme_cli_opt {
XNVME_CLI_OPT_NONE = 0, ///< XNVME_CLI_OPT_NONE
XNVME_CLI_OPT_CDW00 = 1, ///< XNVME_CLI_OPT_CDW00
XNVME_CLI_OPT_CDW01 = 2, ///< XNVME_CLI_OPT_CDW01
XNVME_CLI_OPT_CDW02 = 3, ///< XNVME_CLI_OPT_CDW02
XNVME_CLI_OPT_CDW03 = 4, ///< XNVME_CLI_OPT_CDW03
XNVME_CLI_OPT_CDW04 = 5, ///< XNVME_CLI_OPT_CDW04
XNVME_CLI_OPT_CDW05 = 6, ///< XNVME_CLI_OPT_CDW05
XNVME_CLI_OPT_CDW06 = 7, ///< XNVME_CLI_OPT_CDW06
XNVME_CLI_OPT_CDW07 = 8, ///< XNVME_CLI_OPT_CDW07
XNVME_CLI_OPT_CDW08 = 9, ///< XNVME_CLI_OPT_CDW08
XNVME_CLI_OPT_CDW09 = 10, ///< XNVME_CLI_OPT_CDW09
XNVME_CLI_OPT_CDW10 = 11, ///< XNVME_CLI_OPT_CDW10
XNVME_CLI_OPT_CDW11 = 12, ///< XNVME_CLI_OPT_CDW11
XNVME_CLI_OPT_CDW12 = 13, ///< XNVME_CLI_OPT_CDW12
XNVME_CLI_OPT_CDW13 = 14, ///< XNVME_CLI_OPT_CDW13
XNVME_CLI_OPT_CDW14 = 15, ///< XNVME_CLI_OPT_CDW14
XNVME_CLI_OPT_CDW15 = 16, ///< XNVME_CLI_OPT_CDW15
XNVME_CLI_OPT_CMD_INPUT = 17, ///< XNVME_CLI_OPT_CMD_INPUT
XNVME_CLI_OPT_CMD_OUTPUT = 18, ///< XNVME_CLI_OPT_CMD_OUTPUT
XNVME_CLI_OPT_DATA_NBYTES = 19, ///< XNVME_CLI_OPT_DATA_NBYTES
XNVME_CLI_OPT_DATA_INPUT = 20, ///< XNVME_CLI_OPT_DATA_INPUT
XNVME_CLI_OPT_DATA_OUTPUT = 21, ///< XNVME_CLI_OPT_DATA_OUTPUT
XNVME_CLI_OPT_META_NBYTES = 22, ///< XNVME_CLI_OPT_META_NBYTES
XNVME_CLI_OPT_META_INPUT = 23, ///< XNVME_CLI_OPT_META_INPUT
XNVME_CLI_OPT_META_OUTPUT = 24, ///< XNVME_CLI_OPT_META_OUTPUT
XNVME_CLI_OPT_LBAFL = 25, ///< XNVME_CLI_OPT_LBAFL
XNVME_CLI_OPT_SLBA = 26, ///< XNVME_CLI_OPT_SLBA
XNVME_CLI_OPT_ELBA = 27, ///< XNVME_CLI_OPT_ELBA
XNVME_CLI_OPT_LBA = 28, ///< XNVME_CLI_OPT_LBA
XNVME_CLI_OPT_NLB = 29, ///< XNVME_CLI_OPT_NLB
XNVME_CLI_OPT_URI = 30, ///< XNVME_CLI_OPT_URI
XNVME_CLI_OPT_SYS_URI = 31, ///< XNVME_CLI_OPT_SYS_URI
XNVME_CLI_OPT_UUID = 32, ///< XNVME_CLI_OPT_UUID
XNVME_CLI_OPT_NSID = 33, ///< XNVME_CLI_OPT_NSID
XNVME_CLI_OPT_CNS = 34, ///< XNVME_CLI_OPT_CNS
XNVME_CLI_OPT_CSI = 35, ///< XNVME_CLI_OPT_CSI
XNVME_CLI_OPT_INDEX = 36, ///< XNVME_CLI_OPT_INDEX
XNVME_CLI_OPT_SETID = 37, ///< XNVME_CLI_OPT_SETID
XNVME_CLI_OPT_CNTID = 38, ///< XNVME_CLI_OPT_CNTID
XNVME_CLI_OPT_LID = 39, ///< XNVME_CLI_OPT_LID
XNVME_CLI_OPT_LSP = 40, ///< XNVME_CLI_OPT_LSP
XNVME_CLI_OPT_LPO_NBYTES = 41, ///< XNVME_CLI_OPT_LPO_NBYTES
XNVME_CLI_OPT_RAE = 42, ///< XNVME_CLI_OPT_RAE
XNVME_CLI_OPT_CLEAR = 43, ///< XNVME_CLI_OPT_CLEAR
XNVME_CLI_OPT_LBAFU = 44, ///< XNVME_CLI_OPT_LBAFU
XNVME_CLI_OPT_SES = 45, ///< XNVME_CLI_OPT_SES
XNVME_CLI_OPT_SEL = 46, ///< XNVME_CLI_OPT_SEL
XNVME_CLI_OPT_MSET = 47, ///< XNVME_CLI_OPT_MSET
XNVME_CLI_OPT_AUSE = 48, ///< XNVME_CLI_OPT_AUSE
XNVME_CLI_OPT_OVRPAT = 49, ///< XNVME_CLI_OPT_OVRPAT
XNVME_CLI_OPT_OWPASS = 50, ///< XNVME_CLI_OPT_OWPASS
XNVME_CLI_OPT_OIPBP = 51, ///< XNVME_CLI_OPT_OIPBP
XNVME_CLI_OPT_NODAS = 52, ///< XNVME_CLI_OPT_NODAS
XNVME_CLI_OPT_ACTION = 53, ///< XNVME_CLI_OPT_ACTION
XNVME_CLI_OPT_ZRMS = 54, ///< XNVME_CLI_OPT_ZRMS
XNVME_CLI_OPT_PI = 55, ///< XNVME_CLI_OPT_PI
XNVME_CLI_OPT_PIL = 56, ///< XNVME_CLI_OPT_PIL
XNVME_CLI_OPT_FID = 57, ///< XNVME_CLI_OPT_FID
XNVME_CLI_OPT_FEAT = 58, ///< XNVME_CLI_OPT_FEAT
XNVME_CLI_OPT_SEED = 59, ///< XNVME_CLI_OPT_SEED
XNVME_CLI_OPT_LIMIT = 60, ///< XNVME_CLI_OPT_LIMIT
XNVME_CLI_OPT_IOSIZE = 61, ///< XNVME_CLI_OPT_IOSIZE
XNVME_CLI_OPT_QDEPTH = 62, ///< XNVME_CLI_OPT_QDEPTH
XNVME_CLI_OPT_DIRECT = 63, ///< XNVME_CLI_OPT_DIRECT
XNVME_CLI_OPT_STATUS = 64, ///< XNVME_CLI_OPT_STATUS
XNVME_CLI_OPT_SAVE = 65, ///< XNVME_CLI_OPT_SAVE
XNVME_CLI_OPT_RESET = 66, ///< XNVME_CLI_OPT_RESET
XNVME_CLI_OPT_VERBOSE = 67, ///< XNVME_CLI_OPT_VERBOSE
XNVME_CLI_OPT_HELP = 68, ///< XNVME_CLI_OPT_HELP
XNVME_CLI_OPT_COUNT = 69, ///< XNVME_CLI_OPT_COUNT
XNVME_CLI_OPT_OFFSET = 70, ///< XNVME_CLI_OPT_OFFSET
XNVME_CLI_OPT_OPCODE = 71, ///< XNVME_CLI_OPT_OPCODE
XNVME_CLI_OPT_FLAGS = 72, ///< XNVME_CLI_OPT_FLAGS
XNVME_CLI_OPT_ALL = 73, ///< XNVME_CLI_OPT_ALL
XNVME_CLI_OPT_BE = 74, ///< XNVME_CLI_OPT_BE
XNVME_CLI_OPT_MEM = 75, ///< XNVME_CLI_OPT_MEM
XNVME_CLI_OPT_SYNC = 76, ///< XNVME_CLI_OPT_SYNC
XNVME_CLI_OPT_ASYNC = 77, ///< XNVME_CLI_OPT_ASYNC
XNVME_CLI_OPT_ADMIN = 78, ///< XNVME_CLI_OPT_ADMIN
XNVME_CLI_OPT_SHM_ID = 79, ///< XNVME_CLI_OPT_SHM_ID
XNVME_CLI_OPT_MAIN_CORE = 80, ///< XNVME_CLI_OPT_MAIN_CORE
XNVME_CLI_OPT_CORE_MASK = 81, ///< XNVME_CLI_OPT_CORE_MASK
XNVME_CLI_OPT_USE_CMB_SQS = 82, ///< XNVME_CLI_OPT_USE_CMB_SQS
XNVME_CLI_OPT_CSS = 83, ///< XNVME_CLI_OPT_CSS
XNVME_CLI_OPT_POLL_IO = 84, ///< XNVME_CLI_OPT_POLL_IO
XNVME_CLI_OPT_POLL_SQ = 85, ///< XNVME_CLI_OPT_POLL_SQ
XNVME_CLI_OPT_REGISTER_FILES = 86, ///< XNVME_CLI_OPT_REGISTER_FILES
XNVME_CLI_OPT_REGISTER_BUFFERS = 87, ///< XNVME_CLI_OPT_REGISTER_BUFFERS
XNVME_CLI_OPT_TRUNCATE = 88, ///< XNVME_CLI_OPT_TRUNCATE
XNVME_CLI_OPT_RDONLY = 89, ///< XNVME_CLI_OPT_RDONLY
XNVME_CLI_OPT_WRONLY = 90, ///< XNVME_CLI_OPT_WRONLY
XNVME_CLI_OPT_RDWR = 91, ///< XNVME_CLI_OPT_RDWR
XNVME_CLI_OPT_CREATE = 92, ///< XNVME_CLI_OPT_CREATE
XNVME_CLI_OPT_CREATE_MODE = 93, ///< XNVME_CLI_OPT_CREATE_MODE
XNVME_CLI_OPT_ADRFAM = 95, ///< XNVME_CLI_OPT_ADRFAM
XNVME_CLI_OPT_DEV_NSID = 96, ///< XNVME_CLI_OPT_DEV_NSID
XNVME_CLI_OPT_VEC_CNT = 97, ///< XNVME_CLI_OPT_VEC_CNT
XNVME_CLI_OPT_SUBNQN = 98, ///< XNVME_OPT_SUBNQN
XNVME_CLI_OPT_HOSTNQN = 99, ///< XNVME_CLI_OPT_HOSTNQN
XNVME_CLI_OPT_DTYPE = 100, ///< XNVME_CLI_OPT_DTYPE
XNVME_CLI_OPT_DSPEC = 101, ///< XNVME_CLI_OPT_DSPEC
XNVME_CLI_OPT_DOPER = 102, ///< XNVME_CLI_OPT_DOPER
XNVME_CLI_OPT_ENDIR = 103, ///< XNVME_CLI_OPT_ENDIR
XNVME_CLI_OPT_TGTDIR = 104, ///< XNVME_CLI_OPT_TGTDIR
XNVME_CLI_OPT_NSR = 105, ///< XNVME_CLI_OPT_NSR
XNVME_CLI_OPT_POSA_TITLE = 106, ///< XNVME_CLI_OPT_POSA_TITLE
XNVME_CLI_OPT_NON_POSA_TITLE = 107, ///< XNVME_CLI_OPT_NON_POSA_TITLE
XNVME_CLI_OPT_ORCH_TITLE = 108, ///< XNVME_CLI_OPT_ORCH_TITLE
XNVME_CLI_OPT_AD = 109, ///< XNVME_CLI_OPT_AD
XNVME_CLI_OPT_IDW = 110, ///< XNVME_CLI_OPT_IDW
XNVME_CLI_OPT_IDR = 111, ///< XNVME_CLI_OPT_IDR
XNVME_CLI_OPT_LLB = 112, ///< XNVME_CLI_OPT_LLB
XNVME_CLI_OPT_LSI = 113, ///< XNVME_CLI_OPT_LSI
XNVME_CLI_OPT_PID = 114, ///< XNVME_CLI_OPT_PID
XNVME_CLI_OPT_KV_KEY = 115, ///< XNVME_CLI_OPT_KV_KEY
XNVME_CLI_OPT_KV_VAL = 116, ///< XNVME_CLI_OPT_KV_VAL
XNVME_CLI_OPT_KV_STORE_UPDATE = 117, ///< XNVME_CLI_OPT_KV_STORE_UPDATE
XNVME_CLI_OPT_KV_STORE_ADD = 118, ///< XNVME_CLI_OPT_KV_STORE_ADD
XNVME_CLI_OPT_KV_STORE_COMPRESS = 119, ///< XNVME_CLI_OPT_KV_STORE_COMPRESS
XNVME_CLI_OPT_PRACT = 120, ///< XNVME_CLI_OPT_PRACT
XNVME_CLI_OPT_PRCHK = 121, ///< XNVME_CLI_OPT_PRCHK
XNVME_CLI_OPT_APPTAG = 122, ///< XNVME_CLI_OPT_APPTAG
XNVME_CLI_OPT_APPTAG_MASK = 123, ///< XNVME_CLI_OPT_APPTAG_MASK
XNVME_CLI_OPT_SDLBA = 124,
XNVME_CLI_OPT_END = 125, ///< XNVME_CLI_OPT_END
};
/**
* XNVME_CLI_LFLG: ./cli --verbose; always optional
* XNVME_CLI_LOPT: ./cli --arg 0x0; optionally provide a value
* XNVME_CLI_LREQ: ./cli --arg 0x0; require providing a value
* XNVME_CLI_POSA: ./cli arg1 arg2; required, ordered, and provides a value
* XNVME_CLI_SKIP: ; This argument is used for formatting etc.
*
* @enum xnvme_cli_opt_type
*/
enum xnvme_cli_opt_type {
XNVME_CLI_POSA = 0x1, ///< XNVME_CLI_POSA
XNVME_CLI_LFLG = 0x2, ///< XNVME_CLI_LFLG
XNVME_CLI_LOPT = 0x3, ///< XNVME_CLI_LOPT
XNVME_CLI_LREQ = 0x4, ///< XNVME_CLI_LREQ
XNVME_CLI_SKIP = 0x5, ///< XNVME_CLI_SKIP
};
enum xnvme_cli_opt_value_type {
XNVME_CLI_OPT_VTYPE_URI = 0x1,
XNVME_CLI_OPT_VTYPE_NUM = 0x2,
XNVME_CLI_OPT_VTYPE_HEX = 0x3,
XNVME_CLI_OPT_VTYPE_FILE = 0x4,
XNVME_CLI_OPT_VTYPE_STR = 0x5,
XNVME_CLI_OPT_VTYPE_SKIP = 0x6,
};
struct xnvme_cli_opt_attr {
enum xnvme_cli_opt opt;
enum xnvme_cli_opt_value_type vtype;
const char *name;
const char *descr;
char getoptval; // character returned by getopt_log() when found
};
const struct xnvme_cli_opt_attr *
xnvme_cli_get_opt_attr(enum xnvme_cli_opt opt);
/**
* @struct xnvme_cli_sub_opt
*/
struct xnvme_cli_sub_opt {
enum xnvme_cli_opt opt;
enum xnvme_cli_opt_type type;
};
/**
* Forward declaration
*/
struct xnvme_cli;
typedef int (*xnvme_cli_subfunc)(struct xnvme_cli *);
#define XNVME_CLI_SUB_OPTS_LEN 200
#define XNVME_CLI_SUB_NAME_LEN_MAX 30
/**
* Filled by the user of libxnvmc, usually statically right above main
*/
struct xnvme_cli_sub {
const char *name; ///< Short name of the sub-command
const char *descr_short; ///< Short sub-command description
const char *descr_long; ///< Long sub-command description
xnvme_cli_subfunc command; ///< Function to execute
///< Options to parse into args and pass onto func
struct xnvme_cli_sub_opt opts[XNVME_CLI_SUB_OPTS_LEN];
};
struct xnvme_cli {
const char *title; ///< Setup by user
const char *descr_short; ///< Setup by user
const char *descr_long; ///< Setup by user
int nsubs; ///< Setup by user
struct xnvme_cli_sub *subs; ///< Setup by user
int (*ver_pr)(int); ///< Setup by library if unset
int argc; ///< Setup by library
char **argv; ///< Setup by library
struct xnvme_cli_args args; ///< Setup by library
int given[XNVME_CLI_OPT_END]; ///< Setup by library
struct xnvme_cli_sub *sub; ///< Setup by library
struct xnvme_timer timer; ///< Used by xnvme_cli_timer_*
};
enum xnvme_cli_opts {
XNVME_CLI_INIT_NONE = 0x0,
XNVME_CLI_INIT_DEV_OPEN = 0x1,
};
/**
* List of devices found on the system usable with xNVMe
*
* @struct xnvme_cli_enumeration
*/
struct xnvme_cli_enumeration {
uint32_t capacity; ///< Remaining unused entries
uint32_t nentries; ///< Used entries
struct xnvme_ident entries[]; ///< Device entries
};
int
xnvme_cli_enumeration_alloc(struct xnvme_cli_enumeration **list, uint32_t capacity);
void
xnvme_cli_enumeration_free(struct xnvme_cli_enumeration *list);
int
xnvme_cli_enumeration_append(struct xnvme_cli_enumeration *list, const struct xnvme_ident *entry);
/**
* Prints the given ::xnvme_cli_enumeration to the given output stream
*
* @param stream output stream used for printing
* @param list pointer to structure to print
* @param opts printer options, see ::xnvme_pr
*
* @return On success, the number of characters printed is returned.
*/
int
xnvme_cli_enumeration_fpr(FILE *stream, struct xnvme_cli_enumeration *list, int opts);
int
xnvme_cli_enumeration_fpp(FILE *stream, struct xnvme_cli_enumeration *list, int opts);
int
xnvme_cli_enumeration_pp(struct xnvme_cli_enumeration *list, int opts);
/**
* Prints the given ::xnvme_cli_enumeration to stdout
*
* @param list pointer to structure to print
* @param opts printer options, see ::xnvme_pr
*
* @return On success, the number of characters printed is returned.
*/
int
xnvme_cli_enumeration_pr(struct xnvme_cli_enumeration *list, int opts);
uint64_t
xnvme_cli_timer_start(struct xnvme_cli *cli);
uint64_t
xnvme_cli_timer_stop(struct xnvme_cli *cli);
void
xnvme_cli_timer_bw_pr(struct xnvme_cli *cli, const char *prefix, size_t nbytes);
void
xnvme_cli_pinf(const char *format, ...);
void
xnvme_cli_perr(const char *msg, int err);
int
xnvme_cli_run(struct xnvme_cli *cli, int argc, char **argv, int opts);
/**
* Fill the given 'opts' with values parsed in the given 'cli'
*
* @param cli The command-line-interface to parse arguments for
* @param opts The device-options to fill
*
* @return On success, 0 is returned.
*/
int
xnvme_cli_to_opts(const struct xnvme_cli *cli, struct xnvme_opts *opts);