Skip to content

Commit 519e0f5

Browse files
committed
Merge hostname2traddr()
For some reason we have two versions of hostname2traddr(). Signed-off-by: Hannes Reinecke <[email protected]>
1 parent 3fba7be commit 519e0f5

4 files changed

Lines changed: 58 additions & 92 deletions

File tree

src/nvme/fabrics.c

Lines changed: 7 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -371,49 +371,6 @@ static bool traddr_is_hostname(nvme_ctrl_t c)
371371
return true;
372372
}
373373

374-
static int hostname2traddr(nvme_ctrl_t c)
375-
{
376-
struct addrinfo *host_info, hints = {.ai_family = AF_UNSPEC};
377-
char addrstr[NVMF_TRADDR_SIZE];
378-
const char *p;
379-
int ret;
380-
381-
ret = getaddrinfo(c->traddr, NULL, &hints, &host_info);
382-
if (ret) {
383-
nvme_msg(LOG_ERR, "failed to resolve host %s info\n", c->traddr);
384-
return -ENVME_CONNECT_RESOLVE;
385-
}
386-
387-
switch (host_info->ai_family) {
388-
case AF_INET:
389-
p = inet_ntop(host_info->ai_family,
390-
&(((struct sockaddr_in *)host_info->ai_addr)->sin_addr),
391-
addrstr, NVMF_TRADDR_SIZE);
392-
break;
393-
case AF_INET6:
394-
p = inet_ntop(host_info->ai_family,
395-
&(((struct sockaddr_in6 *)host_info->ai_addr)->sin6_addr),
396-
addrstr, NVMF_TRADDR_SIZE);
397-
break;
398-
default:
399-
nvme_msg(LOG_ERR, "unrecognized address family (%d) %s\n",
400-
host_info->ai_family, c->traddr);
401-
ret = -ENVME_CONNECT_ADDRFAM;
402-
goto free_addrinfo;
403-
}
404-
405-
if (!p) {
406-
nvme_msg(LOG_ERR, "failed to get traddr for %s\n", c->traddr);
407-
ret = -ENVME_CONNECT_TRADDR;
408-
goto free_addrinfo;
409-
}
410-
c->traddr = strdup(addrstr);
411-
412-
free_addrinfo:
413-
freeaddrinfo(host_info);
414-
return ret;
415-
}
416-
417374
static int build_options(nvme_host_t h, nvme_ctrl_t c, char **argstr)
418375
{
419376
struct nvme_fabrics_config *cfg = nvme_ctrl_get_config(c);
@@ -562,11 +519,15 @@ int nvmf_add_ctrl(nvme_host_t h, nvme_ctrl_t c,
562519
cfg = merge_config(c, cfg);
563520
nvme_ctrl_set_discovered(c, true);
564521
if (traddr_is_hostname(c)) {
565-
ret = hostname2traddr(c);
566-
if (ret) {
567-
errno = -ret;
522+
const char *traddr = c->traddr;
523+
524+
c->traddr = hostname2traddr(traddr);
525+
if (!c->traddr) {
526+
c->traddr = (char *)traddr;
527+
errno = ENVME_CONNECT_TRADDR;
568528
return -1;
569529
}
530+
free(c->traddr);
570531
}
571532

572533
ret = build_options(h, c, &argstr);

src/nvme/tree.c

Lines changed: 2 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -904,49 +904,6 @@ static bool traddr_is_hostname(const char *transport, const char *traddr)
904904
return true;
905905
}
906906

907-
void hostname2traddr(nvme_ctrl_t c, const char *host_traddr)
908-
{
909-
struct addrinfo *host_info, hints = {.ai_family = AF_UNSPEC};
910-
char addrstr[NVMF_TRADDR_SIZE];
911-
const char *p;
912-
int ret;
913-
914-
ret = getaddrinfo(host_traddr, NULL, &hints, &host_info);
915-
if (ret) {
916-
nvme_msg(LOG_DEBUG, "failed to resolve host %s info\n",
917-
host_traddr);
918-
c->cfg.host_traddr = strdup(host_traddr);
919-
return;
920-
}
921-
922-
switch (host_info->ai_family) {
923-
case AF_INET:
924-
p = inet_ntop(host_info->ai_family,
925-
&(((struct sockaddr_in *)host_info->ai_addr)->sin_addr),
926-
addrstr, NVMF_TRADDR_SIZE);
927-
break;
928-
case AF_INET6:
929-
p = inet_ntop(host_info->ai_family,
930-
&(((struct sockaddr_in6 *)host_info->ai_addr)->sin6_addr),
931-
addrstr, NVMF_TRADDR_SIZE);
932-
break;
933-
default:
934-
nvme_msg(LOG_DEBUG, "unrecognized address family (%d) %s\n",
935-
host_info->ai_family, c->traddr);
936-
c->cfg.host_traddr = strdup(host_traddr);
937-
goto free_addrinfo;
938-
}
939-
if (!p) {
940-
nvme_msg(LOG_DEBUG, "failed to get traddr for %s\n",
941-
c->traddr);
942-
c->cfg.host_traddr = strdup(host_traddr);
943-
} else
944-
c->cfg.host_traddr = strdup(addrstr);
945-
946-
free_addrinfo:
947-
freeaddrinfo(host_info);
948-
}
949-
950907
struct nvme_ctrl *nvme_create_ctrl(const char *subsysnqn, const char *transport,
951908
const char *traddr, const char *host_traddr,
952909
const char *host_iface, const char *trsvcid)
@@ -987,8 +944,8 @@ struct nvme_ctrl *nvme_create_ctrl(const char *subsysnqn, const char *transport,
987944
c->traddr = strdup(traddr);
988945
if (host_traddr) {
989946
if (traddr_is_hostname(transport, host_traddr))
990-
hostname2traddr(c, host_traddr);
991-
else
947+
c->cfg.host_traddr = hostname2traddr(host_traddr);
948+
if (!c->cfg.host_traddr)
992949
c->cfg.host_traddr = strdup(host_traddr);
993950
}
994951
if (host_iface)

src/nvme/util.c

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@
1111
#include <errno.h>
1212

1313
#include <sys/types.h>
14+
#include <arpa/inet.h>
15+
#include <netdb.h>
1416

1517
#include <ccan/endian/endian.h>
1618

1719
#include "util.h"
18-
20+
#include "log.h"
1921
static inline __u8 nvme_generic_status_to_errno(__u16 status)
2022
{
2123
switch (status) {
@@ -500,3 +502,47 @@ const char *nvme_errno_to_string(int status)
500502

501503
return s;
502504
}
505+
506+
char *hostname2traddr(const char *traddr)
507+
{
508+
struct addrinfo *host_info, hints = {.ai_family = AF_UNSPEC};
509+
char addrstr[NVMF_TRADDR_SIZE];
510+
const char *p;
511+
char *ret_traddr = NULL;
512+
int ret;
513+
514+
ret = getaddrinfo(traddr, NULL, &hints, &host_info);
515+
if (ret) {
516+
nvme_msg(LOG_ERR, "failed to resolve host %s info\n",
517+
traddr);
518+
return NULL;
519+
}
520+
521+
switch (host_info->ai_family) {
522+
case AF_INET:
523+
p = inet_ntop(host_info->ai_family,
524+
&(((struct sockaddr_in *)host_info->ai_addr)->sin_addr),
525+
addrstr, NVMF_TRADDR_SIZE);
526+
break;
527+
case AF_INET6:
528+
p = inet_ntop(host_info->ai_family,
529+
&(((struct sockaddr_in6 *)host_info->ai_addr)->sin6_addr),
530+
addrstr, NVMF_TRADDR_SIZE);
531+
break;
532+
default:
533+
nvme_msg(LOG_ERR, "unrecognized address family (%d) %s\n",
534+
host_info->ai_family, traddr);
535+
goto free_addrinfo;
536+
}
537+
538+
if (!p) {
539+
nvme_msg(LOG_ERR, "failed to get traddr for %s\n",
540+
traddr);
541+
goto free_addrinfo;
542+
}
543+
ret_traddr = strdup(addrstr);
544+
545+
free_addrinfo:
546+
freeaddrinfo(host_info);
547+
return ret_traddr;
548+
}

src/nvme/util.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,4 +391,6 @@ static inline void nvme_id_ns_flbas_to_lbaf_inuse(__u8 flbas, __u8 *lbaf_inuse)
391391
*lbaf_inuse = (((flbas & NVME_NS_FLBAS_HIGHER_MASK) >> 1) \
392392
| (flbas & NVME_NS_FLBAS_LOWER_MASK));
393393
}
394+
395+
char *hostname2traddr(const char *traddr);
394396
#endif /* _LIBNVME_UTIL_H */

0 commit comments

Comments
 (0)