]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/lcp.c
typo
[ppp.git] / pppd / lcp.c
index e1c017b30b4f8ee8f11a0fcd2cb534f458b8468d..95b13b33572f2cd5120dc1c927e8670bae77137c 100644 (file)
@@ -17,9 +17,7 @@
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
-#ifndef lint
-static char rcsid[] = "$Id: lcp.c,v 1.36 1999/03/16 22:54:41 paulus Exp $";
-#endif
+#define RCSID  "$Id: lcp.c,v 1.44 1999/08/13 06:46:14 paulus Exp $";
 
 /*
  * TODO:
@@ -35,11 +33,14 @@ static char rcsid[] = "$Id: lcp.c,v 1.36 1999/03/16 22:54:41 paulus Exp $";
 #include "chap.h"
 #include "magic.h"
 
+static const char rcsid[] = RCSID;
+
 /*
  * LCP-related command-line options.
  */
 int    lcp_echo_interval = 0;  /* Interval between LCP echo-requests */
 int    lcp_echo_fails = 0;     /* Tolerance to unanswered echo-requests */
+bool   lax_recv = 0;           /* accept control chars in asyncmap */
 
 static int setescape __P((char **));
 
@@ -63,7 +64,7 @@ static option_t lcp_option_list[] = {
     { "-as", o_uint32, &lcp_wantoptions[0].asyncmap,
       "Set asyncmap (for received packets)",
       OPT_OR, &lcp_wantoptions[0].neg_asyncmap },
-    { "nomagicnumber", o_bool, &lcp_wantoptions[0].neg_magicnumber,
+    { "nomagic", o_bool, &lcp_wantoptions[0].neg_magicnumber,
       "Disable magic number negotiation (looped-back line detection)",
       OPT_A2COPY, &lcp_allowoptions[0].neg_magicnumber },
     { "-mn", o_bool, &lcp_wantoptions[0].neg_magicnumber,
@@ -104,6 +105,8 @@ static option_t lcp_option_list[] = {
       "Set maximum number of LCP configure-request transmissions" },
     { "lcp-max-failure", o_int, &lcp_fsm[0].maxnakloops,
       "Set limit on number of LCP configure-naks" },
+    { "receive-all", o_bool, &lax_recv,
+      "Accept all received control characters", 1 },
     {NULL}
 };
 
@@ -117,7 +120,7 @@ u_int32_t xmit_accm[NUM_PPP][8];            /* extended transmit ACCM */
 
 static u_int32_t lcp_echos_pending = 0;        /* Number of outstanding echo msgs */
 static u_int32_t lcp_echo_number   = 0;        /* ID number of next echo frame */
-static u_int32_t lcp_echo_timer_running = 0;  /* TRUE if a timer is running */
+static u_int32_t lcp_echo_timer_running = 0;  /* set if a timer is running */
 
 static u_char nak_buffer[PPP_MRU];     /* where we construct a nak packet */
 
@@ -365,7 +368,7 @@ lcp_lowerup(unit)
      */
     ppp_set_xaccm(unit, xmit_accm[unit]);
     ppp_send_config(unit, PPP_MRU, 0xffffffff, 0, 0);
-    ppp_recv_config(unit, PPP_MRU, 0xffffffff,
+    ppp_recv_config(unit, PPP_MRU, (lax_recv? 0: 0xffffffff),
                    wo->neg_pcompression, wo->neg_accompression);
     peer_mru[unit] = PPP_MRU;
     lcp_allowoptions[unit].asyncmap = xmit_accm[unit][0];
@@ -1044,18 +1047,16 @@ lcp_nakci(f, p, len)
        p = next;
     }
 
-    /* If there is still anything left, this packet is bad. */
-    if (len != 0)
-       goto bad;
-
     /*
      * OK, the Nak is good.  Now we can update state.
+     * If there are any options left we ignore them.
      */
     if (f->state != OPENED) {
        if (looped_back) {
            if (++try.numloops >= lcp_loopbackfail) {
                notice("Serial line is looped back.");
                lcp_close(f->unit, "Loopback detected");
+               status = EXIT_LOOPBACK;
            }
        } else
            try.numloops = 0;
@@ -1551,7 +1552,7 @@ lcp_up(f)
                    (ho->neg_asyncmap? ho->asyncmap: 0xffffffff),
                    ho->neg_pcompression, ho->neg_accompression);
     ppp_recv_config(f->unit, (go->neg_mru? MAX(wo->mru, go->mru): PPP_MRU),
-                   (go->neg_asyncmap? go->asyncmap: 0xffffffff),
+                   (lax_recv? 0: go->neg_asyncmap? go->asyncmap: 0xffffffff),
                    go->neg_pcompression, go->neg_accompression);
 
     if (ho->neg_mru)
@@ -1724,7 +1725,7 @@ lcp_printpkt(p, plen, printer, arg)
                if (olen >= CILEN_CHAR) {
                    p += 2;
                    printer(arg, "callback ");
-                   GETSHORT(cishort, p);
+                   GETCHAR(cishort, p);
                    switch (cishort) {
                    case CBCP_OPT:
                        printer(arg, "CBCP");
@@ -1805,6 +1806,7 @@ void LcpLinkFailure (f)
        info("No response to %d echo-requests", lcp_echos_pending);
         notice("Serial link appears to be disconnected.");
         lcp_close(f->unit, "Peer not responding");
+       status = EXIT_PEER_DEAD;
     }
 }
 
@@ -1817,6 +1819,8 @@ LcpEchoCheck (f)
     fsm *f;
 {
     LcpSendEchoRequest (f);
+    if (f->state != OPENED)
+       return;
 
     /*
      * Start the timer for the next interval.