@@ -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
150174static 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
176200struct 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+
277331static 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 ));
291344next :
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
352405static 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,
397449static 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
0 commit comments