[master] ab5b0c8 Convert the remote address of the session to suckaddr too.

Poul-Henning Kamp phk at varnish-cache.org
Mon Oct 28 08:38:00 CET 2013


commit ab5b0c8388eb0698bd7d90f1df0657cc8a5287e0
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Mon Oct 28 07:37:44 2013 +0000

    Convert the remote address of the session to suckaddr too.

diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 069a80a..17f7f1f 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -767,8 +767,7 @@ struct sess {
 
 	/* Session related fields ------------------------------------*/
 
-	socklen_t		sockaddrlen;
-	struct sockaddr_storage sockaddr;
+	struct suckaddr		*their_addr;
 	struct suckaddr		*our_addr;
 
 	/* formatted ascii client address */
diff --git a/bin/varnishd/cache/cache_acceptor.c b/bin/varnishd/cache/cache_acceptor.c
index bfaabca..17fe100 100644
--- a/bin/varnishd/cache/cache_acceptor.c
+++ b/bin/varnishd/cache/cache_acceptor.c
@@ -51,6 +51,7 @@
 
 #include "vcli.h"
 #include "vcli_priv.h"
+#include "vsa.h"
 #include "vtcp.h"
 #include "vtim.h"
 
@@ -350,9 +351,9 @@ VCA_SetupSess(struct worker *wrk, struct sess *sp)
 	sp->fd = wa->acceptsock;
 	wa->acceptsock = -1;
 	retval = wa->acceptlsock->name;
-	assert(wa->acceptaddrlen <= sp->sockaddrlen);
-	memcpy(&sp->sockaddr, &wa->acceptaddr, wa->acceptaddrlen);
-	sp->sockaddrlen = wa->acceptaddrlen;
+	assert(wa->acceptaddrlen <= vsa_suckaddr_len);
+	sp->their_addr = VSA_Build(sp->their_addr,
+	    &wa->acceptaddr, wa->acceptaddrlen);
 	vca_pace_good();
 	wrk->stats.sess_conn++;
 	WS_Release(wrk->aws, 0);
diff --git a/bin/varnishd/cache/cache_session.c b/bin/varnishd/cache/cache_session.c
index 92221f0..e27ed68 100644
--- a/bin/varnishd/cache/cache_session.c
+++ b/bin/varnishd/cache/cache_session.c
@@ -97,13 +97,19 @@ static struct sess *
 ses_new(struct sesspool *pp)
 {
 	struct sess *sp;
+	char *s;
 
 	CHECK_OBJ_NOTNULL(pp, SESSPOOL_MAGIC);
 	sp = MPL_Get(pp->mpl_sess, NULL);
 	sp->magic = SESS_MAGIC;
 	sp->sesspool = pp;
-	sp->sockaddrlen = sizeof(sp->sockaddr);
-	sp->sockaddr.ss_family = PF_UNSPEC;
+
+	s = (char *)sp;
+	s += sizeof *sp;
+	s += vsa_suckaddr_len;
+	memset(s, 0, vsa_suckaddr_len);
+	sp->their_addr = (void*)s;
+
 	sp->t_open = NAN;
 	sp->t_idle = NAN;
 	sp->our_addr = NULL;
@@ -197,7 +203,7 @@ ses_vsl_socket(struct sess *sp, const char *lsockname)
 	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
 	AN(lsockname);
 
-	VTCP_name(&sp->sockaddr, sp->sockaddrlen,
+	VTCP_name((const void *)sp->their_addr, vsa_suckaddr_len,
 	    sp->addr, sizeof sp->addr, sp->port, sizeof sp->port);
 	if (cache_param->log_local_addr) {
 		SES_Get_Our_Addr(sp);
diff --git a/bin/varnishd/cache/cache_vrt_var.c b/bin/varnishd/cache/cache_vrt_var.c
index d14de37..0ef4a05 100644
--- a/bin/varnishd/cache/cache_vrt_var.c
+++ b/bin/varnishd/cache/cache_vrt_var.c
@@ -540,7 +540,7 @@ VRT_r_client_ip(const struct vrt_ctx *ctx)
 
 	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	CHECK_OBJ_NOTNULL(ctx->req, REQ_MAGIC);
-	return (&ctx->req->sp->sockaddr);
+	return (ctx->req->sp->their_addr);
 }
 
 VCL_IP



More information about the varnish-commit mailing list