net: spdk_sock_getaddr() support IPv6 transparently
spdk_sock_getaddr() (in lib/net/sock.c) only support IPv4. Hence IPv6 cannot be used in SPDK iSCSI target. By adding the code to support IPv6 transparently, IPv6 becomes available in SPDK iSCSI target. Change-Id: I236f2c6cb1e61283dde090729fecd8f743cec3fc Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-on: https://review.gerrithub.io/383672 Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
This commit is contained in:
parent
2e7c008fe2
commit
1b306f4b54
@ -39,17 +39,30 @@
|
||||
#define MAX_TMPBUF 1024
|
||||
#define PORTNUMLEN 32
|
||||
|
||||
static int get_addr_str(struct sockaddr_in *paddr, char *host, size_t hlen)
|
||||
static int get_addr_str(struct sockaddr *sa, char *host, size_t hlen)
|
||||
{
|
||||
uint8_t *pa;
|
||||
const char *result = NULL;
|
||||
|
||||
if (paddr == NULL || host == NULL)
|
||||
if (sa == NULL || host == NULL)
|
||||
return -1;
|
||||
|
||||
pa = (uint8_t *)&paddr->sin_addr.s_addr;
|
||||
snprintf(host, hlen, "%u.%u.%u.%u", pa[0], pa[1], pa[2], pa[3]);
|
||||
switch (sa->sa_family) {
|
||||
case AF_INET:
|
||||
result = inet_ntop(AF_INET, &(((struct sockaddr_in *)sa)->sin_addr),
|
||||
host, hlen);
|
||||
break;
|
||||
case AF_INET6:
|
||||
result = inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)sa)->sin6_addr),
|
||||
host, hlen);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (result != NULL)
|
||||
return 0;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
@ -80,7 +93,7 @@ spdk_sock_getaddr(int sock, char *saddr, int slen, char *caddr, int clen)
|
||||
return -1;
|
||||
}
|
||||
|
||||
rc = get_addr_str((struct sockaddr_in *)&sa, saddr, slen);
|
||||
rc = get_addr_str((struct sockaddr *)&sa, saddr, slen);
|
||||
if (rc != 0) {
|
||||
SPDK_ERRLOG("getnameinfo() failed (errno=%d)\n", errno);
|
||||
return -1;
|
||||
@ -94,7 +107,7 @@ spdk_sock_getaddr(int sock, char *saddr, int slen, char *caddr, int clen)
|
||||
return -1;
|
||||
}
|
||||
|
||||
rc = get_addr_str((struct sockaddr_in *)&sa, caddr, clen);
|
||||
rc = get_addr_str((struct sockaddr *)&sa, caddr, clen);
|
||||
if (rc != 0) {
|
||||
SPDK_ERRLOG("getnameinfo() failed (errno=%d)\n", errno);
|
||||
return -1;
|
||||
|
Loading…
Reference in New Issue
Block a user