Comment why we do a TLF when we get a ``Down'' event in state

``closing''.

Pointed out by: archie

Don't do a TLF when we get a ``Catastrphic Protocol Reject'' event
in state ``closed'' or ``stopped''.

Pointed out but not suggested by: archie

This makes no difference in the current implementation as
LcpLayerFinish() does nothing but log the event, but I disagree
in principle because it unbalances the TLF/TLS calls which
(IMHO) doesn't fit with the intentions of the RFC.

Maybe the RFC author had a reason for this.  It can only happen
in two circumstances:

- if LCP has already been negotiated then stopped or closed and we
  receive a protocol reject, then we must already have done a TLF.
  Why do one again and stay in the same state ?

- if LCP hasn't yet been started and we receive an unsolicted
  protocol reject, why should we TLF when we haven't done a TLS ?
This commit is contained in:
brian 1999-03-01 02:52:39 +00:00
parent b5b8de85ff
commit 3d2de27bce

View File

@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: fsm.c,v 1.38 1999/01/28 01:56:31 brian Exp $
* $Id: fsm.c,v 1.39 1999/02/26 21:28:11 brian Exp $
*
* TODO:
*/
@ -302,6 +302,7 @@ fsm_Down(struct fsm *fp)
NewState(fp, ST_INITIAL);
break;
case ST_CLOSING:
/* This TLF contradicts the RFC (1661), which ``misses it out'' ! */
(*fp->fn->LayerFinish)(fp);
NewState(fp, ST_INITIAL);
(*fp->parent->LayerFinish)(fp->parent->object, fp);
@ -841,7 +842,8 @@ FsmRecvProtoRej(struct fsm *fp, struct fsmheader *lhp, struct mbuf *bp)
case PROTO_CCP:
if (fp->proto == PROTO_LCP) {
fp = &fp->link->ccp.fsm;
(*fp->fn->LayerFinish)(fp);
/* Despite the RFC (1661), don't do an out-of-place TLF */
/* (*fp->fn->LayerFinish)(fp); */
switch (fp->state) {
case ST_CLOSED:
case ST_CLOSING:
@ -850,7 +852,8 @@ FsmRecvProtoRej(struct fsm *fp, struct fsmheader *lhp, struct mbuf *bp)
NewState(fp, ST_STOPPED);
break;
}
(*fp->parent->LayerFinish)(fp->parent->object, fp);
/* See above */
/* (*fp->parent->LayerFinish)(fp->parent->object, fp); */
}
break;
case PROTO_MP: