Command-line Interface (CLI)#
The libxnvme_cli.h module provides functionality for creating command-line interfaces for xNVMe related applications. Most xNVMe examples, tools, and tests use this module to offer a coherent command-line interface, complete with bash completion scripts and man pages.
Usage Example#
Below is a brief example using excerpts from the source code of
the xnvme CLI tool. Notice how the
sub-command (sub_info) is implemented as a function, added to the g_subs
array, integrated into the CLI setup in g_cli, and utilized when running the
CLI with xnvme_cli_run().
Note
Setting the XNVME_CLI_INIT_DEV_OPEN option will automatically open a device handle.
#include <libxnvme.h>
#include <xnvme_vcs.h>
static int
scan_cb(const struct xnvme_ident *ident, void *cb_args)
{
uint32_t *count_ref = cb_args;
if (*count_ref == 0) {
fprintf(stdout, "\n");
}
fprintf(stdout, " - {");
xnvme_ident_yaml(stdout, ident, 0, ", ", 0);
fprintf(stdout, "}\n");
*count_ref = *count_ref + 1;
if (cli->args.verbose) {
xnvme_cli_pinf("Dumping data-output(%s)", cli->args.data_output);
}
err = xnvme_buf_to_file(data_buf, data_nbytes, cli->args.data_output);
if (err) {
static int
sub_padc(struct xnvme_cli *cli)
{
return sub_pass(cli, 1);
}
static int
sub_library_info(struct xnvme_cli *XNVME_UNUSED(cli))
{
xnvme_cli_pinf("xNVMe Library Information");
xnvme_ver_pr(XNVME_PR_DEF);
printf("\n");
XNVME_CLI_ADMIN_OPTS,
},
},
{
"fdp-ruhs",
"Retrieve the Reclaim Unit Handle Status",
"Retrieve and print log",
sub_ruhs,
{
{XNVME_CLI_OPT_POSA_TITLE, XNVME_CLI_SKIP},
{XNVME_CLI_OPT_URI, XNVME_CLI_POSA},
{XNVME_CLI_OPT_NON_POSA_TITLE, XNVME_CLI_SKIP},
{XNVME_CLI_OPT_NSID, XNVME_CLI_LOPT},
{XNVME_CLI_OPT_LIMIT, XNVME_CLI_LREQ},