|  | /* | 
|  | * Copyright (c) 1983, 1993 | 
|  | *	The Regents of the University of California.  All rights reserved. | 
|  | * | 
|  | * Redistribution and use in source and binary forms, with or without | 
|  | * modification, are permitted provided that the following conditions | 
|  | * are met: | 
|  | * 1. Redistributions of source code must retain the above copyright | 
|  | *    notice, this list of conditions and the following disclaimer. | 
|  | * 2. Redistributions in binary form must reproduce the above copyright | 
|  | *    notice, this list of conditions and the following disclaimer in the | 
|  | *    documentation and/or other materials provided with the distribution. | 
|  | * 4. Neither the name of the University nor the names of its contributors | 
|  | *    may be used to endorse or promote products derived from this software | 
|  | *    without specific prior written permission. | 
|  | * | 
|  | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | 
|  | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
|  | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
|  | * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | 
|  | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | 
|  | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | 
|  | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | 
|  | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | 
|  | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
|  | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
|  | * SUCH DAMAGE. | 
|  | * | 
|  | *	@(#)telnet.h	8.2 (Berkeley) 12/15/93 | 
|  | */ | 
|  |  | 
|  | #ifndef _ARPA_TELNET_H | 
|  | #define	_ARPA_TELNET_H 1 | 
|  |  | 
|  | /* | 
|  | * Definitions for the TELNET protocol. | 
|  | */ | 
|  | #define	IAC	255		/* interpret as command: */ | 
|  | #define	DONT	254		/* you are not to use option */ | 
|  | #define	DO	253		/* please, you use option */ | 
|  | #define	WONT	252		/* I won't use option */ | 
|  | #define	WILL	251		/* I will use option */ | 
|  | #define	SB	250		/* interpret as subnegotiation */ | 
|  | #define	GA	249		/* you may reverse the line */ | 
|  | #define	EL	248		/* erase the current line */ | 
|  | #define	EC	247		/* erase the current character */ | 
|  | #define	AYT	246		/* are you there */ | 
|  | #define	AO	245		/* abort output--but let prog finish */ | 
|  | #define	IP	244		/* interrupt process--permanently */ | 
|  | #define	BREAK	243		/* break */ | 
|  | #define	DM	242		/* data mark--for connect. cleaning */ | 
|  | #define	NOP	241		/* nop */ | 
|  | #define	SE	240		/* end sub negotiation */ | 
|  | #define EOR     239             /* end of record (transparent mode) */ | 
|  | #define	ABORT	238		/* Abort process */ | 
|  | #define	SUSP	237		/* Suspend process */ | 
|  | #define	xEOF	236		/* End of file: EOF is already used... */ | 
|  |  | 
|  | #define SYNCH	242		/* for telfunc calls */ | 
|  |  | 
|  | #ifdef TELCMDS | 
|  | char *telcmds[] = { | 
|  | "EOF", "SUSP", "ABORT", "EOR", | 
|  | "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC", | 
|  | "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC", 0, | 
|  | }; | 
|  | #else | 
|  | extern char *telcmds[]; | 
|  | #endif | 
|  |  | 
|  | #define	TELCMD_FIRST	xEOF | 
|  | #define	TELCMD_LAST	IAC | 
|  | #define	TELCMD_OK(x)	((unsigned int)(x) <= TELCMD_LAST && \ | 
|  | (unsigned int)(x) >= TELCMD_FIRST) | 
|  | #define	TELCMD(x)	telcmds[(x)-TELCMD_FIRST] | 
|  |  | 
|  | /* telnet options */ | 
|  | #define TELOPT_BINARY	0	/* 8-bit data path */ | 
|  | #define TELOPT_ECHO	1	/* echo */ | 
|  | #define	TELOPT_RCP	2	/* prepare to reconnect */ | 
|  | #define	TELOPT_SGA	3	/* suppress go ahead */ | 
|  | #define	TELOPT_NAMS	4	/* approximate message size */ | 
|  | #define	TELOPT_STATUS	5	/* give status */ | 
|  | #define	TELOPT_TM	6	/* timing mark */ | 
|  | #define	TELOPT_RCTE	7	/* remote controlled transmission and echo */ | 
|  | #define TELOPT_NAOL 	8	/* negotiate about output line width */ | 
|  | #define TELOPT_NAOP 	9	/* negotiate about output page size */ | 
|  | #define TELOPT_NAOCRD	10	/* negotiate about CR disposition */ | 
|  | #define TELOPT_NAOHTS	11	/* negotiate about horizontal tabstops */ | 
|  | #define TELOPT_NAOHTD	12	/* negotiate about horizontal tab disposition */ | 
|  | #define TELOPT_NAOFFD	13	/* negotiate about formfeed disposition */ | 
|  | #define TELOPT_NAOVTS	14	/* negotiate about vertical tab stops */ | 
|  | #define TELOPT_NAOVTD	15	/* negotiate about vertical tab disposition */ | 
|  | #define TELOPT_NAOLFD	16	/* negotiate about output LF disposition */ | 
|  | #define TELOPT_XASCII	17	/* extended ascii character set */ | 
|  | #define	TELOPT_LOGOUT	18	/* force logout */ | 
|  | #define	TELOPT_BM	19	/* byte macro */ | 
|  | #define	TELOPT_DET	20	/* data entry terminal */ | 
|  | #define	TELOPT_SUPDUP	21	/* supdup protocol */ | 
|  | #define	TELOPT_SUPDUPOUTPUT 22	/* supdup output */ | 
|  | #define	TELOPT_SNDLOC	23	/* send location */ | 
|  | #define	TELOPT_TTYPE	24	/* terminal type */ | 
|  | #define	TELOPT_EOR	25	/* end or record */ | 
|  | #define	TELOPT_TUID	26	/* TACACS user identification */ | 
|  | #define	TELOPT_OUTMRK	27	/* output marking */ | 
|  | #define	TELOPT_TTYLOC	28	/* terminal location number */ | 
|  | #define	TELOPT_3270REGIME 29	/* 3270 regime */ | 
|  | #define	TELOPT_X3PAD	30	/* X.3 PAD */ | 
|  | #define	TELOPT_NAWS	31	/* window size */ | 
|  | #define	TELOPT_TSPEED	32	/* terminal speed */ | 
|  | #define	TELOPT_LFLOW	33	/* remote flow control */ | 
|  | #define TELOPT_LINEMODE	34	/* Linemode option */ | 
|  | #define TELOPT_XDISPLOC	35	/* X Display Location */ | 
|  | #define TELOPT_OLD_ENVIRON 36	/* Old - Environment variables */ | 
|  | #define	TELOPT_AUTHENTICATION 37/* Authenticate */ | 
|  | #define	TELOPT_ENCRYPT	38	/* Encryption option */ | 
|  | #define TELOPT_NEW_ENVIRON 39	/* New - Environment variables */ | 
|  | #define	TELOPT_EXOPL	255	/* extended-options-list */ | 
|  |  | 
|  |  | 
|  | #define	NTELOPTS	(1+TELOPT_NEW_ENVIRON) | 
|  | #ifdef TELOPTS | 
|  | char *telopts[NTELOPTS+1] = { | 
|  | "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME", | 
|  | "STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP", | 
|  | "NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS", | 
|  | "NAOVTD", "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO", | 
|  | "DATA ENTRY TERMINAL", "SUPDUP", "SUPDUP OUTPUT", | 
|  | "SEND LOCATION", "TERMINAL TYPE", "END OF RECORD", | 
|  | "TACACS UID", "OUTPUT MARKING", "TTYLOC", | 
|  | "3270 REGIME", "X.3 PAD", "NAWS", "TSPEED", "LFLOW", | 
|  | "LINEMODE", "XDISPLOC", "OLD-ENVIRON", "AUTHENTICATION", | 
|  | "ENCRYPT", "NEW-ENVIRON", | 
|  | 0, | 
|  | }; | 
|  | #define	TELOPT_FIRST	TELOPT_BINARY | 
|  | #define	TELOPT_LAST	TELOPT_NEW_ENVIRON | 
|  | #define	TELOPT_OK(x)	((unsigned int)(x) <= TELOPT_LAST) | 
|  | #define	TELOPT(x)	telopts[(x)-TELOPT_FIRST] | 
|  | #endif | 
|  |  | 
|  | /* sub-option qualifiers */ | 
|  | #define	TELQUAL_IS	0	/* option is... */ | 
|  | #define	TELQUAL_SEND	1	/* send option */ | 
|  | #define	TELQUAL_INFO	2	/* ENVIRON: informational version of IS */ | 
|  | #define	TELQUAL_REPLY	2	/* AUTHENTICATION: client version of IS */ | 
|  | #define	TELQUAL_NAME	3	/* AUTHENTICATION: client version of IS */ | 
|  |  | 
|  | #define	LFLOW_OFF		0	/* Disable remote flow control */ | 
|  | #define	LFLOW_ON		1	/* Enable remote flow control */ | 
|  | #define	LFLOW_RESTART_ANY	2	/* Restart output on any char */ | 
|  | #define	LFLOW_RESTART_XON	3	/* Restart output only on XON */ | 
|  |  | 
|  | /* | 
|  | * LINEMODE suboptions | 
|  | */ | 
|  |  | 
|  | #define	LM_MODE		1 | 
|  | #define	LM_FORWARDMASK	2 | 
|  | #define	LM_SLC		3 | 
|  |  | 
|  | #define	MODE_EDIT	0x01 | 
|  | #define	MODE_TRAPSIG	0x02 | 
|  | #define	MODE_ACK	0x04 | 
|  | #define MODE_SOFT_TAB	0x08 | 
|  | #define MODE_LIT_ECHO	0x10 | 
|  |  | 
|  | #define	MODE_MASK	0x1f | 
|  |  | 
|  | /* Not part of protocol, but needed to simplify things... */ | 
|  | #define MODE_FLOW		0x0100 | 
|  | #define MODE_ECHO		0x0200 | 
|  | #define MODE_INBIN		0x0400 | 
|  | #define MODE_OUTBIN		0x0800 | 
|  | #define MODE_FORCE		0x1000 | 
|  |  | 
|  | #define	SLC_SYNCH	1 | 
|  | #define	SLC_BRK		2 | 
|  | #define	SLC_IP		3 | 
|  | #define	SLC_AO		4 | 
|  | #define	SLC_AYT		5 | 
|  | #define	SLC_EOR		6 | 
|  | #define	SLC_ABORT	7 | 
|  | #define	SLC_EOF		8 | 
|  | #define	SLC_SUSP	9 | 
|  | #define	SLC_EC		10 | 
|  | #define	SLC_EL		11 | 
|  | #define	SLC_EW		12 | 
|  | #define	SLC_RP		13 | 
|  | #define	SLC_LNEXT	14 | 
|  | #define	SLC_XON		15 | 
|  | #define	SLC_XOFF	16 | 
|  | #define	SLC_FORW1	17 | 
|  | #define	SLC_FORW2	18 | 
|  |  | 
|  | #define	NSLC		18 | 
|  |  | 
|  | /* | 
|  | * For backwards compatibility, we define SLC_NAMES to be the | 
|  | * list of names if SLC_NAMES is not defined. | 
|  | */ | 
|  | #define	SLC_NAMELIST	"0", "SYNCH", "BRK", "IP", "AO", "AYT", "EOR", \ | 
|  | "ABORT", "EOF", "SUSP", "EC", "EL", "EW", "RP", \ | 
|  | "LNEXT", "XON", "XOFF", "FORW1", "FORW2", 0, | 
|  | #ifdef	SLC_NAMES | 
|  | char *slc_names[] = { | 
|  | SLC_NAMELIST | 
|  | }; | 
|  | #else | 
|  | extern char *slc_names[]; | 
|  | #define	SLC_NAMES SLC_NAMELIST | 
|  | #endif | 
|  |  | 
|  | #define	SLC_NAME_OK(x)	((unsigned int)(x) <= NSLC) | 
|  | #define SLC_NAME(x)	slc_names[x] | 
|  |  | 
|  | #define	SLC_NOSUPPORT	0 | 
|  | #define	SLC_CANTCHANGE	1 | 
|  | #define	SLC_VARIABLE	2 | 
|  | #define	SLC_DEFAULT	3 | 
|  | #define	SLC_LEVELBITS	0x03 | 
|  |  | 
|  | #define	SLC_FUNC	0 | 
|  | #define	SLC_FLAGS	1 | 
|  | #define	SLC_VALUE	2 | 
|  |  | 
|  | #define	SLC_ACK		0x80 | 
|  | #define	SLC_FLUSHIN	0x40 | 
|  | #define	SLC_FLUSHOUT	0x20 | 
|  |  | 
|  | #define	OLD_ENV_VAR	1 | 
|  | #define	OLD_ENV_VALUE	0 | 
|  | #define	NEW_ENV_VAR	0 | 
|  | #define	NEW_ENV_VALUE	1 | 
|  | #define	ENV_ESC		2 | 
|  | #define ENV_USERVAR	3 | 
|  |  | 
|  | /* | 
|  | * AUTHENTICATION suboptions | 
|  | */ | 
|  |  | 
|  | /* | 
|  | * Who is authenticating who ... | 
|  | */ | 
|  | #define	AUTH_WHO_CLIENT		0	/* Client authenticating server */ | 
|  | #define	AUTH_WHO_SERVER		1	/* Server authenticating client */ | 
|  | #define	AUTH_WHO_MASK		1 | 
|  |  | 
|  | /* | 
|  | * amount of authentication done | 
|  | */ | 
|  | #define	AUTH_HOW_ONE_WAY	0 | 
|  | #define	AUTH_HOW_MUTUAL		2 | 
|  | #define	AUTH_HOW_MASK		2 | 
|  |  | 
|  | #define	AUTHTYPE_NULL		0 | 
|  | #define	AUTHTYPE_KERBEROS_V4	1 | 
|  | #define	AUTHTYPE_KERBEROS_V5	2 | 
|  | #define	AUTHTYPE_SPX		3 | 
|  | #define	AUTHTYPE_MINK		4 | 
|  | #define	AUTHTYPE_CNT		5 | 
|  |  | 
|  | #define	AUTHTYPE_TEST		99 | 
|  |  | 
|  | #ifdef	AUTH_NAMES | 
|  | char *authtype_names[] = { | 
|  | "NULL", "KERBEROS_V4", "KERBEROS_V5", "SPX", "MINK", 0, | 
|  | }; | 
|  | #else | 
|  | extern char *authtype_names[]; | 
|  | #endif | 
|  |  | 
|  | #define	AUTHTYPE_NAME_OK(x)	((unsigned int)(x) < AUTHTYPE_CNT) | 
|  | #define	AUTHTYPE_NAME(x)	authtype_names[x] | 
|  |  | 
|  | /* | 
|  | * ENCRYPTion suboptions | 
|  | */ | 
|  | #define	ENCRYPT_IS		0	/* I pick encryption type ... */ | 
|  | #define	ENCRYPT_SUPPORT		1	/* I support encryption types ... */ | 
|  | #define	ENCRYPT_REPLY		2	/* Initial setup response */ | 
|  | #define	ENCRYPT_START		3	/* Am starting to send encrypted */ | 
|  | #define	ENCRYPT_END		4	/* Am ending encrypted */ | 
|  | #define	ENCRYPT_REQSTART	5	/* Request you start encrypting */ | 
|  | #define	ENCRYPT_REQEND		6	/* Request you send encrypting */ | 
|  | #define	ENCRYPT_ENC_KEYID	7 | 
|  | #define	ENCRYPT_DEC_KEYID	8 | 
|  | #define	ENCRYPT_CNT		9 | 
|  |  | 
|  | #define	ENCTYPE_ANY		0 | 
|  | #define	ENCTYPE_DES_CFB64	1 | 
|  | #define	ENCTYPE_DES_OFB64	2 | 
|  | #define	ENCTYPE_CNT		3 | 
|  |  | 
|  | #ifdef	ENCRYPT_NAMES | 
|  | char *encrypt_names[] = { | 
|  | "IS", "SUPPORT", "REPLY", "START", "END", | 
|  | "REQUEST-START", "REQUEST-END", "ENC-KEYID", "DEC-KEYID", | 
|  | 0, | 
|  | }; | 
|  | char *enctype_names[] = { | 
|  | "ANY", "DES_CFB64",  "DES_OFB64",  0, | 
|  | }; | 
|  | #else | 
|  | extern char *encrypt_names[]; | 
|  | extern char *enctype_names[]; | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #define	ENCRYPT_NAME_OK(x)	((unsigned int)(x) < ENCRYPT_CNT) | 
|  | #define	ENCRYPT_NAME(x)		encrypt_names[x] | 
|  |  | 
|  | #define	ENCTYPE_NAME_OK(x)	((unsigned int)(x) < ENCTYPE_CNT) | 
|  | #define	ENCTYPE_NAME(x)		enctype_names[x] | 
|  |  | 
|  | #endif /* arpa/telnet.h */ |