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 {
unsigned accept_filter;
/* Listen address */
char *listen_address;
/* Listen depth */
unsigned listen_depth;
......
......@@ -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);
......
......@@ -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);
}
......@@ -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();
......
......@@ -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;
......
......@@ -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.",
......
......@@ -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 }
......@@ -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
......
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