X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=aix4%2Fppp_comp.c;h=2d0c440432c41c161303278c510cb238f0dfc291;hb=7bb5e2cdca9445e1c9ebf3a29efc80ef9d3cbed4;hp=181eebb610243a3c1bdecfe38e7eef42abc59b03;hpb=8b856ec46871a1386487cda562cafa627cf48c88;p=ppp.git diff --git a/aix4/ppp_comp.c b/aix4/ppp_comp.c index 181eebb..2d0c440 100644 --- a/aix4/ppp_comp.c +++ b/aix4/ppp_comp.c @@ -1,30 +1,38 @@ /* * 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.2 1994/12/05 00:55:24 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 + * ". + * + * 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 @@ -86,7 +94,9 @@ struct ppp_comp_state { extern struct compressor ppp_bsd_compress; struct compressor *ppp_compressors[] = { +#if DO_BSD_COMPRESS &ppp_bsd_compress, +#endif NULL }; @@ -168,10 +178,36 @@ ppp_comp_wput(q, mp) 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 @@ -403,7 +439,7 @@ ppp_comp_ccp(q, mp, rcvd) 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 {