X-Git-Url: http://git.ozlabs.org/?p=ppp.git;a=blobdiff_plain;f=pppd%2Flcp.c;h=8ed2778bfb672084181a0b27834dfcfdbb875abb;hp=995ba736f604b8dd8a72d2ece87291caad195a46;hb=c9d9dbfb8459b528ab56bd1cf0c41460801bbfdf;hpb=9596fe66415eb97e70cbbafc08c2af387aea062b diff --git a/pppd/lcp.c b/pppd/lcp.c index 995ba73..8ed2778 100644 --- a/pppd/lcp.c +++ b/pppd/lcp.c @@ -397,21 +397,29 @@ lcp_close(unit, reason) char *reason; { fsm *f = &lcp_fsm[unit]; + int oldstate; if (phase != PHASE_DEAD && phase != PHASE_MASTER) new_phase(PHASE_TERMINATE); - if (f->state == STOPPED && f->flags & (OPT_PASSIVE|OPT_SILENT)) { + + if (f->flags & DELAYED_UP) { + untimeout(lcp_delayed_up, f); + f->state = STOPPED; + } + oldstate = f->state; + + fsm_close(f, reason); + if (oldstate == STOPPED && f->flags & (OPT_PASSIVE|OPT_SILENT|DELAYED_UP)) { /* * This action is not strictly according to the FSM in RFC1548, * but it does mean that the program terminates if you do a - * lcp_close() in passive/silent mode when a connection hasn't - * been established. + * lcp_close() when a connection hasn't been established + * because we are in passive/silent mode or because we have + * delayed the fsm_lowerup() call and it hasn't happened yet. */ - f->state = CLOSED; + f->flags &= ~DELAYED_UP; lcp_finished(f); - - } else - fsm_close(f, reason); + } } @@ -453,9 +461,10 @@ lcp_lowerdown(unit) { fsm *f = &lcp_fsm[unit]; - if (f->flags & DELAYED_UP) + if (f->flags & DELAYED_UP) { f->flags &= ~DELAYED_UP; - else + untimeout(lcp_delayed_up, f); + } else fsm_lowerdown(&lcp_fsm[unit]); } @@ -489,6 +498,7 @@ lcp_input(unit, p, len) if (f->flags & DELAYED_UP) { f->flags &= ~DELAYED_UP; + untimeout(lcp_delayed_up, f); fsm_lowerup(f); } fsm_input(f, p, len); @@ -2056,7 +2066,6 @@ lcp_printpkt(p, plen, printer, arg) printer(arg, " MD5"); ++p; break; -#ifdef CHAPMS case CHAP_MICROSOFT: printer(arg, " MS"); ++p; @@ -2066,7 +2075,6 @@ lcp_printpkt(p, plen, printer, arg) printer(arg, " MS-v2"); ++p; break; -#endif } } break;