Commit 4defdfc1 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Retire "listen_address" as a parameter you can set from CLI.

parent b804d84e
...@@ -131,9 +131,6 @@ struct params { ...@@ -131,9 +131,6 @@ struct params {
unsigned accept_filter; unsigned accept_filter;
/* Listen address */
char *listen_address;
/* Listen depth */ /* Listen depth */
unsigned listen_depth; unsigned listen_depth;
......
...@@ -39,6 +39,10 @@ extern struct vev_base *mgt_evb; ...@@ -39,6 +39,10 @@ extern struct vev_base *mgt_evb;
extern unsigned d_flag; extern unsigned d_flag;
extern int exit_status; extern int exit_status;
/* mgt_acceptor.c */
void MAC_Arg(const char *);
/* mgt_child.c */ /* mgt_child.c */
extern pid_t child_pid; extern pid_t child_pid;
void MGT_Run(void); void MGT_Run(void);
......
...@@ -41,9 +41,7 @@ ...@@ -41,9 +41,7 @@
#include <unistd.h> #include <unistd.h>
#include "mgt/mgt.h" #include "mgt/mgt.h"
#include "mgt/mgt_param.h"
#include "common/heritage.h" #include "common/heritage.h"
#include "common/params.h"
#include "vav.h" #include "vav.h"
#include "vsa.h" #include "vsa.h"
...@@ -100,94 +98,67 @@ MAC_close_sockets(void) ...@@ -100,94 +98,67 @@ MAC_close_sockets(void)
/*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/
static void struct mac_help {
clean_listen_sock_head(struct listen_sock_head *lsh) unsigned magic;
{ #define MAC_HELP_MAGIC 0x1e00a9d9
struct listen_sock *ls, *ls2; const char *name;
int good;
VTAILQ_FOREACH_SAFE(ls, lsh, list, ls2) { const char **err;
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;
static int __match_proto__(vss_resolver_f) 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; 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); ALLOC_OBJ(ls, LISTEN_SOCK_MAGIC);
AN(ls); AN(ls);
ls->sock = -1; if (VSA_Port(sa) == 0)
ls->addr = VTCP_my_suckaddr(sock);
else
ls->addr = VSA_Clone(sa); ls->addr = VSA_Clone(sa);
AN(ls->addr); AN(ls->addr);
AZ(close(sock));
ls->sock = -1;
ls->name = strdup(priv); ls->name = strdup(priv);
AN(ls->name); AN(ls->name);
VTAILQ_INSERT_TAIL(&lsh, ls, list); VTAILQ_INSERT_TAIL(&heritage.socks, ls, list);
mh->good++;
return (0); return (0);
} }
int void
tweak_listen_address(struct vsb *vsb, const struct parspec *par, MAC_Arg(const char *arg)
const char *arg)
{ {
char **av; char **av;
int i, error; struct mac_help *mh;
const char *err; const char *err;
struct listen_sock *ls; int error;
(void)par;
if (arg == NULL) {
VSB_quote(vsb, mgt_param.listen_address, -1, 0);
return (0);
}
av = VAV_Parse(arg, NULL, ARGV_COMMA); av = VAV_Parse(arg, NULL, ARGV_COMMA);
if (av == NULL) { if (av == NULL)
VSB_printf(vsb, "Parse error: out of memory"); ARGV_ERR("Parse error: out of memory\n");
return(-1); if (av[0] != NULL)
} ARGV_ERR("%s\n", av[0]);
if (av[0] != NULL) { if (av[2] != NULL)
VSB_printf(vsb, "Parse error: %s", av[0]); ARGV_ERR("XXX: not yet\n");
VAV_Free(av);
return(-1); ALLOC_OBJ(mh, MAC_HELP_MAGIC);
} AN(mh);
if (av[1] == NULL) { mh->name = av[1];
VSB_printf(vsb, "Empty listen address"); mh->err = &err;
VAV_Free(av); error = VSS_resolver(av[1], "80", mac_callback, mh, &err);
return(-1); if (mh->good == 0 || err != NULL)
} ARGV_ERR("Could not open %s: %s\n", av[1], err);
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); AZ(error);
} FREE_OBJ(mh);
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);
} }
...@@ -457,8 +457,7 @@ main(int argc, char * const *argv) ...@@ -457,8 +457,7 @@ main(int argc, char * const *argv)
switch (o) { switch (o) {
case 'a': case 'a':
MCF_ParamSet(cli, "listen_address", optarg); MAC_Arg(optarg);
cli_check(cli);
break; break;
case 'b': case 'b':
b_arg = optarg; b_arg = optarg;
...@@ -619,12 +618,6 @@ main(int argc, char * const *argv) ...@@ -619,12 +618,6 @@ main(int argc, char * const *argv)
ARGV_ERR("Could not open pid/lock (-P) file (%s): %s\n", ARGV_ERR("Could not open pid/lock (-P) file (%s): %s\n",
P_arg, strerror(errno)); 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_vcc_init();
mgt_vcl_init(); mgt_vcl_init();
......
...@@ -56,7 +56,6 @@ tweak_t tweak_bool; ...@@ -56,7 +56,6 @@ tweak_t tweak_bool;
tweak_t tweak_bytes; tweak_t tweak_bytes;
tweak_t tweak_bytes_u; tweak_t tweak_bytes_u;
tweak_t tweak_double; tweak_t tweak_double;
tweak_t tweak_listen_address;
tweak_t tweak_poolparam; tweak_t tweak_poolparam;
tweak_t tweak_string; tweak_t tweak_string;
tweak_t tweak_timeout; tweak_t tweak_timeout;
......
...@@ -242,13 +242,6 @@ struct parspec mgt_parspec[] = { ...@@ -242,13 +242,6 @@ struct parspec mgt_parspec[] = {
MUST_RESTART, MUST_RESTART,
"on", "bool" }, "on", "bool" },
#endif #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, { "listen_depth", tweak_uint, &mgt_param.listen_depth,
"0", NULL, "0", NULL,
"Listen queue depth.", "Listen queue depth.",
......
...@@ -4,7 +4,7 @@ varnishtest "Check that we fail to start if any listen address does not work" ...@@ -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. # and are on Linux, ensure /proc/net/ipv4/ip_nonlocal_bind is set to 0.
# All bad listen addresses # 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 # 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 }
...@@ -39,9 +39,6 @@ varnish v1 -arg "-smalloc,1m" -vcl+backend { ...@@ -39,9 +39,6 @@ varnish v1 -arg "-smalloc,1m" -vcl+backend {
varnish v1 -cliok "param.set feature +no_coredump" 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 { client c1 {
txreq -url "/" txreq -url "/"
rxresp rxresp
......
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