1/*- 2 * Copyright (c) 1996 - 2001 Brian Somers <brian@Awfulhak.org> 3 * based on work by Toshiharu OHNO <tony-o@iij.ad.jp> 4 * Internet Initiative Japan, Inc (IIJ) 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 *
| 1/*- 2 * Copyright (c) 1996 - 2001 Brian Somers <brian@Awfulhak.org> 3 * based on work by Toshiharu OHNO <tony-o@iij.ad.jp> 4 * Internet Initiative Japan, Inc (IIJ) 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 *
|
28 * $FreeBSD: head/usr.sbin/ppp/ccp.h 78189 2001-06-13 21:52:19Z brian $
| 28 * $FreeBSD: head/usr.sbin/ppp/ccp.h 78411 2001-06-18 15:00:22Z brian $
|
29 */ 30 31#define CCP_MAXCODE CODE_RESETACK 32 33#define TY_OUI 0 /* OUI */ 34#define TY_PRED1 1 /* Predictor type 1 */ 35#define TY_PRED2 2 /* Predictor type 2 */ 36#define TY_PUDDLE 3 /* Puddle Jumper */ 37#define TY_HWPPC 16 /* Hewlett-Packard PPC */ 38#define TY_STAC 17 /* Stac Electronics LZS */ 39#define TY_MSPPC 18 /* Microsoft PPC */ 40#define TY_MPPE 18 /* Microsoft PPE */ 41#define TY_GAND 19 /* Gandalf FZA */ 42#define TY_V42BIS 20 /* V.42bis compression */ 43#define TY_BSD 21 /* BSD LZW Compress */ 44#define TY_PPPD_DEFLATE 24 /* Deflate (gzip) - (mis) numbered by pppd */ 45#define TY_DEFLATE 26 /* Deflate (gzip) - rfc 1979 */ 46 47#define CCP_NEG_DEFLATE 0 48#define CCP_NEG_PRED1 1 49#define CCP_NEG_DEFLATE24 2 50#ifdef HAVE_DES 51#define CCP_NEG_MPPE 3 52#define CCP_NEG_TOTAL 4 53#else 54#define CCP_NEG_TOTAL 3 55#endif 56
| 29 */ 30 31#define CCP_MAXCODE CODE_RESETACK 32 33#define TY_OUI 0 /* OUI */ 34#define TY_PRED1 1 /* Predictor type 1 */ 35#define TY_PRED2 2 /* Predictor type 2 */ 36#define TY_PUDDLE 3 /* Puddle Jumper */ 37#define TY_HWPPC 16 /* Hewlett-Packard PPC */ 38#define TY_STAC 17 /* Stac Electronics LZS */ 39#define TY_MSPPC 18 /* Microsoft PPC */ 40#define TY_MPPE 18 /* Microsoft PPE */ 41#define TY_GAND 19 /* Gandalf FZA */ 42#define TY_V42BIS 20 /* V.42bis compression */ 43#define TY_BSD 21 /* BSD LZW Compress */ 44#define TY_PPPD_DEFLATE 24 /* Deflate (gzip) - (mis) numbered by pppd */ 45#define TY_DEFLATE 26 /* Deflate (gzip) - rfc 1979 */ 46 47#define CCP_NEG_DEFLATE 0 48#define CCP_NEG_PRED1 1 49#define CCP_NEG_DEFLATE24 2 50#ifdef HAVE_DES 51#define CCP_NEG_MPPE 3 52#define CCP_NEG_TOTAL 4 53#else 54#define CCP_NEG_TOTAL 3 55#endif 56
|
| 57#ifdef HAVE_DES 58enum mppe_negstate { 59 MPPE_ANYSTATE, 60 MPPE_STATELESS, 61 MPPE_STATEFUL 62}; 63#endif 64
|
57struct mbuf; 58struct link; 59 60struct ccp_config { 61 struct { 62 struct { 63 int winsize; 64 } in, out; 65 } deflate; 66#ifdef HAVE_DES 67 struct { 68 int keybits;
| 65struct mbuf; 66struct link; 67 68struct ccp_config { 69 struct { 70 struct { 71 int winsize; 72 } in, out; 73 } deflate; 74#ifdef HAVE_DES 75 struct { 76 int keybits;
|
| 77 enum mppe_negstate state; 78 unsigned required : 1;
|
69 } mppe; 70#endif 71 struct fsm_retry fsm; /* How often/frequently to resend requests */ 72 unsigned neg[CCP_NEG_TOTAL]; 73}; 74 75struct ccp_opt { 76 struct ccp_opt *next; 77 int algorithm; 78 struct lcp_opt val; 79}; 80 81struct ccp { 82 struct fsm fsm; /* The finite state machine */ 83 84 int his_proto; /* peer's compression protocol */ 85 int my_proto; /* our compression protocol */ 86 87 int reset_sent; /* If != -1, ignore compressed 'till ack */ 88 int last_reset; /* We can receive more (dups) w/ this id */ 89 90 struct { 91 int algorithm; /* Algorithm in use */ 92 void *state; /* Returned by implementations Init() */ 93 struct lcp_opt opt; /* Set by implementation's OptInit() */ 94 } in; 95 96 struct { 97 int algorithm; /* Algorithm in use */ 98 void *state; /* Returned by implementations Init() */ 99 struct ccp_opt *opt; /* Set by implementation's OptInit() */ 100 } out; 101 102 u_int32_t his_reject; /* Request codes rejected by peer */ 103 u_int32_t my_reject; /* Request codes I have rejected */ 104 105 u_long uncompout, compout; /* Outgoing bytes before/after compression */ 106 u_long uncompin, compin; /* Incoming bytes after/before decompression */ 107 108 struct ccp_config cfg; 109}; 110 111#define fsm2ccp(fp) (fp->proto == PROTO_CCP ? (struct ccp *)fp : NULL) 112 113struct ccp_algorithm { 114 int id; 115 int Neg; /* ccp_config neg array item */ 116 const char *(*Disp)(struct lcp_opt *); /* Use result immediately ! */ 117 int (*Usable)(struct fsm *); /* Ok to negotiate ? */
| 79 } mppe; 80#endif 81 struct fsm_retry fsm; /* How often/frequently to resend requests */ 82 unsigned neg[CCP_NEG_TOTAL]; 83}; 84 85struct ccp_opt { 86 struct ccp_opt *next; 87 int algorithm; 88 struct lcp_opt val; 89}; 90 91struct ccp { 92 struct fsm fsm; /* The finite state machine */ 93 94 int his_proto; /* peer's compression protocol */ 95 int my_proto; /* our compression protocol */ 96 97 int reset_sent; /* If != -1, ignore compressed 'till ack */ 98 int last_reset; /* We can receive more (dups) w/ this id */ 99 100 struct { 101 int algorithm; /* Algorithm in use */ 102 void *state; /* Returned by implementations Init() */ 103 struct lcp_opt opt; /* Set by implementation's OptInit() */ 104 } in; 105 106 struct { 107 int algorithm; /* Algorithm in use */ 108 void *state; /* Returned by implementations Init() */ 109 struct ccp_opt *opt; /* Set by implementation's OptInit() */ 110 } out; 111 112 u_int32_t his_reject; /* Request codes rejected by peer */ 113 u_int32_t my_reject; /* Request codes I have rejected */ 114 115 u_long uncompout, compout; /* Outgoing bytes before/after compression */ 116 u_long uncompin, compin; /* Incoming bytes after/before decompression */ 117 118 struct ccp_config cfg; 119}; 120 121#define fsm2ccp(fp) (fp->proto == PROTO_CCP ? (struct ccp *)fp : NULL) 122 123struct ccp_algorithm { 124 int id; 125 int Neg; /* ccp_config neg array item */ 126 const char *(*Disp)(struct lcp_opt *); /* Use result immediately ! */ 127 int (*Usable)(struct fsm *); /* Ok to negotiate ? */
|
| 128 int (*Required)(struct fsm *); /* Must negotiate ? */
|
118 struct { 119 int (*Set)(struct lcp_opt *, const struct ccp_config *); 120 void *(*Init)(struct lcp_opt *); 121 void (*Term)(void *); 122 void (*Reset)(void *); 123 struct mbuf *(*Read)(void *, struct ccp *, u_short *, struct mbuf *); 124 void (*DictSetup)(void *, struct ccp *, u_short, struct mbuf *); 125 } i; 126 struct { 127 void (*OptInit)(struct lcp_opt *, const struct ccp_config *);
| 129 struct { 130 int (*Set)(struct lcp_opt *, const struct ccp_config *); 131 void *(*Init)(struct lcp_opt *); 132 void (*Term)(void *); 133 void (*Reset)(void *); 134 struct mbuf *(*Read)(void *, struct ccp *, u_short *, struct mbuf *); 135 void (*DictSetup)(void *, struct ccp *, u_short, struct mbuf *); 136 } i; 137 struct { 138 void (*OptInit)(struct lcp_opt *, const struct ccp_config *);
|
128 int (*Set)(struct lcp_opt *);
| 139 int (*Set)(struct lcp_opt *, const struct ccp_config *);
|
129 void *(*Init)(struct lcp_opt *); 130 void (*Term)(void *);
| 140 void *(*Init)(struct lcp_opt *); 141 void (*Term)(void *);
|
131 void (*Reset)(void *);
| 142 int (*Reset)(void *);
|
132 struct mbuf *(*Write)(void *, struct ccp *, struct link *, int, u_short *, 133 struct mbuf *); 134 } o; 135}; 136 137extern void ccp_Init(struct ccp *, struct bundle *, struct link *, 138 const struct fsm_parent *); 139extern void ccp_Setup(struct ccp *);
| 143 struct mbuf *(*Write)(void *, struct ccp *, struct link *, int, u_short *, 144 struct mbuf *); 145 } o; 146}; 147 148extern void ccp_Init(struct ccp *, struct bundle *, struct link *, 149 const struct fsm_parent *); 150extern void ccp_Setup(struct ccp *);
|
| 151extern int ccp_Required(struct ccp *);
|
140 141extern void ccp_SendResetReq(struct fsm *); 142extern struct mbuf *ccp_Input(struct bundle *, struct link *, struct mbuf *); 143extern int ccp_ReportStatus(struct cmdargs const *); 144extern u_short ccp_Proto(struct ccp *); 145extern void ccp_SetupCallbacks(struct ccp *); 146extern int ccp_SetOpenMode(struct ccp *);
| 152 153extern void ccp_SendResetReq(struct fsm *); 154extern struct mbuf *ccp_Input(struct bundle *, struct link *, struct mbuf *); 155extern int ccp_ReportStatus(struct cmdargs const *); 156extern u_short ccp_Proto(struct ccp *); 157extern void ccp_SetupCallbacks(struct ccp *); 158extern int ccp_SetOpenMode(struct ccp *);
|
147extern int ccp_IsUsable(struct fsm *);
| 159extern int ccp_DefaultUsable(struct fsm *); 160extern int ccp_DefaultRequired(struct fsm *);
|
148 149extern struct layer ccplayer;
| 161 162extern struct layer ccplayer;
|