Skip to content

Commit 6af1563

Browse files
Merge remote-tracking branch 'origin/master' into mingw
2 parents 4688840 + 0a2eb77 commit 6af1563

40 files changed

Lines changed: 3820 additions & 1956 deletions

fabrics.c

Lines changed: 91 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,27 @@ struct nvmf_args {
110110
const char *keyring;
111111
const char *tls_key;
112112
const char *tls_key_identity;
113+
int queue_size;
114+
int nr_io_queues;
115+
int reconnect_delay;
116+
int ctrl_loss_tmo;
117+
int fast_io_fail_tmo;
118+
int keep_alive_tmo;
119+
int nr_write_queues;
120+
int nr_poll_queues;
121+
int tos;
122+
long keyring_id;
123+
long tls_key_id;
124+
long tls_configured_key_id;
125+
bool duplicate_connect;
126+
bool disable_sqflow;
127+
bool hdr_digest;
128+
bool data_digest;
129+
bool tls;
130+
bool concat;
113131
};
114132

115-
#define NVMF_ARGS(n, f, c, ...) \
133+
#define NVMF_ARGS(n, f, ...) \
116134
NVME_ARGS(n, \
117135
OPT_STRING("transport", 't', "STR", &f.transport, nvmf_tport), \
118136
OPT_STRING("nqn", 'n', "STR", &f.subsysnqn, nvmf_nqn), \
@@ -127,25 +145,31 @@ struct nvmf_args {
127145
OPT_STRING("keyring", 0, "STR", &f.keyring, nvmf_keyring), \
128146
OPT_STRING("tls-key", 0, "STR", &f.tls_key, nvmf_tls_key), \
129147
OPT_STRING("tls-key-identity", 0, "STR", &f.tls_key_identity, nvmf_tls_key_identity), \
130-
OPT_INT("nr-io-queues", 'i', &c.nr_io_queues, nvmf_nr_io_queues), \
131-
OPT_INT("nr-write-queues", 'W', &c.nr_write_queues, nvmf_nr_write_queues), \
132-
OPT_INT("nr-poll-queues", 'P', &c.nr_poll_queues, nvmf_nr_poll_queues), \
133-
OPT_INT("queue-size", 'Q', &c.queue_size, nvmf_queue_size), \
134-
OPT_INT("keep-alive-tmo", 'k', &c.keep_alive_tmo, nvmf_keep_alive_tmo), \
135-
OPT_INT("reconnect-delay", 'c', &c.reconnect_delay, nvmf_reconnect_delay), \
136-
OPT_INT("ctrl-loss-tmo", 'l', &c.ctrl_loss_tmo, nvmf_ctrl_loss_tmo), \
137-
OPT_INT("fast_io_fail_tmo", 'F', &c.fast_io_fail_tmo, nvmf_fast_io_fail_tmo),\
138-
OPT_INT("tos", 'T', &c.tos, nvmf_tos), \
139-
OPT_INT("tls_key", 0, &c.tls_key, nvmf_tls_key_legacy), \
140-
OPT_FLAG("duplicate-connect", 'D', &c.duplicate_connect, nvmf_dup_connect), \
141-
OPT_FLAG("disable-sqflow", 0, &c.disable_sqflow, nvmf_disable_sqflow), \
142-
OPT_FLAG("hdr-digest", 'g', &c.hdr_digest, nvmf_hdr_digest), \
143-
OPT_FLAG("data-digest", 'G', &c.data_digest, nvmf_data_digest), \
144-
OPT_FLAG("tls", 0, &c.tls, nvmf_tls), \
145-
OPT_FLAG("concat", 0, &c.concat, nvmf_concat), \
148+
OPT_INT("nr-io-queues", 'i', &f.nr_io_queues, nvmf_nr_io_queues), \
149+
OPT_INT("nr-write-queues", 'W', &f.nr_write_queues, nvmf_nr_write_queues), \
150+
OPT_INT("nr-poll-queues", 'P', &f.nr_poll_queues, nvmf_nr_poll_queues), \
151+
OPT_INT("queue-size", 'Q', &f.queue_size, nvmf_queue_size), \
152+
OPT_INT("keep-alive-tmo", 'k', &f.keep_alive_tmo, nvmf_keep_alive_tmo), \
153+
OPT_INT("reconnect-delay", 'c', &f.reconnect_delay, nvmf_reconnect_delay), \
154+
OPT_INT("ctrl-loss-tmo", 'l', &f.ctrl_loss_tmo, nvmf_ctrl_loss_tmo), \
155+
OPT_INT("fast_io_fail_tmo", 'F', &f.fast_io_fail_tmo, nvmf_fast_io_fail_tmo),\
156+
OPT_INT("tos", 'T', &f.tos, nvmf_tos), \
157+
OPT_INT("tls_key", 0, &f.tls_key_id, nvmf_tls_key_legacy), \
158+
OPT_FLAG("duplicate-connect", 'D', &f.duplicate_connect, nvmf_dup_connect), \
159+
OPT_FLAG("disable-sqflow", 0, &f.disable_sqflow, nvmf_disable_sqflow), \
160+
OPT_FLAG("hdr-digest", 'g', &f.hdr_digest, nvmf_hdr_digest), \
161+
OPT_FLAG("data-digest", 'G', &f.data_digest, nvmf_data_digest), \
162+
OPT_FLAG("tls", 0, &f.tls, nvmf_tls), \
163+
OPT_FLAG("concat", 0, &f.concat, nvmf_concat), \
146164
##__VA_ARGS__ \
147165
)
148166

167+
static void nvmf_default_args(struct nvmf_args *fa)
168+
{
169+
memset(fa, 0, sizeof(*fa));
170+
fa->tos = -1;
171+
fa->ctrl_loss_tmo = NVMF_DEF_CTRL_LOSS_TMO;
172+
}
149173

150174
static void save_discovery_log(char *raw, struct nvmf_discovery_log *log)
151175
{
@@ -174,7 +198,7 @@ static int setup_common_context(struct libnvmf_context *fctx,
174198
struct nvmf_args *fa);
175199

176200
struct cb_fabrics_data {
177-
struct libnvme_fabrics_config *cfg;
201+
struct nvmf_args *fa;
178202
nvme_print_flags_t flags;
179203
bool quiet;
180204
char *raw;
@@ -274,20 +298,49 @@ static void cb_parser_cleanup(struct libnvmf_context *fctx, void *user_data)
274298
fclose(cfd->f);
275299
}
276300

301+
static int set_fabrics_options(struct libnvmf_context *fctx,
302+
struct nvmf_args *fa)
303+
{
304+
struct libnvme_fabrics_config *fcfg;
305+
306+
fcfg = libnvmf_context_get_fabrics_config(fctx);
307+
if (!fcfg)
308+
return -EINVAL;
309+
310+
libnvme_fabrics_config_set_nr_io_queues(fcfg, fa->nr_io_queues);
311+
libnvme_fabrics_config_set_reconnect_delay(fcfg, fa->reconnect_delay);
312+
libnvme_fabrics_config_set_ctrl_loss_tmo(fcfg, fa->ctrl_loss_tmo);
313+
libnvme_fabrics_config_set_fast_io_fail_tmo(fcfg, fa->fast_io_fail_tmo);
314+
libnvme_fabrics_config_set_keep_alive_tmo(fcfg, fa->keep_alive_tmo);
315+
libnvme_fabrics_config_set_nr_write_queues(fcfg, fa->nr_write_queues);
316+
libnvme_fabrics_config_set_nr_poll_queues(fcfg, fa->nr_poll_queues);
317+
libnvme_fabrics_config_set_tos(fcfg, fa->tos);
318+
libnvme_fabrics_config_set_keyring_id(fcfg, fa->keyring_id);
319+
libnvme_fabrics_config_set_tls_key_id(fcfg, fa->tls_key_id);
320+
libnvme_fabrics_config_set_tls_configured_key_id(fcfg, fa->tls_configured_key_id);
321+
libnvme_fabrics_config_set_duplicate_connect(fcfg, fa->duplicate_connect);
322+
libnvme_fabrics_config_set_disable_sqflow(fcfg, fa->disable_sqflow);
323+
libnvme_fabrics_config_set_hdr_digest(fcfg, fa->hdr_digest);
324+
libnvme_fabrics_config_set_data_digest(fcfg, fa->data_digest);
325+
libnvme_fabrics_config_set_tls(fcfg, fa->tls);
326+
libnvme_fabrics_config_set_concat(fcfg, fa->concat);
327+
328+
return 0;
329+
}
330+
277331
static int cb_parser_next_line(struct libnvmf_context *fctx, void *user_data)
278332
{
279333
struct cb_fabrics_data *cfd = user_data;
280-
struct libnvme_fabrics_config cfg;
281-
struct nvmf_args fa = {};
334+
struct nvmf_args fa;
282335
char *ptr, *p, line[4096];
283336
int argc, ret = 0;
284337
bool force = false;
285338

286-
NVMF_ARGS(opts, fa, cfg,
339+
NVMF_ARGS(opts, fa,
287340
OPT_FLAG("persistent", 'p', &persistent, "persistent discovery connection"),
288341
OPT_FLAG("force", 0, &force, "Force persistent discovery controller creation"));
289342

290-
memcpy(&cfg, cfd->cfg, sizeof(cfg));
343+
memcpy(&fa, cfd->fa, sizeof(fa));
291344
next:
292345
if (fgets(line, sizeof(line), cfd->f) == NULL)
293346
return -EOF;
@@ -315,7 +368,7 @@ static int cb_parser_next_line(struct libnvmf_context *fctx, void *user_data)
315368
if (ret)
316369
return ret;
317370

318-
ret = libnvmf_context_set_fabrics_config(fctx, &cfg);
371+
ret = set_fabrics_options(fctx, &fa);
319372
if (ret)
320373
return ret;
321374

@@ -351,7 +404,6 @@ static int setup_common_context(struct libnvmf_context *fctx,
351404

352405
static int create_common_context(struct libnvme_global_ctx *ctx,
353406
bool persistent, struct nvmf_args *fa,
354-
struct libnvme_fabrics_config *cfg,
355407
void *user_data, struct libnvmf_context **fctxp)
356408
{
357409
struct libnvmf_context *fctx;
@@ -372,7 +424,7 @@ static int create_common_context(struct libnvme_global_ctx *ctx,
372424
if (err)
373425
goto err;
374426

375-
err = libnvmf_context_set_fabrics_config(fctx, cfg);
427+
err = set_fabrics_options(fctx, fa);
376428
if (err)
377429
goto err;
378430

@@ -397,13 +449,12 @@ static int create_common_context(struct libnvme_global_ctx *ctx,
397449
static int create_discovery_context(struct libnvme_global_ctx *ctx,
398450
bool persistent, const char *device,
399451
struct nvmf_args *fa,
400-
struct libnvme_fabrics_config *cfg,
401452
void *user_data, struct libnvmf_context **fctxp)
402453
{
403454
struct libnvmf_context *fctx;
404455
int err;
405456

406-
err = create_common_context(ctx, persistent, fa, cfg, user_data,
457+
err = create_common_context(ctx, persistent, fa, user_data,
407458
&fctx);
408459
if (err)
409460
return err;
@@ -527,15 +578,14 @@ int fabrics_discovery(const char *desc, int argc, char **argv, bool connect)
527578
__cleanup_nvme_global_ctx struct libnvme_global_ctx *ctx = NULL;
528579
__cleanup_nvmf_context struct libnvmf_context *fctx = NULL;
529580
int ret;
530-
struct libnvme_fabrics_config cfg;
531581
struct nvmf_args fa = { .subsysnqn = NVME_DISC_SUBSYS_NAME };
532582
char *device = NULL;
533583
bool force = false;
534584
bool json_config = false;
535585
bool nbft = false, nonbft = false;
536586
char *nbft_path = NBFT_SYSFS_PATH;
537587

538-
NVMF_ARGS(opts, fa, cfg,
588+
NVMF_ARGS(opts, fa,
539589
OPT_STRING("device", 'd', "DEV", &device, "use existing discovery controller device"),
540590
OPT_FILE("raw", 'r', &raw, "save raw output to file"),
541591
OPT_FLAG("persistent", 'p', &persistent, "persistent discovery connection"),
@@ -548,7 +598,7 @@ int fabrics_discovery(const char *desc, int argc, char **argv, bool connect)
548598
OPT_STRING("nbft-path", 0, "STR", &nbft_path, "user-defined path for NBFT tables"),
549599
OPT_STRING("context", 0, "STR", &context, nvmf_context));
550600

551-
libnvmf_default_config(&cfg);
601+
nvmf_default_args(&fa);
552602

553603
load_nvme_fabrics_module();
554604

@@ -597,12 +647,12 @@ int fabrics_discovery(const char *desc, int argc, char **argv, bool connect)
597647
}
598648

599649
struct cb_fabrics_data dld = {
600-
.cfg = &cfg,
650+
.fa = &fa,
601651
.flags = flags,
602652
.raw = raw,
603653
};
604654
ret = create_discovery_context(ctx, persistent, device, &fa,
605-
&cfg, &dld, &fctx);
655+
&dld, &fctx);
606656
if (ret)
607657
return ret;
608658

@@ -643,15 +693,14 @@ int fabrics_connect(const char *desc, int argc, char **argv)
643693
__cleanup_nvme_ctrl libnvme_ctrl_t c = NULL;
644694
int ret;
645695
nvme_print_flags_t flags;
646-
struct libnvme_fabrics_config cfg = { 0 };
647696
struct nvmf_args fa = { 0 };
648697

649-
NVMF_ARGS(opts, fa, cfg,
698+
NVMF_ARGS(opts, fa,
650699
OPT_STRING("config", 'J', "FILE", &config_file, nvmf_config_file),
651700
OPT_FLAG("dump-config", 'O', &dump_config, "Dump JSON configuration to stdout"),
652701
OPT_STRING("context", 0, "STR", &context, nvmf_context));
653702

654-
libnvmf_default_config(&cfg);
703+
nvmf_default_args(&fa);
655704

656705
load_nvme_fabrics_module();
657706

@@ -717,8 +766,7 @@ int fabrics_connect(const char *desc, int argc, char **argv)
717766
.quiet = dump_config,
718767
.raw = raw,
719768
};
720-
ret = create_common_context(ctx, persistent, &fa,
721-
&cfg, &cfd, &fctx);
769+
ret = create_common_context(ctx, persistent, &fa, &cfd, &fctx);
722770
if (ret)
723771
return ret;
724772

@@ -773,7 +821,7 @@ static void nvmf_disconnect_nqn(struct libnvme_global_ctx *ctx, char *nqn)
773821
if (strcmp(libnvme_subsystem_get_subsysnqn(s), p))
774822
continue;
775823
libnvme_subsystem_for_each_ctrl(s, c) {
776-
if (!libnvme_disconnect_ctrl(c))
824+
if (!libnvmf_disconnect_ctrl(c))
777825
i++;
778826
}
779827
}
@@ -856,7 +904,7 @@ int fabrics_disconnect(const char *desc, int argc, char **argv)
856904
"Did not find device %s\n", p);
857905
return -ENODEV;
858906
}
859-
ret = libnvme_disconnect_ctrl(c);
907+
ret = libnvmf_disconnect_ctrl(c);
860908
if (ret)
861909
fprintf(stderr,
862910
"Failed to disconnect %s: %s\n",
@@ -922,7 +970,7 @@ int fabrics_disconnect_all(const char *desc, int argc, char **argv)
922970
else if (!strcmp(libnvme_ctrl_get_transport(c),
923971
"pcie"))
924972
continue;
925-
if (libnvme_disconnect_ctrl(c))
973+
if (libnvmf_disconnect_ctrl(c))
926974
fprintf(stderr,
927975
"failed to disconnect %s\n",
928976
libnvme_ctrl_get_name(c));
@@ -938,18 +986,17 @@ int fabrics_config(const char *desc, int argc, char **argv)
938986
bool scan_tree = false, modify_config = false, update_config = false;
939987
__cleanup_nvme_global_ctx struct libnvme_global_ctx *ctx = NULL;
940988
char *config_file = PATH_NVMF_CONFIG;
941-
struct libnvme_fabrics_config cfg;
942989
struct nvmf_args fa = { };
943990
int ret;
944991

945-
NVMF_ARGS(opts, fa, cfg,
992+
NVMF_ARGS(opts, fa,
946993
OPT_STRING("config", 'J', "FILE", &config_file, nvmf_config_file),
947994
OPT_FLAG("scan", 'R', &scan_tree, "Scan current NVMeoF topology"),
948995
OPT_FLAG("modify", 'M', &modify_config, "Modify JSON configuration file"),
949996
OPT_FLAG("dump", 'O', &dump_config, "Dump JSON configuration to stdout"),
950997
OPT_FLAG("update", 'U', &update_config, "Update JSON configuration file"));
951998

952-
libnvmf_default_config(&cfg);
999+
nvmf_default_args(&fa);
9531000

9541001
ret = argconfig_parse(argc, argv, desc, opts);
9551002
if (ret)
@@ -994,8 +1041,7 @@ int fabrics_config(const char *desc, int argc, char **argv)
9941041
return -EINVAL;
9951042
}
9961043

997-
ret = create_common_context(ctx, persistent, &fa,
998-
&cfg, NULL, &fctx);
1044+
ret = create_common_context(ctx, persistent, &fa, NULL, &fctx);
9991045
if (ret)
10001046
return ret;
10011047

libnvme/examples/discover-loop.c

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -53,38 +53,45 @@ int main()
5353
{
5454
struct nvmf_discovery_log *log = NULL;
5555
struct libnvme_global_ctx *ctx;
56+
struct libnvmf_context *fctx;
5657
libnvme_host_t h;
5758
libnvme_ctrl_t c;
5859
int ret;
59-
struct libnvme_fabrics_config cfg;
6060
struct libnvmf_discovery_args *args;
6161

62-
libnvmf_default_config(&cfg);
63-
6462
ctx = libnvme_create_global_ctx(stdout, LIBNVME_DEFAULT_LOGLEVEL);
6563
if (!ctx)
6664
return 1;
6765

66+
ret = libnvmf_context_create(ctx, NULL, NULL, NULL, NULL, &fctx);
67+
if (ret)
68+
goto free_ctx;
69+
70+
ret = libnvmf_context_set_connection(fctx, NVME_DISC_SUBSYS_NAME,
71+
"loop", NULL, NULL, NULL, NULL);
72+
if (ret)
73+
goto free_ctx;
74+
6875
ret = libnvme_scan_topology(ctx, NULL, NULL);
69-
if (ret) {
70-
libnvme_free_global_ctx(ctx);
71-
return 1;
72-
}
76+
if (ret)
77+
goto free_fctx;
78+
7379
ret = libnvme_get_host(ctx, NULL, NULL, &h);
7480
if (ret) {
7581
fprintf(stderr, "Failed to allocated memory\n");
76-
return 1;
82+
goto free_fctx;
7783
}
78-
ret = libnvme_create_ctrl(ctx, NVME_DISC_SUBSYS_NAME, "loop",
79-
NULL, NULL, NULL, NULL, &c);
84+
85+
ret = libnvmf_create_ctrl(ctx, fctx, &c);
8086
if (ret) {
8187
fprintf(stderr, "Failed to allocate memory\n");
82-
return 1;
88+
goto free_fctx;
8389
}
84-
ret = libnvmf_add_ctrl(h, c, &cfg);
90+
91+
ret = libnvmf_add_ctrl(h, c);
8592
if (ret) {
8693
fprintf(stderr, "no controller found\n");
87-
return 1;
94+
goto free_fctx;
8895
}
8996

9097
ret = libnvmf_discovery_args_create(&args);
@@ -94,15 +101,19 @@ int main()
94101
libnvmf_discovery_args_free(args);
95102
}
96103

97-
libnvme_disconnect_ctrl(c);
104+
libnvmf_disconnect_ctrl(c);
98105
libnvme_free_ctrl(c);
99106

100107
if (ret)
101108
fprintf(stderr, "nvmf-discover-log:%x\n", ret);
102109
else
103110
print_discover_log(log);
104111

112+
free_fctx:
113+
libnvmf_context_free(fctx);
114+
free_ctx:
105115
libnvme_free_global_ctx(ctx);
106116
free(log);
107-
return 0;
117+
118+
return ret ? 1 : 0;
108119
}

0 commit comments

Comments
 (0)