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},