From 332b55d4720fadea76c0a5d9b9d484af6a724006 Mon Sep 17 00:00:00 2001
From: Guus Sliepen <guus@tinc-vpn.org>
Date: Tue, 6 May 2014 14:11:55 +0200
Subject: [PATCH] Change AutoConnect from int to bool.

The proper value is 3, not 2 or 4, and 5 is right out. So just hardcode this value,
and only have the option to turn AutoConnect on or off.
---
 doc/tinc.conf.5.in | 18 +++++++++---------
 doc/tinc.texi      | 11 ++++-------
 src/net.c          |  6 +++---
 src/net.h          |  2 +-
 src/net_setup.c    | 14 ++++++++++----
 5 files changed, 27 insertions(+), 24 deletions(-)

diff --git a/doc/tinc.conf.5.in b/doc/tinc.conf.5.in
index 28296fb4..072bf07b 100644
--- a/doc/tinc.conf.5.in
+++ b/doc/tinc.conf.5.in
@@ -114,15 +114,13 @@ If
 .Qq any
 is selected, then depending on the operating system both IPv4 and IPv6 or just
 IPv6 listening sockets will be created.
-.It Va AutoConnect Li = Ar count Po 0 Pc Bq experimental
-If set to a non-zero value,
+.It Va AutoConnect Li = yes | no Po no Pc Bq experimental
+If set to yes,
 .Nm
-will try to only have
-.Ar count
-meta connections to other nodes,
-by automatically making or breaking connections to known nodes.
-Higher values increase redundancy but also increase meta data overhead.
-When using this option, a good value is 3.
+will automatically set up meta connections to other nodes,
+without requiring
+.Va ConnectTo
+variables.
 .It Va BindToAddress Li = Ar address Op Ar port
 This is the same as
 .Va ListenAddress ,
@@ -169,7 +167,9 @@ The names should be known to this tinc daemon
 line).
 .Pp
 If you don't specify a host with
-.Va ConnectTo ,
+.Va ConnectTo
+and don't enable
+.Va AutoConnect ,
 .Nm tinc
 won't try to connect to other daemons at all,
 and will instead just listen for incoming connections.
diff --git a/doc/tinc.texi b/doc/tinc.texi
index 555b816b..3082397c 100644
--- a/doc/tinc.texi
+++ b/doc/tinc.texi
@@ -843,12 +843,9 @@ If any is selected, then depending on the operating system
 both IPv4 and IPv6 or just IPv6 listening sockets will be created.
 
 @cindex AutoConnect
-@item AutoConnect = <count> (0) [experimental]
-If set to a non-zero value,
-tinc will try to only have count meta connections to other nodes,
-by automatically making or breaking connections to known nodes.
-Higher values increase redundancy but also increase meta data overhead.
-When using this option, a good value is 3.
+@item AutoConnect = <yes|no> (no) [experimental]
+If set to yes, tinc will automatically set up meta connections to other nodes,
+without requiring @var{ConnectTo} variables.
 
 @cindex BindToAddress
 @item BindToAddress = <@var{address}> [<@var{port}>]
@@ -895,7 +892,7 @@ in which case outgoing connections to each specified tinc daemon are made.
 The names should be known to this tinc daemon
 (i.e., there should be a host configuration file for the name on the ConnectTo line).
 
-If you don't specify a host with ConnectTo,
+If you don't specify a host with ConnectTo and don't enable AutoConnect,
 tinc won't try to connect to other daemons at all,
 and will instead just listen for incoming connections.
 
diff --git a/src/net.c b/src/net.c
index baf576d5..92f6be86 100644
--- a/src/net.c
+++ b/src/net.c
@@ -204,7 +204,7 @@ static void periodic_handler(void *data) {
 				nc++;
 		}
 
-		if(nc < autoconnect) {
+		if(nc < 3) {
 			/* Not enough active connections, try to add one.
 			   Choose a random node, if we don't have a connection to it,
 			   and we are not already trying to make one, create an
@@ -238,7 +238,7 @@ static void periodic_handler(void *data) {
 				}
 				break;
 			}
-		} else if(nc > autoconnect) {
+		} else if(nc > 3) {
 			/* Too many active connections, try to remove one.
 			   Choose a random outgoing connection to a node
 			   that has at least one other connection.
@@ -264,7 +264,7 @@ static void periodic_handler(void *data) {
 			}
 		}
 
-		if(nc >= autoconnect) {
+		if(nc >= 3) {
 			/* If we have enough active connections,
 			   remove any pending outgoing connections.
 			*/
diff --git a/src/net.h b/src/net.h
index 845fd758..6c7064bf 100644
--- a/src/net.h
+++ b/src/net.h
@@ -137,7 +137,7 @@ extern int udp_sndbuf;
 extern int max_connection_burst;
 extern bool do_prune;
 extern char *myport;
-extern int autoconnect;
+extern bool autoconnect;
 extern bool disablebuggypeers;
 extern int contradicting_add_edge;
 extern int contradicting_del_edge;
diff --git a/src/net_setup.c b/src/net_setup.c
index fdd48348..839d7a90 100644
--- a/src/net_setup.c
+++ b/src/net_setup.c
@@ -52,7 +52,7 @@ char *proxyport;
 char *proxyuser;
 char *proxypass;
 proxytype_t proxytype;
-int autoconnect;
+bool autoconnect;
 bool disablebuggypeers;
 
 char *scriptinterpreter;
@@ -630,9 +630,15 @@ bool setup_myself_reloadable(void) {
 	if(!get_config_int(lookup_config(config_tree, "KeyExpire"), &keylifetime))
 		keylifetime = 3600;
 
-	get_config_int(lookup_config(config_tree, "AutoConnect"), &autoconnect);
-	if(autoconnect < 0)
-		autoconnect = 0;
+	config_t *cfg = lookup_config(config_tree, "AutoConnect");
+	if(cfg) {
+		if(!get_config_bool(cfg, &autoconnect)) {
+			// Some backwards compatibility with when this option was an int
+			int val = 0;
+			get_config_int(cfg, &val);
+			autoconnect = val;
+		}
+	}
 
 	get_config_bool(lookup_config(config_tree, "DisableBuggyPeers"), &disablebuggypeers);
 
-- 
2.39.5