/*
* ppp_comp.c - STREAMS module for kernel-level CCP support.
*
- * Copyright (c) 1994 The Australian National University.
- * All rights reserved.
+ * Copyright (c) 1994 Paul Mackerras. All rights reserved.
*
- * Permission to use, copy, modify, and distribute this software and its
- * documentation is hereby granted, provided that the above copyright
- * notice appears in all copies. This software is provided without any
- * warranty, express or implied. The Australian National University
- * makes no representations about the suitability of this software for
- * any purpose.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
*
- * IN NO EVENT SHALL THE AUSTRALIAN NATIONAL UNIVERSITY BE LIABLE TO ANY
- * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
- * THE AUSTRALIAN NATIONAL UNIVERSITY HAVE BEEN ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
*
- * THE AUSTRALIAN NATIONAL UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE AUSTRALIAN NATIONAL UNIVERSITY HAS NO
- * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
- * OR MODIFICATIONS.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
*
- * $Id: ppp_comp.c,v 1.1 1994/12/05 00:29:21 paulus Exp $
+ * 3. The name(s) of the authors of this software must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission.
+ *
+ * 4. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by Paul Mackerras
+ * <paulus@samba.org>".
+ *
+ * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO
+ * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $Id: ppp_comp.c,v 1.7 2002/12/06 09:49:15 paulus Exp $
*/
#include <net/net_globals.h>
extern struct compressor ppp_bsd_compress;
struct compressor *ppp_compressors[] = {
+#if DO_BSD_COMPRESS
&ppp_bsd_compress,
+#endif
NULL
};
int error, len, proto, state;
struct ppp_option_data *odp;
struct compressor **comp;
+ struct ppp_comp_stats *pcp;
cp = (struct ppp_comp_state *) q->q_ptr;
switch (mp->b_datap->db_type) {
+ case M_CTL:
+ switch (*(u_char *) mp->b_rptr) {
+ case IF_GET_CSTATS:
+ freemsg(mp);
+ mp = allocb(sizeof(struct ppp_comp_stats) + sizeof(u_long),
+ BPRI_HI);
+ if (mp != NULL) {
+ mp->b_datap->db_type = M_CTL;
+ *(u_char *) mp->b_wptr = IF_CSTATS;
+ mp->b_wptr += sizeof(u_long); /* should be enough alignment */
+ pcp = (struct ppp_comp_stats *) mp->b_wptr;
+ mp->b_wptr += sizeof(struct ppp_comp_stats);
+ bzero(pcp, sizeof(struct ppp_comp_stats));
+ if (cp->xstate != NULL)
+ (*cp->xcomp->comp_stat)(cp->xstate, &pcp->c);
+ if (cp->rstate != NULL)
+ (*cp->rcomp->decomp_stat)(cp->rstate, &pcp->d);
+ qreply(q, mp);
+ }
+ break;
+ default:
+ putnext(q, mp);
+ }
+ break;
+
case M_DATA:
/* first find out what the protocol is */
if (mp->b_wptr - mp->b_rptr >= PPP_HDRLEN
if (cp->xstate != NULL
&& (*cp->xcomp->comp_init)
(cp->xstate, dp + CCP_HDRLEN, clen - CCP_HDRLEN,
- 0, /* XXX: should be unit */
+ 0, /* XXX: should be unit */ 0,
cp->debug))
cp->ccp_state |= CCP_COMP_RUN;
} else {
if (cp->rstate != NULL
&& (*cp->rcomp->decomp_init)
(cp->rstate, dp + CCP_HDRLEN, clen - CCP_HDRLEN,
- 0/* unit */, cp->mru, cp->debug))
+ 0/* unit */, 0, cp->mru, cp->debug))
cp->ccp_state = (cp->ccp_state & ~CCP_ERR)
| CCP_DECOMP_RUN;
}