]> www.infradead.org Git - users/sagi/libnvme.git/commitdiff
Add nvme display tree example
authorKeith Busch <kbusch@kernel.org>
Thu, 6 Feb 2020 22:49:40 +0000 (14:49 -0800)
committerKeith Busch <kbusch@kernel.org>
Thu, 6 Feb 2020 22:52:35 +0000 (14:52 -0800)
Simple visual demonstration of an nvme topology.

Signed-off-by: Keith Busch <kbusch@kernel.org>
.gitignore
Makefile
examples/Makefile
examples/display-tree.c [new file with mode: 0644]
examples/telemetry-listen.c [moved from examples/nvme-telemetry.c with 100% similarity]

index c2256754652ce146931fb32580389866f97b163f..fa77022a8ed6a9129d5c7acd1bc5d554a55218ba 100644 (file)
@@ -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.*
index 32bc5afca13c8261dc227fa3f50c82eb07056642..f197496306e298ce1f254dba8654d08e411968bd 100644 (file)
--- 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
index baa7b0831021fe4199edf04eab46a1d89bd3c06b..877428a483e12296f1a09e8e937717159b05312a 100644 (file)
@@ -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 (file)
index 0000000..9d00da2
--- /dev/null
@@ -0,0 +1,59 @@
+/**
+ * display-tree: Scans the nvme topology, prints as an ascii tree with some
+ * selected attributes for each component.
+ */
+#include <stdio.h>
+#include <libnvme.h>
+
+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;
+}