master
  1/*	$NetBSD: if_ppp.h,v 1.27 2015/09/06 06:01:01 dholland Exp $	*/
  2/*	Id: if_ppp.h,v 1.16 1997/04/30 05:46:04 paulus Exp 	*/
  3
  4/*
  5 * if_ppp.h - Point-to-Point Protocol definitions.
  6 *
  7 * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved.
  8 *
  9 * Redistribution and use in source and binary forms, with or without
 10 * modification, are permitted provided that the following conditions
 11 * are met:
 12 *
 13 * 1. Redistributions of source code must retain the above copyright
 14 *    notice, this list of conditions and the following disclaimer.
 15 *
 16 * 2. Redistributions in binary form must reproduce the above copyright
 17 *    notice, this list of conditions and the following disclaimer in
 18 *    the documentation and/or other materials provided with the
 19 *    distribution.
 20 *
 21 * 3. The name "Carnegie Mellon University" must not be used to
 22 *    endorse or promote products derived from this software without
 23 *    prior written permission. For permission or any legal
 24 *    details, please contact
 25 *      Office of Technology Transfer
 26 *      Carnegie Mellon University
 27 *      5000 Forbes Avenue
 28 *      Pittsburgh, PA  15213-3890
 29 *      (412) 268-4387, fax: (412) 268-7395
 30 *      tech-transfer@andrew.cmu.edu
 31 *
 32 * 4. Redistributions of any form whatsoever must retain the following
 33 *    acknowledgment:
 34 *    "This product includes software developed by Computing Services
 35 *     at Carnegie Mellon University (http://www.cmu.edu/computing/)."
 36 *
 37 * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
 38 * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
 39 * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
 40 * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 41 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
 42 * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
 43 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 44 */
 45
 46#ifndef _NET_IF_PPP_H_
 47#define _NET_IF_PPP_H_
 48
 49#include <sys/ioccom.h>
 50
 51/*
 52 * Bit definitions for flags.
 53 */
 54#define SC_COMP_PROT	0x00000001	/* protocol compression (output) */
 55#define SC_COMP_AC	0x00000002	/* header compression (output) */
 56#define	SC_COMP_TCP	0x00000004	/* TCP (VJ) compression (output) */
 57#define SC_NO_TCP_CCID	0x00000008	/* disable VJ connection-id comp. */
 58#define SC_REJ_COMP_AC	0x00000010	/* reject adrs/ctrl comp. on input */
 59#define SC_REJ_COMP_TCP	0x00000020	/* reject TCP (VJ) comp. on input */
 60#define SC_CCP_OPEN	0x00000040	/* Look at CCP packets */
 61#define SC_CCP_UP	0x00000080	/* May send/recv compressed packets */
 62#define SC_DEBUG	0x00010000	/* enable debug messages */
 63#define SC_LOG_INPKT	0x00020000	/* log contents of good pkts recvd */
 64#define SC_LOG_OUTPKT	0x00040000	/* log contents of pkts sent */
 65#define SC_LOG_RAWIN	0x00080000	/* log all chars received */
 66#define SC_LOG_FLUSH	0x00100000	/* log all chars flushed */
 67#define SC_SYNC		0x00200000	/* synchronous HDLC */
 68#define SC_RCV_B7_0	0x01000000	/* have rcvd char with bit 7 = 0 */
 69#define SC_RCV_B7_1	0x02000000	/* have rcvd char with bit 7 = 1 */
 70#define SC_RCV_EVNP	0x04000000	/* have rcvd char with even parity */
 71#define SC_RCV_ODDP	0x08000000	/* have rcvd char with odd parity */
 72
 73#define	SC_MASK		0x0fff00ff	/* bits that user can change */
 74
 75/*
 76 * State bits in sc_flags, not changeable by user.
 77 */
 78#define SC_TIMEOUT	0x00000400	/* timeout is currently pending */
 79#define SC_VJ_RESET	0x00000800	/* need to reset VJ decomp */
 80#define SC_COMP_RUN	0x00001000	/* compressor has been inited */
 81#define SC_DECOMP_RUN	0x00002000	/* decompressor has been inited */
 82#define SC_DC_ERROR	0x00004000	/* non-fatal decomp error detected */
 83#define SC_DC_FERROR	0x00008000	/* fatal decomp error detected */
 84#define SC_TBUSY	0x10000000	/* xmitter doesn't need a packet yet */
 85#define SC_PKTLOST	0x20000000	/* have lost or dropped a packet */
 86#define	SC_FLUSH	0x40000000	/* flush input until next PPP_FLAG */
 87#define	SC_ESCAPED	0x80000000	/* saw a PPP_ESCAPE */
 88
 89/*
 90 * Ioctl definitions.
 91 */
 92
 93struct npioctl {
 94    int		protocol;	/* PPP procotol, e.g. PPP_IP */
 95    enum NPmode	mode;
 96};
 97
 98/* Structure describing a CCP configuration option, for PPPIOCSCOMPRESS */
 99struct ppp_option_data {
100	u_char	*ptr;
101	u_int	length;
102	int	transmit;
103};
104
105struct ifpppstatsreq {
106    char ifr_name[IFNAMSIZ];
107    struct ppp_stats stats;
108};
109
110struct ifpppcstatsreq {
111    char ifr_name[IFNAMSIZ];
112    struct ppp_comp_stats stats;
113};
114
115struct ppp_rawin {
116    u_char buf[63];
117    u_char count;
118};
119
120/*
121 * Ioctl definitions.
122 */
123
124#define	PPPIOCGRAWIN	_IOR('t', 91, struct ppp_rawin)	/* get raw input */
125#define	PPPIOCGFLAGS	_IOR('t', 90, int)	/* get configuration flags */
126#define	PPPIOCSFLAGS	_IOW('t', 89, int)	/* set configuration flags */
127#define	PPPIOCGASYNCMAP	_IOR('t', 88, int)	/* get async map */
128#define	PPPIOCSASYNCMAP	_IOW('t', 87, int)	/* set async map */
129#define	PPPIOCGUNIT	_IOR('t', 86, int)	/* get ppp unit number */
130#define	PPPIOCGRASYNCMAP _IOR('t', 85, int)	/* get receive async map */
131#define	PPPIOCSRASYNCMAP _IOW('t', 84, int)	/* set receive async map */
132#define	PPPIOCGMRU	_IOR('t', 83, int)	/* get max receive unit */
133#define	PPPIOCSMRU	_IOW('t', 82, int)	/* set max receive unit */
134#define	PPPIOCSMAXCID	_IOW('t', 81, int)	/* set VJ max slot ID */
135#define PPPIOCGXASYNCMAP _IOR('t', 80, ext_accm) /* get extended ACCM */
136#define PPPIOCSXASYNCMAP _IOW('t', 79, ext_accm) /* set extended ACCM */
137#define PPPIOCXFERUNIT	_IO('t', 78)		/* transfer PPP unit */
138#define PPPIOCSCOMPRESS	_IOW('t', 77, struct ppp_option_data)
139#define PPPIOCGNPMODE	_IOWR('t', 76, struct npioctl) /* get NP mode */
140#define PPPIOCSNPMODE	_IOW('t', 75, struct npioctl)  /* set NP mode */
141#define PPPIOCGIDLE	_IOR('t', 74, struct ppp_idle) /* get idle time */
142#ifdef PPP_FILTER
143/*
144 * XXX These are deprecated; they can no longer be used, because they
145 * XXX don't play well with multiple encaps.  The defs are here so that
146 * XXX we can return decent errors to old pppds, and so that new pppds
147 * XXX will work with old kernels.
148 */
149#define PPPIOCSPASS	_IOW('t', 71, struct bpf_program) /* set pass filter */
150#define PPPIOCSACTIVE	_IOW('t', 70, struct bpf_program) /* set active filt */
151
152/*
153 * Use these instead.
154 */
155#define	PPPIOCSIPASS	_IOW('t', 69, struct bpf_program) /* set in pass flt */
156#define	PPPIOCSOPASS	_IOW('t', 68, struct bpf_program) /* set out pass flt */
157#define	PPPIOCSIACTIVE	_IOW('t', 67, struct bpf_program) /* set in act flt */
158#define	PPPIOCSOACTIVE	_IOW('t', 66, struct bpf_program) /* set out act flt */
159#endif /* PPP_FILTER */
160
161/* PPPIOC[GS]MTU are alternatives to SIOC[GS]IFMTU, used under Ultrix */
162#define PPPIOCGMTU	_IOR('t', 73, int)	/* get interface MTU */
163#define PPPIOCSMTU	_IOW('t', 72, int)	/* set interface MTU */
164
165/*
166 * These two are interface ioctls so that pppstats can do them on
167 * a socket without having to open the serial device.
168 */
169#define SIOCGPPPSTATS	_IOWR('i', 123, struct ifpppstatsreq)
170#define SIOCGPPPCSTATS	_IOWR('i', 122, struct ifpppcstatsreq)
171
172#if !defined(ifr_mtu)
173#define ifr_mtu	ifr_ifru.ifru_metric
174#endif
175
176#if defined(_KERNEL) || defined(KERNEL)
177struct compressor;
178int	ppp_register_compressor(struct compressor *, size_t);
179int	ppp_unregister_compressor(struct compressor *, size_t);
180#endif
181#endif /* !_NET_IF_PPP_H_ */