xref: /plan9/sys/src/cmd/ip/ppp/ppp.h (revision 12fd1c83b21b4d1deeab2b58fe2c202d2038c714)
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