xref: /dragonfly/include/arpa/telnet.h (revision bc7a82937f2c5afea643239d62c09b6aef599ee6)
1 /*
2  * Copyright (c) 1983, 1993
3  *        The Regents of the University of California.  All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. Neither the name of the University nor the names of its contributors
14  *    may be used to endorse or promote products derived from this software
15  *    without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  *
29  *        @(#)telnet.h        8.2 (Berkeley) 12/15/93
30  * $FreeBSD: src/include/arpa/telnet.h,v 1.5.6.2 2002/04/13 11:07:13 markm Exp $
31  * $DragonFly: src/include/arpa/telnet.h,v 1.2 2003/06/17 04:25:58 dillon Exp $
32  */
33 
34 #ifndef _ARPA_TELNET_H_
35 #define   _ARPA_TELNET_H_
36 
37 /*
38  * Definitions for the TELNET protocol.
39  */
40 #define   IAC       255                 /* interpret as command: */
41 #define   DONT      254                 /* you are not to use option */
42 #define   DO        253                 /* please, you use option */
43 #define   WONT      252                 /* I won't use option */
44 #define   WILL      251                 /* I will use option */
45 #define   SB        250                 /* interpret as subnegotiation */
46 #define   GA        249                 /* you may reverse the line */
47 #define   EL        248                 /* erase the current line */
48 #define   EC        247                 /* erase the current character */
49 #define   AYT       246                 /* are you there */
50 #define   AO        245                 /* abort output--but let prog finish */
51 #define   IP        244                 /* interrupt process--permanently */
52 #define   BREAK     243                 /* break */
53 #define   DM        242                 /* data mark--for connect. cleaning */
54 #define   NOP       241                 /* nop */
55 #define   SE        240                 /* end sub negotiation */
56 #define EOR     239             /* end of record (transparent mode) */
57 #define   ABORT     238                 /* Abort process */
58 #define   SUSP      237                 /* Suspend process */
59 #define   xEOF      236                 /* End of file: EOF is already used... */
60 
61 #define SYNCH       242                 /* for telfunc calls */
62 
63 #ifdef TELCMDS
64 const char *telcmds[] = {
65           "EOF", "SUSP", "ABORT", "EOR",
66           "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC",
67           "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC",
68           0
69 };
70 #else
71 extern char *telcmds[];
72 #endif
73 
74 #define   TELCMD_FIRST        xEOF
75 #define   TELCMD_LAST         IAC
76 #define   TELCMD_OK(x)        ((unsigned int)(x) <= TELCMD_LAST && \
77                                (unsigned int)(x) >= TELCMD_FIRST)
78 #define   TELCMD(x) telcmds[(x)-TELCMD_FIRST]
79 
80 /* telnet options */
81 #define TELOPT_BINARY         0         /* 8-bit data path */
82 #define TELOPT_ECHO 1         /* echo */
83 #define   TELOPT_RCP          2         /* prepare to reconnect */
84 #define   TELOPT_SGA          3         /* suppress go ahead */
85 #define   TELOPT_NAMS         4         /* approximate message size */
86 #define   TELOPT_STATUS       5         /* give status */
87 #define   TELOPT_TM 6         /* timing mark */
88 #define   TELOPT_RCTE         7         /* remote controlled transmission and echo */
89 #define TELOPT_NAOL           8         /* negotiate about output line width */
90 #define TELOPT_NAOP           9         /* negotiate about output page size */
91 #define TELOPT_NAOCRD         10        /* negotiate about CR disposition */
92 #define TELOPT_NAOHTS         11        /* negotiate about horizontal tabstops */
93 #define TELOPT_NAOHTD         12        /* negotiate about horizontal tab disposition */
94 #define TELOPT_NAOFFD         13        /* negotiate about formfeed disposition */
95 #define TELOPT_NAOVTS         14        /* negotiate about vertical tab stops */
96 #define TELOPT_NAOVTD         15        /* negotiate about vertical tab disposition */
97 #define TELOPT_NAOLFD         16        /* negotiate about output LF disposition */
98 #define TELOPT_XASCII         17        /* extended ascic character set */
99 #define   TELOPT_LOGOUT       18        /* force logout */
100 #define   TELOPT_BM 19        /* byte macro */
101 #define   TELOPT_DET          20        /* data entry terminal */
102 #define   TELOPT_SUPDUP       21        /* supdup protocol */
103 #define   TELOPT_SUPDUPOUTPUT 22        /* supdup output */
104 #define   TELOPT_SNDLOC       23        /* send location */
105 #define   TELOPT_TTYPE        24        /* terminal type */
106 #define   TELOPT_EOR          25        /* end or record */
107 #define   TELOPT_TUID         26        /* TACACS user identification */
108 #define   TELOPT_OUTMRK       27        /* output marking */
109 #define   TELOPT_TTYLOC       28        /* terminal location number */
110 #define   TELOPT_3270REGIME 29          /* 3270 regime */
111 #define   TELOPT_X3PAD        30        /* X.3 PAD */
112 #define   TELOPT_NAWS         31        /* window size */
113 #define   TELOPT_TSPEED       32        /* terminal speed */
114 #define   TELOPT_LFLOW        33        /* remote flow control */
115 #define TELOPT_LINEMODE       34        /* Linemode option */
116 #define TELOPT_XDISPLOC       35        /* X Display Location */
117 #define TELOPT_OLD_ENVIRON 36 /* Old - Environment variables */
118 #define   TELOPT_AUTHENTICATION 37/* Authenticate */
119 #define   TELOPT_ENCRYPT      38        /* Encryption option */
120 #define TELOPT_NEW_ENVIRON 39 /* New - Environment variables */
121 #define   TELOPT_EXOPL        255       /* extended-options-list */
122 
123 
124 #define   NTELOPTS  (1+TELOPT_NEW_ENVIRON)
125 #ifdef TELOPTS
126 const char *telopts[NTELOPTS+1] = {
127           "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME",
128           "STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP",
129           "NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS",
130           "NAOVTD", "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO",
131           "DATA ENTRY TERMINAL", "SUPDUP", "SUPDUP OUTPUT",
132           "SEND LOCATION", "TERMINAL TYPE", "END OF RECORD",
133           "TACACS UID", "OUTPUT MARKING", "TTYLOC",
134           "3270 REGIME", "X.3 PAD", "NAWS", "TSPEED", "LFLOW",
135           "LINEMODE", "XDISPLOC", "OLD-ENVIRON", "AUTHENTICATION",
136           "ENCRYPT", "NEW-ENVIRON",
137           0
138 };
139 #define   TELOPT_FIRST        TELOPT_BINARY
140 #define   TELOPT_LAST         TELOPT_NEW_ENVIRON
141 #define   TELOPT_OK(x)        ((unsigned int)(x) <= TELOPT_LAST)
142 #define   TELOPT(x) telopts[(x)-TELOPT_FIRST]
143 #endif
144 
145 /* sub-option qualifiers */
146 #define   TELQUAL_IS          0         /* option is... */
147 #define   TELQUAL_SEND        1         /* send option */
148 #define   TELQUAL_INFO        2         /* ENVIRON: informational version of IS */
149 #define   TELQUAL_REPLY       2         /* AUTHENTICATION: client version of IS */
150 #define   TELQUAL_NAME        3         /* AUTHENTICATION: client version of IS */
151 
152 #define   LFLOW_OFF           0         /* Disable remote flow control */
153 #define   LFLOW_ON            1         /* Enable remote flow control */
154 #define   LFLOW_RESTART_ANY   2         /* Restart output on any char */
155 #define   LFLOW_RESTART_XON   3         /* Restart output only on XON */
156 
157 /*
158  * LINEMODE suboptions
159  */
160 
161 #define   LM_MODE             1
162 #define   LM_FORWARDMASK      2
163 #define   LM_SLC              3
164 
165 #define   MODE_EDIT 0x01
166 #define   MODE_TRAPSIG        0x02
167 #define   MODE_ACK  0x04
168 #define MODE_SOFT_TAB         0x08
169 #define MODE_LIT_ECHO         0x10
170 
171 #define   MODE_MASK 0x1f
172 
173 /* Not part of protocol, but needed to simplify things... */
174 #define MODE_FLOW             0x0100
175 #define MODE_ECHO             0x0200
176 #define MODE_INBIN            0x0400
177 #define MODE_OUTBIN           0x0800
178 #define MODE_FORCE            0x1000
179 
180 #define   SLC_SYNCH 1
181 #define   SLC_BRK             2
182 #define   SLC_IP              3
183 #define   SLC_AO              4
184 #define   SLC_AYT             5
185 #define   SLC_EOR             6
186 #define   SLC_ABORT 7
187 #define   SLC_EOF             8
188 #define   SLC_SUSP  9
189 #define   SLC_EC              10
190 #define   SLC_EL              11
191 #define   SLC_EW              12
192 #define   SLC_RP              13
193 #define   SLC_LNEXT 14
194 #define   SLC_XON             15
195 #define   SLC_XOFF  16
196 #define   SLC_FORW1 17
197 #define   SLC_FORW2 18
198 #define SLC_MCL         19
199 #define SLC_MCR         20
200 #define SLC_MCWL        21
201 #define SLC_MCWR        22
202 #define SLC_MCBOL       23
203 #define SLC_MCEOL       24
204 #define SLC_INSRT       25
205 #define SLC_OVER        26
206 #define SLC_ECR         27
207 #define SLC_EWR         28
208 #define SLC_EBOL        29
209 #define SLC_EEOL        30
210 
211 #define   NSLC                30
212 
213 /*
214  * For backwards compatibility, we define SLC_NAMES to be the
215  * list of names if SLC_NAMES is not defined.
216  */
217 #define   SLC_NAMELIST        "0", "SYNCH", "BRK", "IP", "AO", "AYT", "EOR",    \
218                               "ABORT", "EOF", "SUSP", "EC", "EL", "EW", "RP",   \
219                               "LNEXT", "XON", "XOFF", "FORW1", "FORW2",         \
220                               "MCL", "MCR", "MCWL", "MCWR", "MCBOL",            \
221                               "MCEOL", "INSRT", "OVER", "ECR", "EWR",           \
222                               "EBOL", "EEOL",                                             \
223                               0
224 
225 #ifdef    SLC_NAMES
226 const char *slc_names[] = {
227           SLC_NAMELIST
228 };
229 #else
230 extern char *slc_names[];
231 #define   SLC_NAMES SLC_NAMELIST
232 #endif
233 
234 #define   SLC_NAME_OK(x)      ((unsigned int)(x) <= NSLC)
235 #define SLC_NAME(x) slc_names[x]
236 
237 #define   SLC_NOSUPPORT       0
238 #define   SLC_CANTCHANGE      1
239 #define   SLC_VARIABLE        2
240 #define   SLC_DEFAULT         3
241 #define   SLC_LEVELBITS       0x03
242 
243 #define   SLC_FUNC  0
244 #define   SLC_FLAGS 1
245 #define   SLC_VALUE 2
246 
247 #define   SLC_ACK             0x80
248 #define   SLC_FLUSHIN         0x40
249 #define   SLC_FLUSHOUT        0x20
250 
251 #define   OLD_ENV_VAR         1
252 #define   OLD_ENV_VALUE       0
253 #define   NEW_ENV_VAR         0
254 #define   NEW_ENV_VALUE       1
255 #define   ENV_ESC             2
256 #define ENV_USERVAR 3
257 
258 /*
259  * AUTHENTICATION suboptions
260  */
261 
262 /*
263  * Who is authenticating who ...
264  */
265 #define   AUTH_WHO_CLIENT               0         /* Client authenticating server */
266 #define   AUTH_WHO_SERVER               1         /* Server authenticating client */
267 #define   AUTH_WHO_MASK                 1
268 
269 /*
270  * amount of authentication done
271  */
272 #define   AUTH_HOW_ONE_WAY    0
273 #define   AUTH_HOW_MUTUAL               2
274 #define   AUTH_HOW_MASK                 2
275 
276 #define   AUTHTYPE_NULL                 0
277 #define   AUTHTYPE_KERBEROS_V4          1
278 #define   AUTHTYPE_KERBEROS_V5          2
279 #define   AUTHTYPE_SPX                  3
280 #define   AUTHTYPE_MINK                 4
281 #define   AUTHTYPE_SRA                  6
282 #define   AUTHTYPE_CNT                  7
283 
284 #define   AUTHTYPE_TEST                 99
285 
286 #ifdef    AUTH_NAMES
287 const char *authtype_names[] = {
288           "NULL", "KERBEROS_V4", "KERBEROS_V5", "SPX", "MINK", NULL, "SRA",
289           0
290 };
291 #else
292 extern char *authtype_names[];
293 #endif
294 
295 #define   AUTHTYPE_NAME_OK(x) ((unsigned int)(x) < AUTHTYPE_CNT)
296 #define   AUTHTYPE_NAME(x)    authtype_names[x]
297 
298 /*
299  * ENCRYPTion suboptions
300  */
301 #define   ENCRYPT_IS                    0         /* I pick encryption type ... */
302 #define   ENCRYPT_SUPPORT               1         /* I support encryption types ... */
303 #define   ENCRYPT_REPLY                 2         /* Initial setup response */
304 #define   ENCRYPT_START                 3         /* Am starting to send encrypted */
305 #define   ENCRYPT_END                   4         /* Am ending encrypted */
306 #define   ENCRYPT_REQSTART    5         /* Request you start encrypting */
307 #define   ENCRYPT_REQEND                6         /* Request you end encrypting */
308 #define   ENCRYPT_ENC_KEYID   7
309 #define   ENCRYPT_DEC_KEYID   8
310 #define   ENCRYPT_CNT                   9
311 
312 #define   ENCTYPE_ANY                   0
313 #define   ENCTYPE_DES_CFB64   1
314 #define   ENCTYPE_DES_OFB64   2
315 #define   ENCTYPE_CNT                   3
316 
317 #ifdef    ENCRYPT_NAMES
318 const char *encrypt_names[] = {
319           "IS", "SUPPORT", "REPLY", "START", "END",
320           "REQUEST-START", "REQUEST-END", "ENC-KEYID", "DEC-KEYID",
321           0
322 };
323 const char *enctype_names[] = {
324           "ANY", "DES_CFB64",  "DES_OFB64",
325           0
326 };
327 #else
328 extern char *encrypt_names[];
329 extern char *enctype_names[];
330 #endif
331 
332 
333 #define   ENCRYPT_NAME_OK(x)  ((unsigned int)(x) < ENCRYPT_CNT)
334 #define   ENCRYPT_NAME(x)               encrypt_names[x]
335 
336 #define   ENCTYPE_NAME_OK(x)  ((unsigned int)(x) < ENCTYPE_CNT)
337 #define   ENCTYPE_NAME(x)               enctype_names[x]
338 
339 #endif /* !_TELNET_H_ */
340