Retry connections through control socket
This commit is contained in:
parent
a62a6825a8
commit
f0a57eab4c
8 changed files with 33 additions and 26 deletions
|
@ -1553,13 +1553,6 @@ You can also send the following signals to a running tincd process:
|
||||||
@c from the manpage
|
@c from the manpage
|
||||||
@table @samp
|
@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
|
@item HUP
|
||||||
Partially rereads configuration files.
|
Partially rereads configuration files.
|
||||||
Connections to hosts whose host config file are removed are closed.
|
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}
|
@item debug @var{level}
|
||||||
Sets debug level to @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
|
@end table
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -81,6 +81,18 @@ Purges all information remembered about unreachable nodes.
|
||||||
.It debug Ar N
|
.It debug Ar N
|
||||||
Sets debug level to
|
Sets debug level to
|
||||||
.Ar N .
|
.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
|
.El
|
||||||
.Sh BUGS
|
.Sh BUGS
|
||||||
The "start", "restart", and "reload" commands are not yet implemented.
|
The "start", "restart", and "reload" commands are not yet implemented.
|
||||||
|
|
|
@ -77,18 +77,6 @@ Output version information and exit.
|
||||||
.El
|
.El
|
||||||
.Sh SIGNALS
|
.Sh SIGNALS
|
||||||
.Bl -tag -width indent
|
.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
|
.It HUP
|
||||||
Partially rereads configuration files.
|
Partially rereads configuration files.
|
||||||
Connections to hosts whose host config file are removed are closed.
|
Connections to hosts whose host config file are removed are closed.
|
||||||
|
|
|
@ -124,6 +124,12 @@ static void handle_control_data(struct bufferevent *event, void *data) {
|
||||||
goto respond;
|
goto respond;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(req.type == REQ_RETRY) {
|
||||||
|
logger(LOG_NOTICE, _("Got '%s' command"), "retry");
|
||||||
|
retry();
|
||||||
|
goto respond;
|
||||||
|
}
|
||||||
|
|
||||||
logger(LOG_DEBUG, _("Malformed control command received"));
|
logger(LOG_DEBUG, _("Malformed control command received"));
|
||||||
res.res_errno = EINVAL;
|
res.res_errno = EINVAL;
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ enum request_type {
|
||||||
REQ_DUMP_GRAPH,
|
REQ_DUMP_GRAPH,
|
||||||
REQ_PURGE,
|
REQ_PURGE,
|
||||||
REQ_SET_DEBUG,
|
REQ_SET_DEBUG,
|
||||||
|
REQ_RETRY,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TINC_CTL_VERSION_CURRENT 0
|
#define TINC_CTL_VERSION_CURRENT 0
|
||||||
|
|
|
@ -280,9 +280,7 @@ static void sighup_handler(int signal, short events, void *data) {
|
||||||
try_outgoing_connections();
|
try_outgoing_connections();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sigalrm_handler(int signal, short events, void *data) {
|
void retry(void) {
|
||||||
logger(LOG_NOTICE, _("Got %s signal"), strsignal(signal));
|
|
||||||
|
|
||||||
connection_t *c;
|
connection_t *c;
|
||||||
splay_node_t *node;
|
splay_node_t *node;
|
||||||
|
|
||||||
|
@ -308,7 +306,6 @@ int main_loop(void) {
|
||||||
struct event sighup_event;
|
struct event sighup_event;
|
||||||
struct event sigterm_event;
|
struct event sigterm_event;
|
||||||
struct event sigquit_event;
|
struct event sigquit_event;
|
||||||
struct event sigalrm_event;
|
|
||||||
|
|
||||||
cp();
|
cp();
|
||||||
|
|
||||||
|
@ -320,8 +317,6 @@ int main_loop(void) {
|
||||||
signal_add(&sigterm_event, NULL);
|
signal_add(&sigterm_event, NULL);
|
||||||
signal_set(&sigquit_event, SIGQUIT, sigterm_handler, NULL);
|
signal_set(&sigquit_event, SIGQUIT, sigterm_handler, NULL);
|
||||||
signal_add(&sigquit_event, NULL);
|
signal_add(&sigquit_event, NULL);
|
||||||
signal_set(&sigalrm_event, SIGALRM, sigalrm_handler, NULL);
|
|
||||||
signal_add(&sigalrm_event, NULL);
|
|
||||||
|
|
||||||
if(event_loop(0) < 0) {
|
if(event_loop(0) < 0) {
|
||||||
logger(LOG_ERR, _("Error while waiting for input: %s"), strerror(errno));
|
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(&sighup_event);
|
||||||
signal_del(&sigterm_event);
|
signal_del(&sigterm_event);
|
||||||
signal_del(&sigquit_event);
|
signal_del(&sigquit_event);
|
||||||
signal_del(&sigalrm_event);
|
|
||||||
event_del(&timeout_event);
|
event_del(&timeout_event);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -156,6 +156,7 @@ extern void handle_device_data(int, short, void *);
|
||||||
extern void handle_meta_connection_data(int, short, void *);
|
extern void handle_meta_connection_data(int, short, void *);
|
||||||
extern void regenerate_key();
|
extern void regenerate_key();
|
||||||
extern void purge(void);
|
extern void purge(void);
|
||||||
|
extern void retry(void);
|
||||||
|
|
||||||
#ifndef HAVE_MINGW
|
#ifndef HAVE_MINGW
|
||||||
#define closesocket(s) close(s)
|
#define closesocket(s) close(s)
|
||||||
|
|
|
@ -91,6 +91,7 @@ static void usage(bool status) {
|
||||||
" graph - graph of the VPN in dotty format\n"
|
" graph - graph of the VPN in dotty format\n"
|
||||||
" purge Purge unreachable nodes\n"
|
" purge Purge unreachable nodes\n"
|
||||||
" debug N Set debug level\n"
|
" debug N Set debug level\n"
|
||||||
|
" retry Retry all outgoing connections\n"
|
||||||
"\n"));
|
"\n"));
|
||||||
printf(_("Report bugs to tinc@tinc-vpn.org.\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;
|
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]);
|
fprintf(stderr, _("Unknown command `%s'.\n"), argv[optind]);
|
||||||
usage(true);
|
usage(true);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue