1*7c478bd9Sstevel@tonic-gate /* 2*7c478bd9Sstevel@tonic-gate * spppasyn.h - Solaris STREAMS PPP asynchronous HDLC module definitions 3*7c478bd9Sstevel@tonic-gate * 4*7c478bd9Sstevel@tonic-gate * Copyright 2000-2002 Sun Microsystems, Inc. All rights reserved. 5*7c478bd9Sstevel@tonic-gate * Use is subject to license terms. 6*7c478bd9Sstevel@tonic-gate * 7*7c478bd9Sstevel@tonic-gate * Permission to use, copy, modify, and distribute this software and its 8*7c478bd9Sstevel@tonic-gate * documentation is hereby granted, provided that the above copyright 9*7c478bd9Sstevel@tonic-gate * notice appears in all copies. 10*7c478bd9Sstevel@tonic-gate * 11*7c478bd9Sstevel@tonic-gate * SUN MAKES NO REPRESENTATION OR WARRANTIES ABOUT THE SUITABILITY OF 12*7c478bd9Sstevel@tonic-gate * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 13*7c478bd9Sstevel@tonic-gate * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 14*7c478bd9Sstevel@tonic-gate * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR 15*7c478bd9Sstevel@tonic-gate * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR 16*7c478bd9Sstevel@tonic-gate * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES 17*7c478bd9Sstevel@tonic-gate * 18*7c478bd9Sstevel@tonic-gate * Copyright (c) 1994 The Australian National University. 19*7c478bd9Sstevel@tonic-gate * All rights reserved. 20*7c478bd9Sstevel@tonic-gate * 21*7c478bd9Sstevel@tonic-gate * Permission to use, copy, modify, and distribute this software and its 22*7c478bd9Sstevel@tonic-gate * documentation is hereby granted, provided that the above copyright 23*7c478bd9Sstevel@tonic-gate * notice appears in all copies. This software is provided without any 24*7c478bd9Sstevel@tonic-gate * warranty, express or implied. The Australian National University 25*7c478bd9Sstevel@tonic-gate * makes no representations about the suitability of this software for 26*7c478bd9Sstevel@tonic-gate * any purpose. 27*7c478bd9Sstevel@tonic-gate * 28*7c478bd9Sstevel@tonic-gate * IN NO EVENT SHALL THE AUSTRALIAN NATIONAL UNIVERSITY BE LIABLE TO ANY 29*7c478bd9Sstevel@tonic-gate * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 30*7c478bd9Sstevel@tonic-gate * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF 31*7c478bd9Sstevel@tonic-gate * THE AUSTRALIAN NATIONAL UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY 32*7c478bd9Sstevel@tonic-gate * OF SUCH DAMAGE. 33*7c478bd9Sstevel@tonic-gate * 34*7c478bd9Sstevel@tonic-gate * THE AUSTRALIAN NATIONAL UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, 35*7c478bd9Sstevel@tonic-gate * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 36*7c478bd9Sstevel@tonic-gate * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 37*7c478bd9Sstevel@tonic-gate * ON AN "AS IS" BASIS, AND THE AUSTRALIAN NATIONAL UNIVERSITY HAS NO 38*7c478bd9Sstevel@tonic-gate * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, 39*7c478bd9Sstevel@tonic-gate * OR MODIFICATIONS. 40*7c478bd9Sstevel@tonic-gate * 41*7c478bd9Sstevel@tonic-gate * This driver is derived from the original SVR4 STREAMS PPP driver 42*7c478bd9Sstevel@tonic-gate * originally written by Paul Mackerras <paul.mackerras@cs.anu.edu.au>. 43*7c478bd9Sstevel@tonic-gate * 44*7c478bd9Sstevel@tonic-gate * Adi Masputra <adi.masputra@sun.com> rewrote and restructured the code 45*7c478bd9Sstevel@tonic-gate * for improved performance and scalability. 46*7c478bd9Sstevel@tonic-gate */ 47*7c478bd9Sstevel@tonic-gate 48*7c478bd9Sstevel@tonic-gate #ifndef __SPPPASYN_H 49*7c478bd9Sstevel@tonic-gate #define __SPPPASYN_H 50*7c478bd9Sstevel@tonic-gate 51*7c478bd9Sstevel@tonic-gate #ifdef __cplusplus 52*7c478bd9Sstevel@tonic-gate extern "C" { 53*7c478bd9Sstevel@tonic-gate #endif 54*7c478bd9Sstevel@tonic-gate 55*7c478bd9Sstevel@tonic-gate typedef struct spppasyn_kstats { 56*7c478bd9Sstevel@tonic-gate kstat_named_t pks_ioctls; /* total ioctl count */ 57*7c478bd9Sstevel@tonic-gate kstat_named_t pks_ioctlsfwd; /* forwarded down */ 58*7c478bd9Sstevel@tonic-gate kstat_named_t pks_ioctlserr; /* returned in error */ 59*7c478bd9Sstevel@tonic-gate kstat_named_t pks_ctls; /* total ctl count */ 60*7c478bd9Sstevel@tonic-gate kstat_named_t pks_ctlsfwd; /* forwarded down */ 61*7c478bd9Sstevel@tonic-gate kstat_named_t pks_ctlserr; /* discarded due to error */ 62*7c478bd9Sstevel@tonic-gate kstat_named_t pks_inbadchars; /* chars in recv accm */ 63*7c478bd9Sstevel@tonic-gate kstat_named_t pks_inbadcharmask; /* add to recv accm */ 64*7c478bd9Sstevel@tonic-gate kstat_named_t pks_inaborts; /* aborted (7D 7E) frames */ 65*7c478bd9Sstevel@tonic-gate kstat_named_t pks_inrunts; /* too short (<4) frames */ 66*7c478bd9Sstevel@tonic-gate kstat_named_t pks_inallocfails; /* out of STREAMS buffers */ 67*7c478bd9Sstevel@tonic-gate kstat_named_t pks_intoolongs; /* too long (>MRU) frames */ 68*7c478bd9Sstevel@tonic-gate kstat_named_t pks_outrunts; /* bugs in upper modules */ 69*7c478bd9Sstevel@tonic-gate kstat_named_t pks_outallocfails; /* out of STREAMS buffers */ 70*7c478bd9Sstevel@tonic-gate kstat_named_t pks_incrcerrs; /* bad input frames */ 71*7c478bd9Sstevel@tonic-gate kstat_named_t pks_unknownwrs; /* forwarded wput messages */ 72*7c478bd9Sstevel@tonic-gate kstat_named_t pks_unknownrds; /* forwarded rput messages */ 73*7c478bd9Sstevel@tonic-gate kstat_named_t pks_hangups; /* hang-up messages */ 74*7c478bd9Sstevel@tonic-gate kstat_named_t pks_datain; /* received from serial */ 75*7c478bd9Sstevel@tonic-gate kstat_named_t pks_dataout; /* sent to serial */ 76*7c478bd9Sstevel@tonic-gate kstat_named_t pks_extrabufs; /* extra buffers needed */ 77*7c478bd9Sstevel@tonic-gate kstat_named_t pks_sentmux; /* sent mux count */ 78*7c478bd9Sstevel@tonic-gate kstat_named_t pks_recvmux; /* received mux count */ 79*7c478bd9Sstevel@tonic-gate kstat_named_t pks_inmuxerrs; /* bad input mux frames */ 80*7c478bd9Sstevel@tonic-gate #ifdef REPORT_CRC_TYPE 81*7c478bd9Sstevel@tonic-gate kstat_named_t pks_incrctype; /* configured input CRC bits */ 82*7c478bd9Sstevel@tonic-gate kstat_named_t pks_outcrctype; /* configured output CRC */ 83*7c478bd9Sstevel@tonic-gate #endif 84*7c478bd9Sstevel@tonic-gate } spppasyn_kstats_t; 85*7c478bd9Sstevel@tonic-gate 86*7c478bd9Sstevel@tonic-gate /* 87*7c478bd9Sstevel@tonic-gate * Per-stream state structure 88*7c478bd9Sstevel@tonic-gate */ 89*7c478bd9Sstevel@tonic-gate typedef struct sppp_ahdlc { 90*7c478bd9Sstevel@tonic-gate uint32_t sa_flags; /* link flags */ 91*7c478bd9Sstevel@tonic-gate mblk_t *sa_rx_buf; /* ptr to receive buffer */ 92*7c478bd9Sstevel@tonic-gate ushort_t sa_infcs16; /* calculated rx HDLC FCS */ 93*7c478bd9Sstevel@tonic-gate ushort_t sa_proto; /* the last protocol in frame */ 94*7c478bd9Sstevel@tonic-gate uint32_t sa_infcs32; /* calculated rx HDLC FCS-32 */ 95*7c478bd9Sstevel@tonic-gate uint32_t sa_xaccm[8]; /* 256-bit xmit ACCM */ 96*7c478bd9Sstevel@tonic-gate uint32_t sa_raccm; /* 32-bit rcv ACCM */ 97*7c478bd9Sstevel@tonic-gate int sa_mru; /* link MRU */ 98*7c478bd9Sstevel@tonic-gate int sa_unit; /* current PPP unit number */ 99*7c478bd9Sstevel@tonic-gate struct pppstat64 sa_stats; /* statistic structure */ 100*7c478bd9Sstevel@tonic-gate hrtime_t sa_hrtime; /* last updated hrtime */ 101*7c478bd9Sstevel@tonic-gate mblk_t *sa_mqhead; /* pointer to the first message */ 102*7c478bd9Sstevel@tonic-gate mblk_t *sa_mqtail; /* pointer to the last message */ 103*7c478bd9Sstevel@tonic-gate size_t sa_mqlen; /* length of the frame so far */ 104*7c478bd9Sstevel@tonic-gate timeout_id_t sa_timeout_id; /* timeout id */ 105*7c478bd9Sstevel@tonic-gate uint32_t sa_timeout_usec; /* value of the mux timer */ 106*7c478bd9Sstevel@tonic-gate kstat_t *sa_ksp; /* kernel statistics structure */ 107*7c478bd9Sstevel@tonic-gate spppasyn_kstats_t sa_kstats; /* current statistics */ 108*7c478bd9Sstevel@tonic-gate } sppp_ahdlc_t; 109*7c478bd9Sstevel@tonic-gate 110*7c478bd9Sstevel@tonic-gate /* 111*7c478bd9Sstevel@tonic-gate * Values for flags. Note that bits 0-7 (0xFF) are used by RCV_* flags 112*7c478bd9Sstevel@tonic-gate * and [XR]_MUXMASK in pppio.h. 113*7c478bd9Sstevel@tonic-gate */ 114*7c478bd9Sstevel@tonic-gate #define SAF_ESCAPED 0x00000100 /* last saw escape char on input */ 115*7c478bd9Sstevel@tonic-gate #define SAF_IFLUSH 0x00000200 /* discarding due to hangup or error */ 116*7c478bd9Sstevel@tonic-gate #define SAF_XMITCRC32 0x00000400 /* transmit 32 bit CRC */ 117*7c478bd9Sstevel@tonic-gate #define SAF_XMITCRCNONE 0x00000800 /* transmit no CRC */ 118*7c478bd9Sstevel@tonic-gate #define SAF_RECVCRC32 0x00001000 /* receive 32 bit CRC */ 119*7c478bd9Sstevel@tonic-gate #define SAF_RECVCRCNONE 0x00002000 /* receive no CRC */ 120*7c478bd9Sstevel@tonic-gate #define SAF_XMITDUMP 0x00004000 /* dump raw transmitted data */ 121*7c478bd9Sstevel@tonic-gate #define SAF_RECVDUMP 0x00008000 /* dump raw received data */ 122*7c478bd9Sstevel@tonic-gate #define SAF_LASTMOD 0x00010000 /* last PPP-aware module in stream */ 123*7c478bd9Sstevel@tonic-gate #define SAF_XCOMP_AC 0x00100000 /* compress address/control */ 124*7c478bd9Sstevel@tonic-gate #define SAF_RDECOMP_AC 0x00200000 /* decompress address/control */ 125*7c478bd9Sstevel@tonic-gate #define SAF_XCOMP_PROT 0x00400000 /* compress PPP protocol */ 126*7c478bd9Sstevel@tonic-gate #define SAF_RDECOMP_PROT 0x00800000 /* decompress PPP protocol */ 127*7c478bd9Sstevel@tonic-gate 128*7c478bd9Sstevel@tonic-gate #ifdef __cplusplus 129*7c478bd9Sstevel@tonic-gate } 130*7c478bd9Sstevel@tonic-gate #endif 131*7c478bd9Sstevel@tonic-gate 132*7c478bd9Sstevel@tonic-gate #endif /* __SPPPASYN_H */ 133