1 /*	$OpenBSD: if_slvar.h,v 1.12 2003/12/07 15:41:27 markus Exp $	*/
2 /*	$NetBSD: if_slvar.h,v 1.16 1996/05/07 02:40:46 thorpej Exp $	*/
3 
4 /*-
5  * Copyright (c) 1991, 1993
6  *	The Regents of the University of California.  All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 3. Neither the name of the University nor the names of its contributors
17  *    may be used to endorse or promote products derived from this software
18  *    without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30  * SUCH DAMAGE.
31  *
32  *	@(#)if_slvar.h	8.3 (Berkeley) 2/1/94
33  */
34 
35 #ifndef _NET_IF_SLVAR_H_
36 #define _NET_IF_SLVAR_H_
37 
38 /*
39  * Definitions for SLIP interface data structures
40  *
41  * (This exists so programs like slstats can get at the definition
42  *  of sl_softc.)
43  */
44 struct sl_softc {
45 	struct	ifnet sc_if;		/* network-visible interface */
46 	int	sc_unit;		/* XXX unit number */
47 	struct	ifqueue sc_fastq;	/* interactive output queue */
48 	struct	tty *sc_ttyp;		/* pointer to tty structure */
49 	u_char	*sc_mp;			/* pointer to next available buf char */
50 	u_char	*sc_ep;			/* pointer to last available buf char */
51 	u_char	*sc_pktstart;		/* pointer to beginning of packet */
52 	struct mbuf *sc_mbuf;		/* input buffer */
53 	u_int	sc_flags;		/* see below */
54 	u_int	sc_escape;	/* =1 if last char input was FRAME_ESCAPE */
55 	long	sc_lasttime;		/* last time a char arrived */
56 	long	sc_abortcount;		/* number of abort esacpe chars */
57 	long	sc_starttime;		/* time of first abort in window */
58 	long	sc_oqlen;		/* previous output queue size */
59 	long	sc_otimeout;		/* number of times output's stalled */
60 #if defined(__NetBSD__) || defined(__OpenBSD__)
61 	int	sc_oldbufsize;		/* previous output buffer size */
62 	int	sc_oldbufquot;		/* previous output buffer quoting */
63 #endif
64 #ifdef INET				/* XXX */
65 	struct	slcompress sc_comp;	/* tcp compression data */
66 #endif
67 	caddr_t	sc_bpf;			/* BPF data */
68 	struct timeval sc_lastpacket;	/* for watchdog */
69 	LIST_ENTRY(sl_softc) sc_list;	/* all slip interfaces */
70 };
71 
72 /*
73  * Statistics.
74  */
75 struct slstat	{
76 	u_int	sl_ibytes;	/* bytes received */
77 	u_int	sl_ipackets;	/* packets received */
78 	u_int	sl_obytes;	/* bytes sent */
79 	u_int	sl_opackets;	/* packets sent */
80 };
81 
82 struct vjstat {
83 	u_int	vjs_packets;	/* outbound packets */
84 	u_int	vjs_compressed;	/* outbound compressed packets */
85 	u_int	vjs_searches;	/* searches for connection state */
86 	u_int	vjs_misses;	/* times couldn't find conn. state */
87 	u_int	vjs_uncompressedin; /* inbound uncompressed packets */
88 	u_int	vjs_compressedin;   /* inbound compressed packets */
89 	u_int	vjs_errorin;	/* inbound unknown type packets */
90 	u_int	vjs_tossed;	/* inbound packets tossed because of error */
91 };
92 
93 struct sl_stats {
94 	struct slstat	sl;	/* basic PPP statistics */
95 	struct vjstat	vj;	/* VJ header compression statistics */
96 };
97 
98 struct ifslstatsreq {
99 	char ifr_name[IFNAMSIZ];
100 	struct sl_stats stats;
101 };
102 
103 /* internal flags */
104 #define	SC_ERROR	0x0001		/* had an input error */
105 
106 /* visible flags */
107 #define	SC_COMPRESS	IFF_LINK0	/* compress TCP traffic */
108 #define	SC_NOICMP	IFF_LINK1	/* supress ICMP traffic */
109 #define	SC_AUTOCOMP	IFF_LINK2	/* auto-enable TCP compression */
110 
111 /*
112  * These two are interface ioctls so that pppstats can do them on
113  * a socket without having to open the serial device.
114  */
115 #define SIOCGSLSTATS	_IOWR('i', 123, struct ifslstatsreq)
116 
117 #ifdef _KERNEL
118 void	slattach(int);
119 void	slclose(struct tty *);
120 void	slinput(int, struct tty *);
121 int	slioctl(struct ifnet *, u_long, caddr_t);
122 int	slopen(dev_t, struct tty *);
123 int	sloutput(struct ifnet *,
124 	    struct mbuf *, struct sockaddr *, struct rtentry *);
125 void	slstart(struct tty *);
126 int	sltioctl(struct tty *, u_long, caddr_t, int);
127 #endif /* _KERNEL */
128 #endif /* _NET_IF_SLVAR_H_ */
129