updated compression and demand-dial stuff
[ppp.git] / include / net / ppp_str.h
1 /*
2   ppp_str.h - streams version include file
3
4   Copyright (C) 1990 Brad K. Clements, All Rights Reserved,
5   See copyright statement in NOTES
6 */
7
8 #include        <sys/ioccom.h>
9
10 #define PPP_HDRLEN      4       /* octets for standard ppp header */
11 #define PPP_FCSLEN      2       /* octets for FCS */
12
13 #define PPP_ADDRESS(cp)         ((cp)[0])
14 #define PPP_CONTROL(cp)         ((cp)[1])
15 #define PPP_PROTOCOL(cp)        (((cp)[2] << 8) + (cp)[3])
16
17 #define PPP_ALLSTATIONS 0xff    /* All-Stations broadcast address */
18 #define PPP_UI          0x03    /* Unnumbered Information */
19 #define PPP_FLAG        0x7e    /* Flag Sequence */
20 #define PPP_ESCAPE      0x7d    /* Asynchronous Control Escape */
21 #define PPP_TRANS       0x20    /* Asynchronous transparency modifier */
22
23 /*
24  * Protocol field values.
25  */
26 #define PPP_IP          0x21    /* Internet Protocol */
27 #define PPP_XNS         0x25    /* Xerox NS */
28 #define PPP_VJC_COMP    0x2d    /* VJ compressed TCP */
29 #define PPP_VJC_UNCOMP  0x2f    /* VJ uncompressed TCP */
30 #define PPP_COMP        0xfd    /* compressed packet */
31 #define PPP_LCP         0xc021  /* Link Control Protocol */
32 #define PPP_CCP         0x80fd  /* Compression Control Protocol */
33
34 /*
35  * Important FCS values.
36  */
37 #define PPP_INITFCS     0xffff  /* Initial FCS value */
38 #define PPP_GOODFCS     0xf0b8  /* Good final FCS value */
39 #define PPP_FCS(fcs, c) (((fcs) >> 8) ^ fcstab[((fcs) ^ (c)) & 0xff])
40
41 /*
42  * Packet sizes
43  */
44 #define PPP_MTU         1500    /* Default MTU (size of Info field) */
45 #define PPP_MRU         1500    /* Default MRU (max receive unit) */
46 #define PPP_MAXMRU      65000   /* Largest MRU we allow */
47 #define PPP_HDRLEN      4       /* sizeof(struct ppp_header) must be 4 */
48
49 /* Extended asyncmap - allows any character to be escaped. */
50 typedef u_long  ext_accm[8];
51
52 /*
53  * Statistics.
54  */
55 struct pppstat  {
56     u_int       ppp_ibytes;     /* bytes received */
57     u_int       ppp_ipackets;   /* packets received */
58     u_int       ppp_ierrors;    /* receive errors */
59     u_int       ppp_obytes;     /* bytes sent */
60     u_int       ppp_opackets;   /* packets sent */
61     u_int       ppp_oerrors;    /* transmit errors */
62 };
63
64 struct vjstat {
65     u_int       sls_packets;    /* outbound packets */
66     u_int       sls_compressed; /* outbound compressed packets */
67     u_int       sls_searches;   /* searches for connection state */
68     u_int       sls_misses;     /* times couldn't find conn. state */
69     u_int       sls_uncompressedin; /* inbound uncompressed packets */
70     u_int       sls_compressedin;   /* inbound compressed packets */
71     u_int       sls_errorin;    /* inbound unknown type packets */
72     u_int       sls_tossed;     /* inbound packets tossed because of error */
73 };
74
75 struct ppp_stats {
76     struct pppstat      p;
77     struct vjstat       vj;
78 };
79
80 /*
81  * What to do with network protocol (NP) packets.
82  */
83
84 enum NPmode {
85     NPMODE_PASS,                /* pass the packet through */
86     NPMODE_DROP,                /* silently drop the packet */
87     NPMODE_ERROR,               /* return an error */
88     NPMODE_QUEUE                /* save it up for later. */
89 };
90
91 struct npioctl {
92     int         protocol;       /* PPP procotol, e.g. PPP_IP */
93     enum NPmode mode;
94 };
95
96 /* Structure describing a CCP configuration option, for SIOCSCOMPRESS */
97 #define MAX_PPP_OPTION  32
98 struct ppp_option_data {
99         u_int   length;
100         int     transmit;
101         u_char  opt_data[MAX_PPP_OPTION];
102 };
103
104 /*
105  * Ioctl definitions.
106  */
107
108 #ifdef  __STDC__
109 #define SIOCSIFCOMPAC   _IOW('p', 130, char)
110 #define SIOCSIFCOMPPROT _IOW('p', 131, char)
111 #define SIOCSIFMRU      _IOW('p', 132, int)     /* set max receive unit */
112 #define SIOCGIFMRU      _IOR('p', 133, int)     /* get max receive unit */
113 #define SIOCGIFASYNCMAP _IOR('p', 134, long)    /* get transmit async map */
114 #define SIOCSIFASYNCMAP _IOW('p', 135, long)    /* set transmit async map */
115 #define SIOCGETU        _IOR('p', 136, int)     /* get unit number */
116 #define SIOCSIFVJCOMP   _IOW('p', 137, char)    /* enable/disable VJ comp */
117 #define SIOCGIFDEBUG    _IOR('p', 138, int)     /* get debug flags */
118 #define SIOCSIFDEBUG    _IOW('p', 139, int)     /* set debug flags */
119 #define SIOCGIFRASYNCMAP _IOR('p', 140, long)   /* get receive async map */
120 #define SIOCSIFRASYNCMAP _IOW('p', 141, long)   /* set receive async map */
121 #define SIOCGIFXASYNCMAP _IOR('p', 142, ext_accm)  /* get extended xmit map */
122 #define SIOCSIFXASYNCMAP _IOW('p', 143, ext_accm)  /* set extended xmit map */
123 #define SIOCSETU        _IOW('p', 144, int)     /* set unit number */
124 #define SIOCSETNPMODE   _IOW('p', 145, struct npioctl)  /* set NP mode */
125 #define SIOCGETNPMODE   _IOWR('p', 146, struct npioctl) /* get NP mode */
126 #define SIOCGETSTATS    _IOR('p', 147, struct ppp_stats)
127 #define SIOCSIFCOMP     _IOW('p', 148, int)     /* set CCP closed/open/up */
128 #define SIOCSCOMPRESS   _IOW('p', 149, struct ppp_option_data)
129
130 #else
131 /* traditional C compiler */
132 #define SIOCSIFCOMPAC   _IOW(p, 130, char)
133 #define SIOCSIFCOMPPROT _IOW(p, 131, char)
134 #define SIOCSIFMRU      _IOW(p, 132, int)       /* set max receive unit */
135 #define SIOCGIFMRU      _IOR(p, 133, int)       /* get max receive unit */
136 #define SIOCGIFASYNCMAP _IOR(p, 134, long)      /* get transmit async map */
137 #define SIOCSIFASYNCMAP _IOW(p, 135, long)      /* set transmit async map */
138 #define SIOCGETU        _IOR(p, 136, int)       /* get unit number */
139 #define SIOCSIFVJCOMP   _IOW(p, 137, char)      /* enable/disable VJ comp */
140 #define SIOCGIFDEBUG    _IOR(p, 138, int)       /* get debug flags */
141 #define SIOCSIFDEBUG    _IOW(p, 139, int)       /* set debug flags */
142 #define SIOCGIFRASYNCMAP _IOR(p, 140, long)     /* get receive async map */
143 #define SIOCSIFRASYNCMAP _IOW(p, 141, long)     /* set receive async map */
144 #define SIOCGIFXASYNCMAP _IOR(p, 142, ext_accm) /* get extended xmit map */
145 #define SIOCSIFXASYNCMAP _IOW(p, 143, ext_accm) /* set extended xmit map */
146 #define SIOCSETU        _IOW(p, 136, int)       /* set unit number */
147 #define SIOCNPENABLE    _IOW(p, 145, int)       /* enable a network protocol */
148 #define SIOCNPDISABLE   _IOW(p, 146, int)       /* disable a network proto. */
149 #define SIOCSETNPMODE   _IOW(p, 147, enum NPmode)       /* set NP mode */
150 #define SIOCGETNPMODE   _IOR(p, 148, enum NPmode)       /* get NP mode */
151 #define SIOCGETSTATS    _IOR(p, 149, struct ppp_stats)
152 #define SIOCSIFCOMP     _IOW(p, 148, int)       /* set CCP closed/open/up */
153 #define SIOCSCOMPRESS   _IOW(p, 149, struct ppp_option_data)
154 #endif
155
156 /*
157  * Note on SIOCSIFVJCOMP: the parameter is now encoded as follows.
158  * Bit 0 = overall VJ enable, bit 1 = don't compress connection ID,
159  * bit 2 = receiver rejects VJ compression,
160  * bits 4--7 = maximum slot ID (0 => use default (15)).
161  */
162
163 /* Bits for SIOCGIFDEBUG */
164 #define PAI_FLAGS_B7_0          0x100
165 #define PAI_FLAGS_B7_1          0x200
166 #define PAI_FLAGS_PAR_EVEN      0x400
167 #define PAI_FLAGS_PAR_ODD       0x800
168 #define PAI_FLAGS_HIBITS        0xF00
169
170 /* defines for streams modules */
171 #define       IF_INPUT_ERROR  0xe1
172 #define       IF_OUTPUT_ERROR 0xe2
173
174 #define       ALLOCBSIZE      64              /* how big of a buffer block to
175 allocate for each chunk of the input chain */
176
177 #ifndef __P
178 #ifdef __STDC__
179 #define __P(x)  x
180 #else
181 #define __P(x)  ()
182 #endif
183 #endif