nvme/rdma: use getaddrinfo() to parse service ID
Also remove unreachable code handling addr == NULL. Change-Id: Ia6b5639853bbb6f4193a1b4352d465829b1293d1 Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
parent
e15a704e2f
commit
e2a2165550
@ -660,24 +660,23 @@ nvme_rdma_connect(struct nvme_rdma_qpair *rqpair)
|
||||
}
|
||||
|
||||
static int
|
||||
nvme_rdma_parse_ipaddr(struct sockaddr_in *sin, const char *addr)
|
||||
nvme_rdma_parse_addr(struct sockaddr_storage *sa, const char *addr, const char *service)
|
||||
{
|
||||
struct addrinfo *res;
|
||||
int ret;
|
||||
|
||||
if (addr == NULL) {
|
||||
sin->sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
sin->sin_family = AF_INET;
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = getaddrinfo(addr, NULL, NULL, &res);
|
||||
ret = getaddrinfo(addr, service, NULL, &res);
|
||||
if (ret) {
|
||||
SPDK_ERRLOG("getaddrinfo failed - invalid hostname or IP address\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
*sin = *(struct sockaddr_in *) res->ai_addr;
|
||||
if (res->ai_addrlen > sizeof(*sa)) {
|
||||
SPDK_ERRLOG("getaddrinfo() ai_addrlen %zu too large\n", (size_t)res->ai_addrlen);
|
||||
ret = EINVAL;
|
||||
} else {
|
||||
memcpy(sa, res->ai_addr, res->ai_addrlen);
|
||||
}
|
||||
|
||||
freeaddrinfo(res);
|
||||
return ret;
|
||||
@ -712,18 +711,12 @@ nvme_rdma_qpair_connect(struct nvme_rdma_qpair *rqpair)
|
||||
ctrlr = rqpair->qpair.ctrlr;
|
||||
memset(&sin, 0, sizeof(struct sockaddr_storage));
|
||||
|
||||
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "port is %s\n", ctrlr->probe_info.trsvcid);
|
||||
rc = nvme_rdma_parse_ipaddr((struct sockaddr_in *)&sin, ctrlr->probe_info.traddr);
|
||||
if (rc < 0) {
|
||||
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "trsvcid is %s\n", ctrlr->probe_info.trsvcid);
|
||||
rc = nvme_rdma_parse_addr(&sin, ctrlr->probe_info.traddr, ctrlr->probe_info.trsvcid);
|
||||
if (rc != 0) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* need to tranfer the host*/
|
||||
if (sin.ss_family == AF_INET)
|
||||
((struct sockaddr_in *) &sin)->sin_port = htons(atoi(ctrlr->probe_info.trsvcid));
|
||||
else
|
||||
((struct sockaddr_in6 *) &sin)->sin6_port = htons(atoi(ctrlr->probe_info.trsvcid));
|
||||
|
||||
rc = rdma_create_id(rqpair->cm_channel, &rqpair->cm_id, rqpair, RDMA_PS_TCP);
|
||||
if (rc < 0) {
|
||||
goto err;
|
||||
|
Loading…
Reference in New Issue
Block a user