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