From: Paul Mackerras Date: Thu, 26 Sep 1996 06:19:26 +0000 (+0000) Subject: fixes to make it work under Ultrix X-Git-Tag: RELEASE_2_3_6~304 X-Git-Url: https://git.ozlabs.org/?p=ppp.git;a=commitdiff_plain;h=f291d105e6c976934264e9c72acf1415e2a5e1c7 fixes to make it work under Ultrix --- diff --git a/ultrix/ppp-deflate.c b/ultrix/ppp-deflate.c index c6e6299..d13dbb9 100644 --- a/ultrix/ppp-deflate.c +++ b/ultrix/ppp-deflate.c @@ -1,4 +1,4 @@ -/* $Id: ppp-deflate.c,v 1.1 1996/07/01 01:24:27 paulus Exp $ */ +/* $Id: ppp-deflate.c,v 1.2 1996/09/26 06:19:18 paulus Exp $ */ /* * ppp_deflate.c - interface the zlib procedures for Deflate compression @@ -97,6 +97,15 @@ struct compressor ppp_deflate = { z_comp_stats, /* decomp_stat */ }; +/* + * Some useful mbuf macros not in mbuf.h. + */ +#define M_IS_CLUSTER(m) ((m)->m_off > MMAXOFF) + +#define M_TRAILINGSPACE(m) \ + ((M_IS_CLUSTER(m) ? (u_int)(m)->m_clptr + M_CLUSTERSZ : MSIZE) \ + - ((m)->m_off + (m)->m_len)) + /* * Space allocation and freeing routines for use by zlib routines. */ @@ -140,17 +149,18 @@ z_comp_alloc(options, opt_len) if (w_size < DEFLATE_MIN_SIZE || w_size > DEFLATE_MAX_SIZE) return NULL; - MALLOC(state, struct deflate_state *, sizeof(struct deflate_state), - M_DEVBUF, M_NOWAIT); + KM_ALLOC(state, struct deflate_state *, sizeof(struct deflate_state), + KM_DEVBUF, KM_NOARG); if (state == NULL) return NULL; + bzero(state, sizeof(struct deflate_state)); state->strm.next_in = NULL; - state->strm.zalloc = zalloc; - state->strm.zfree = zfree; + state->strm.zalloc = (alloc_func) zalloc; + state->strm.zfree = (free_func) zfree; if (deflateInit2(&state->strm, Z_DEFAULT_COMPRESSION, DEFLATE_METHOD_VAL, -w_size, 8, Z_DEFAULT_STRATEGY, DEFLATE_OVHD+2) != Z_OK) { - FREE(state, M_DEVBUF); + KM_FREE(state, KM_DEVBUF); return NULL; } @@ -166,7 +176,7 @@ z_comp_free(arg) struct deflate_state *state = (struct deflate_state *) arg; deflateEnd(&state->strm); - FREE(state, M_DEVBUF); + KM_FREE(state, KM_DEVBUF); } static int @@ -214,7 +224,7 @@ z_compress(arg, mret, mp, orig_len, maxolen) struct deflate_state *state = (struct deflate_state *) arg; u_char *rptr, *wptr; int proto, olen, wspace, r, flush; - struct mbuf *m; + struct mbuf *m, *clp; /* * Check that the protocol is in the range we handle. @@ -232,12 +242,14 @@ z_compress(arg, mret, mp, orig_len, maxolen) MGET(m, M_DONTWAIT, MT_DATA); *mret = m; if (m != NULL) { + if (maxolen + state->hdrlen > MLEN) { + /* MCLGET is not a single statement!!! */ + MCLGET(m, clp) + } m->m_len = 0; - if (maxolen + state->hdrlen > MLEN) - MCLGET(m, M_DONTWAIT); wspace = M_TRAILINGSPACE(m); - if (state->hdrlen + PPP_HDRLEN + 2 < wspace) { - m->m_data += state->hdrlen; + if (state->hdrlen > 0 && state->hdrlen + PPP_HDRLEN + 2 < wspace) { + m->m_off += state->hdrlen; wspace -= state->hdrlen; } wptr = mtod(m, u_char *); @@ -292,9 +304,10 @@ z_compress(arg, mret, mp, orig_len, maxolen) MGET(m->m_next, M_DONTWAIT, MT_DATA); m = m->m_next; if (m != NULL) { + if (maxolen - olen > MLEN) { + MCLGET(m, clp) + } m->m_len = 0; - if (maxolen - olen > MLEN) - MCLGET(m, M_DONTWAIT); state->strm.next_out = mtod(m, u_char *); state->strm.avail_out = wspace = M_TRAILINGSPACE(m); } @@ -371,16 +384,17 @@ z_decomp_alloc(options, opt_len) if (w_size < DEFLATE_MIN_SIZE || w_size > DEFLATE_MAX_SIZE) return NULL; - MALLOC(state, struct deflate_state *, sizeof(struct deflate_state), - M_DEVBUF, M_NOWAIT); + KM_ALLOC(state, struct deflate_state *, sizeof(struct deflate_state), + KM_DEVBUF, KM_NOARG); if (state == NULL) return NULL; + bzero(state, sizeof(struct deflate_state)); state->strm.next_out = NULL; - state->strm.zalloc = zalloc; - state->strm.zfree = zfree; + state->strm.zalloc = (alloc_func) zalloc; + state->strm.zfree = (free_func) zfree; if (inflateInit2(&state->strm, -w_size) != Z_OK) { - FREE(state, M_DEVBUF); + KM_FREE(state, KM_DEVBUF); return NULL; } @@ -396,7 +410,7 @@ z_decomp_free(arg) struct deflate_state *state = (struct deflate_state *) arg; inflateEnd(&state->strm); - FREE(state, M_DEVBUF); + KM_FREE(state, KM_DEVBUF); } static int @@ -457,7 +471,7 @@ z_decompress(arg, mi, mop) struct mbuf *mi, **mop; { struct deflate_state *state = (struct deflate_state *) arg; - struct mbuf *mo, *mo_head; + struct mbuf *mo, *mo_head, *clp; u_char *rptr, *wptr; int rlen, olen, ospace; int seq, i, flush, r, decode_proto; @@ -489,16 +503,16 @@ z_decompress(arg, mi, mop) ++state->seqno; /* Allocate an output mbuf. */ - MGETHDR(mo, M_DONTWAIT, MT_DATA); + MGET(mo, M_DONTWAIT, MT_DATA); if (mo == NULL) return DECOMP_ERROR; mo_head = mo; - mo->m_len = 0; mo->m_next = NULL; - MCLGET(mo, M_DONTWAIT); + MCLGET(mo, clp) + mo->m_len = 0; ospace = M_TRAILINGSPACE(mo); - if (state->hdrlen + PPP_HDRLEN < ospace) { - mo->m_data += state->hdrlen; + if (state->hdrlen > 0 && state->hdrlen + PPP_HDRLEN < ospace) { + mo->m_off += state->hdrlen; ospace -= state->hdrlen; } @@ -568,7 +582,8 @@ z_decompress(arg, mi, mop) m_freem(mo_head); return DECOMP_ERROR; } - MCLGET(mo, M_DONTWAIT); + MCLGET(mo, clp) + mo->m_len = 0; state->strm.next_out = mtod(mo, u_char *); state->strm.avail_out = ospace = M_TRAILINGSPACE(mo); } diff --git a/ultrix/ppp_tty.c b/ultrix/ppp_tty.c index 38d6438..5191946 100644 --- a/ultrix/ppp_tty.c +++ b/ultrix/ppp_tty.c @@ -73,7 +73,7 @@ * Robert Olsson and Paul Mackerras. */ -/* $Id: ppp_tty.c,v 1.7 1996/07/01 01:24:28 paulus Exp $ */ +/* $Id: ppp_tty.c,v 1.8 1996/09/26 06:19:26 paulus Exp $ */ /* from if_sl.c,v 1.11 84/10/04 12:54:47 rick Exp */ /* from NetBSD: if_ppp.c,v 1.15.2.2 1994/07/28 05:17:58 cgd Exp */ @@ -670,7 +670,7 @@ pppasyncstart(sc) /* * This gets called when a received packet is placed on - * the inq, at splsoftnet. + * the inq, at splnet. */ static void pppasyncctlp(sc) @@ -690,7 +690,7 @@ pppasyncctlp(sc) /* * Start output on async tty interface. If the transmit queue * has drained sufficiently, arrange for pppasyncstart to be - * called later at splsoftnet. + * called later at splnet. * Called at spltty or higher. */ int @@ -786,27 +786,20 @@ pppinput(c, tp) ++tk_nin; ++sc->sc_stats.ppp_ibytes; - if (c & TTY_FE) { - /* framing error or overrun on this char - abort packet */ - if (sc->sc_flags & SC_DEBUG) - printf("ppp%d: bad char %x\n", sc->sc_if.if_unit, c); - goto flush; - } - c &= 0xff; /* * Handle software flow control of output. */ if (tp->t_iflag & IXON) { - if (c == tp->t_cc[VSTOP] && tp->t_cc[VSTOP] != _POSIX_VDISABLE) { + if (c == tp->t_cc[VSTOP] && tp->t_cc[VSTOP] != 0) { if ((tp->t_state & TS_TTSTOP) == 0) { tp->t_state |= TS_TTSTOP; (*cdevsw[major(tp->t_dev)].d_stop)(tp, 0); } return 0; } - if (c == tp->t_cc[VSTART] && tp->t_cc[VSTART] != _POSIX_VDISABLE) { + if (c == tp->t_cc[VSTART] && tp->t_cc[VSTART] != 0) { tp->t_state &= ~TS_TTSTOP; if (tp->t_oproc != NULL) (*tp->t_oproc)(tp);