PPPoE problem: "Too many LQR packets lost"

Stephen McKay smckay at internode.on.net
Fri Jul 23 19:47:29 PDT 2004


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

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. :-)


(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
diff -u -r1.40.2.4 lqr.c
--- lqr.c	1 Sep 2002 02:12:28 -0000
+++ lqr.c	24 Jul 2004 02:12:51 -0000
@@ -165,8 +165,16 @@
       log_Printf(LogLQM, "%s: Too many LQR packets lost\n",
-      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 {

More information about the freebsd-net mailing list