PPPoE problem: "Too many LQR packets lost"
Stephen McKay
smckay at internode.on.net
Fri Jul 23 19:47:29 PDT 2004
Hi!
A few months ago my ADSL line started dropping out, claiming too many
LQR packets lost. Seems like my telco changed the hardware at the other
end. You get that a lot here. So, I just turned off LQR and left it at
that.
Unfortunately, when the other end loses its marbles the link just hangs
now instead of ppp detecting it and reconnecting. I decided to patch ppp.
I found Mike Tancsa's patch but didn't like it. I rolled my own, which
seems to be working so far. It works by switching from LQR to simple
echo requests when LQR times out.
This should be tuned a bit so that people with working LQR (well, at least
one correct LQR exchange in a given session) don't have to wait for the
echo requests to time out too before a dead connection is detected. I'd
have to have a carrier that supported LQR to test that though. :-)
Stephen.
(This is a patch against ppp in FreeBSD 4.8. I haven't tried the ppp in
-current yet as -current is still a wild and woolly place that scares me.)
Index: lqr.c
===================================================================
RCS file: /cvs/src/usr.sbin/ppp/lqr.c,v
retrieving revision 1.40.2.4
diff -u -r1.40.2.4 lqr.c
--- lqr.c 1 Sep 2002 02:12:28 -0000 1.40.2.4
+++ lqr.c 24 Jul 2004 02:12:51 -0000
@@ -165,8 +165,16 @@
lcp->fsm.link->name);
log_Printf(LogLQM, "%s: Too many LQR packets lost\n",
lcp->fsm.link->name);
- p->hdlc.lqm.method = 0;
- datalink_Down(p->dl, CLOSE_NORMAL);
+ p->hdlc.lqm.method &= ~LQM_LQR;
+ if (p->hdlc.lqm.method == 0)
+ datalink_Down(p->dl, CLOSE_NORMAL);
+ else {
+ log_Printf(LogPHASE, "%s: ** Switching to LQR ECHO **\n",
+ lcp->fsm.link->name);
+ log_Printf(LogLQM, "%s: Switching to LQR ECHO\n",
+ lcp->fsm.link->name);
+ SendEchoReq(lcp);
+ }
} else {
SendLqrData(lcp);
p->hdlc.lqm.lqr.resent++;
More information about the freebsd-net
mailing list