Skip to content

Commit

Permalink
added --loop option for automatic reconnects
Browse files Browse the repository at this point in the history
  • Loading branch information
mrbaseman committed Nov 21, 2017
1 parent c162cbe commit e3edcca
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 1 deletion.
10 changes: 10 additions & 0 deletions doc/openfortivpn.1.in
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ openfortivpn \- Client for PPP+SSL VPN tunnel services
[\fB\-\-pppd-plugin=\fI<file>\fR]
[\fB\-\-pppd-ipparam=\fI<string>\fR]
[\fB\-\-pppd-ifname=\fI<string>\fR]
[\fB\-\-loop\fR]
[\fB\-c\fR \fI<file>\fR]
[\fB\-v|\-q\fR]
.br
Expand Down Expand Up @@ -125,9 +126,16 @@ Provides an extra parameter to the ip-up, ip-pre-up and ip-down scripts. See man
.BR pppd(8)
for further details
.TP
<<<<<<< 5e9adc7e3fd27ee36b0a00583dce1225226f57a2
\fB\-\-pppd-ifname=\fI<string>\fR
Set the ppp interface name. Only if supported by pppd. Patched versions of pppd
implement this option but may not be available on your platform.
=======
\fB\-\-loop\=\fI<interval>fR
Runs the vpn in an endless loop and tries to reconnect forever.
The reconnect interval may be specified in seconds, where 0 means
no reconnect is done (this is the default).
>>>>>>> added --loop option for automatic reconnects
.TP
\fB\-v\fR
Increase verbosity. Can be used multiple times to be even more verbose.
Expand Down Expand Up @@ -233,3 +241,5 @@ pppd-use-peerdns = 1
insecure-ssl = 0
.br
cipher-list = HIGH:!aNULL:!kRSA:!PSK:!SRP:!MD5:!RC4
.br
loop = 0
9 changes: 9 additions & 0 deletions src/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,15 @@ int load_config(struct vpn_config *cfg, const char *filename)
continue;
}
cfg->half_internet_routes = half_internet_routes;
} else if (strcmp(key, "loop") == 0) {
long int loop = strtol(val, NULL, 0);
if (loop < 0) {
log_warn("Bad loop in config file:" \
" \"%s\".\n",
val);
continue;
}
cfg->loop =loop;
} else if (strcmp(key, "pppd-use-peerdns") == 0) {
int pppd_use_peerdns = strtob(val);
if (pppd_use_peerdns < 0) {
Expand Down
1 change: 1 addition & 0 deletions src/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ struct vpn_config {
int pppd_use_peerdns;
int use_syslog;
int half_internet_routes;
int loop;

char *pppd_log;
char *pppd_plugin;
Expand Down
9 changes: 9 additions & 0 deletions src/io.c
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,14 @@ static void destroy_ssl_locks(void)
}
#endif

// global variable to pass signal out of its handler
volatile sig_atomic_t sig_received = 0;

int get_sig_received(void)
{
return (int)sig_received;
}

/*
* Adds a new packet to a pool.
*
Expand Down Expand Up @@ -557,6 +565,7 @@ static void *if_config(void *arg)

static void sig_handler(int signo)
{
sig_received = signo;
if (signo == SIGINT || signo == SIGTERM)
SEM_POST(&sem_stop_io);
}
Expand Down
2 changes: 2 additions & 0 deletions src/io.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,6 @@ struct tunnel;

int io_loop(struct tunnel *tunnel);

int get_sig_received(void);

#endif
21 changes: 20 additions & 1 deletion src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
" [--pppd-ifname=<string>] [--pppd-ipparam=<string>]\n" \
" [--pppd-plugin=<file>] [--ca-file=<file>]\n" \
" [--user-cert=<file>] [--user-key=<file>]\n" \
" [--trusted-cert=<digest>] [--use-syslog]\n" \
" [--trusted-cert=<digest>] [--use-syslog] [--loop=<interval>]\n" \
" [-c <file>] [-v|-q]\n" \
" openfortivpn --help\n" \
" openfortivpn --version\n" \
Expand Down Expand Up @@ -93,6 +93,8 @@
" --pppd-ifname=<string> Set the pppd interface name, if supported by pppd.\n" \
" --pppd-ipparam=<string> Provides an extra parameter to the ip-up, ip-pre-up\n" \
" and ip-down scripts. See man (8) pppd\n" \
" --loop=<interval> Run the vpn in a loop and try to reconnect every\n" \
" <interval> seconds\n" \
" -v Increase verbosity. Can be used multiple times\n" \
" to be even more verbose.\n" \
" -q Decrease verbosity. Can be used multiple times\n" \
Expand Down Expand Up @@ -181,6 +183,7 @@ int main(int argc, char **argv)
{"no-dns", no_argument, &cfg.set_dns, 0},
{"pppd-no-peerdns", no_argument, &cfg.pppd_use_peerdns, 0},
{"use-syslog", no_argument, &cfg.use_syslog, 1},
{"loop", required_argument, 0, 0},
{"ca-file", required_argument, 0, 0},
{"user-cert", required_argument, 0, 0},
{"user-key", required_argument, 0, 0},
Expand Down Expand Up @@ -301,6 +304,17 @@ int main(int argc, char **argv)
cfg.half_internet_routes = half_internet_routes;
break;
}
if (strcmp(long_options[option_index].name,
"loop") == 0) {
long int loop = strtol(optarg, NULL, 0);
if (loop < 0) {
log_warn("Bad loop option: " \
"\"%s\"\n", optarg);
break;
}
cfg.loop = loop;
break;
}
if (strcmp(long_options[option_index].name,
"set-dns") == 0) {
int set_dns = strtob(optarg);
Expand Down Expand Up @@ -427,6 +441,11 @@ int main(int argc, char **argv)

if (run_tunnel(&cfg) == 0)
ret = EXIT_SUCCESS;
while ((ret == EXIT_SUCCESS) && (cfg.loop!=0) && (get_sig_received()==0)) {
sleep(cfg.loop);
if (run_tunnel(&cfg) != 0)
ret = EXIT_FAILURE;
}
goto exit;

user_error:
Expand Down

0 comments on commit e3edcca

Please sign in to comment.