Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
varnish-cache
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
varnishcache
varnish-cache
Commits
ff05032e
Commit
ff05032e
authored
Oct 28, 2013
by
Poul-Henning Kamp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Convert the sessions local address to be a suckaddr. This shaves
92 bytes of struct sess.
parent
e5cbbedd
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
47 additions
and
45 deletions
+47
-45
cache.h
bin/varnishd/cache/cache.h
+4
-3
cache_cli.c
bin/varnishd/cache/cache_cli.c
+3
-0
cache_session.c
bin/varnishd/cache/cache_session.c
+34
-22
cache_vrt.c
bin/varnishd/cache/cache_vrt.c
+1
-1
cache_vrt_var.c
bin/varnishd/cache/cache_vrt_var.c
+5
-19
No files found.
bin/varnishd/cache/cache.h
View file @
ff05032e
...
...
@@ -768,9 +768,8 @@ struct sess {
/* Session related fields ------------------------------------*/
socklen_t
sockaddrlen
;
socklen_t
mysockaddrlen
;
struct
sockaddr_storage
sockaddr
;
struct
sockaddr_storage
mysockaddr
;
struct
sockaddr_storage
sockaddr
;
struct
suckaddr
*
our_addr
;
/* formatted ascii client address */
char
addr
[
ADDR_BUFSIZE
];
...
...
@@ -1117,6 +1116,8 @@ struct req *SES_GetReq(struct worker *, struct sess *);
void
SES_Handle
(
struct
sess
*
sp
,
double
now
);
void
SES_ReleaseReq
(
struct
req
*
);
pool_func_t
SES_pool_accept_task
;
void
SES_Get_Our_Addr
(
struct
sess
*
sp
);
/* cache_shmlog.c */
extern
struct
VSC_C_main
*
VSC_C_main
;
...
...
bin/varnishd/cache/cache_cli.c
View file @
ff05032e
...
...
@@ -43,6 +43,7 @@
#include "cache_backend.h" // struct vbc
#include "hash/hash_slinger.h" // struct objhead
#include "vsa.h"
#include "vcli.h"
#include "vcli_common.h"
#include "vcli_priv.h"
...
...
@@ -139,6 +140,8 @@ cli_debug_sizeof(struct cli *cli, const char * const *av, void *priv)
SZOF
(
struct
VSC_C_main
);
SZOF
(
struct
lock
);
SZOF
(
struct
dstat
);
VCLI_Out
(
cli
,
"sizeof(struct suckaddr) = %d = 0x%x
\n
"
,
vsa_suckaddr_len
,
vsa_suckaddr_len
);
#if 0
#define OFOF(foo, bar) { foo __foo; VCLI_Out(cli, \
"%-30s = 0x%4zx @ 0x%4zx\n", \
...
...
bin/varnishd/cache/cache_session.c
View file @
ff05032e
...
...
@@ -47,10 +47,11 @@
#include "cache.h"
#include "waiter/waiter.h"
#include "vsa.h"
#include "vtcp.h"
#include "vtim.h"
static
unsigned
ses_size
=
sizeof
(
struct
sess
)
;
static
unsigned
ses_size
;
/*--------------------------------------------------------------------*/
...
...
@@ -88,23 +89,6 @@ SES_Charge(struct worker *wrk, struct req *req)
#undef ACCT
}
/*--------------------------------------------------------------------
* This prepares a session for use, based on its sessmem structure.
*/
static
void
ses_setup
(
struct
sess
*
sp
)
{
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
sp
->
sockaddrlen
=
sizeof
(
sp
->
sockaddr
);
sp
->
mysockaddrlen
=
sizeof
(
sp
->
mysockaddr
);
sp
->
sockaddr
.
ss_family
=
sp
->
mysockaddr
.
ss_family
=
PF_UNSPEC
;
sp
->
t_open
=
NAN
;
sp
->
t_idle
=
NAN
;
Lck_New
(
&
sp
->
mtx
,
lck_sess
);
}
/*--------------------------------------------------------------------
* Get a new session, preferably by recycling an already ready one
*/
...
...
@@ -118,7 +102,12 @@ ses_new(struct sesspool *pp)
sp
=
MPL_Get
(
pp
->
mpl_sess
,
NULL
);
sp
->
magic
=
SESS_MAGIC
;
sp
->
sesspool
=
pp
;
ses_setup
(
sp
);
sp
->
sockaddrlen
=
sizeof
(
sp
->
sockaddr
);
sp
->
sockaddr
.
ss_family
=
PF_UNSPEC
;
sp
->
t_open
=
NAN
;
sp
->
t_idle
=
NAN
;
sp
->
our_addr
=
NULL
;
Lck_New
(
&
sp
->
mtx
,
lck_sess
);
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
return
(
sp
);
}
...
...
@@ -166,6 +155,29 @@ ses_sess_pool_task(struct worker *wrk, void *arg)
ses_req_pool_task
(
wrk
,
req
);
}
/*--------------------------------------------------------------------
* Get the local socket address
*/
void
SES_Get_Our_Addr
(
struct
sess
*
sp
)
{
char
*
s
;
struct
sockaddr_storage
ss
;
socklen_t
sl
;
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
if
(
sp
->
our_addr
!=
NULL
)
return
;
sl
=
sizeof
ss
;
AZ
(
getsockname
(
sp
->
fd
,
(
void
*
)
&
ss
,
&
sl
));
s
=
(
char
*
)
sp
;
s
+=
sizeof
*
sp
;
sp
->
our_addr
=
VSA_Build
(
s
,
&
ss
,
sl
);
assert
(
VSA_Sane
(
sp
->
our_addr
));
}
/*--------------------------------------------------------------------
* VSL log the endpoints of the TCP connection.
*
...
...
@@ -188,9 +200,8 @@ ses_vsl_socket(struct sess *sp, const char *lsockname)
VTCP_name
(
&
sp
->
sockaddr
,
sp
->
sockaddrlen
,
sp
->
addr
,
sizeof
sp
->
addr
,
sp
->
port
,
sizeof
sp
->
port
);
if
(
cache_param
->
log_local_addr
)
{
AZ
(
getsockname
(
sp
->
fd
,
(
void
*
)
&
sp
->
mysockaddr
,
&
sp
->
mysockaddrlen
));
VTCP_name
(
&
sp
->
mysockaddr
,
sp
->
mysockaddrlen
,
SES_Get_Our_Addr
(
sp
);
VTCP_name
((
const
void
*
)
sp
->
our_addr
,
vsa_suckaddr_len
,
laddr
,
sizeof
laddr
,
lport
,
sizeof
lport
);
}
else
{
strcpy
(
laddr
,
"-"
);
...
...
@@ -447,6 +458,7 @@ SES_NewPool(struct pool *wp, unsigned pool_no)
pp
->
mpl_req
=
MPL_New
(
nb
,
&
cache_param
->
req_pool
,
&
cache_param
->
workspace_client
);
bprintf
(
nb
,
"sess%u"
,
pool_no
);
ses_size
=
sizeof
(
struct
sess
)
+
vsa_suckaddr_len
;
pp
->
mpl_sess
=
MPL_New
(
nb
,
&
cache_param
->
sess_pool
,
&
ses_size
);
return
(
pp
);
}
...
...
bin/varnishd/cache/cache_vrt.c
View file @
ff05032e
...
...
@@ -296,7 +296,7 @@ VRT_r_now(const struct vrt_ctx *ctx)
/*--------------------------------------------------------------------*/
char
*
VRT_IP_string
(
const
struct
vrt_ctx
*
ctx
,
const
VCL_IP
ip
)
VRT_IP_string
(
const
struct
vrt_ctx
*
ctx
,
VCL_IP
ip
)
{
char
*
p
;
unsigned
len
;
...
...
bin/varnishd/cache/cache_vrt_var.c
View file @
ff05032e
...
...
@@ -41,7 +41,6 @@
#include "vrt.h"
#include "vrt_obj.h"
#include "vsa.h"
#include "vtcp.h"
static
char
vrt_hostname
[
255
]
=
""
;
...
...
@@ -544,21 +543,14 @@ VRT_r_client_ip(const struct vrt_ctx *ctx)
return
(
&
ctx
->
req
->
sp
->
sockaddr
);
}
const
void
*
VCL_IP
VRT_r_server_ip
(
const
struct
vrt_ctx
*
ctx
)
{
int
i
;
CHECK_OBJ_NOTNULL
(
ctx
,
VRT_CTX_MAGIC
);
CHECK_OBJ_NOTNULL
(
ctx
->
req
,
REQ_MAGIC
);
if
(
ctx
->
req
->
sp
->
mysockaddr
.
ss_family
==
AF_UNSPEC
)
{
i
=
getsockname
(
ctx
->
req
->
sp
->
fd
,
(
void
*
)
&
ctx
->
req
->
sp
->
mysockaddr
,
&
ctx
->
req
->
sp
->
mysockaddrlen
);
assert
(
VTCP_Check
(
i
));
}
return
(
&
ctx
->
req
->
sp
->
mysockaddr
);
SES_Get_Our_Addr
(
ctx
->
req
->
sp
);
return
(
ctx
->
req
->
sp
->
our_addr
);
}
const
char
*
...
...
@@ -589,17 +581,11 @@ VRT_r_server_hostname(const struct vrt_ctx *ctx)
long
VRT_r_server_port
(
const
struct
vrt_ctx
*
ctx
)
{
int
i
;
CHECK_OBJ_NOTNULL
(
ctx
,
VRT_CTX_MAGIC
);
CHECK_OBJ_NOTNULL
(
ctx
->
req
,
REQ_MAGIC
);
if
(
ctx
->
req
->
sp
->
mysockaddr
.
ss_family
==
AF_UNSPEC
)
{
i
=
getsockname
(
ctx
->
req
->
sp
->
fd
,
(
void
*
)
&
ctx
->
req
->
sp
->
mysockaddr
,
&
ctx
->
req
->
sp
->
mysockaddrlen
);
assert
(
VTCP_Check
(
i
));
}
return
(
VSA_Port
(
&
ctx
->
req
->
sp
->
mysockaddr
));
SES_Get_Our_Addr
(
ctx
->
req
->
sp
);
return
(
VSA_Port
(
ctx
->
req
->
sp
->
our_addr
));
}
/*--------------------------------------------------------------------*/
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment