]> www.infradead.org Git - users/hch/nvme-cli.git/commitdiff
Add option to save discovery raw log to a file
authorMing Lin <ming.l@ssi.samsung.com>
Tue, 7 Jun 2016 15:19:24 +0000 (17:19 +0200)
committerKeith Busch <keith.busch@intel.com>
Tue, 7 Jun 2016 19:07:58 +0000 (13:07 -0600)
root@host:~# nvme discover -t rdma -a 192.168.2.2 -p 1023 -r disc.raw
Discovery log is saved to disc.raw

Signed-off-by: Ming Lin <ming.l@ssi.samsung.com>
Tested-by: Armen Baloyan <armenx.baloyan@intel.com>
Tested-by: Sagi Grimberg <sagi@grimberg.me>
fabrics.c

index ad7901747508feea2bcd77de9382f1d842427d4e..50dfcd8096661d5c6286b808b0611280d065fb30 100644 (file)
--- a/fabrics.c
+++ b/fabrics.c
@@ -45,6 +45,7 @@ struct config {
        char *transport;
        char *traddr;
        char *trsvcid;
+       char *raw;
 } cfg = { 0 };
 
 #define BUF_SIZE               4096
@@ -287,6 +288,28 @@ static void print_discovery_log(struct nvmf_disc_rsp_page_hdr *log, int numrec)
        }
 }
 
+static void save_discovery_log(struct nvmf_disc_rsp_page_hdr *log, int numrec)
+{
+       int fd;
+       int len, ret;
+
+       fd = open(cfg.raw, O_CREAT|O_RDWR|O_TRUNC, S_IRUSR|S_IWUSR);
+       if (fd < 0) {
+               fprintf(stderr, "failed to open %s: %s\n", cfg.raw, strerror(errno));
+               return;
+       }
+
+       len = sizeof(struct nvmf_disc_rsp_page_hdr) +
+                       numrec * sizeof(struct nvmf_disc_rsp_page_entry);
+       ret = write(fd, log, len);
+       if (ret < 0)
+               fprintf(stderr, "failed to write to %s: %s\n", cfg.raw, strerror(errno));
+       else
+               printf("Discovery log is saved to %s\n", cfg.raw);
+
+       close(fd);
+}
+
 static int build_options(char *argstr, int max_len)
 {
        int len;
@@ -347,6 +370,8 @@ int discover(const char *desc, int argc, char **argv)
                        "transport address" },
                {"trsvcid", 's', "LIST", CFG_STRING, &cfg.trsvcid, required_argument,
                        "transport service id (e.g. IP port)" },
+               {"raw", 'r', "LIST", CFG_STRING, &cfg.raw, required_argument,
+                       "raw" },
                {0},
        };
 
@@ -370,7 +395,10 @@ int discover(const char *desc, int argc, char **argv)
 
        switch (ret) {
        case DISC_OK:
-               print_discovery_log(log, numrec);
+               if (cfg.raw)
+                       save_discovery_log(log, numrec);
+               else
+                       print_discovery_log(log, numrec);
                break;
        case DISC_GET_NUMRECS:
                fprintf(stderr, "Get number of discovery log entries failed.\n");