Retry connections through control socket
authorScott Lamb <slamb@slamb.org>
Wed, 7 Nov 2007 02:50:58 +0000 (02:50 +0000)
committerScott Lamb <slamb@slamb.org>
Wed, 7 Nov 2007 02:50:58 +0000 (02:50 +0000)
doc/tinc.texi
doc/tincctl.8.in
doc/tincd.8.in
src/control.c
src/control_common.h
src/net.c
src/net.h
src/tincctl.c

index b3f570c..9baf177 100644 (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
 
 
index 623c908..899b066 100644 (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.
index b3142e8..e4bbaeb 100644 (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.
index 3e57f55..6a39e02 100644 (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;
 
index 2b77955..0975826 100644 (file)
@@ -33,6 +33,7 @@ enum request_type {
        REQ_DUMP_GRAPH,
        REQ_PURGE,
        REQ_SET_DEBUG,
+       REQ_RETRY,
 };
 
 #define TINC_CTL_VERSION_CURRENT 0
index aaa035f..4a680d8 100644 (file)
--- 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;
index fd14c37..b8e9e37 100644 (file)
--- 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)
index bff122b..9b16a7b 100644 (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);