summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sbin/nvmecontrol/nvmecontrol.c40
-rw-r--r--sbin/nvmecontrol/nvmecontrol.h8
2 files changed, 32 insertions, 16 deletions
diff --git a/sbin/nvmecontrol/nvmecontrol.c b/sbin/nvmecontrol/nvmecontrol.c
index f0ecb2f..af5e148 100644
--- a/sbin/nvmecontrol/nvmecontrol.c
+++ b/sbin/nvmecontrol/nvmecontrol.c
@@ -44,14 +44,31 @@ __FBSDID("$FreeBSD$");
#include "nvmecontrol.h"
+typedef void (*nvme_fn_t)(int argc, char *argv[]);
+
+struct nvme_function {
+ const char *name;
+ nvme_fn_t fn;
+ const char *usage;
+} funcs[] = {
+ {"devlist", devlist, DEVLIST_USAGE},
+ {"identify", identify, IDENTIFY_USAGE},
+ {"perftest", perftest, PERFTEST_USAGE},
+ {"reset", reset, RESET_USAGE},
+ {NULL, NULL, NULL},
+};
+
static void
usage(void)
{
+ struct nvme_function *f;
+
+ f = funcs;
fprintf(stderr, "usage:\n");
- fprintf(stderr, DEVLIST_USAGE);
- fprintf(stderr, IDENTIFY_USAGE);
- fprintf(stderr, RESET_USAGE);
- fprintf(stderr, PERFTEST_USAGE);
+ while (f->name != NULL) {
+ fprintf(stderr, "%s", f->usage);
+ f++;
+ }
exit(EX_USAGE);
}
@@ -136,18 +153,17 @@ open_dev(const char *str, int *fd, int show_error, int exit_on_error)
int
main(int argc, char *argv[])
{
+ struct nvme_function *f;
if (argc < 2)
usage();
- if (strcmp(argv[1], "devlist") == 0)
- devlist(argc-1, &argv[1]);
- else if (strcmp(argv[1], "identify") == 0)
- identify(argc-1, &argv[1]);
- else if (strcmp(argv[1], "perftest") == 0)
- perftest(argc-1, &argv[1]);
- else if (strcmp(argv[1], "reset") == 0)
- reset(argc-1, &argv[1]);
+ f = funcs;
+ while (f->name != NULL) {
+ if (strcmp(argv[1], f->name) == 0)
+ f->fn(argc-1, &argv[1]);
+ f++;
+ }
usage();
diff --git a/sbin/nvmecontrol/nvmecontrol.h b/sbin/nvmecontrol/nvmecontrol.h
index 74430f9..ec61e95 100644
--- a/sbin/nvmecontrol/nvmecontrol.h
+++ b/sbin/nvmecontrol/nvmecontrol.h
@@ -46,14 +46,14 @@
#define RESET_USAGE \
" nvmecontrol reset <controller id>\n"
-int open_dev(const char *str, int *fd, int show_error, int exit_on_error);
-void read_controller_data(int fd, struct nvme_controller_data *cdata);
-void read_namespace_data(int fd, int nsid, struct nvme_namespace_data *nsdata);
-
void devlist(int argc, char *argv[]);
void identify(int argc, char *argv[]);
void perftest(int argc, char *argv[]);
void reset(int argc, char *argv[]);
+int open_dev(const char *str, int *fd, int show_error, int exit_on_error);
+void read_controller_data(int fd, struct nvme_controller_data *cdata);
+void read_namespace_data(int fd, int nsid, struct nvme_namespace_data *nsdata);
+
#endif
OpenPOWER on IntegriCloud