Date: Thu, 14 Dec 1995 13:33:54 -0500 From: John Capo <jc@irbs.com> To: FreeBSD-gnats-submit@freebsd.org Subject: bin/892: ppp recursion problem and partial FIX Message-ID: <199512141833.NAA09618@irbs.irbs.com> Resent-Message-ID: <199512141840.KAA25835@freefall.freebsd.org>
index | next in thread | raw e-mail
>Number: 892
>Category: bin
>Synopsis: ppp recursion problem and partial FIX
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Thu Dec 14 10:40:02 PST 1995
>Last-Modified:
>Originator: John Capo
>Organization:
IRBS Engineering
>Release: FreeBSD 2.1-STABLE i386
>Environment:
>Description:
There are two bugs here. One is that SendLqrReport() is called
via StopLqr() when the line drops. I believe the intention was to
stop the LQR timer.
SendLqrReport() attempts to send an echo request or calls LcpClose()
if > 5 echo packets have been lost. LcpClose() will wind up calling
SendLqrReport() which is the second bug.
Actually there is a third bug. I don't think that -auto mode should
exit when echo packets are lost. The link should be re-started
just as it is when LQR is off.
#0 0xa2da in SendLqrReport () at lqr.c:121
#1 0xa5e5 in StopLqr (method=1) at lqr.c:227
#2 0x97d1 in LcpLayerDown (fp=0x17088) at lcp.c:375
#3 0x6046 in FsmClose (fp=0x17088) at fsm.c:185
#4 0x985d in LcpClose () at lcp.c:405
#5 0xa2da in SendLqrReport () at lqr.c:121
#6 0xa5e5 in StopLqr (method=1) at lqr.c:227
#7 0x97d1 in LcpLayerDown (fp=0x17088) at lcp.c:375
#8 0x6046 in FsmClose (fp=0x17088) at fsm.c:185
#9 0x985d in LcpClose () at lcp.c:405
#10 0xa2da in SendLqrReport () at lqr.c:121
#11 0xa5e5 in StopLqr (method=1) at lqr.c:227
#12 0x97d1 in LcpLayerDown (fp=0x17088) at lcp.c:375
#13 0x5fb6 in FsmDown (fp=0x17088) at fsm.c:164
#14 0x9829 in LcpDown () at lcp.c:391
#15 0xcfe3 in DownConnection () at modem.c:212
>How-To-Repeat:
Disable and deny LQR
Run ppp in -auto mode
Cause 6 connections to drop by disconnecting the phone line.
>Fix:
This patch stops the LQR timer when the line drops rather than
calling StopLqr(). The line is dead, no need to attempt to send
echo requests. I have been using this code for 4 weeks.
I'm not sure of the best way to fix the recursion problem when LQR
is enabled and the lost packet threshold is hit. Setting lqmmethod
to 0 before calling LcpClose() from SendLqrReport() is one way.
*** lqr.c.orig Thu Dec 14 11:05:23 1995
--- lqr.c Thu Dec 14 11:05:39 1995
***************
*** 213,218 ****
--- 213,224 ----
}
void
+ StopLqrTimer(void)
+ {
+ StopTimer(&LqrTimer);
+ }
+
+ void
StopLqr(method)
int method;
{
*** lcp.c.orig Thu Dec 14 11:04:16 1995
--- lcp.c Thu Dec 14 11:04:46 1995
***************
*** 327,332 ****
--- 327,333 ----
StopIdleTimer();
StopTimer(&AuthPapInfo.authtimer);
StopTimer(&AuthChapInfo.authtimer);
+ StopLqrTimer();
}
static void
***************
*** 372,378 ****
{
LogPrintf(LOG_LCP, "%s: LayerDown\n", fp->name);
StopAllTimers();
- StopLqr( LQM_LQR );
OsLinkdown();
NewPhase(PHASE_TERMINATE);
}
--- 373,378 ----
>Audit-Trail:
>Unformatted:
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199512141833.NAA09618>
