summaryrefslogtreecommitdiffstats
path: root/sys/net/slcompress.c
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>1997-08-19 14:10:50 +0000
committerpeter <peter@FreeBSD.org>1997-08-19 14:10:50 +0000
commit3970ef27019843920c6306bec80d164f8eee7e82 (patch)
tree34b2d5bc6895d2f3fc3464536dd15f5c6286c76f /sys/net/slcompress.c
parent813bc0386ea8626c9016862d4d8013c749e44ff6 (diff)
downloadFreeBSD-src-3970ef27019843920c6306bec80d164f8eee7e82.zip
FreeBSD-src-3970ef27019843920c6306bec80d164f8eee7e82.tar.gz
Update kernel parts of pppd from 2.2.0 to 2.3.0. I've yet to look at the
2.3.0 -> 2.3.1 changes, but I seem to recall that there are certain "issues" with 2.3.1 (I'm not sure if it's just pppd or the whole lot, I am not quite that far). The present pppd seems to work with it just fine for the time being. Among the changes are that zlib (aka LZ77 aka deflate aka gzip) compression is implemented as well as the original compress(1) LZW style.
Diffstat (limited to 'sys/net/slcompress.c')
-rw-r--r--sys/net/slcompress.c54
1 files changed, 30 insertions, 24 deletions
diff --git a/sys/net/slcompress.c b/sys/net/slcompress.c
index cc7152a..58056e8 100644
--- a/sys/net/slcompress.c
+++ b/sys/net/slcompress.c
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)slcompress.c 8.2 (Berkeley) 4/16/94
- * $Id: slcompress.c,v 1.9 1997/02/22 09:41:16 peter Exp $
+ * $Id: slcompress.c,v 1.10 1997/06/22 02:19:53 brian Exp $
*/
/*
@@ -44,8 +44,8 @@
*/
#include <sys/param.h>
-#include <sys/systm.h>
#include <sys/mbuf.h>
+#include <sys/systm.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
@@ -74,10 +74,15 @@ sl_compress_init(comp, max_state)
register u_int i;
register struct cstate *tstate = comp->tstate;
- if (max_state == -1)
+ if (max_state == -1) {
max_state = MAX_STATES - 1;
- bzero((char *)comp, sizeof(*comp));
- for (i = max_state; i > 0; --i) {
+ bzero((char *)comp, sizeof(*comp));
+ } else {
+ /* Don't reset statistics */
+ bzero((char *)comp->tstate, sizeof(comp->tstate));
+ bzero((char *)comp->rstate, sizeof(comp->rstate));
+ }
+ for (i = max_state; i > 0; --i) {
tstate[i].cs_id = i;
tstate[i].cs_next = &tstate[i - 1];
}
@@ -95,7 +100,7 @@ sl_compress_init(comp, max_state)
* form).
*/
#define ENCODE(n) { \
- if ((u_short)(n) >= 256) { \
+ if ((u_int16_t)(n) >= 256) { \
*cp++ = 0; \
cp[1] = (n); \
cp[0] = (n) >> 8; \
@@ -105,7 +110,7 @@ sl_compress_init(comp, max_state)
} \
}
#define ENCODEZ(n) { \
- if ((u_short)(n) >= 256 || (u_short)(n) == 0) { \
+ if ((u_int16_t)(n) >= 256 || (u_int16_t)(n) == 0) { \
*cp++ = 0; \
cp[1] = (n); \
cp[0] = (n) >> 8; \
@@ -120,7 +125,7 @@ sl_compress_init(comp, max_state)
(f) = htonl(ntohl(f) + ((cp[1] << 8) | cp[2])); \
cp += 3; \
} else { \
- (f) = htonl(ntohl(f) + (u_long)*cp++); \
+ (f) = htonl(ntohl(f) + (u_int32_t)*cp++); \
} \
}
@@ -129,7 +134,7 @@ sl_compress_init(comp, max_state)
(f) = htons(ntohs(f) + ((cp[1] << 8) | cp[2])); \
cp += 3; \
} else { \
- (f) = htons(ntohs(f) + (u_long)*cp++); \
+ (f) = htons(ntohs(f) + (u_int32_t)*cp++); \
} \
}
@@ -138,7 +143,7 @@ sl_compress_init(comp, max_state)
(f) = htons((cp[1] << 8) | cp[2]); \
cp += 3; \
} else { \
- (f) = htons((u_long)*cp++); \
+ (f) = htons((u_int32_t)*cp++); \
} \
}
@@ -167,7 +172,7 @@ sl_compress_tcp(m, ip, comp, compress_cid)
if ((ip->ip_off & htons(0x3fff)) || m->m_len < 40)
return (TYPE_IP);
- th = (struct tcphdr *)&((int *)ip)[hlen];
+ th = (struct tcphdr *)&((int32_t *)ip)[hlen];
if ((th->th_flags & (TH_SYN|TH_FIN|TH_RST|TH_ACK)) != TH_ACK)
return (TYPE_IP);
/*
@@ -180,7 +185,7 @@ sl_compress_tcp(m, ip, comp, compress_cid)
INCR(sls_packets)
if (ip->ip_src.s_addr != cs->cs_ip.ip_src.s_addr ||
ip->ip_dst.s_addr != cs->cs_ip.ip_dst.s_addr ||
- *(int *)th != ((int *)&cs->cs_ip)[cs->cs_ip.ip_hl]) {
+ *(int32_t *)th != ((int32_t *)&cs->cs_ip)[cs->cs_ip.ip_hl]) {
/*
* Wasn't the first -- search for it.
*
@@ -201,7 +206,8 @@ sl_compress_tcp(m, ip, comp, compress_cid)
INCR(sls_searches)
if (ip->ip_src.s_addr == cs->cs_ip.ip_src.s_addr
&& ip->ip_dst.s_addr == cs->cs_ip.ip_dst.s_addr
- && *(int *)th == ((int *)&cs->cs_ip)[cs->cs_ip.ip_hl])
+ && *(int32_t *)th ==
+ ((int32_t *)&cs->cs_ip)[cs->cs_ip.ip_hl])
goto found;
} while (cs != lastcs);
@@ -245,16 +251,16 @@ sl_compress_tcp(m, ip, comp, compress_cid)
* different between the previous & current datagram, we send the
* current datagram `uncompressed'.
*/
- oth = (struct tcphdr *)&((int *)&cs->cs_ip)[hlen];
+ oth = (struct tcphdr *)&((int32_t *)&cs->cs_ip)[hlen];
deltaS = hlen;
hlen += th->th_off;
hlen <<= 2;
if (hlen > m->m_len)
return TYPE_IP;
- if (((u_short *)ip)[0] != ((u_short *)&cs->cs_ip)[0] ||
- ((u_short *)ip)[3] != ((u_short *)&cs->cs_ip)[3] ||
- ((u_short *)ip)[4] != ((u_short *)&cs->cs_ip)[4] ||
+ if (((u_int16_t *)ip)[0] != ((u_int16_t *)&cs->cs_ip)[0] ||
+ ((u_int16_t *)ip)[3] != ((u_int16_t *)&cs->cs_ip)[3] ||
+ ((u_int16_t *)ip)[4] != ((u_int16_t *)&cs->cs_ip)[4] ||
th->th_off != oth->th_off ||
(deltaS > 5 &&
BCMP(ip + 1, &cs->cs_ip + 1, (deltaS - 5) << 2)) ||
@@ -279,7 +285,7 @@ sl_compress_tcp(m, ip, comp, compress_cid)
* with it. */
goto uncompressed;
- deltaS = (u_short)(ntohs(th->th_win) - ntohs(oth->th_win));
+ deltaS = (u_int16_t)(ntohs(th->th_win) - ntohs(oth->th_win));
if (deltaS) {
ENCODE(deltaS);
changes |= NEW_W;
@@ -429,10 +435,10 @@ sl_uncompress_tcp(bufp, len, type, comp)
* header (we assume the packet we were handed has enough space to
* prepend 128 bytes of header).
*/
- if ((int)cp & 3) {
+ if ((long)cp & 3) {
if (len > 0)
- (void) ovbcopy(cp, (caddr_t)((int)cp &~ 3), len);
- cp = (u_char *)((int)cp &~ 3);
+ (void) ovbcopy(cp, (caddr_t)((long)cp &~ 3), len);
+ cp = (u_char *)((long)cp &~ 3);
}
cp -= hlen;
len += hlen;
@@ -463,7 +469,7 @@ sl_uncompress_tcp_core(buf, buflen, total_len, type, comp, hdrp, hlenp)
register struct tcphdr *th;
register struct cstate *cs;
register struct ip *ip;
- register u_short *bp;
+ register u_int16_t *bp;
register u_int vjlen;
switch (type) {
@@ -483,7 +489,7 @@ sl_uncompress_tcp_core(buf, buflen, total_len, type, comp, hdrp, hlenp)
if (hlen + sizeof(struct tcphdr) > buflen)
goto bad;
hlen += ((struct tcphdr *)&((char *)ip)[hlen])->th_off << 2;
- if (hlen > MAX_HDR)
+ if (hlen > MAX_HDR || hlen > buflen)
goto bad;
BCOPY(ip, &cs->cs_ip, hlen);
cs->cs_hlen = hlen;
@@ -578,7 +584,7 @@ sl_uncompress_tcp_core(buf, buflen, total_len, type, comp, hdrp, hlenp)
cs->cs_ip.ip_len = htons(total_len);
/* recompute the ip header checksum */
- bp = (u_short *) &cs->cs_ip;
+ bp = (u_int16_t *) &cs->cs_ip;
cs->cs_ip.ip_sum = 0;
for (changes = 0; hlen > 0; hlen -= 2)
changes += *bp++;
OpenPOWER on IntegriCloud