diff options
author | pst <pst@FreeBSD.org> | 1996-08-11 17:29:37 +0000 |
---|---|---|
committer | pst <pst@FreeBSD.org> | 1996-08-11 17:29:37 +0000 |
commit | db1a2c98a7763a50afdcfee230030aa8c955b9ae (patch) | |
tree | 4ab3443e6e4a75a13ebedb95dc52148f8bee9890 /usr.sbin/pppd | |
parent | 1a72bf5044a6ae9bebad1379cd9ea5ffa37fc4ad (diff) | |
download | FreeBSD-src-db1a2c98a7763a50afdcfee230030aa8c955b9ae.zip FreeBSD-src-db1a2c98a7763a50afdcfee230030aa8c955b9ae.tar.gz |
Previously, if the dial script had any problems, pppd would simply
bomb out. Unfortunately, FreeBSD's sio driver and certain internal
modems don't get along very well, which can cause the serial port to
wedge until it is closed and reopened.
Add new variable, connect-max-attempts, default = 1 (to mimic previous
behavior). If > 1, will try up to "n" times to dial remote site before
aborting.
Diffstat (limited to 'usr.sbin/pppd')
-rw-r--r-- | usr.sbin/pppd/main.c | 13 | ||||
-rw-r--r-- | usr.sbin/pppd/options.c | 11 | ||||
-rw-r--r-- | usr.sbin/pppd/pppd.8 | 7 | ||||
-rw-r--r-- | usr.sbin/pppd/pppd.h | 3 |
4 files changed, 29 insertions, 5 deletions
diff --git a/usr.sbin/pppd/main.c b/usr.sbin/pppd/main.c index 3321959..8c795a8 100644 --- a/usr.sbin/pppd/main.c +++ b/usr.sbin/pppd/main.c @@ -18,7 +18,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: main.c,v 1.27 1995/08/16 01:39:08 paulus Exp $"; +static char rcsid[] = "$Id: main.c,v 1.5 1995/10/31 21:21:26 peter Exp $"; #endif #include <stdio.h> @@ -160,6 +160,7 @@ main(argc, argv) struct passwd *pw; struct timeval timo; sigset_t mask; + int connect_attempts = 0; p = ttyname(0); if (p) @@ -349,13 +350,21 @@ main(argc, argv) if (device_script(connector, fd, fd) < 0) { syslog(LOG_ERR, "Connect script failed"); setdtr(fd, FALSE); - die(1); + if (++connect_attempts >= max_con_attempts) + die(1); + else { + close(fd); + sleep(5); + continue; + } } syslog(LOG_INFO, "Serial connection established."); sleep(1); /* give it time to set up its terminal */ } + connect_attempts = 0; /* we made it through ok */ + /* set line speed, flow control, etc.; clear CLOCAL if modem option */ set_up_tty(fd, 0); diff --git a/usr.sbin/pppd/options.c b/usr.sbin/pppd/options.c index 8ed6ff0..fd0bc39 100644 --- a/usr.sbin/pppd/options.c +++ b/usr.sbin/pppd/options.c @@ -18,7 +18,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: options.c,v 1.8 1995/11/04 10:44:22 peter Exp $"; +static char rcsid[] = "$Id: options.c,v 1.9 1996/03/01 19:29:42 phk Exp $"; #endif #include <stdio.h> @@ -74,6 +74,7 @@ u_int32_t dns2 = 0; /* Secondary DNS server */ int lockflag = 0; /* Create lock file to lock the serial dev */ int nodetach = 0; /* Don't detach from controlling tty */ char *connector = NULL; /* Script to establish physical link */ +int max_con_attempts = 1; /* Maximum number of connect attempts */ char *disconnector = NULL; /* Script to disestablish physical link */ char user[MAXNAMELEN]; /* Username for PAP */ char passwd[MAXSECRETLEN]; /* Password for PAP */ @@ -125,6 +126,7 @@ static int nomru __P((void)); static int nopcomp __P((void)); static int setconnector __P((char **)); static int setdisconnector __P((char **)); +static int setmaxcon __P((char **)); static int setdomain __P((char **)); static int setnetmask __P((char **)); static int setdns1 __P((char **)); @@ -207,6 +209,7 @@ static struct cmd { {"asyncmap", 1, setasyncmap}, /* set the desired async map */ {"escape", 1, setescape}, /* set chars to escape on transmission */ {"connect", 1, setconnector}, /* A program to set up a connection */ + {"connect-max-attempts", 1, setmaxcon}, /* maximum # connection attempts */ {"disconnect", 1, setdisconnector}, /* program to disconnect serial dev. */ {"crtscts", 0, setcrtscts}, /* set h/w flow control */ {"-crtscts", 0, setnocrtscts}, /* clear h/w flow control */ @@ -1775,6 +1778,12 @@ setpapcrypt() return 1; } +static int setmaxcon (argv) + char **argv; +{ + return int_option(*argv, &max_con_attempts); +} + #ifdef _linux_ static int setidle (argv) char **argv; diff --git a/usr.sbin/pppd/pppd.8 b/usr.sbin/pppd/pppd.8 index ce06da1..7f61ac7 100644 --- a/usr.sbin/pppd/pppd.8 +++ b/usr.sbin/pppd/pppd.8 @@ -1,5 +1,5 @@ .\" manual page [] for pppd 2.0 -.\" $Id: pppd.8,v 1.5 1996/05/02 19:21:40 mpp Exp $ +.\" $Id: pppd.8,v 1.6 1996/07/03 23:23:03 mpp Exp $ .\" SH section heading .\" SS subsection heading .\" LP paragraph @@ -71,6 +71,11 @@ Use the executable or shell command specified by \fI<p>\fR to set up the serial line. This script would typically use the "chat" program to dial the modem and start the remote ppp session. .TP +.B connect-max-attempts \fI<n> +Attempt dial-out connection to remote system no more than specified number +of times (default = 1). If the connection is not made, pppd will exit. +Requires that \fBpersist\fR has been specified. +.TP .B crtscts Use hardware flow control (i.e. RTS/CTS) to control the flow of data on the serial port. diff --git a/usr.sbin/pppd/pppd.h b/usr.sbin/pppd/pppd.h index bedf675..7fe53f4 100644 --- a/usr.sbin/pppd/pppd.h +++ b/usr.sbin/pppd/pppd.h @@ -16,7 +16,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: pppd.h,v 1.4 1995/10/31 21:21:42 peter Exp $ + * $Id: pppd.h,v 1.5 1996/03/01 19:29:43 phk Exp $ */ /* @@ -73,6 +73,7 @@ extern int lockflag; /* Create lock file to lock the serial dev */ extern int nodetach; /* Don't detach from controlling tty */ extern char *connector; /* Script to establish physical link */ extern char *disconnector; /* Script to disestablish physical link */ +extern int max_con_attempts;/* Maximum number of time to try dialing */ extern char user[]; /* Username for PAP */ extern char passwd[]; /* Password for PAP */ extern int auth_required; /* Peer is required to authenticate */ |