Commit 2a1ec4d6 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Switch from struct sockaddr to sockaddr_storage throughout.



git-svn-id: http://www.varnish-cache.org/svn/trunk/varnish-cache@5393 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent da1021d6
...@@ -395,8 +395,8 @@ struct sess { ...@@ -395,8 +395,8 @@ struct sess {
socklen_t sockaddrlen; socklen_t sockaddrlen;
socklen_t mysockaddrlen; socklen_t mysockaddrlen;
struct sockaddr *sockaddr; struct sockaddr_storage *sockaddr;
struct sockaddr *mysockaddr; struct sockaddr_storage *mysockaddr;
struct listen_sock *mylsock; struct listen_sock *mylsock;
/* formatted ascii client address */ /* formatted ascii client address */
...@@ -468,7 +468,7 @@ struct vbc { ...@@ -468,7 +468,7 @@ struct vbc {
struct vdi_simple *vdis; struct vdi_simple *vdis;
int fd; int fd;
struct sockaddr *addr; struct sockaddr_storage *addr;
socklen_t addrlen; socklen_t addrlen;
uint8_t recycled; uint8_t recycled;
......
...@@ -167,7 +167,7 @@ VCA_Prep(struct sess *sp) ...@@ -167,7 +167,7 @@ VCA_Prep(struct sess *sp)
sp->addr = WS_Dup(sp->ws, addr); sp->addr = WS_Dup(sp->ws, addr);
sp->port = WS_Dup(sp->ws, port); sp->port = WS_Dup(sp->ws, port);
if (params->log_local_addr) { if (params->log_local_addr) {
AZ(getsockname(sp->fd, sp->mysockaddr, &sp->mysockaddrlen)); AZ(getsockname(sp->fd, (void*)sp->mysockaddr, &sp->mysockaddrlen));
TCP_name(sp->mysockaddr, sp->mysockaddrlen, TCP_name(sp->mysockaddr, sp->mysockaddrlen,
addr, sizeof addr, port, sizeof port); addr, sizeof addr, port, sizeof port);
VSL(SLT_SessionOpen, sp->fd, "%s %s %s %s", VSL(SLT_SessionOpen, sp->fd, "%s %s %s %s",
......
...@@ -129,7 +129,7 @@ VBE_ReleaseConn(struct vbc *vc) ...@@ -129,7 +129,7 @@ VBE_ReleaseConn(struct vbc *vc)
*/ */
static int static int
vbe_TryConnect(const struct sess *sp, int pf, const struct sockaddr *sa, vbe_TryConnect(const struct sess *sp, int pf, const struct sockaddr_storage *sa,
socklen_t salen, const struct vdi_simple *vs) socklen_t salen, const struct vdi_simple *vs)
{ {
int s, i, tmo; int s, i, tmo;
...@@ -148,10 +148,7 @@ vbe_TryConnect(const struct sess *sp, int pf, const struct sockaddr *sa, ...@@ -148,10 +148,7 @@ vbe_TryConnect(const struct sess *sp, int pf, const struct sockaddr *sa,
tmo = (int)(tmod * 1000.0); tmo = (int)(tmod * 1000.0);
if (tmo > 0) i = TCP_connect(s, sa, salen, tmo);
i = TCP_connect(s, sa, salen, tmo);
else
i = connect(s, sa, salen);
if (i != 0) { if (i != 0) {
AZ(close(s)); AZ(close(s));
......
...@@ -122,9 +122,9 @@ struct backend { ...@@ -122,9 +122,9 @@ struct backend {
char *ipv6_addr; char *ipv6_addr;
char *port; char *port;
struct sockaddr *ipv4; struct sockaddr_storage *ipv4;
socklen_t ipv4len; socklen_t ipv4len;
struct sockaddr *ipv6; struct sockaddr_storage *ipv6;
socklen_t ipv6len; socklen_t ipv6len;
unsigned n_conn; unsigned n_conn;
......
...@@ -151,11 +151,12 @@ VBE_DropRefConn(struct backend *b) ...@@ -151,11 +151,12 @@ VBE_DropRefConn(struct backend *b)
*/ */
static void static void
copy_sockaddr(struct sockaddr **sa, socklen_t *len, const unsigned char *src) copy_sockaddr(struct sockaddr_storage **sa, socklen_t *len,
const unsigned char *src)
{ {
assert(*src > 0); assert(*src > 0);
*sa = malloc(*src); *sa = malloc(*src); /* XXX: malloc(sizeof **sa) ? */
XXXAN(*sa); XXXAN(*sa);
memcpy(*sa, src + 1, *src); memcpy(*sa, src + 1, *src);
*len = *src; *len = *src;
......
...@@ -109,7 +109,7 @@ static struct lock vbp_mtx; ...@@ -109,7 +109,7 @@ static struct lock vbp_mtx;
*/ */
static int static int
vbp_connect(int pf, const struct sockaddr *sa, socklen_t salen, int tmo) vbp_connect(int pf, const struct sockaddr_storage *sa, socklen_t salen, int tmo)
{ {
int s, i; int s, i;
......
...@@ -128,17 +128,17 @@ vdi_dns_comp_addrinfo6(const struct backend *bp, ...@@ -128,17 +128,17 @@ vdi_dns_comp_addrinfo6(const struct backend *bp,
/* Check if a backends socket is the same as addr */ /* Check if a backends socket is the same as addr */
static int static int
vdi_dns_comp_addrinfo(const struct director *dir, vdi_dns_comp_addrinfo(const struct director *dir,
struct sockaddr *addr, struct sockaddr_storage *addr,
const socklen_t len) const socklen_t len)
{ {
struct backend *bp; struct backend *bp;
bp = vdi_get_backend_if_simple(dir); bp = vdi_get_backend_if_simple(dir);
AN(bp); AN(bp);
if (addr->sa_family == PF_INET && bp->ipv4) { if (addr->ss_family == PF_INET && bp->ipv4) {
return (vdi_dns_comp_addrinfo4(bp, (struct sockaddr_in *) return (vdi_dns_comp_addrinfo4(bp, (struct sockaddr_in *)
addr, len)); addr, len));
} else if (addr->sa_family == PF_INET6 && bp->ipv6) { } else if (addr->ss_family == PF_INET6 && bp->ipv6) {
return (vdi_dns_comp_addrinfo6(bp, (struct sockaddr_in6 *) return (vdi_dns_comp_addrinfo6(bp, (struct sockaddr_in6 *)
addr, len)); addr, len));
} }
...@@ -298,8 +298,10 @@ vdi_dns_cache_add(const struct sess *sp, ...@@ -298,8 +298,10 @@ vdi_dns_cache_add(const struct sess *sp,
continue; continue;
for (i = 0; i < vs->nhosts; i++) { for (i = 0; i < vs->nhosts; i++) {
struct sockaddr_storage ss_hack;
memcpy(&ss_hack, res->ai_addr, res->ai_addrlen);
if (vdi_dns_comp_addrinfo(vs->hosts[i], if (vdi_dns_comp_addrinfo(vs->hosts[i],
res->ai_addr, res->ai_addrlen)) { &ss_hack, res->ai_addrlen)) {
new->hosts[host] = vs->hosts[i]; new->hosts[host] = vs->hosts[i];
CHECK_OBJ_NOTNULL(new->hosts[host], CHECK_OBJ_NOTNULL(new->hosts[host],
DIRECTOR_MAGIC); DIRECTOR_MAGIC);
......
...@@ -169,7 +169,7 @@ ses_setup(struct sessmem *sm) ...@@ -169,7 +169,7 @@ ses_setup(struct sessmem *sm)
sp->sockaddrlen = sizeof(sm->sockaddr[0]); sp->sockaddrlen = sizeof(sm->sockaddr[0]);
sp->mysockaddr = (void*)(&sm->sockaddr[1]); sp->mysockaddr = (void*)(&sm->sockaddr[1]);
sp->mysockaddrlen = sizeof(sm->sockaddr[1]); sp->mysockaddrlen = sizeof(sm->sockaddr[1]);
sp->sockaddr->sa_family = sp->mysockaddr->sa_family = PF_UNSPEC; sp->sockaddr->ss_family = sp->mysockaddr->ss_family = PF_UNSPEC;
sp->t_open = NAN; sp->t_open = NAN;
sp->t_req = NAN; sp->t_req = NAN;
sp->t_resp = NAN; sp->t_resp = NAN;
......
...@@ -291,7 +291,7 @@ VRT_r_beresp_backend_name(const struct sess *sp) ...@@ -291,7 +291,7 @@ VRT_r_beresp_backend_name(const struct sess *sp)
return(sp->vbc->backend->vcl_name); return(sp->vbc->backend->vcl_name);
} }
struct sockaddr * struct sockaddr_storage *
VRT_r_beresp_backend_ip(const struct sess *sp) VRT_r_beresp_backend_ip(const struct sess *sp)
{ {
...@@ -480,20 +480,20 @@ REQ_BOOL(hash_always_miss) ...@@ -480,20 +480,20 @@ REQ_BOOL(hash_always_miss)
/*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/
struct sockaddr * struct sockaddr_storage *
VRT_r_client_ip(const struct sess *sp) VRT_r_client_ip(const struct sess *sp)
{ {
return (sp->sockaddr); return (sp->sockaddr);
} }
struct sockaddr * struct sockaddr_storage *
VRT_r_server_ip(struct sess *sp) VRT_r_server_ip(struct sess *sp)
{ {
int i; int i;
if (sp->mysockaddr->sa_family == AF_UNSPEC) { if (sp->mysockaddr->ss_family == AF_UNSPEC) {
i = getsockname(sp->fd, sp->mysockaddr, &sp->mysockaddrlen); i = getsockname(sp->fd, (void*)sp->mysockaddr, &sp->mysockaddrlen);
assert(TCP_Check(i)); assert(TCP_Check(i));
} }
...@@ -531,8 +531,8 @@ int ...@@ -531,8 +531,8 @@ int
VRT_r_server_port(struct sess *sp) VRT_r_server_port(struct sess *sp)
{ {
if (sp->mysockaddr->sa_family == AF_UNSPEC) if (sp->mysockaddr->ss_family == AF_UNSPEC)
AZ(getsockname(sp->fd, sp->mysockaddr, &sp->mysockaddrlen)); AZ(getsockname(sp->fd, (void*)sp->mysockaddr, &sp->mysockaddrlen));
return (TCP_port(sp->mysockaddr)); return (TCP_port(sp->mysockaddr));
} }
......
...@@ -76,10 +76,10 @@ int TCP_blocking(int sock); ...@@ -76,10 +76,10 @@ int TCP_blocking(int sock);
int TCP_nonblocking(int sock); int TCP_nonblocking(int sock);
int TCP_linger(int sock, int linger); int TCP_linger(int sock, int linger);
#ifdef SOL_SOCKET #ifdef SOL_SOCKET
int TCP_port(const struct sockaddr *addr); int TCP_port(const struct sockaddr_storage *addr);
void TCP_name(const struct sockaddr *addr, unsigned l, char *abuf, void TCP_name(const struct sockaddr_storage *addr, unsigned l, char *abuf,
unsigned alen, char *pbuf, unsigned plen); unsigned alen, char *pbuf, unsigned plen);
int TCP_connect(int s, const struct sockaddr *name, socklen_t namelen, int TCP_connect(int s, const struct sockaddr_storage *name, socklen_t namelen,
int msec); int msec);
void TCP_close(int *s); void TCP_close(int *s);
void TCP_set_read_timeout(int s, double seconds); void TCP_set_read_timeout(int s, double seconds);
......
...@@ -64,14 +64,14 @@ SVNID("$Id$") ...@@ -64,14 +64,14 @@ SVNID("$Id$")
/*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/
int int
TCP_port(const struct sockaddr *addr) TCP_port(const struct sockaddr_storage *addr)
{ {
if (addr->sa_family == AF_INET) { if (addr->ss_family == AF_INET) {
const struct sockaddr_in *ain = (const void *)addr; const struct sockaddr_in *ain = (const void *)addr;
return ntohs((ain->sin_port)); return ntohs((ain->sin_port));
} }
if (addr->sa_family == AF_INET6) { if (addr->ss_family == AF_INET6) {
const struct sockaddr_in6 *ain = (const void *)addr; const struct sockaddr_in6 *ain = (const void *)addr;
return ntohs((ain->sin6_port)); return ntohs((ain->sin6_port));
} }
...@@ -82,12 +82,12 @@ TCP_port(const struct sockaddr *addr) ...@@ -82,12 +82,12 @@ TCP_port(const struct sockaddr *addr)
/*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/
void void
TCP_name(const struct sockaddr *addr, unsigned l, char *abuf, unsigned alen, TCP_name(const struct sockaddr_storage *addr, unsigned l,
char *pbuf, unsigned plen) char *abuf, unsigned alen, char *pbuf, unsigned plen)
{ {
int i; int i;
i = getnameinfo(addr, l, abuf, alen, pbuf, plen, i = getnameinfo((const void *)addr, l, abuf, alen, pbuf, plen,
NI_NUMERICHOST | NI_NUMERICSERV); NI_NUMERICHOST | NI_NUMERICSERV);
if (i) { if (i) {
/* /*
...@@ -113,12 +113,11 @@ void ...@@ -113,12 +113,11 @@ void
TCP_myname(int sock, char *abuf, unsigned alen, char *pbuf, unsigned plen) TCP_myname(int sock, char *abuf, unsigned alen, char *pbuf, unsigned plen)
{ {
struct sockaddr_storage addr_s; struct sockaddr_storage addr_s;
struct sockaddr *addr = (void*)&addr_s;
socklen_t l; socklen_t l;
l = sizeof addr_s; l = sizeof addr_s;
AZ(getsockname(sock, addr, &l)); AZ(getsockname(sock, (void *)&addr_s, &l));
TCP_name(addr, l, abuf, alen, pbuf, plen); TCP_name(&addr_s, l, abuf, alen, pbuf, plen);
} }
/*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/
...@@ -126,12 +125,11 @@ void ...@@ -126,12 +125,11 @@ void
TCP_hisname(int sock, char *abuf, unsigned alen, char *pbuf, unsigned plen) TCP_hisname(int sock, char *abuf, unsigned alen, char *pbuf, unsigned plen)
{ {
struct sockaddr_storage addr_s; struct sockaddr_storage addr_s;
struct sockaddr *addr = (void*)&addr_s;
socklen_t l; socklen_t l;
l = sizeof addr_s; l = sizeof addr_s;
if (!getpeername(sock, addr, &l)) if (!getpeername(sock, (void*)&addr_s, &l))
TCP_name(addr, l, abuf, alen, pbuf, plen); TCP_name(&addr_s, l, abuf, alen, pbuf, plen);
else { else {
strlcpy(abuf, "<none>", alen); strlcpy(abuf, "<none>", alen);
strlcpy(pbuf, "<none>", plen); strlcpy(pbuf, "<none>", plen);
...@@ -209,7 +207,7 @@ TCP_nonblocking(int sock) ...@@ -209,7 +207,7 @@ TCP_nonblocking(int sock)
*/ */
int int
TCP_connect(int s, const struct sockaddr *name, socklen_t namelen, int msec) TCP_connect(int s, const struct sockaddr_storage *name, socklen_t namelen, int msec)
{ {
int i, k; int i, k;
socklen_t l; socklen_t l;
...@@ -218,13 +216,15 @@ TCP_connect(int s, const struct sockaddr *name, socklen_t namelen, int msec) ...@@ -218,13 +216,15 @@ TCP_connect(int s, const struct sockaddr *name, socklen_t namelen, int msec)
assert(s >= 0); assert(s >= 0);
/* Set the socket non-blocking */ /* Set the socket non-blocking */
(void)TCP_nonblocking(s); if (msec > 0)
(void)TCP_nonblocking(s);
/* Attempt the connect */ /* Attempt the connect */
i = connect(s, name, namelen); i = connect(s, (const void *)name, namelen);
if (i == 0 || errno != EINPROGRESS) if (i == 0 || errno != EINPROGRESS)
return (i); return (i);
assert(msec > 0);
/* Exercise our patience, polling for write */ /* Exercise our patience, polling for write */
fds[0].fd = s; fds[0].fd = s;
fds[0].events = POLLWRNORM; fds[0].events = POLLWRNORM;
......
...@@ -405,7 +405,7 @@ sp_variables = ( ...@@ -405,7 +405,7 @@ sp_variables = (
# VCL to C type conversion # VCL to C type conversion
vcltypes = { vcltypes = {
'IP': "struct sockaddr *", 'IP': "struct sockaddr_storage *",
'STRING': "const char *", 'STRING': "const char *",
'BOOL': "unsigned", 'BOOL': "unsigned",
'BACKEND': "struct director *", 'BACKEND': "struct director *",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment