summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>1995-12-18 03:43:40 +0000
committerPaul Mackerras <paulus@samba.org>1995-12-18 03:43:40 +0000
commit781f4679d39261f09200986978e38eca32ae183c (patch)
tree2edd957ec8248b9449e216f24f732bc332baac08
parent6041de91d21e0c9fe92bcec7b8a9231ed98145c3 (diff)
downloadppp-781f4679d39261f09200986978e38eca32ae183c.tar.gz
fixes for predictor support;
extend protocol table; supply message on protocol close
-rw-r--r--pppd/ccp.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/pppd/ccp.c b/pppd/ccp.c
index 355ba1d..836d506 100644
--- a/pppd/ccp.c
+++ b/pppd/ccp.c
@@ -26,7 +26,7 @@
*/
#ifndef lint
-static char rcsid[] = "$Id: ccp.c,v 1.12 1995/10/27 03:42:52 paulus Exp $";
+static char rcsid[] = "$Id: ccp.c,v 1.13 1995/12/18 03:43:40 paulus Exp $";
#endif
#include <syslog.h>
@@ -37,6 +37,12 @@ static char rcsid[] = "$Id: ccp.c,v 1.12 1995/10/27 03:42:52 paulus Exp $";
#include "fsm.h"
#include "ccp.h"
+struct protent ccp_protent = {
+ PPP_CCP, ccp_init, ccp_input, ccp_protrej,
+ ccp_lowerup, ccp_lowerdown, ccp_open, ccp_close,
+ ccp_printpkt, NULL, 1, "CCP"
+};
+
fsm ccp_fsm[NUM_PPP];
ccp_options ccp_wantoptions[NUM_PPP]; /* what to request the peer to use */
ccp_options ccp_gotoptions[NUM_PPP]; /* what the peer agreed to do */
@@ -117,6 +123,8 @@ ccp_init(unit)
ccp_allowoptions[0].bsd_compress = 1;
ccp_allowoptions[0].bsd_bits = BSD_MAX_BITS;
+
+ ccp_allowoptions[0].predictor_1 = 1;
}
/*
@@ -139,11 +147,12 @@ ccp_open(unit)
* ccp_close - Terminate CCP.
*/
void
-ccp_close(unit)
+ccp_close(unit, reason)
int unit;
+ char *reason;
{
ccp_flags_set(unit, 0, 0);
- fsm_close(&ccp_fsm[unit]);
+ fsm_close(&ccp_fsm[unit], reason);
}
/*
@@ -192,7 +201,7 @@ ccp_input(unit, p, len)
*/
if (oldstate == REQSENT && p[0] == TERMACK
&& !ANY_COMPRESS(ccp_gotoptions[unit]))
- ccp_close(unit);
+ ccp_close(unit, "No compression negotiated");
}
/*
@@ -423,6 +432,8 @@ ccp_ackci(f, p, len)
if (len < CILEN_PREDICTOR_1
|| p[0] != CI_PREDICTOR_1 || p[1] != CILEN_PREDICTOR_1)
return 0;
+ p += CILEN_PREDICTOR_1;
+ len -= CILEN_PREDICTOR_1;
/* XXX Cope with first/fast ack */
if (p == p0 && len == 0)
return 1;
@@ -431,6 +442,8 @@ ccp_ackci(f, p, len)
if (len < CILEN_PREDICTOR_2
|| p[0] != CI_PREDICTOR_2 || p[1] != CILEN_PREDICTOR_2)
return 0;
+ p += CILEN_PREDICTOR_2;
+ len -= CILEN_PREDICTOR_2;
/* XXX Cope with first/fast ack */
if (p == p0 && len == 0)
return 1;
@@ -900,7 +913,7 @@ ccp_datainput(unit, pkt, len)
* Disable compression by taking CCP down.
*/
syslog(LOG_ERR, "Lost compression sync: disabling compression");
- ccp_close(unit);
+ ccp_close(unit, "Lost compression sync");
} else {
/*
* Send a reset-request to reset the peer's compressor.