char *transport;
char *traddr;
char *trsvcid;
+ char *raw;
} cfg = { 0 };
#define BUF_SIZE 4096
}
}
+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;
"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},
};
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");