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
3ba46b25
Commit
3ba46b25
authored
Nov 06, 2020
by
Poul-Henning Kamp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Encapsulat the backend connection endpoint data in a separate structure.
parent
54419f89
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
86 additions
and
53 deletions
+86
-53
cache_backend.c
bin/varnishd/cache/cache_backend.c
+25
-21
vrt.h
include/vrt.h
+12
-7
vcc_backend.c
lib/libvcc/vcc_backend.c
+34
-19
vmod_debug.c
lib/libvmod_debug/vmod_debug.c
+4
-1
vmod_debug_dyn.c
lib/libvmod_debug/vmod_debug_dyn.c
+11
-5
No files found.
bin/varnishd/cache/cache_backend.c
View file @
3ba46b25
...
...
@@ -560,21 +560,22 @@ VRT_backend_vsm_need(VRT_CTX)
}
static
uint64_t
vrt_hash_be
(
const
struct
vrt_
backend
*
vrt
)
vrt_hash_be
(
const
struct
vrt_
endpoint
*
vep
)
{
struct
VSHA256Context
cx
[
1
];
unsigned
char
ident
[
VSHA256_DIGEST_LENGTH
];
CHECK_OBJ_NOTNULL
(
vep
,
VRT_ENDPOINT_MAGIC
);
VSHA256_Init
(
cx
);
VSHA256_Update
(
cx
,
vbe_proto_ident
,
strlen
(
vbe_proto_ident
));
if
(
v
rt
->
ipv4_suckaddr
!=
NULL
)
VSHA256_Update
(
cx
,
v
rt
->
ipv4_suckaddr
,
vsa_suckaddr_len
);
if
(
v
rt
->
ipv6_suckaddr
!=
NULL
)
VSHA256_Update
(
cx
,
v
rt
->
ipv6_suckaddr
,
vsa_suckaddr_len
);
if
(
v
rt
->
path
!=
NULL
)
VSHA256_Update
(
cx
,
v
rt
->
path
,
strlen
(
vrt
->
path
));
if
(
v
rt
->
prefix_ptr
!=
NULL
)
VSHA256_Update
(
cx
,
v
rt
->
prefix_ptr
,
vrt
->
prefix
_len
);
if
(
v
ep
->
ipv4
!=
NULL
)
VSHA256_Update
(
cx
,
v
ep
->
ipv4
,
vsa_suckaddr_len
);
if
(
v
ep
->
ipv6
!=
NULL
)
VSHA256_Update
(
cx
,
v
ep
->
ipv6
,
vsa_suckaddr_len
);
if
(
v
ep
->
uds_
path
!=
NULL
)
VSHA256_Update
(
cx
,
v
ep
->
uds_path
,
strlen
(
vep
->
uds_
path
));
if
(
v
ep
->
ident
!=
NULL
)
VSHA256_Update
(
cx
,
v
ep
->
ident
,
vep
->
ident
_len
);
VSHA256_Final
(
ident
,
cx
);
return
(
vbe64dec
(
ident
));
}
...
...
@@ -586,20 +587,22 @@ VRT_new_backend_clustered(VRT_CTX, struct vsmw_cluster *vc,
struct
backend
*
be
;
struct
vcl
*
vcl
;
const
struct
vrt_backend_probe
*
vbp
;
const
struct
vrt_endpoint
*
vep
;
const
struct
vdi_methods
*
m
;
const
struct
suckaddr
*
sa
;
char
abuf
[
VTCP_ADDRBUFSIZE
];
CHECK_OBJ_NOTNULL
(
ctx
,
VRT_CTX_MAGIC
);
CHECK_OBJ_NOTNULL
(
vrt
,
VRT_BACKEND_MAGIC
);
if
(
vrt
->
path
==
NULL
)
{
if
(
vrt
->
ipv4_suckaddr
==
NULL
&&
vrt
->
ipv6_suckaddr
==
NULL
)
{
vep
=
vrt
->
endpoint
;
CHECK_OBJ_NOTNULL
(
vep
,
VRT_ENDPOINT_MAGIC
);
if
(
vep
->
uds_path
==
NULL
)
{
if
(
vep
->
ipv4
==
NULL
&&
vep
->
ipv6
==
NULL
)
{
VRT_fail
(
ctx
,
"%s: Illegal IP"
,
__func__
);
return
(
NULL
);
}
}
else
assert
(
vrt
->
ipv4_suckaddr
==
NULL
&&
vrt
->
ipv6_suckaddr
==
NULL
);
assert
(
vep
->
ipv4
==
NULL
&&
vep
->
ipv6
==
NULL
);
vcl
=
ctx
->
vcl
;
AN
(
vcl
);
...
...
@@ -617,14 +620,14 @@ VRT_new_backend_clustered(VRT_CTX, struct vsmw_cluster *vc,
#undef DN
if
(
be
->
hosthdr
==
NULL
)
{
if
(
vrt
->
path
!=
NULL
)
if
(
vrt
->
endpoint
->
uds_
path
!=
NULL
)
sa
=
bogo_ip
;
else
if
(
cache_param
->
prefer_ipv6
&&
v
rt
->
ipv6_suckaddr
!=
NULL
)
sa
=
v
rt
->
ipv6_suckaddr
;
else
if
(
v
rt
->
ipv4_suckaddr
!=
NULL
)
sa
=
v
rt
->
ipv4_suckaddr
;
else
if
(
cache_param
->
prefer_ipv6
&&
v
ep
->
ipv6
!=
NULL
)
sa
=
v
ep
->
ipv6
;
else
if
(
v
ep
->
ipv4
!=
NULL
)
sa
=
v
ep
->
ipv4
;
else
sa
=
v
rt
->
ipv6_suckaddr
;
sa
=
v
ep
->
ipv6
;
VTCP_name
(
sa
,
abuf
,
sizeof
abuf
,
NULL
,
0
);
REPLACE
(
be
->
hosthdr
,
abuf
);
}
...
...
@@ -633,8 +636,8 @@ VRT_new_backend_clustered(VRT_CTX, struct vsmw_cluster *vc,
"%s.%s"
,
VCL_Name
(
ctx
->
vcl
),
vrt
->
vcl_name
);
AN
(
be
->
vsc
);
be
->
tcp_pool
=
VTP_Ref
(
v
rt
->
ipv4_suckaddr
,
vrt
->
ipv6_suckaddr
,
v
rt
->
path
,
vrt_hash_be
(
vr
t
));
be
->
tcp_pool
=
VTP_Ref
(
v
ep
->
ipv4
,
vep
->
ipv6
,
v
ep
->
uds_path
,
vrt_hash_be
(
vrt
->
endpoin
t
));
AN
(
be
->
tcp_pool
);
vbp
=
vrt
->
probe
;
...
...
@@ -670,6 +673,7 @@ VRT_new_backend_clustered(VRT_CTX, struct vsmw_cluster *vc,
VCL_BACKEND
VRT_new_backend
(
VRT_CTX
,
const
struct
vrt_backend
*
vrt
)
{
CHECK_OBJ_NOTNULL
(
vrt
->
endpoint
,
VRT_ENDPOINT_MAGIC
);
return
(
VRT_new_backend_clustered
(
ctx
,
NULL
,
vrt
));
}
...
...
include/vrt.h
View file @
3ba46b25
...
...
@@ -380,20 +380,27 @@ extern const void * const vrt_magic_string_unset;
* One of those things...
*/
struct
vrt_endpoint
{
unsigned
magic
;
#define VRT_ENDPOINT_MAGIC 0xcc419347
VCL_IP
ipv4
;
VCL_IP
ipv6
;
const
char
*
uds_path
;
const
void
*
ident
;
int
ident_len
;
};
#define VRT_BACKEND_FIELDS(rigid) \
rigid char *vcl_name; \
rigid char *ipv4_addr; \
rigid char *ipv6_addr; \
rigid char *port; \
rigid char *path; \
rigid char *hosthdr; \
vtim_dur connect_timeout; \
vtim_dur first_byte_timeout; \
vtim_dur between_bytes_timeout; \
unsigned max_connections; \
unsigned proxy_header; \
void *prefix_ptr; \
unsigned prefix_len;
unsigned proxy_header;
#define VRT_BACKEND_HANDLE() \
do { \
...
...
@@ -401,7 +408,6 @@ extern const void * const vrt_magic_string_unset;
DA(ipv4_addr); \
DA(ipv6_addr); \
DA(port); \
DA(path); \
DA(hosthdr); \
DN(connect_timeout); \
DN(first_byte_timeout); \
...
...
@@ -413,9 +419,8 @@ extern const void * const vrt_magic_string_unset;
struct
vrt_backend
{
unsigned
magic
;
#define VRT_BACKEND_MAGIC 0x4799ce6c
const
struct
vrt_endpoint
*
endpoint
;
VRT_BACKEND_FIELDS
(
const
)
VCL_IP
ipv4_suckaddr
;
VCL_IP
ipv6_suckaddr
;
VCL_PROBE
probe
;
};
...
...
lib/libvcc/vcc_backend.c
View file @
3ba46b25
...
...
@@ -58,11 +58,11 @@ vcc_default_probe(struct vcc *tl)
*/
static
void
Emit_Sockaddr
(
struct
vcc
*
tl
,
const
struct
token
*
t_host
,
Emit_Sockaddr
(
struct
vcc
*
tl
,
struct
vsb
*
vsb1
,
const
struct
token
*
t_host
,
const
struct
token
*
t_port
)
{
const
char
*
ipv4
,
*
ipv4a
,
*
ipv6
,
*
ipv6a
,
*
pa
;
char
buf
[
256
];
char
buf
[
BUFSIZ
];
AN
(
t_host
->
dec
);
...
...
@@ -74,17 +74,19 @@ Emit_Sockaddr(struct vcc *tl, const struct token *t_host,
&
ipv4
,
&
ipv4a
,
&
ipv6
,
&
ipv6a
,
&
pa
,
2
,
t_host
,
"Backend host"
);
ERRCHK
(
tl
);
if
(
ipv4
!=
NULL
)
{
Fb
(
tl
,
0
,
"
\t
.ipv4_suckaddr = (const struct suckaddr *)%s,
\n
"
,
VSB_printf
(
vsb1
,
"
\t
.ipv4 = (const struct suckaddr *)%s,
\n
"
,
ipv4
);
Fb
(
tl
,
0
,
"
\t
.ipv4_addr =
\"
%s
\"
,
\n
"
,
ipv4a
);
}
if
(
ipv6
!=
NULL
)
{
Fb
(
tl
,
0
,
"
\t
.ipv6_suckaddr = (const struct suckaddr *)%s,
\n
"
,
VSB_printf
(
vsb1
,
"
\t
.ipv6 = (const struct suckaddr *)%s,
\n
"
,
ipv6
);
Fb
(
tl
,
0
,
"
\t
.ipv6_addr =
\"
%s
\"
,
\n
"
,
ipv6a
);
}
Fb
(
tl
,
0
,
"
\t
.port =
\"
%s
\"
,
\n
"
,
pa
);
Fb
(
tl
,
0
,
"
\t
.
path = (void *) 0,
\n
"
);
VSB_printf
(
vsb1
,
"
\t
.uds_
path = (void *) 0,
\n
"
);
}
/*
...
...
@@ -93,7 +95,8 @@ Emit_Sockaddr(struct vcc *tl, const struct token *t_host,
* the IP suckaddrs to NULL.
*/
static
void
Emit_UDS_Path
(
struct
vcc
*
tl
,
const
struct
token
*
t_path
,
const
char
*
errid
)
Emit_UDS_Path
(
struct
vcc
*
tl
,
struct
vsb
*
vsb1
,
const
struct
token
*
t_path
,
const
char
*
errid
)
{
struct
stat
st
;
...
...
@@ -121,12 +124,11 @@ Emit_UDS_Path(struct vcc *tl, const struct token *t_path, const char *errid)
vcc_ErrWhere
(
tl
,
t_path
);
return
;
}
Fb
(
tl
,
0
,
"
\t
.
path =
\"
%s
\"
,
\n
"
,
t_path
->
dec
);
Fb
(
tl
,
0
,
"
\t
.ipv4_suckaddr
= (void *) 0,
\n
"
);
Fb
(
tl
,
0
,
"
\t
.ipv6_suckaddr
= (void *) 0,
\n
"
);
VSB_printf
(
vsb1
,
"
\t
.uds_
path =
\"
%s
\"
,
\n
"
,
t_path
->
dec
);
VSB_printf
(
vsb1
,
"
\t
.ipv4
= (void *) 0,
\n
"
);
VSB_printf
(
vsb1
,
"
\t
.ipv6
= (void *) 0,
\n
"
);
}
/*--------------------------------------------------------------------
* Disallow mutually exclusive field definitions
*/
...
...
@@ -346,7 +348,7 @@ vcc_ParseHostDef(struct vcc *tl, const struct token *t_be, const char *vgcname)
struct
token
*
t_did
=
NULL
;
struct
fld_spec
*
fs
;
struct
inifin
*
ifp
;
struct
vsb
*
vsb
;
struct
vsb
*
vsb
1
,
*
vsb2
;
char
*
p
;
unsigned
u
;
double
t
;
...
...
@@ -364,9 +366,11 @@ vcc_ParseHostDef(struct vcc *tl, const struct token *t_be, const char *vgcname)
"?proxy_header"
,
NULL
);
vsb
=
VSB_new_auto
();
AN
(
vsb
);
tl
->
fb
=
vsb
;
vsb1
=
VSB_new_auto
();
AN
(
vsb1
);
vsb2
=
VSB_new_auto
();
AN
(
vsb2
);
tl
->
fb
=
vsb2
;
if
(
tl
->
t
->
tok
==
ID
&&
(
vcc_IdIs
(
tl
->
t
,
"none"
)
||
vcc_IdIs
(
tl
->
t
,
"None"
)))
{
...
...
@@ -381,10 +385,16 @@ vcc_ParseHostDef(struct vcc *tl, const struct token *t_be, const char *vgcname)
SkipToken
(
tl
,
'{'
);
VSB_printf
(
vsb1
,
"
\n
static const struct vrt_endpoint vgc_dir_ep_%s = {
\n
"
,
vgcname
);
VSB_printf
(
vsb1
,
"
\t
.magic = VRT_ENDPOINT_MAGIC,
\n
"
);
Fb
(
tl
,
0
,
"
\n
static const struct vrt_backend vgc_dir_priv_%s = {
\n
"
,
vgcname
);
Fb
(
tl
,
0
,
"
\t
.magic = VRT_BACKEND_MAGIC,
\n
"
);
Fb
(
tl
,
0
,
"
\t
.endpoint = &vgc_dir_ep_%s,
\n
"
,
vgcname
);
Fb
(
tl
,
0
,
"
\t
.vcl_name =
\"
%.*s"
,
PF
(
t_be
));
Fb
(
tl
,
0
,
"
\"
,
\n
"
);
...
...
@@ -517,10 +527,10 @@ vcc_ParseHostDef(struct vcc *tl, const struct token *t_be, const char *vgcname)
assert
(
t_host
!=
NULL
||
t_path
!=
NULL
);
if
(
t_host
!=
NULL
)
/* Check that the hostname makes sense */
Emit_Sockaddr
(
tl
,
t_host
,
t_port
);
Emit_Sockaddr
(
tl
,
vsb1
,
t_host
,
t_port
);
else
/* Check that the path can be a legal UDS */
Emit_UDS_Path
(
tl
,
t_path
,
"Backend path"
);
Emit_UDS_Path
(
tl
,
vsb1
,
t_path
,
"Backend path"
);
ERRCHK
(
tl
);
ExpectErr
(
tl
,
'}'
);
...
...
@@ -543,10 +553,15 @@ vcc_ParseHostDef(struct vcc *tl, const struct token *t_be, const char *vgcname)
vcc_NextToken
(
tl
);
VSB_printf
(
vsb1
,
"};
\n
"
);
AZ
(
VSB_finish
(
vsb1
));
Fh
(
tl
,
0
,
"%s"
,
VSB_data
(
vsb1
));
VSB_destroy
(
&
vsb1
);
tl
->
fb
=
NULL
;
AZ
(
VSB_finish
(
vsb
));
Fh
(
tl
,
0
,
"%s"
,
VSB_data
(
vsb
));
VSB_destroy
(
&
vsb
);
AZ
(
VSB_finish
(
vsb
2
));
Fh
(
tl
,
0
,
"%s"
,
VSB_data
(
vsb
2
));
VSB_destroy
(
&
vsb
2
);
ifp
=
New_IniFin
(
tl
);
VSB_printf
(
ifp
->
ini
,
...
...
lib/libvmod_debug/vmod_debug.c
View file @
3ba46b25
...
...
@@ -522,10 +522,13 @@ cooldown_thread(void *priv)
static
VCL_BACKEND
create_cold_backend
(
VRT_CTX
)
{
struct
vrt_endpoint
vep
[
1
];
struct
vrt_backend
be
[
1
];
INIT_OBJ
(
vep
,
VRT_ENDPOINT_MAGIC
);
vep
->
uds_path
=
"/"
;
INIT_OBJ
(
be
,
VRT_BACKEND_MAGIC
);
be
->
path
=
"/"
;
be
->
endpoint
=
vep
;
be
->
vcl_name
=
"doomed"
;
return
(
VRT_new_backend
(
ctx
,
be
));
}
...
...
lib/libvmod_debug/vmod_debug_dyn.c
View file @
3ba46b25
...
...
@@ -65,13 +65,16 @@ dyn_dir_init(VRT_CTX, struct xyzzy_debug_dyn *dyn,
{
struct
suckaddr
*
sa
;
VCL_BACKEND
dir
,
dir2
;
struct
vrt_endpoint
vep
;
struct
vrt_backend
vrt
;
CHECK_OBJ_NOTNULL
(
dyn
,
VMOD_DEBUG_DYN_MAGIC
);
XXXAN
(
addr
);
XXXAN
(
port
);
INIT_OBJ
(
&
vep
,
VRT_ENDPOINT_MAGIC
);
INIT_OBJ
(
&
vrt
,
VRT_BACKEND_MAGIC
);
vrt
.
endpoint
=
&
vep
;
vrt
.
port
=
port
;
vrt
.
vcl_name
=
dyn
->
vcl_name
;
vrt
.
hosthdr
=
addr
;
...
...
@@ -81,10 +84,10 @@ dyn_dir_init(VRT_CTX, struct xyzzy_debug_dyn *dyn,
AN
(
sa
);
if
(
VSA_Get_Proto
(
sa
)
==
AF_INET
)
{
vrt
.
ipv4_addr
=
addr
;
v
rt
.
ipv4_suckaddr
=
sa
;
v
ep
.
ipv4
=
sa
;
}
else
if
(
VSA_Get_Proto
(
sa
)
==
AF_INET6
)
{
vrt
.
ipv6_addr
=
addr
;
v
rt
.
ipv6_suckaddr
=
sa
;
v
ep
.
ipv6
=
sa
;
}
else
WRONG
(
"Wrong proto family"
);
...
...
@@ -171,6 +174,7 @@ static int
dyn_uds_init
(
VRT_CTX
,
struct
xyzzy_debug_dyn_uds
*
uds
,
VCL_STRING
path
)
{
VCL_BACKEND
dir
,
dir2
;
struct
vrt_endpoint
vep
;
struct
vrt_backend
vrt
;
struct
stat
st
;
...
...
@@ -197,12 +201,14 @@ dyn_uds_init(VRT_CTX, struct xyzzy_debug_dyn_uds *uds, VCL_STRING path)
return
(
-
1
);
}
INIT_OBJ
(
&
vep
,
VRT_ENDPOINT_MAGIC
);
INIT_OBJ
(
&
vrt
,
VRT_BACKEND_MAGIC
);
vrt
.
path
=
path
;
vrt
.
endpoint
=
&
vep
;
vep
.
uds_path
=
path
;
vrt
.
vcl_name
=
uds
->
vcl_name
;
vrt
.
hosthdr
=
"localhost"
;
v
rt
.
ipv4_suckaddr
=
NULL
;
v
rt
.
ipv6_suckaddr
=
NULL
;
v
ep
.
ipv4
=
NULL
;
v
ep
.
ipv6
=
NULL
;
if
((
dir
=
VRT_new_backend
(
ctx
,
&
vrt
))
==
NULL
)
return
(
-
1
);
...
...
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