X-Git-Url: https://git.ozlabs.org/?p=ppp.git;a=blobdiff_plain;f=freebsd-2.0%2Fif_ppp.c;h=f6f4e84ce99df7a365e0204d0b03d00ad7e723a5;hp=d467ca012e2f6d3c7304a8562ecb219c14876234;hb=9d8289548d8bcb3c5cdbd4cbb1242c9721c8d792;hpb=f21bd17076cc5ff4d7be91a33ea9a855ac5a9cd9 diff --git a/freebsd-2.0/if_ppp.c b/freebsd-2.0/if_ppp.c index d467ca0..f6f4e84 100644 --- a/freebsd-2.0/if_ppp.c +++ b/freebsd-2.0/if_ppp.c @@ -69,7 +69,7 @@ * Paul Mackerras (paulus@cs.anu.edu.au). */ -/* $Id: if_ppp.c,v 1.1 1994/12/15 22:28:09 paulus Exp $ */ +/* $Id: if_ppp.c,v 1.4 1995/07/11 06:37:41 paulus Exp $ */ /* from if_sl.c,v 1.11 84/10/04 12:54:47 rick Exp */ #include "ppp.h" @@ -113,6 +113,11 @@ #include #include +#ifndef NETISR_PPP +/* This definition should be moved to net/netisr.h */ +#define NETISR_PPP 26 /* PPP software interrupt */ +#endif + #ifdef PPP_COMPRESS #define PACKETPTR struct mbuf * #include @@ -163,7 +168,9 @@ static void pppdumpm __P((struct mbuf *m0)); extern struct compressor ppp_bsd_compress; struct compressor *ppp_compressors[8] = { +#if DO_BSD_COMPRESS &ppp_bsd_compress, +#endif NULL }; #endif /* PPP_COMPRESS */ @@ -877,7 +884,7 @@ ppp_outpkt(sc) #ifdef PPP_COMPRESS if (protocol != PPP_LCP && protocol != PPP_CCP && sc->sc_xc_state && (sc->sc_flags & SC_COMP_RUN)) { - struct mbuf *mcomp; + struct mbuf *mcomp = NULL; int slen, clen; slen = 0; @@ -981,7 +988,7 @@ ppp_ccp(sc, m, rcvd) if (sc->sc_xc_state != NULL && (*sc->sc_xcomp->comp_init) (sc->sc_xc_state, dp + CCP_HDRLEN, slen - CCP_HDRLEN, - sc->sc_if.if_unit, sc->sc_flags & SC_DEBUG)) { + sc->sc_if.if_unit, 0, sc->sc_flags & SC_DEBUG)) { s = splimp(); sc->sc_flags |= SC_COMP_RUN; splx(s); @@ -1073,7 +1080,7 @@ ppp_inproc(sc, m) struct ifqueue *inq; int s, ilen, xlen, proto, rv; u_char *cp, adrs, ctrl; - struct mbuf *mp, *dmp; + struct mbuf *mp, *dmp = NULL; u_char *iphdr; u_int hlen; @@ -1105,32 +1112,30 @@ ppp_inproc(sc, m) && !(sc->sc_flags & SC_DC_ERROR) && !(sc->sc_flags & SC_DC_FERROR)) { /* decompress this packet */ rv = (*sc->sc_rcomp->decompress)(sc->sc_rc_state, m, &dmp); - if (dmp != NULL) { + if (rv == DECOMP_OK) { m_freem(m); + if (dmp == NULL) { + /* no error, but no decompressed packet produced */ + return; + } m = dmp; cp = mtod(m, u_char *); proto = PPP_PROTOCOL(cp); } else { - /* pass the compressed packet up to pppd, which may take - CCP down or issue a Reset-Req. */ + /* + * An error has occurred in decompression. + * Pass the compressed packet up to pppd, which may take + * CCP down or issue a Reset-Req. + */ if (sc->sc_flags & SC_DEBUG) printf("ppp%d: decompress failed %d\n", sc->sc_if.if_unit, rv); s = splimp(); sc->sc_flags |= SC_VJ_RESET; - switch (rv) { - case DECOMP_OK: - /* no error, but no decompressed packet produced */ - splx(s); - m_freem(m); - return; - case DECOMP_ERROR: + if (rv == DECOMP_ERROR) sc->sc_flags |= SC_DC_ERROR; - break; - case DECOMP_FATALERROR: + else sc->sc_flags |= SC_DC_FERROR; - break; - } splx(s); }