@@ -502,91 +502,106 @@ static int discover_from_conf_file(nvme_root_t r, nvme_host_t h,
502
502
return ret ;
503
503
}
504
504
505
- static int discover_from_json_config_file (nvme_root_t r , nvme_host_t h ,
506
- const char * desc , bool connect ,
505
+ static int _discover_from_json_config_file (nvme_root_t r , nvme_host_t h , nvme_subsystem_t s ,
506
+ nvme_ctrl_t c , const char * desc , bool connect ,
507
507
const struct nvme_fabrics_config * defcfg ,
508
508
nvme_print_flags_t flags ,
509
509
bool force )
510
510
{
511
- const char * transport , * traddr , * host_traddr , * host_iface , * trsvcid , * subsysnqn ;
512
- nvme_subsystem_t s ;
513
- nvme_ctrl_t c , cn ;
511
+ const char * transport , * traddr , * host_traddr ;
512
+ const char * host_iface , * trsvcid , * subsysnqn ;
514
513
struct nvme_fabrics_config cfg ;
514
+ nvme_ctrl_t cn ;
515
515
int ret = 0 ;
516
516
517
- nvme_for_each_subsystem (h , s ) {
518
- nvme_subsystem_for_each_ctrl (s , c ) {
519
- transport = nvme_ctrl_get_transport (c );
520
- traddr = nvme_ctrl_get_traddr (c );
521
- host_traddr = nvme_ctrl_get_host_traddr (c );
522
- host_iface = nvme_ctrl_get_host_iface (c );
517
+ transport = nvme_ctrl_get_transport (c );
518
+ traddr = nvme_ctrl_get_traddr (c );
519
+ host_traddr = nvme_ctrl_get_host_traddr (c );
520
+ host_iface = nvme_ctrl_get_host_iface (c );
521
+
522
+ if (!transport && !traddr )
523
+ return 0 ;
524
+
525
+ /* ignore none fabric transports */
526
+ if (strcmp (transport , "tcp" ) &&
527
+ strcmp (transport , "rdma" ) &&
528
+ strcmp (transport , "fc" ))
529
+ return 0 ;
530
+
531
+ /* ignore if no host_traddr for fc */
532
+ if (!strcmp (transport , "fc" )) {
533
+ if (!host_traddr ) {
534
+ fprintf (stderr , "host_traddr required for fc\n" );
535
+ return 0 ;
536
+ }
537
+ }
523
538
524
- if (!transport && !traddr )
525
- continue ;
539
+ /* ignore if host_iface set for any transport other than tcp */
540
+ if (!strcmp (transport , "rdma" ) || !strcmp (transport , "fc" )) {
541
+ if (host_iface ) {
542
+ fprintf (stderr ,
543
+ "host_iface not permitted for rdma or fc\n" );
544
+ return 0 ;
545
+ }
546
+ }
526
547
527
- /* ignore none fabric transports */
528
- if (strcmp (transport , "tcp" ) &&
529
- strcmp (transport , "rdma" ) &&
530
- strcmp (transport , "fc" ))
531
- continue ;
548
+ trsvcid = nvme_ctrl_get_trsvcid (c );
549
+ if (!trsvcid || !strcmp (trsvcid , "" ))
550
+ trsvcid = nvmf_get_default_trsvcid (transport , true);
532
551
533
- /* ignore if no host_traddr for fc */
534
- if (!strcmp (transport , "fc" )) {
535
- if (!host_traddr ) {
536
- fprintf (stderr , "host_traddr required for fc\n" );
537
- continue ;
538
- }
539
- }
552
+ if (force )
553
+ subsysnqn = nvme_ctrl_get_subsysnqn (c );
554
+ else
555
+ subsysnqn = NVME_DISC_SUBSYS_NAME ;
540
556
541
- /* ignore if host_iface set for any transport other than tcp */
542
- if (!strcmp (transport , "rdma" ) || !strcmp (transport , "fc" )) {
543
- if (host_iface ) {
544
- fprintf (stderr , "host_iface not permitted for rdma or fc\n" );
545
- continue ;
546
- }
547
- }
557
+ if (nvme_ctrl_is_persistent (c ))
558
+ persistent = true;
548
559
549
- trsvcid = nvme_ctrl_get_trsvcid (c );
550
- if (!trsvcid || !strcmp (trsvcid , "" ))
551
- trsvcid = nvmf_get_default_trsvcid (transport ,
552
- true);
560
+ memcpy (& cfg , defcfg , sizeof (cfg ));
553
561
554
- if (force )
555
- subsysnqn = nvme_ctrl_get_subsysnqn (c );
556
- else
557
- subsysnqn = NVME_DISC_SUBSYS_NAME ;
562
+ struct tr_config trcfg = {
563
+ .subsysnqn = subsysnqn ,
564
+ .transport = transport ,
565
+ .traddr = traddr ,
566
+ .host_traddr = host_traddr ,
567
+ .host_iface = host_iface ,
568
+ .trsvcid = trsvcid ,
569
+ };
558
570
559
- if (nvme_ctrl_is_persistent (c ))
560
- persistent = true;
571
+ if (!force ) {
572
+ cn = lookup_ctrl (h , & trcfg );
573
+ if (cn ) {
574
+ __discover (cn , & cfg , raw , connect , true, flags );
575
+ return 0 ;
576
+ }
577
+ }
561
578
562
- memcpy (& cfg , defcfg , sizeof (cfg ));
579
+ cn = nvmf_create_discover_ctrl (r , h , & cfg , & trcfg );
580
+ if (!cn )
581
+ return 0 ;
563
582
564
- struct tr_config trcfg = {
565
- .subsysnqn = subsysnqn ,
566
- .transport = transport ,
567
- .traddr = traddr ,
568
- .host_traddr = host_traddr ,
569
- .host_iface = host_iface ,
570
- .trsvcid = trsvcid ,
571
- };
583
+ __discover (cn , & cfg , raw , connect , persistent , flags );
584
+ if (!(persistent || is_persistent_discovery_ctrl (h , cn )))
585
+ ret = nvme_disconnect_ctrl (cn );
586
+ nvme_free_ctrl (cn );
572
587
573
- if (!force ) {
574
- cn = lookup_ctrl (h , & trcfg );
575
- if (cn ) {
576
- __discover (cn , & cfg , raw , connect ,
577
- true, flags );
578
- continue ;
579
- }
580
- }
588
+ return ret ;
589
+ }
581
590
582
- cn = nvmf_create_discover_ctrl (r , h , & cfg , & trcfg );
583
- if (!cn )
584
- continue ;
591
+ static int discover_from_json_config_file (nvme_root_t r , nvme_host_t h ,
592
+ const char * desc , bool connect ,
593
+ const struct nvme_fabrics_config * defcfg ,
594
+ nvme_print_flags_t flags ,
595
+ bool force )
596
+ {
597
+ nvme_subsystem_t s ;
598
+ nvme_ctrl_t c ;
599
+ int ret = 0 ;
585
600
586
- __discover ( cn , & cfg , raw , connect , persistent , flags );
587
- if (!( persistent || is_persistent_discovery_ctrl ( h , cn )))
588
- ret = nvme_disconnect_ctrl ( cn );
589
- nvme_free_ctrl ( cn );
601
+ nvme_for_each_subsystem ( h , s ) {
602
+ nvme_subsystem_for_each_ctrl ( s , c ) {
603
+ ret = _discover_from_json_config_file ( r , h , s , c , desc ,
604
+ connect , defcfg , flags , force );
590
605
}
591
606
}
592
607
0 commit comments