[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