pkgsrc/net/pppd/patches/patch-bf
cube 3e86158156 Initial import of pppd, version 2.4.3, into the NetBSD Package Collection.
The PPP Daemon is the userland part of the Point-to-Point Protocol.  It works
in combination with a dedicated kernel network interface usually named ppp.
PPP is a very extensible protocol and pppd supports a large number of options,
including compression (through various algorithms), cryptography (Microsoft's
MPPE) and authentication (PAP, CHAP, Microsoft CHAP), provided the kernel has
the relevant back-ends in some cases.
2005-01-02 02:51:40 +00:00

177 lines
5.3 KiB
Text

$NetBSD: patch-bf,v 1.1.1.1 2005/01/02 02:51:44 cube Exp $
--- pppdump/bsd-comp.c.orig 2004-02-02 04:36:46.000000000 +0100
+++ pppdump/bsd-comp.c
@@ -46,8 +46,15 @@
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
+#include "pppdump.h"
+#ifdef __NetBSD__
+#include <net/ppp_defs.h>
+#include <net/ppp-comp.h>
+#else
#include "ppp_defs.h"
#include "ppp-comp.h"
+#endif
+
#if DO_BSD_COMPRESS
@@ -128,9 +135,8 @@ static void *bsd_decomp_alloc __P((u_cha
static void bsd_free __P((void *state));
static int bsd_decomp_init __P((void *state, u_char *options, int opt_len,
int unit, int hdrlen, int mru, int debug));
-static void bsd_incomp __P((void *state, u_char *dmsg, int len));
-static int bsd_decompress __P((void *state, u_char *cmp, int inlen,
- u_char *dmp, int *outlen));
+static void bsd_incomp __P((void *state, PACKETPTR in));
+static int bsd_decompress __P((void *state, PACKETPTR in, PACKETPTR *out));
static void bsd_reset __P((void *state));
static void bsd_comp_stats __P((void *state, struct compstat *stats));
@@ -139,6 +145,12 @@ static void bsd_comp_stats __P((void *st
*/
struct compressor ppp_bsd_compress = {
CI_BSD_COMPRESS, /* compress_proto */
+ NULL, /* comp_alloc */
+ NULL, /* comp_free */
+ NULL, /* comp_init */
+ NULL, /* comp_reset */
+ NULL, /* comp_compress */
+ NULL, /* comp_stat */
bsd_decomp_alloc, /* decomp_alloc */
bsd_free, /* decomp_free */
bsd_decomp_init, /* decomp_init */
@@ -170,6 +182,12 @@ struct compressor ppp_bsd_compress = {
#define RATIO_SCALE (1<<RATIO_SCALE_LOG)
#define RATIO_MAX (0x7fffffff>>RATIO_SCALE_LOG)
+static void bsd_clear __P((struct bsd_db *));
+static int bsd_check __P((struct bsd_db *));
+static void *bsd_alloc __P((u_char *, int, int));
+static int bsd_init __P((struct bsd_db *, u_char *, int, int, int, int,
+ int, int));
+
/*
* clear the dictionary
*/
@@ -257,7 +275,7 @@ bsd_comp_stats(state, stats)
stats->ratio = db->in_count;
out = db->bytes_out;
if (stats->ratio <= 0x7fffff)
- stats->ratio <<= 8;
+ stats->ratio = ((stats->ratio) << 8);
else
out >>= 8;
if (out != 0)
@@ -383,7 +401,7 @@ bsd_init(db, options, opt_len, unit, hdr
|| options[0] != CI_BSD_COMPRESS || options[1] != CILEN_BSD_COMPRESS
|| BSD_VERSION(options[2]) != BSD_CURRENT_VERSION
|| BSD_NBITS(options[2]) != db->maxbits
- || decomp && db->lens == NULL)
+ || (decomp && db->lens == NULL))
return 0;
if (decomp) {
@@ -424,10 +442,9 @@ bsd_decomp_init(state, options, opt_len,
* incompressible data by pretending to compress the incoming data.
*/
static void
-bsd_incomp(state, dmsg, mlen)
+bsd_incomp(state, in)
void *state;
- u_char *dmsg;
- int mlen;
+ PACKETPTR in;
{
struct bsd_db *db = (struct bsd_db *) state;
u_int hshift = db->hshift;
@@ -442,11 +459,11 @@ bsd_incomp(state, dmsg, mlen)
u_char *rptr;
u_int ent;
- rptr = dmsg;
+ rptr = in->buf;
ent = rptr[0]; /* get the protocol */
if (ent == 0) {
++rptr;
- --mlen;
+ in->len--;
ent = rptr[0];
}
if ((ent & 1) == 0 || ent < 0x21 || ent > 0xf9)
@@ -455,7 +472,7 @@ bsd_incomp(state, dmsg, mlen)
db->seqno++;
ilen = 1; /* count the protocol as 1 byte */
++rptr;
- slen = dmsg + mlen - rptr;
+ slen = in->buf + in->len - rptr;
ilen += slen;
for (; slen > 0; --slen) {
c = *rptr++;
@@ -544,10 +561,10 @@ bsd_incomp(state, dmsg, mlen)
* compression, even though they are detected by inspecting the input.
*/
static int
-bsd_decompress(state, cmsg, inlen, dmp, outlenp)
+bsd_decompress(state, in, out)
void *state;
- u_char *cmsg, *dmp;
- int inlen, *outlenp;
+ PACKETPTR in;
+ PACKETPTR *out;
{
struct bsd_db *db = (struct bsd_db *) state;
u_int max_ent = db->max_ent;
@@ -556,19 +573,19 @@ bsd_decompress(state, cmsg, inlen, dmp,
u_int n_bits = db->n_bits;
u_int tgtbitno = 32-n_bits; /* bitno when we have a code */
struct bsd_dict *dictp;
- int explen, i, seq, len;
+ int explen, seq, len;
u_int incode, oldcode, finchar;
u_char *p, *rptr, *wptr;
int ilen;
- int dlen, space, codelen, extra;
+ int dlen, codelen, extra;
- rptr = cmsg;
+ rptr = in->buf;
if (*rptr == 0)
++rptr;
++rptr; /* skip protocol (assumed 0xfd) */
seq = (rptr[0] << 8) + rptr[1];
rptr += BSD_OVHD;
- ilen = len = cmsg + inlen - rptr;
+ ilen = len = in->buf + in->len - rptr;
/*
* Check the sequence number and give up if it is not what we expect.
@@ -580,7 +597,7 @@ bsd_decompress(state, cmsg, inlen, dmp,
return DECOMP_ERROR;
}
- wptr = dmp + db->hdrlen;
+ wptr = (*out)->buf + db->hdrlen;
oldcode = CLEAR;
explen = 0;
@@ -616,7 +633,7 @@ bsd_decompress(state, cmsg, inlen, dmp,
}
if (incode > max_ent + 2 || incode > db->maxmaxcode
- || incode > max_ent && oldcode == CLEAR) {
+ || (incode > max_ent && oldcode == CLEAR)) {
if (db->debug) {
printf("bsd_decomp%d: bad code 0x%x oldcode=0x%x ",
db->unit, incode, oldcode);
@@ -729,7 +746,7 @@ bsd_decompress(state, cmsg, inlen, dmp,
}
oldcode = incode;
}
- *outlenp = wptr - (dmp + db->hdrlen);
+ (*out)->len = wptr - ((*out)->buf + db->hdrlen);
/*
* Keep the checkpoint right so that incompressible packets