Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 24 Jul 2004 12:47:26 +1000
From:      Stephen McKay <smckay@internode.on.net>
To:        freebsd-net@freebsd.org
Cc:        Stephen McKay <smckay@internode.on.net>
Subject:   PPPoE problem: "Too many LQR packets lost"
Message-ID:  <200407240247.i6O2lQfJ007370@dungeon.home>

next in thread | raw e-mail | index | archive | help
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++;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200407240247.i6O2lQfJ007370>