From: Keith Busch Date: Thu, 6 Feb 2020 22:49:40 +0000 (-0800) Subject: Add nvme display tree example X-Git-Tag: v1.0-rc0~197 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=581642b1501db54f65315ab958e659ac65dab567;p=users%2Fsagi%2Flibnvme.git Add nvme display tree example Simple visual demonstration of an nvme topology. Signed-off-by: Keith Busch --- diff --git a/.gitignore b/.gitignore index c2256754..fa77022a 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,14 @@ a.out *.swp *.a *.so.* + test/test +examples/display-tree +examples/telemetry-listen + +config-host.h +config-host.mak +config.log + cscope.* diff --git a/Makefile b/Makefile index 32bc5afc..f1974963 100644 --- a/Makefile +++ b/Makefile @@ -49,7 +49,7 @@ install-tests: @$(MAKE) -C test install prefix=$(DESTDIR)$(prefix) datadir=$(DESTDIR)$(datadir) clean: - @rm -f config-host.mak config-host.h cscope.out $(NAME).pc + @rm -f config-host.mak config-host.h cscope.out cscope.files $(NAME).pc @$(MAKE) -C src clean @$(MAKE) -C test clean @$(MAKE) -C examples clean diff --git a/examples/Makefile b/examples/Makefile index baa7b083..877428a4 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -7,11 +7,11 @@ ifneq ($(MAKECMDGOALS),clean) include ../config-host.mak endif -all_targets += nvme-telemetry +all_targets += telemetry-listen display-tree all: $(all_targets) -test_srcs := nvme-telemetry +test_srcs := telemetry-listen.c display-tree.c test_objs := $(patsubst %.c,%.ol,$(test_srcs)) diff --git a/examples/display-tree.c b/examples/display-tree.c new file mode 100644 index 00000000..9d00da27 --- /dev/null +++ b/examples/display-tree.c @@ -0,0 +1,59 @@ +/** + * display-tree: Scans the nvme topology, prints as an ascii tree with some + * selected attributes for each component. + */ +#include +#include + +int main() +{ + nvme_root_t r; + nvme_subsystem_t s, _s; + nvme_ctrl_t c, _c; + nvme_path_t p, _p; + nvme_ns_t n, _n; + + r = nvme_scan(); + if (!r) + return -1; + + printf(".\n"); + nvme_for_each_subsystem_safe(r, s, _s) { + printf("%c-- %s - NQN=%s\n", _s ? '|' : '`', + nvme_subsystem_get_name(s), + nvme_subsystem_get_nqn(s)); + + nvme_subsystem_for_each_ns_safe(s, n, _n) { + printf("%c |-- %s lba size:%d lba max:%lu\n", + _s ? '|' : ' ', + nvme_ns_get_name(n), nvme_ns_get_lba_size(n), + nvme_ns_get_lba_count(n)); + } + + nvme_subsystem_for_each_ctrl_safe(s, c, _c) { + printf("%c %c-- %s %s %s %s\n", + _s ? '|' : ' ', _c ? '|' : '`', + nvme_ctrl_get_name(c), + nvme_ctrl_get_transport(c), + nvme_ctrl_get_address(c), + nvme_ctrl_get_state(c)); + + nvme_ctrl_for_each_ns_safe(c, n, _n) + printf("%c %c %c-- %s lba size:%d lba max:%lu\n", + _s ? '|' : ' ', _c ? '|' : ' ', + _n ? '|' : '`', + nvme_ns_get_name(n), + nvme_ns_get_lba_size(n), + nvme_ns_get_lba_count(n)); + + nvme_ctrl_for_each_path_safe(c, p, _p) + printf("%c %c %c-- %s %s\n", + _s ? '|' : ' ', _c ? '|' : ' ', + _p ? '|' : '`', + nvme_path_get_name(p), + nvme_path_get_ana_state(p)); + } + } + nvme_free_tree(r); + return 0; +} diff --git a/examples/nvme-telemetry.c b/examples/telemetry-listen.c similarity index 100% rename from examples/nvme-telemetry.c rename to examples/telemetry-listen.c