17dd7cddfSDavid du Colombier typedef struct Tcpc Tcpc; 27dd7cddfSDavid du Colombier typedef struct Pstate Pstate; 37dd7cddfSDavid du Colombier typedef struct Chap Chap; 47dd7cddfSDavid du Colombier typedef struct Qualstats Qualstats; 57dd7cddfSDavid du Colombier typedef struct Comptype Comptype; 67dd7cddfSDavid du Colombier typedef struct Uncomptype Uncomptype; 77dd7cddfSDavid du Colombier typedef struct PPP PPP; 87dd7cddfSDavid du Colombier typedef struct Lcpmsg Lcpmsg; 97dd7cddfSDavid du Colombier typedef struct Lcpopt Lcpopt; 107dd7cddfSDavid du Colombier typedef struct Qualpkt Qualpkt; 117dd7cddfSDavid du Colombier typedef struct Block Block; 127dd7cddfSDavid du Colombier 137dd7cddfSDavid du Colombier typedef uchar Ipaddr[IPaddrlen]; 147dd7cddfSDavid du Colombier 15*12fd1c83SDavid du Colombier #pragma incomplete Tcpc 167dd7cddfSDavid du Colombier 177dd7cddfSDavid du Colombier /* 187dd7cddfSDavid du Colombier * data blocks 197dd7cddfSDavid du Colombier */ 207dd7cddfSDavid du Colombier struct Block 217dd7cddfSDavid du Colombier { 227dd7cddfSDavid du Colombier Block *next; 237dd7cddfSDavid du Colombier Block *flist; 247dd7cddfSDavid du Colombier Block *list; /* chain of block lists */ 257dd7cddfSDavid du Colombier uchar *rptr; /* first unconsumed uchar */ 267dd7cddfSDavid du Colombier uchar *wptr; /* first empty uchar */ 277dd7cddfSDavid du Colombier uchar *lim; /* 1 past the end of the buffer */ 287dd7cddfSDavid du Colombier uchar *base; /* start of the buffer */ 297dd7cddfSDavid du Colombier uchar flags; 307dd7cddfSDavid du Colombier void *flow; 317dd7cddfSDavid du Colombier ulong pc; 327dd7cddfSDavid du Colombier ulong bsz; 337dd7cddfSDavid du Colombier }; 347dd7cddfSDavid du Colombier #define BLEN(b) ((b)->wptr-(b)->rptr) 357dd7cddfSDavid du Colombier 367dd7cddfSDavid du Colombier enum 377dd7cddfSDavid du Colombier { 387dd7cddfSDavid du Colombier /* block flags */ 397dd7cddfSDavid du Colombier S_DELIM = (1<<0), 407dd7cddfSDavid du Colombier S_HANGUP = (1<<1), 417dd7cddfSDavid du Colombier S_RHANGUP = (1<<2), 427dd7cddfSDavid du Colombier 437dd7cddfSDavid du Colombier /* queue states */ 447dd7cddfSDavid du Colombier QHUNGUP = (1<<0), 457dd7cddfSDavid du Colombier QFLOW = (1<<1), /* queue is flow controlled */ 467dd7cddfSDavid du Colombier }; 477dd7cddfSDavid du Colombier 487dd7cddfSDavid du Colombier Block* allocb(int); 497dd7cddfSDavid du Colombier void freeb(Block*); 507dd7cddfSDavid du Colombier Block* concat(Block*); 517dd7cddfSDavid du Colombier int blen(Block*); 527dd7cddfSDavid du Colombier Block* pullup(Block*, int); 537dd7cddfSDavid du Colombier Block* padb(Block*, int); 547dd7cddfSDavid du Colombier Block* btrim(Block*, int, int); 557dd7cddfSDavid du Colombier Block* copyb(Block*, int); 567dd7cddfSDavid du Colombier int pullb(Block**, int); 577dd7cddfSDavid du Colombier 587dd7cddfSDavid du Colombier enum { 597dd7cddfSDavid du Colombier HDLC_frame= 0x7e, 607dd7cddfSDavid du Colombier HDLC_esc= 0x7d, 617dd7cddfSDavid du Colombier 627dd7cddfSDavid du Colombier /* PPP frame fields */ 637dd7cddfSDavid du Colombier PPP_addr= 0xff, 647dd7cddfSDavid du Colombier PPP_ctl= 0x3, 657dd7cddfSDavid du Colombier PPP_initfcs= 0xffff, 667dd7cddfSDavid du Colombier PPP_goodfcs= 0xf0b8, 677dd7cddfSDavid du Colombier 687dd7cddfSDavid du Colombier /* PPP phases */ 697dd7cddfSDavid du Colombier Pdead= 0, 707dd7cddfSDavid du Colombier Plink, /* doing LCP */ 717dd7cddfSDavid du Colombier Pauth, /* doing chap */ 727dd7cddfSDavid du Colombier Pnet, /* doing IPCP, CCP */ 737dd7cddfSDavid du Colombier Pterm, /* closing down */ 747dd7cddfSDavid du Colombier 757dd7cddfSDavid du Colombier /* PPP protocol types */ 769a747e4fSDavid du Colombier Pip= 0x21, /* ip v4 */ 779a747e4fSDavid du Colombier Pipv6= 0x57, /* ip v6 */ 787dd7cddfSDavid du Colombier Pvjctcp= 0x2d, /* compressing van jacobson tcp */ 797dd7cddfSDavid du Colombier Pvjutcp= 0x2f, /* uncompressing van jacobson tcp */ 807dd7cddfSDavid du Colombier Pcdata= 0xfd, /* compressed datagram */ 817dd7cddfSDavid du Colombier Pipcp= 0x8021, /* ip control */ 827dd7cddfSDavid du Colombier Pecp= 0x8053, /* encryption control */ 837dd7cddfSDavid du Colombier Pccp= 0x80fd, /* compressed datagram control */ 847dd7cddfSDavid du Colombier Plcp= 0xc021, /* link control */ 857dd7cddfSDavid du Colombier Ppasswd= 0xc023, /* passwd authentication */ 867dd7cddfSDavid du Colombier Plqm= 0xc025, /* link quality monitoring */ 877dd7cddfSDavid du Colombier Pchap= 0xc223, /* challenge/response */ 887dd7cddfSDavid du Colombier 897dd7cddfSDavid du Colombier /* LCP codes */ 907dd7cddfSDavid du Colombier Lconfreq= 1, 917dd7cddfSDavid du Colombier Lconfack= 2, 927dd7cddfSDavid du Colombier Lconfnak= 3, 937dd7cddfSDavid du Colombier Lconfrej= 4, 947dd7cddfSDavid du Colombier Ltermreq= 5, 957dd7cddfSDavid du Colombier Ltermack= 6, 967dd7cddfSDavid du Colombier Lcoderej= 7, 977dd7cddfSDavid du Colombier Lprotorej= 8, 987dd7cddfSDavid du Colombier Lechoreq= 9, 997dd7cddfSDavid du Colombier Lechoack= 10, 1007dd7cddfSDavid du Colombier Ldiscard= 11, 1017dd7cddfSDavid du Colombier Lresetreq= 14, 1027dd7cddfSDavid du Colombier Lresetack= 15, 1037dd7cddfSDavid du Colombier 1047dd7cddfSDavid du Colombier /* Lcp configure options */ 1057dd7cddfSDavid du Colombier Omtu= 1, 1067dd7cddfSDavid du Colombier Octlmap= 2, 1077dd7cddfSDavid du Colombier Oauth= 3, 1087dd7cddfSDavid du Colombier Oquality= 4, 1097dd7cddfSDavid du Colombier Omagic= 5, 1107dd7cddfSDavid du Colombier Opc= 7, 1117dd7cddfSDavid du Colombier Oac= 8, 1127dd7cddfSDavid du Colombier 1137dd7cddfSDavid du Colombier /* authentication protocols */ 1147dd7cddfSDavid du Colombier APmd5= 5, 1157dd7cddfSDavid du Colombier APmschap= 128, 11680ee5cbfSDavid du Colombier APpasswd= Ppasswd, /* use Pap, not Chap */ 1177dd7cddfSDavid du Colombier 1187dd7cddfSDavid du Colombier /* lcp flags */ 1197dd7cddfSDavid du Colombier Fmtu= 1<<Omtu, 1207dd7cddfSDavid du Colombier Fctlmap= 1<<Octlmap, 1217dd7cddfSDavid du Colombier Fauth= 1<<Oauth, 1227dd7cddfSDavid du Colombier Fquality= 1<<Oquality, 1237dd7cddfSDavid du Colombier Fmagic= 1<<Omagic, 1247dd7cddfSDavid du Colombier Fpc= 1<<Opc, 1257dd7cddfSDavid du Colombier Fac= 1<<Oac, 1267dd7cddfSDavid du Colombier 1277dd7cddfSDavid du Colombier /* Chap codes */ 1287dd7cddfSDavid du Colombier Cchallenge= 1, 1297dd7cddfSDavid du Colombier Cresponse= 2, 1307dd7cddfSDavid du Colombier Csuccess= 3, 1317dd7cddfSDavid du Colombier Cfailure= 4, 1327dd7cddfSDavid du Colombier 13380ee5cbfSDavid du Colombier /* Pap codes */ 13480ee5cbfSDavid du Colombier Pauthreq= 1, 13580ee5cbfSDavid du Colombier Pauthack= 2, 13680ee5cbfSDavid du Colombier Pauthnak= 3, 13780ee5cbfSDavid du Colombier 1387dd7cddfSDavid du Colombier /* Chap state */ 1397dd7cddfSDavid du Colombier Cunauth= 0, 1407dd7cddfSDavid du Colombier Cchalsent, 1417dd7cddfSDavid du Colombier Cauthfail, 1427dd7cddfSDavid du Colombier Cauthok, 1437dd7cddfSDavid du Colombier 1447dd7cddfSDavid du Colombier /* link states */ 1457dd7cddfSDavid du Colombier Sclosed= 0, 1467dd7cddfSDavid du Colombier Sclosing, 1477dd7cddfSDavid du Colombier Sreqsent, 1487dd7cddfSDavid du Colombier Sackrcvd, 1497dd7cddfSDavid du Colombier Sacksent, 1507dd7cddfSDavid du Colombier Sopened, 1517dd7cddfSDavid du Colombier 1527dd7cddfSDavid du Colombier /* ccp configure options */ 1537dd7cddfSDavid du Colombier Ocoui= 0, /* proprietary compression */ 1547dd7cddfSDavid du Colombier Ocstac= 17, /* stac electronics LZS */ 1557dd7cddfSDavid du Colombier Ocmppc= 18, /* microsoft ppc */ 1567dd7cddfSDavid du Colombier Octhwack= 31, /* thwack; unofficial */ 1577dd7cddfSDavid du Colombier 1587dd7cddfSDavid du Colombier /* ccp flags */ 1597dd7cddfSDavid du Colombier Fcoui= 1<<Ocoui, 1607dd7cddfSDavid du Colombier Fcstac= 1<<Ocstac, 1617dd7cddfSDavid du Colombier Fcmppc= 1<<Ocmppc, 1627dd7cddfSDavid du Colombier Fcthwack= 1<<Octhwack, 1637dd7cddfSDavid du Colombier 1647dd7cddfSDavid du Colombier /* ecp configure options */ 1657dd7cddfSDavid du Colombier Oeoui= 0, /* proprietary compression */ 1667dd7cddfSDavid du Colombier Oedese= 1, /* DES */ 1677dd7cddfSDavid du Colombier 1687dd7cddfSDavid du Colombier /* ecp flags */ 1697dd7cddfSDavid du Colombier Feoui= 1<<Oeoui, 1707dd7cddfSDavid du Colombier Fedese= 1<<Oedese, 1717dd7cddfSDavid du Colombier 1727dd7cddfSDavid du Colombier /* ipcp configure options */ 1737dd7cddfSDavid du Colombier Oipaddrs= 1, 1747dd7cddfSDavid du Colombier Oipcompress= 2, 1757dd7cddfSDavid du Colombier Oipaddr= 3, 1767dd7cddfSDavid du Colombier Oipdns= 129, 1777dd7cddfSDavid du Colombier Oipwins= 130, 1787dd7cddfSDavid du Colombier Oipdns2= 131, 1797dd7cddfSDavid du Colombier Oipwins2= 132, 1807dd7cddfSDavid du Colombier 1817dd7cddfSDavid du Colombier /* ipcp flags */ 1827dd7cddfSDavid du Colombier Fipaddrs= 1<<Oipaddrs, 1837dd7cddfSDavid du Colombier Fipcompress= 1<<Oipcompress, 1847dd7cddfSDavid du Colombier Fipaddr= 1<<Oipaddr, 185bedadc12SDavid du Colombier Fipdns= 1<<8, // Oipdns, 186bedadc12SDavid du Colombier Fipwins= 1<<9, // Oipwins, 187bedadc12SDavid du Colombier Fipdns2= 1<<10, // Oipdns2, 188bedadc12SDavid du Colombier Fipwins2= 1<<11, // Oipwins2, 1897dd7cddfSDavid du Colombier 1906b6b9ac8SDavid du Colombier Period= 5*1000, /* period of retransmit process (in ms) */ 1916b6b9ac8SDavid du Colombier Timeout= 20, /* xmit timeout (in Periods) */ 1927dd7cddfSDavid du Colombier Buflen= 4096, 1937dd7cddfSDavid du Colombier 1947dd7cddfSDavid du Colombier MAX_STATES= 16, /* van jacobson compression states */ 1957dd7cddfSDavid du Colombier Defmtu= 1450, /* default that we will ask for */ 1967dd7cddfSDavid du Colombier Minmtu= 128, /* minimum that we will accept */ 1977dd7cddfSDavid du Colombier Maxmtu= 2000, /* maximum that we will accept */ 1987dd7cddfSDavid du Colombier }; 1997dd7cddfSDavid du Colombier 2007dd7cddfSDavid du Colombier 2017dd7cddfSDavid du Colombier struct Pstate 2027dd7cddfSDavid du Colombier { 2037dd7cddfSDavid du Colombier int proto; /* protocol type */ 2047dd7cddfSDavid du Colombier int timeout; /* for current state */ 2057dd7cddfSDavid du Colombier int rxtimeout; /* for current retransmit */ 2067dd7cddfSDavid du Colombier ulong flags; /* options received */ 2077dd7cddfSDavid du Colombier uchar id; /* id of current message */ 2087dd7cddfSDavid du Colombier uchar confid; /* id of current config message */ 2097dd7cddfSDavid du Colombier uchar termid; /* id of current termination message */ 2107dd7cddfSDavid du Colombier uchar rcvdconfid; /* id of last conf message received */ 2117dd7cddfSDavid du Colombier uchar state; /* PPP link state */ 2127dd7cddfSDavid du Colombier ulong optmask; /* which options to request */ 2137dd7cddfSDavid du Colombier int echoack; /* recieved echo ack */ 2147dd7cddfSDavid du Colombier int echotimeout; /* echo timeout */ 2157dd7cddfSDavid du Colombier }; 2167dd7cddfSDavid du Colombier 2177dd7cddfSDavid du Colombier /* server chap state */ 2187dd7cddfSDavid du Colombier struct Chap 2197dd7cddfSDavid du Colombier { 2207dd7cddfSDavid du Colombier int proto; /* chap proto */ 2217dd7cddfSDavid du Colombier int state; /* chap state */ 2227dd7cddfSDavid du Colombier uchar id; /* id of current message */ 2237dd7cddfSDavid du Colombier int timeout; /* for current state */ 2249a747e4fSDavid du Colombier Chalstate *cs; 2257dd7cddfSDavid du Colombier }; 2267dd7cddfSDavid du Colombier 2277dd7cddfSDavid du Colombier struct Qualstats 2287dd7cddfSDavid du Colombier { 2297dd7cddfSDavid du Colombier ulong reports; 2307dd7cddfSDavid du Colombier ulong packets; 2317dd7cddfSDavid du Colombier ulong uchars; 2327dd7cddfSDavid du Colombier ulong discards; 2337dd7cddfSDavid du Colombier ulong errors; 2347dd7cddfSDavid du Colombier }; 2357dd7cddfSDavid du Colombier 2367dd7cddfSDavid du Colombier struct Comptype 2377dd7cddfSDavid du Colombier { 2387dd7cddfSDavid du Colombier void* (*init)(PPP*); 2397dd7cddfSDavid du Colombier Block* (*compress)(PPP*, ushort, Block*, int*); 2407dd7cddfSDavid du Colombier Block* (*resetreq)(void*, Block*); 2417dd7cddfSDavid du Colombier void (*fini)(void*); 2427dd7cddfSDavid du Colombier }; 2437dd7cddfSDavid du Colombier 2447dd7cddfSDavid du Colombier struct Uncomptype 2457dd7cddfSDavid du Colombier { 2467dd7cddfSDavid du Colombier void* (*init)(PPP*); 2477dd7cddfSDavid du Colombier Block* (*uncompress)(PPP*, Block*, int*, Block**); 2487dd7cddfSDavid du Colombier void (*resetack)(void*, Block*); 2497dd7cddfSDavid du Colombier void (*fini)(void*); 2507dd7cddfSDavid du Colombier }; 2517dd7cddfSDavid du Colombier 2527dd7cddfSDavid du Colombier struct PPP 2537dd7cddfSDavid du Colombier { 2547dd7cddfSDavid du Colombier QLock; 2557dd7cddfSDavid du Colombier 2567dd7cddfSDavid du Colombier int ipfd; /* fd to ip stack */ 2577dd7cddfSDavid du Colombier int ipcfd; /* fd to control channel of ip stack */ 258d9306527SDavid du Colombier int mediain; /* fd to media */ 259d9306527SDavid du Colombier int mediaout; /* fd to media */ 2607dd7cddfSDavid du Colombier char *net; /* ip stack to use */ 2617dd7cddfSDavid du Colombier int framing; /* non-zero to use framing characters */ 2627dd7cddfSDavid du Colombier Ipaddr local; 2636b6b9ac8SDavid du Colombier Ipaddr curlocal; 2647dd7cddfSDavid du Colombier int localfrozen; 2657dd7cddfSDavid du Colombier Ipaddr remote; 2666b6b9ac8SDavid du Colombier Ipaddr curremote; 2677dd7cddfSDavid du Colombier int remotefrozen; 2687dd7cddfSDavid du Colombier 2697dd7cddfSDavid du Colombier Ipaddr dns[2]; /* dns servers */ 2707dd7cddfSDavid du Colombier Ipaddr wins[2]; /* wins servers */ 2717dd7cddfSDavid du Colombier 2727dd7cddfSDavid du Colombier Block* inbuf; /* input buffer */ 2737dd7cddfSDavid du Colombier Block* outbuf; /* output buffer */ 2747dd7cddfSDavid du Colombier QLock outlock; /* and its lock */ 2757dd7cddfSDavid du Colombier ulong magic; /* magic number to detect loop backs */ 2767dd7cddfSDavid du Colombier ulong rctlmap; /* map of chars to ignore in rcvr */ 2777dd7cddfSDavid du Colombier ulong xctlmap; /* map of chars to excape in xmit */ 2787dd7cddfSDavid du Colombier int phase; /* PPP phase */ 2797dd7cddfSDavid du Colombier Pstate* lcp; /* lcp state */ 2807dd7cddfSDavid du Colombier Pstate* ccp; /* ccp state */ 2817dd7cddfSDavid du Colombier Pstate* ipcp; /* ipcp state */ 2827dd7cddfSDavid du Colombier Chap* chap; /* chap state */ 2837dd7cddfSDavid du Colombier Tcpc* ctcp; /* tcp compression state */ 2847dd7cddfSDavid du Colombier ulong mtu; /* maximum xmit size */ 2857dd7cddfSDavid du Colombier ulong mru; /* maximum recv size */ 2867dd7cddfSDavid du Colombier 2877dd7cddfSDavid du Colombier /* data compression */ 2887dd7cddfSDavid du Colombier int ctries; /* number of negotiation tries */ 2897dd7cddfSDavid du Colombier Comptype *ctype; /* compression virtual table */ 2907dd7cddfSDavid du Colombier void *cstate; /* compression state */ 2917dd7cddfSDavid du Colombier Uncomptype *unctype; /* uncompression virtual table */ 2927dd7cddfSDavid du Colombier void *uncstate; /* uncompression state */ 2937dd7cddfSDavid du Colombier 2947dd7cddfSDavid du Colombier /* encryption key */ 2957dd7cddfSDavid du Colombier uchar key[16]; 2967dd7cddfSDavid du Colombier int sendencrypted; 2977dd7cddfSDavid du Colombier 2987dd7cddfSDavid du Colombier /* authentication */ 299d9306527SDavid du Colombier char secret[256]; /* md5 key */ 300d9306527SDavid du Colombier char chapname[256]; /* chap system name */ 3017dd7cddfSDavid du Colombier 3027dd7cddfSDavid du Colombier /* link quality monitoring */ 3037dd7cddfSDavid du Colombier int period; /* lqm period */ 3047dd7cddfSDavid du Colombier int timeout; /* time to next lqm packet */ 3057dd7cddfSDavid du Colombier Qualstats in; /* local */ 3067dd7cddfSDavid du Colombier Qualstats out; 3077dd7cddfSDavid du Colombier Qualstats pin; /* peer */ 3087dd7cddfSDavid du Colombier Qualstats pout; 3097dd7cddfSDavid du Colombier Qualstats sin; /* saved */ 3107dd7cddfSDavid du Colombier 3117dd7cddfSDavid du Colombier struct { 3127dd7cddfSDavid du Colombier ulong ipsend; 3137dd7cddfSDavid du Colombier ulong iprecv; 3147dd7cddfSDavid du Colombier ulong iprecvbadsrc; 3157dd7cddfSDavid du Colombier ulong iprecvnotup; 3167dd7cddfSDavid du Colombier ulong comp; 3177dd7cddfSDavid du Colombier ulong compin; 3187dd7cddfSDavid du Colombier ulong compout; 3197dd7cddfSDavid du Colombier ulong compreset; 3207dd7cddfSDavid du Colombier ulong uncomp; 3217dd7cddfSDavid du Colombier ulong uncompin; 3227dd7cddfSDavid du Colombier ulong uncompout; 3237dd7cddfSDavid du Colombier ulong uncompreset; 3247dd7cddfSDavid du Colombier ulong vjin; 3257dd7cddfSDavid du Colombier ulong vjout; 3267dd7cddfSDavid du Colombier ulong vjfail; 3277dd7cddfSDavid du Colombier } stat; 3287dd7cddfSDavid du Colombier }; 3297dd7cddfSDavid du Colombier 3307dd7cddfSDavid du Colombier extern Block* pppread(PPP*); 3317dd7cddfSDavid du Colombier extern int pppwrite(PPP*, Block*); 332bedadc12SDavid du Colombier extern void pppopen(PPP*, int, int, char*, Ipaddr, Ipaddr, int, int); 3337dd7cddfSDavid du Colombier 3347dd7cddfSDavid du Colombier struct Lcpmsg 3357dd7cddfSDavid du Colombier { 3367dd7cddfSDavid du Colombier uchar code; 3377dd7cddfSDavid du Colombier uchar id; 3387dd7cddfSDavid du Colombier uchar len[2]; 3397dd7cddfSDavid du Colombier uchar data[1]; 3407dd7cddfSDavid du Colombier }; 3417dd7cddfSDavid du Colombier 3427dd7cddfSDavid du Colombier struct Lcpopt 3437dd7cddfSDavid du Colombier { 3447dd7cddfSDavid du Colombier uchar type; 3457dd7cddfSDavid du Colombier uchar len; 3467dd7cddfSDavid du Colombier uchar data[1]; 3477dd7cddfSDavid du Colombier }; 3487dd7cddfSDavid du Colombier 3497dd7cddfSDavid du Colombier struct Qualpkt 3507dd7cddfSDavid du Colombier { 3517dd7cddfSDavid du Colombier uchar magic[4]; 3527dd7cddfSDavid du Colombier 3537dd7cddfSDavid du Colombier uchar lastoutreports[4]; 3547dd7cddfSDavid du Colombier uchar lastoutpackets[4]; 3557dd7cddfSDavid du Colombier uchar lastoutuchars[4]; 3567dd7cddfSDavid du Colombier uchar peerinreports[4]; 3577dd7cddfSDavid du Colombier uchar peerinpackets[4]; 3587dd7cddfSDavid du Colombier uchar peerindiscards[4]; 3597dd7cddfSDavid du Colombier uchar peerinerrors[4]; 3607dd7cddfSDavid du Colombier uchar peerinuchars[4]; 3617dd7cddfSDavid du Colombier uchar peeroutreports[4]; 3627dd7cddfSDavid du Colombier uchar peeroutpackets[4]; 3637dd7cddfSDavid du Colombier uchar peeroutuchars[4]; 3647dd7cddfSDavid du Colombier }; 3657dd7cddfSDavid du Colombier 3667dd7cddfSDavid du Colombier extern Block* compress(Tcpc*, Block*, int*); 367fe853e23SDavid du Colombier extern void compress_error(Tcpc*); 3687dd7cddfSDavid du Colombier extern Tcpc* compress_init(Tcpc*); 3697dd7cddfSDavid du Colombier extern int compress_negotiate(Tcpc*, uchar*); 3707dd7cddfSDavid du Colombier extern Block* tcpcompress(Tcpc*, Block*, int*); 3717dd7cddfSDavid du Colombier extern Block* tcpuncompress(Tcpc*, Block*, int); 3727dd7cddfSDavid du Colombier extern Block* alloclcp(int, int, int, Lcpmsg**); 3737dd7cddfSDavid du Colombier extern ushort ptclcsum(Block*, int, int); 3747dd7cddfSDavid du Colombier extern ushort ptclbsum(uchar*, int); 3757dd7cddfSDavid du Colombier extern ushort ipcsum(uchar*); 3767dd7cddfSDavid du Colombier 3777dd7cddfSDavid du Colombier extern Comptype cmppc; 3787dd7cddfSDavid du Colombier extern Uncomptype uncmppc; 3797dd7cddfSDavid du Colombier 3807dd7cddfSDavid du Colombier extern Comptype cthwack; 3817dd7cddfSDavid du Colombier extern Uncomptype uncthwack; 3827dd7cddfSDavid du Colombier 3837dd7cddfSDavid du Colombier extern void netlog(char*, ...); 38459cc4ca5SDavid du Colombier #pragma varargck argpos netlog 1 3857dd7cddfSDavid du Colombier 3867dd7cddfSDavid du Colombier extern char *LOG; 387