Retry connections through control socket

This commit is contained in:
Scott Lamb 2007-11-07 02:50:58 +00:00
parent a62a6825a8
commit f0a57eab4c
8 changed files with 33 additions and 26 deletions

View file

@ -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

View file

@ -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.

View file

@ -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.

View file

@ -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;

View file

@ -33,6 +33,7 @@ enum request_type {
REQ_DUMP_GRAPH,
REQ_PURGE,
REQ_SET_DEBUG,
REQ_RETRY,
};
#define TINC_CTL_VERSION_CURRENT 0

View file

@ -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;

View file

@ -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)

View file

@ -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);