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
|
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;
|
struct addrinfo *res;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (addr == NULL) {
|
ret = getaddrinfo(addr, service, NULL, &res);
|
||||||
sin->sin_addr.s_addr = htonl(INADDR_ANY);
|
|
||||||
sin->sin_family = AF_INET;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = getaddrinfo(addr, NULL, NULL, &res);
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
SPDK_ERRLOG("getaddrinfo failed - invalid hostname or IP address\n");
|
SPDK_ERRLOG("getaddrinfo failed - invalid hostname or IP address\n");
|
||||||
return ret;
|
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);
|
freeaddrinfo(res);
|
||||||
return ret;
|
return ret;
|
||||||
@ -712,18 +711,12 @@ nvme_rdma_qpair_connect(struct nvme_rdma_qpair *rqpair)
|
|||||||
ctrlr = rqpair->qpair.ctrlr;
|
ctrlr = rqpair->qpair.ctrlr;
|
||||||
memset(&sin, 0, sizeof(struct sockaddr_storage));
|
memset(&sin, 0, sizeof(struct sockaddr_storage));
|
||||||
|
|
||||||
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "port is %s\n", ctrlr->probe_info.trsvcid);
|
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "trsvcid is %s\n", ctrlr->probe_info.trsvcid);
|
||||||
rc = nvme_rdma_parse_ipaddr((struct sockaddr_in *)&sin, ctrlr->probe_info.traddr);
|
rc = nvme_rdma_parse_addr(&sin, ctrlr->probe_info.traddr, ctrlr->probe_info.trsvcid);
|
||||||
if (rc < 0) {
|
if (rc != 0) {
|
||||||
goto err;
|
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);
|
rc = rdma_create_id(rqpair->cm_channel, &rqpair->cm_id, rqpair, RDMA_PS_TCP);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
goto err;
|
goto err;
|
||||||
|
Loading…
Reference in New Issue
Block a user