[master] 4defdfc Retire "listen_address" as a parameter you can set from CLI.
Poul-Henning Kamp
phk at FreeBSD.org
Mon Mar 16 10:51:27 CET 2015
commit 4defdfc18801d34e253b0a0d61511d037261689e
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Mon Mar 16 09:51:02 2015 +0000
Retire "listen_address" as a parameter you can set from CLI.
diff --git a/bin/varnishd/common/params.h b/bin/varnishd/common/params.h
index f5f9450..4c9c3ed 100644
--- a/bin/varnishd/common/params.h
+++ b/bin/varnishd/common/params.h
@@ -131,9 +131,6 @@ struct params {
unsigned accept_filter;
- /* Listen address */
- char *listen_address;
-
/* Listen depth */
unsigned listen_depth;
diff --git a/bin/varnishd/mgt/mgt.h b/bin/varnishd/mgt/mgt.h
index 94eaef9..25737c2 100644
--- a/bin/varnishd/mgt/mgt.h
+++ b/bin/varnishd/mgt/mgt.h
@@ -39,6 +39,10 @@ extern struct vev_base *mgt_evb;
extern unsigned d_flag;
extern int exit_status;
+/* mgt_acceptor.c */
+
+void MAC_Arg(const char *);
+
/* mgt_child.c */
extern pid_t child_pid;
void MGT_Run(void);
diff --git a/bin/varnishd/mgt/mgt_acceptor.c b/bin/varnishd/mgt/mgt_acceptor.c
index 3d3908a..ac1000d 100644
--- a/bin/varnishd/mgt/mgt_acceptor.c
+++ b/bin/varnishd/mgt/mgt_acceptor.c
@@ -41,9 +41,7 @@
#include <unistd.h>
#include "mgt/mgt.h"
-#include "mgt/mgt_param.h"
#include "common/heritage.h"
-#include "common/params.h"
#include "vav.h"
#include "vsa.h"
@@ -100,94 +98,67 @@ MAC_close_sockets(void)
/*--------------------------------------------------------------------*/
-static void
-clean_listen_sock_head(struct listen_sock_head *lsh)
-{
- struct listen_sock *ls, *ls2;
-
- VTAILQ_FOREACH_SAFE(ls, lsh, list, ls2) {
- CHECK_OBJ_NOTNULL(ls, LISTEN_SOCK_MAGIC);
- VTAILQ_REMOVE(lsh, ls, list);
- free(ls->name);
- free(ls->addr);
- FREE_OBJ(ls);
- }
-}
-
-static struct listen_sock_head lsh;
+struct mac_help {
+ unsigned magic;
+#define MAC_HELP_MAGIC 0x1e00a9d9
+ const char *name;
+ int good;
+ const char **err;
+};
static int __match_proto__(vss_resolver_f)
-tla_callback(void *priv, const struct suckaddr *sa)
+mac_callback(void *priv, const struct suckaddr *sa)
{
+ struct mac_help *mh;
struct listen_sock *ls;
+ int sock;
+
+ CAST_OBJ_NOTNULL(mh, priv, MAC_HELP_MAGIC);
+ sock = VTCP_bind(sa, NULL);
+ if (sock < 0) {
+ *(mh->err) = strerror(errno);
+ return (0);
+ }
ALLOC_OBJ(ls, LISTEN_SOCK_MAGIC);
AN(ls);
- ls->sock = -1;
- ls->addr = VSA_Clone(sa);
+ if (VSA_Port(sa) == 0)
+ ls->addr = VTCP_my_suckaddr(sock);
+ else
+ ls->addr = VSA_Clone(sa);
AN(ls->addr);
+ AZ(close(sock));
+ ls->sock = -1;
ls->name = strdup(priv);
AN(ls->name);
- VTAILQ_INSERT_TAIL(&lsh, ls, list);
+ VTAILQ_INSERT_TAIL(&heritage.socks, ls, list);
+ mh->good++;
return (0);
}
-int
-tweak_listen_address(struct vsb *vsb, const struct parspec *par,
- const char *arg)
+void
+MAC_Arg(const char *arg)
{
char **av;
- int i, error;
+ struct mac_help *mh;
const char *err;
- struct listen_sock *ls;
-
- (void)par;
- if (arg == NULL) {
- VSB_quote(vsb, mgt_param.listen_address, -1, 0);
- return (0);
- }
+ int error;
av = VAV_Parse(arg, NULL, ARGV_COMMA);
- if (av == NULL) {
- VSB_printf(vsb, "Parse error: out of memory");
- return(-1);
- }
- if (av[0] != NULL) {
- VSB_printf(vsb, "Parse error: %s", av[0]);
- VAV_Free(av);
- return(-1);
- }
- if (av[1] == NULL) {
- VSB_printf(vsb, "Empty listen address");
- VAV_Free(av);
- return(-1);
- }
- VTAILQ_INIT(&lsh);
- for (i = 1; av[i] != NULL; i++) {
- error = VSS_resolver(av[i], "80", tla_callback, av[i], &err);
- if (err != NULL) {
- VSB_printf(vsb, "Invalid listen address ");
- VSB_quote(vsb, av[i], -1, 0);
- VSB_printf(vsb, ": %s", err);
- VAV_Free(av);
- clean_listen_sock_head(&lsh);
- return (-1);
- }
- AZ(error);
- }
- VAV_Free(av);
-
- REPLACE(mgt_param.listen_address, arg);
-
- clean_listen_sock_head(&heritage.socks);
- heritage.nsocks = 0;
-
- while (!VTAILQ_EMPTY(&lsh)) {
- ls = VTAILQ_FIRST(&lsh);
- VTAILQ_REMOVE(&lsh, ls, list);
- CHECK_OBJ_NOTNULL(ls, LISTEN_SOCK_MAGIC);
- VTAILQ_INSERT_TAIL(&heritage.socks, ls, list);
- heritage.nsocks++;
- }
- return (0);
+ if (av == NULL)
+ ARGV_ERR("Parse error: out of memory\n");
+ if (av[0] != NULL)
+ ARGV_ERR("%s\n", av[0]);
+ if (av[2] != NULL)
+ ARGV_ERR("XXX: not yet\n");
+
+ ALLOC_OBJ(mh, MAC_HELP_MAGIC);
+ AN(mh);
+ mh->name = av[1];
+ mh->err = &err;
+ error = VSS_resolver(av[1], "80", mac_callback, mh, &err);
+ if (mh->good == 0 || err != NULL)
+ ARGV_ERR("Could not open %s: %s\n", av[1], err);
+ AZ(error);
+ FREE_OBJ(mh);
}
diff --git a/bin/varnishd/mgt/mgt_main.c b/bin/varnishd/mgt/mgt_main.c
index e4849b3..f6b34d2 100644
--- a/bin/varnishd/mgt/mgt_main.c
+++ b/bin/varnishd/mgt/mgt_main.c
@@ -457,8 +457,7 @@ main(int argc, char * const *argv)
switch (o) {
case 'a':
- MCF_ParamSet(cli, "listen_address", optarg);
- cli_check(cli);
+ MAC_Arg(optarg);
break;
case 'b':
b_arg = optarg;
@@ -619,12 +618,6 @@ main(int argc, char * const *argv)
ARGV_ERR("Could not open pid/lock (-P) file (%s): %s\n",
P_arg, strerror(errno));
- if (!C_flag) {
- if (MAC_open_sockets())
- ARGV_ERR("Failed to open (any) accept sockets.\n");
- MAC_close_sockets();
- }
-
mgt_vcc_init();
mgt_vcl_init();
diff --git a/bin/varnishd/mgt/mgt_param.h b/bin/varnishd/mgt/mgt_param.h
index 4550b92..58b2dd6 100644
--- a/bin/varnishd/mgt/mgt_param.h
+++ b/bin/varnishd/mgt/mgt_param.h
@@ -56,7 +56,6 @@ tweak_t tweak_bool;
tweak_t tweak_bytes;
tweak_t tweak_bytes_u;
tweak_t tweak_double;
-tweak_t tweak_listen_address;
tweak_t tweak_poolparam;
tweak_t tweak_string;
tweak_t tweak_timeout;
diff --git a/bin/varnishd/mgt/mgt_param_tbl.c b/bin/varnishd/mgt/mgt_param_tbl.c
index e705a47..51120f6 100644
--- a/bin/varnishd/mgt/mgt_param_tbl.c
+++ b/bin/varnishd/mgt/mgt_param_tbl.c
@@ -242,13 +242,6 @@ struct parspec mgt_parspec[] = {
MUST_RESTART,
"on", "bool" },
#endif
- { "listen_address", tweak_listen_address, NULL,
- NULL, NULL,
- "Whitespace separated list of network endpoints where "
- "Varnish will accept requests.\n"
- "Possible formats: host, host:port, :port",
- MUST_RESTART,
- ":80" },
{ "listen_depth", tweak_uint, &mgt_param.listen_depth,
"0", NULL,
"Listen queue depth.",
diff --git a/bin/varnishtest/tests/c00003.vtc b/bin/varnishtest/tests/c00003.vtc
index b1ad7d8..8f31bb6 100644
--- a/bin/varnishtest/tests/c00003.vtc
+++ b/bin/varnishtest/tests/c00003.vtc
@@ -4,7 +4,7 @@ varnishtest "Check that we fail to start if any listen address does not work"
# and are on Linux, ensure /proc/net/ipv4/ip_nonlocal_bind is set to 0.
# All bad listen addresses
-err_shell "Failed to open (any) accept sockets" {${varnishd} -F -a "${bad_ip}:0" -b /// -n ${tmpdir} 2>&1 }
+err_shell "Could not open 192.0.2.255:0" {${varnishd} -F -a "${bad_ip}:0" -b /// -n ${tmpdir} 2>&1 }
# Just one bad listen addresses
-# err_shell "Invalid listen address" {${varnishd} -F -a "127.0.0.1:0,${bad_ip}:0" -b /// -n ${tmpdir} 2>&1 }
+err_shell "Error: XXX: not yet" {${varnishd} -F -a "127.0.0.1:0,${bad_ip}:0" -b /// -n ${tmpdir} 2>&1 }
diff --git a/bin/varnishtest/tests/v00010.vtc b/bin/varnishtest/tests/v00010.vtc
index 30bae3a..2fb3511 100644
--- a/bin/varnishtest/tests/v00010.vtc
+++ b/bin/varnishtest/tests/v00010.vtc
@@ -39,9 +39,6 @@ varnish v1 -arg "-smalloc,1m" -vcl+backend {
varnish v1 -cliok "param.set feature +no_coredump"
-# Force the (random) port selected to be used again after restart.
-varnish v1 -cliok "param.set listen_address ${v1_addr}:${v1_port}"
-
client c1 {
txreq -url "/"
rxresp
More information about the varnish-commit
mailing list