From f0a57eab4cfd64d4f8261b1885a2072177f9e76b Mon Sep 17 00:00:00 2001 From: Scott Lamb Date: Wed, 7 Nov 2007 02:50:58 +0000 Subject: [PATCH] Retry connections through control socket --- doc/tinc.texi | 14 +++++++------- doc/tincctl.8.in | 12 ++++++++++++ doc/tincd.8.in | 12 ------------ src/control.c | 6 ++++++ src/control_common.h | 1 + src/net.c | 8 +------- src/net.h | 1 + src/tincctl.c | 5 +++++ 8 files changed, 33 insertions(+), 26 deletions(-) diff --git a/doc/tinc.texi b/doc/tinc.texi index b3f570c..9baf177 100644 --- a/doc/tinc.texi +++ b/doc/tinc.texi @@ -1553,13 +1553,6 @@ You can also send the following signals to a running tincd process: @c from the manpage @table @samp -@item ALRM -Forces tinc to try to connect to all uplinks immediately. -Usually tinc attempts to do this itself, -but increases the time it waits between the attempts each time it failed, -and if tinc didn't succeed to connect to an uplink the first time after it started, -it defaults to the maximum time of 15 minutes. - @item HUP Partially rereads configuration files. Connections to hosts whose host config file are removed are closed. @@ -1853,6 +1846,13 @@ Purges all information remembered about unreachable nodes. @item debug @var{level} Sets debug level to @var{level}. +@item retry +Forces tinc to try to connect to all uplinks immediately. +Usually tinc attempts to do this itself, +but increases the time it waits between the attempts each time it failed, +and if tinc didn't succeed to connect to an uplink the first time after it started, +it defaults to the maximum time of 15 minutes. + @end table diff --git a/doc/tincctl.8.in b/doc/tincctl.8.in index 623c908..899b066 100644 --- a/doc/tincctl.8.in +++ b/doc/tincctl.8.in @@ -81,6 +81,18 @@ Purges all information remembered about unreachable nodes. .It debug Ar N Sets debug level to .Ar N . +.It retry +Forces +.Xr tincd 8 +to try to connect to all uplinks immediately. +Usually +.Xr tincd 8 +attempts to do this itself, +but increases the time it waits between the attempts each time it failed, +and if +.Xr tincd 8 +didn't succeed to connect to an uplink the first time after it started, +it defaults to the maximum time of 15 minutes. .El .Sh BUGS The "start", "restart", and "reload" commands are not yet implemented. diff --git a/doc/tincd.8.in b/doc/tincd.8.in index b3142e8..e4bbaeb 100644 --- a/doc/tincd.8.in +++ b/doc/tincd.8.in @@ -77,18 +77,6 @@ Output version information and exit. .El .Sh SIGNALS .Bl -tag -width indent -.It ALRM -Forces -.Nm -to try to connect to all uplinks immediately. -Usually -.Nm -attempts to do this itself, -but increases the time it waits between the attempts each time it failed, -and if -.Nm -didn't succeed to connect to an uplink the first time after it started, -it defaults to the maximum time of 15 minutes. .It HUP Partially rereads configuration files. Connections to hosts whose host config file are removed are closed. diff --git a/src/control.c b/src/control.c index 3e57f55..6a39e02 100644 --- a/src/control.c +++ b/src/control.c @@ -124,6 +124,12 @@ static void handle_control_data(struct bufferevent *event, void *data) { goto respond; } + if(req.type == REQ_RETRY) { + logger(LOG_NOTICE, _("Got '%s' command"), "retry"); + retry(); + goto respond; + } + logger(LOG_DEBUG, _("Malformed control command received")); res.res_errno = EINVAL; diff --git a/src/control_common.h b/src/control_common.h index 2b77955..0975826 100644 --- a/src/control_common.h +++ b/src/control_common.h @@ -33,6 +33,7 @@ enum request_type { REQ_DUMP_GRAPH, REQ_PURGE, REQ_SET_DEBUG, + REQ_RETRY, }; #define TINC_CTL_VERSION_CURRENT 0 diff --git a/src/net.c b/src/net.c index aaa035f..4a680d8 100644 --- a/src/net.c +++ b/src/net.c @@ -280,9 +280,7 @@ static void sighup_handler(int signal, short events, void *data) { try_outgoing_connections(); } -static void sigalrm_handler(int signal, short events, void *data) { - logger(LOG_NOTICE, _("Got %s signal"), strsignal(signal)); - +void retry(void) { connection_t *c; splay_node_t *node; @@ -308,7 +306,6 @@ int main_loop(void) { struct event sighup_event; struct event sigterm_event; struct event sigquit_event; - struct event sigalrm_event; cp(); @@ -320,8 +317,6 @@ int main_loop(void) { signal_add(&sigterm_event, NULL); signal_set(&sigquit_event, SIGQUIT, sigterm_handler, NULL); signal_add(&sigquit_event, NULL); - signal_set(&sigalrm_event, SIGALRM, sigalrm_handler, NULL); - signal_add(&sigalrm_event, NULL); if(event_loop(0) < 0) { logger(LOG_ERR, _("Error while waiting for input: %s"), strerror(errno)); @@ -331,7 +326,6 @@ int main_loop(void) { signal_del(&sighup_event); signal_del(&sigterm_event); signal_del(&sigquit_event); - signal_del(&sigalrm_event); event_del(&timeout_event); return 0; diff --git a/src/net.h b/src/net.h index fd14c37..b8e9e37 100644 --- a/src/net.h +++ b/src/net.h @@ -156,6 +156,7 @@ extern void handle_device_data(int, short, void *); extern void handle_meta_connection_data(int, short, void *); extern void regenerate_key(); extern void purge(void); +extern void retry(void); #ifndef HAVE_MINGW #define closesocket(s) close(s) diff --git a/src/tincctl.c b/src/tincctl.c index bff122b..9b16a7b 100644 --- a/src/tincctl.c +++ b/src/tincctl.c @@ -91,6 +91,7 @@ static void usage(bool status) { " graph - graph of the VPN in dotty format\n" " purge Purge unreachable nodes\n" " debug N Set debug level\n" + " retry Retry all outgoing connections\n" "\n")); printf(_("Report bugs to tinc@tinc-vpn.org.\n")); } @@ -596,6 +597,10 @@ int main(int argc, char *argv[], char *envp[]) { sizeof(debuglevel)) != -1; } + if(!strcasecmp(argv[optind], "retry")) { + return send_ctl_request_cooked(fd, REQ_RETRY, NULL, 0) != -1; + } + fprintf(stderr, _("Unknown command `%s'.\n"), argv[optind]); usage(true); -- 2.25.1