diff options
author | brian <brian@FreeBSD.org> | 1999-02-25 12:00:04 +0000 |
---|---|---|
committer | brian <brian@FreeBSD.org> | 1999-02-25 12:00:04 +0000 |
commit | c6b0abda5c8b610deed541a904d8ace25227c044 (patch) | |
tree | 446901da293e9826ebcc4c16d0a8ca77ca01972d /usr.sbin/ppp/datalink.c | |
parent | 71984e6f4b1ea48af8e90cb055c560c314321c2a (diff) | |
download | FreeBSD-src-c6b0abda5c8b610deed541a904d8ace25227c044.zip FreeBSD-src-c6b0abda5c8b610deed541a904d8ace25227c044.tar.gz |
When our dial timeout is ``random'', display its value
correctly by invoking the timer to get the value before
displaying the message.
Don't assume that a value of 0 is ``random'' in
``show datalink''.
Make the random value between 1 and DIAL_TIMEOUT rather
than between 0 and DIAL_TIMEOUT-1
Diffstat (limited to 'usr.sbin/ppp/datalink.c')
-rw-r--r-- | usr.sbin/ppp/datalink.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/usr.sbin/ppp/datalink.c b/usr.sbin/ppp/datalink.c index c1e3e4a..9a521761 100644 --- a/usr.sbin/ppp/datalink.c +++ b/usr.sbin/ppp/datalink.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: datalink.c,v 1.31 1999/02/17 02:11:28 brian Exp $ + * $Id: datalink.c,v 1.32 1999/02/18 00:52:13 brian Exp $ */ #include <sys/param.h> @@ -86,16 +86,19 @@ datalink_OpenTimeout(void *v) log_Printf(LogPHASE, "%s: Redial timer expired.\n", dl->name); } -static void +static int datalink_StartDialTimer(struct datalink *dl, int Timeout) { + int result = Timeout; + timer_Stop(&dl->dial_timer); - if (Timeout) { if (Timeout > 0) dl->dial_timer.load = Timeout * SECTICKS; - else - dl->dial_timer.load = (random() % DIAL_TIMEOUT) * SECTICKS; + else { + result = (random() % DIAL_TIMEOUT) + 1; + dl->dial_timer.load = result * SECTICKS; + } dl->dial_timer.func = datalink_OpenTimeout; dl->dial_timer.name = "dial"; dl->dial_timer.arg = dl; @@ -104,6 +107,7 @@ datalink_StartDialTimer(struct datalink *dl, int Timeout) log_Printf(LogPHASE, "%s: Enter pause (%d) for redialing.\n", dl->name, Timeout); } + return result; } static void @@ -133,6 +137,7 @@ datalink_HangupDone(struct datalink *dl) if (!physical_SetMode(dl->physical, PHYS_BACKGROUND)) log_Printf(LogERROR, "Oops - can't change mode to BACKGROUND (gulp) !\n"); bundle_LinksRemoved(dl->bundle); + /* if dial.timeout is < 0 (random), don't override fsm.delay */ if (dl->cbcp.fsm.delay < dl->cfg.dial.timeout) dl->cbcp.fsm.delay = dl->cfg.dial.timeout; datalink_StartDialTimer(dl, dl->cbcp.fsm.delay); @@ -281,9 +286,9 @@ datalink_UpdateSet(struct descriptor *d, fd_set *r, fd_set *w, fd_set *e, bundle_LinkClosed(dl->bundle, dl); } if (!dl->bundle->CleaningUp) { + int timeout = datalink_StartDialTimer(dl, dl->cfg.dial.timeout); log_WritePrompts(dl, "Failed to open %s, pause %d seconds\n", - dl->physical->name.full, dl->cfg.dial.timeout); - datalink_StartDialTimer(dl, dl->cfg.dial.timeout); + dl->physical->name.full, timeout); } } } @@ -976,11 +981,11 @@ datalink_Show(struct cmdargs const *arg) arg->cx->cfg.dial.max); else prompt_Printf(arg->prompt, " Dial tries: infinite, delay "); - if (arg->cx->cfg.dial.next_timeout > 0) + if (arg->cx->cfg.dial.next_timeout >= 0) prompt_Printf(arg->prompt, "%ds/", arg->cx->cfg.dial.next_timeout); else prompt_Printf(arg->prompt, "random/"); - if (arg->cx->cfg.dial.timeout > 0) + if (arg->cx->cfg.dial.timeout >= 0) prompt_Printf(arg->prompt, "%ds\n", arg->cx->cfg.dial.timeout); else prompt_Printf(arg->prompt, "random\n"); |