1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
|
Network Working Group S. Levy
Request for Comments: 1053 T. Jacobson
Minnesota Supercomputer Center
April 1988
Telnet X.3 PAD Option
Status of this Memo
This RFC proposes a new option to Telnet for the Internet community,
and requests discussion and suggestions for improvements.
Distribution of this memo is unlimited.
1. Command name and code
X.3-PAD 30
2. Command meanings
IAC DO X.3-PAD
The issuing telnet requests that its peer perform X.3-PAD
functions, or accepts an offer to do so.
IAC DON'T X.3-PAD
The issuing telnet demands that its peer not perform or cease
performing X.3-PAD functions.
IAC WILL X.3-PAD
The issuing telnet offers to perform X.3-PAD functions or confirms
that it will do so.
IAC WON'T X.3-PAD
The issuing telnet refuses to perform X.3-PAD functions or
indicates that it is ceasing to handle them.
Typically a server (host) telnet will use DO and DON'T, while a
client (user) telnet will use WILL and WON'T. For convenience, in
the rest of this RFC 'host' and 'user' telnets refer to those saying
'DO X.3-PAD' or 'WILL X.3-PAD' respectively.
Both telnet peers may use this option without confusion, as all
messages unambiguously identify whether they come from the host
Levy & Jacobson [Page 1]
^L
RFC 1053 Telnet X.3 PAD Option April 1988
("DO") or the user ("WILL") side.
Once DO and WILL have been exchanged, the host ("DO") telnet may
send the following messages:
IAC SB X.3-PAD SET <param1> <value1> ... IAC SE
IAC SB X.3-PAD RESPONSE-SET <param1> <value1> ... IAC SE
IAC SB X.3-PAD SEND IAC SE
while the user ("WILL") telnet may send the following messages:
IAC SB X.3-PAD IS <param1> <value1> ... IAC SE
IAC SB X.3-PAD RESPONSE-IS <param1> <value1> ... IAC SE
The code for SET is 0
The code for RESPONSE-SET is 1
The code for IS is 2
The code for RESPONSE-IS is 3
The code for SEND is 4
Messages listing parameter-value pairs may contain any number of
such pairs, including zero. Each parameter and each value
occupies one octet, except that 255 (IAC) is doubled wherever it
appears.
3. Default conditions
The initial state is DON'T X.3-PAD, WON'T X.3-PAD. This RFC does not
specify default values for most X.3 parameters. If the host telnet
wishes a particular initial state (as it normally will), it should
negotiate for it after exchange of DO/WILL messages.
X.3-PAD parameter values need not be preserved except when DO/WILL
X.3-PAD is in effect. Thus if a host enables ("DO") X.3-PAD,
negotiates about some parameters, then for some reason disables
("DONT") and later re-enables X.3-PAD, it must renegotiate any
parameters it cares about.
Keeping in mind that the host telnet may not recognize all the
parameters known to the user telnet, it is suggested that the user
telnet's initial parameters allow a reasonable level of service even
if they are never changed (e.g., it would be unwise to begin with all
data forwarding conditions disabled). Extensions to X.3 should
default to states resembling normal X.3 service where possible.
Levy & Jacobson [Page 2]
^L
RFC 1053 Telnet X.3 PAD Option April 1988
4. Motivation for the option
Where interactive terminals (or computers simulating them) are
attached to host computers across a network, it is often desirable to
provide them the same services as have long been provided for
terminals directly attached to those hosts.
Many systems handle this by simply leaving all character processing
to the host running the applications. Each character typed by the
user is sent, often in its own packet, immediately to the host. This
gives good control over interaction, but can cause a significant load
on hosts and networks. Long-distance packet networks tend to be
unreasonably slow or expensive or both when used in this mode.
Suitable character processing on the client (near the user's
terminal) can greatly improve the situation. Unfortunately for
standardization efforts, there are many possible approaches with
differing purposes.
Some have already been proposed as Telnet options. The Remote
Controlled Transmission and Echo option, [3], provides fine control
over local buffering and echoing. The SUPDUP option, [4], offers a
variety of input and display functions in terminal-independent form.
This RFC's proposal is intended to support efficient, approximate
emulation, across a Telnet connection, of a host's normal handling of
character-oriented terminals. Ideally, a user and an application
program would not need to know whether they were linked by an RS-232
line or a TCP/IP network, except where the medium required a
distinction (e.g., when establishing a connection).
Server implementors would wish for enough to emulate, purely locally,
everything offered by their host's operating system; on the other
hand, a standard calling on user telnets to provide all terminal
handling functions of all known operating systems will find few
implementors. One might settle on a subset of common operations, but
which ones?
The CCITT world has used one approach to these problems: the set of
PAD services defined by recommendation X.3. This RFC proposes that
the Internet community adopt that solution to handle the same
problems under Telnet. It is fairly simple, widely known and used,
extensible, and solves most of the relevant problems.
Adopting X.3 would have another advantage. X.25 is the dominant
worldwide standard interface between commercial packet networks and
Internet systems, as evidenced by the DDN's adoption of X.25 basic
and standard services as replacements for BBN 1822 and HDH. Telnet
Levy & Jacobson [Page 3]
^L
RFC 1053 Telnet X.3 PAD Option April 1988
and X.3 PAD traffic will have to coexist on X.25 networks; there will
be a consequential desire for effective interoperation at the virtual
terminal level. Extending Telnet along these lines would vastly
simplify bridging the two.
Described here is a scheme for implementing X.3 services and
negotiating their parameters across a Telnet connection.
5. Description of the option
Many, though not all, X.3 services are meaningful in the context of
remote terminal processing; for some, it may be desirable to allow
local control (by the user) but not remote control (by the server
host). Some functions may not be provided, or provided in only
limited form, by particular implementations. In general, an
implementation should follow the Telnet norm of requesting desired
service but continuing to function somehow in case it is not
available.
Negotiations are asymmetrical. Since the user telnet is charged with
local character handling while engaged in the session with the remote
host, the X.3 parameters "belong" to the user side. The host telnet
requests parameter changes with SET or RESPONSE-SET messages. Host
requests might be on behalf of an application program, for example,
disabling local echo while a password is being entered. The user
telnet should give its "best effort" to accommodate these requests,
but guarantees nothing except accurate status reporting.
A user telnet may allow the local user to request parameter changes
too, though this RFC does not specify a way.
Where requests conflict, or where a user telnet cannot satisfy a
request, the user telnet has the last word, since it does the
relevant character processing. It may allow control from the host
only, from the user only, may seek a compromise type of processing
and so on, at the implementor's discretion.
Host ("DO") telnets may also ask the user telnet to SEND its current
parameter values. The user ("WILL") telnet must reply to each SEND
message with a RESPONSE-IS message listing the values of all the
parameters it knows about. It is strongly recommended that all
parameters known to the telnet implementor be included in this list,
even if their values cannot be changed. The intent is to give the
host telnet the most complete information possible about the style of
interaction which the user telnet is providing.
If possible, user telnets should also inform the server host (with an
IS message) whenever local conditions (e.g., user requests) change a
Levy & Jacobson [Page 4]
^L
RFC 1053 Telnet X.3 PAD Option April 1988
parameter's state. This may not be feasible in some circumstances,
and such behavior is negotiable -- see the discussion of parameter 0.
Note that there are no "error" messages defined in section 2. Almost
all detectable errors (use of nonexisistent parameters or undefined
values for known parameters) are indistinguishable from valid uses of
options known to one peer but not the other. Hosts will normally
wish to poll the user telnet's state after making a request anyway,
so error responses do not seem to be needed.
The protocol messages listed in section 2 are to be used as follows.
SET and RESPONSE-SET ask the user telnet to change its values for the
given X.3 parameters. The user telnet ignores unrecognized
parameters; it sends no reply. The host sends SET to begin a
negotiation, when some event on the host side causes a change in the
desired set of parameters. The host sends RESPONSE-SET to continue
negotiation, when it is dissatisfied with the user telnet's choice of
parameters indicated in a RESPONSE-IS message. Typically, the host
will test the user telnet's chosen behavior by issuing a SEND message
following the SET or RESPONSE-SET, though the user telnet should not
rely on this.
A SEND message from the host demands that the user telnet send
RESPONSE-IS.
IS and RESPONSE-IS inform the host telnet of the current states of
some or all of the user telnet's parameters. The user telnet sends
IS when the user telnet changes a parameter for some local reason,
e.g., at a request from the (human) user. An IS message may but need
not list all parameters, e.g., it might list just those which
changed.
It sends RESPONSE-IS in answer to each SEND request from the host.
Every RESPONSE-IS should list ALL X.3-PAD parameters known to the
user telnet implementor, even those which cannot be changed. Any
host requests (SET or RESPONSE-SET) received before a SEND message
should be processed before sending the answering RESPONSE-IS, so that
their effects are reflected in the parameter values indicated there.
To permit synchronization (which SEND is this an answer to?), the
user telnet should count SEND messages, and send exactly one
RESPONSE-IS per SEND.
One might think that this protocol could be implemented with only
SET, SEND and IS messages. The seemingly redundant RESPONSE-SET and
RESPONSE-IS codes are needed to let both the user and host telnets
distinguish new peer requests from attempts to renegotiate previous
Levy & Jacobson [Page 5]
^L
RFC 1053 Telnet X.3 PAD Option April 1988
actions, while preventing potential infinite negotiation loops.
SET and IS messages are sent when the host or user telnet wishes to
inform its peer of a change in the X.3 processing mode desired by
some higher level entity. This might happen at initialization, or on
user or application-program request. The important thing is that
these messages are NOT sent merely in response to another X.3-PAD
message from the peer.
RESPONSE-SET and RESPONSE-IS messages should be sent in reply to a
peer's [RESPONSE-]IS or SEND message. They reflect negotiation at
the telnet level, rather than changes in the higher-level
environment. A host which sends a SEND message may complain about
the status indicated in the answering RESPONSE-IS by sending
RESPONSE-SET but not SET.
Under this scheme, a possible rule for preventing infinite
negotiations would be for the host to send at most zero, one, or some
fixed number, of RESPONSE-SET messages following receipt of one IS
message or one higher-level host-side request. After that, the host
telnet simply accepts the user telnet's last offer as well as it can.
Note that only the host needs to worry about loop prevention, since
it does all the asking.
A given parameter should not be listed more than once in a single
message.
A sample negotiation might look like this. (Here line breaks are not
meaningful; ASCII carriage returns and line feeds are indicated by
<CR> and <LF>; other characters stand for themselves. In the IAC SB
octet values.)
Levy & Jacobson [Page 6]
^L
RFC 1053 Telnet X.3 PAD Option April 1988
Host: <CR><LF>%
(User types "cd gibber<CR>")
User: cd gibber<CR><LF>
Host: Password required.<CR>LF>
(Host disables echoing)
IAC SB X.3-PAD SET 2 0 IAC SE
(Host polls for status)
IAC SB X.3-PAD SEND IAC SE
User: (User telnet has disabled local
echo. Note that some
parameters (e.g., 9, 10, 11)
are not present, presumably
unimplemented, and a few
extension parameters
(129, 134) in extension
set 1 are also defined.)
IAC SB X.3-PAD RESPONSE-IS 1 29 2 0 3 2 4 0 5 0 7 17 8 0
12 0 13 3 15 1 16 8 17 21 18 0
128 1 129 23 134 1 IAC SE
Host: password:
(User types "squeak<CR>",
User: squeak<CR><LF> which is not echoed.)
Host: (Host re-enables echoing)
IAC SB X.3-PAD SET 2 1 IAC SE
(Host polls for status)
IAC SB X.3-PAD SEND IAC SE
User:
IAC SB X.3-PAD RESPONSE-IS 1 29 2 1 3 2 4 0 5 0 7 17 8 0
12 0 13 3 15 1 16 8 17 21 18 0
128 1 129 23 134 1 IAC SE
6. Parameters
In outline, the X.3-PAD option uses the following parameters.
Parameter 0 indicates whether the user telnet notifies the host
about parameter changes made for local reasons.
Parameters 1 through 22 are basically those of CCITT X.3, with
some changes in interpretation; they are listed in detail below.
Parameters 23 through 127 are reserved for potential extensions to
CCITT's X.3 definition.
Parameter 128 selects an "extension set", determining the meaning
of parameters 129 through 255. One extension set is proposed in
this RFC, others may be added. The extension mechanism is
explained under parameter 128's description.
Levy & Jacobson [Page 7]
^L
RFC 1053 Telnet X.3 PAD Option April 1988
Parameters 129 through 255 are meaningful only when defined in the
extension set indicated by the current value of parameter 128.
It should NOT be assumed that all implementations will necessarily
support all parameters defined here, or all values of those
parameters. Supported parameter/value combinations, however, should
behave as described here.
The following parameter is specific to this Telnet option.
Parameter 0 -- Notify host of user-initiated parameter changes.
Code 0 -- Host is not notified.
Code 1 -- User telnet notifies host by sending IS message.
If the user telnet, for some local reason, changes a parameter,
should it send an IS message to the host? This is desirable, since
the host telnet cannot be sure of knowing the user telnet's current
status otherwise. On the other hand, some user telnets may be
unable to send notification. Consider a user calling from an X.25
PAD through an X.25-to-telnet gateway. The user may change local
PAD parameters freely, but since normal PADs send no message when
this happens, the gateway cannot inform the host telnet. Moreover,
some sloppy host telnets may not wish to know about user parameter
changes.
In normal usage, the host will ask to SET parameter 0 to its
preferred state upon initialization; the user telnet accepts the
setting if it can; then the host polls (using SEND) for the user
telnet's decision. A disappointed host might periodically poll for
changes, or admonish the (human) user not to change parameters, or
remain silent and simply work oddly if changes are made.
The following parameters are as defined by the 1984 CCITT X.3 standard.
Numbers are in decimal.
Parameter 1 -- Character to escape to local telnet command mode.
Code 0 -- No ASCII character performs this function (though
some special mechanism, e.g., a function key, still may).
Code 1 -- DLE (ASCII code 16).
Codes 32 through 126 -- ASCII code of the character.
Codes 2 through 31 are not defined by X.3, but might also be taken
to refer to the corresponding ASCII control characters. X.3 seems
to be unable to name SOH (control-A) as a command escape character.
Levy & Jacobson [Page 8]
^L
RFC 1053 Telnet X.3 PAD Option April 1988
Parameter 2 -- Local echo of characters typed by the user.
Code 0 -- No local echo.
Code 1 -- Local echo.
Several echoing styles are possible. Parameter 13 selects whether
a carriage return echoes as itself or as CR LF. Parameter 20 may
suppress echoing of particular ASCII characters. The extension
parameter 134 selects a style for echoing non-printing characters
such as ESC.
Parameter 3 -- Set of forwarding characters.
The value is bit-encoded; each nonzero bit specifies a set of
characters. The user telnet should accept characters from the
user's keyboard, buffering them until it receives any of the
specified characters (or until some other forwarding condition is
satisfied, see below), and then sending the buffer to the host.
It may forward earlier if necessary, e.g., if it runs out of buffer
space. It MUST eventually forward after receiving one of the
indicated characters.
Code 0 -- No forwarding characters.
Code 1 -- Alphanumeric characters (a-z, A-Z, 0-9).
Code 2 -- CR.
Code 4 -- ESC, BEL, ENQ, ACK.
Code 8 -- DEL, CAN, DC2.
Code 16 -- ETX, EOT.
Code 32 -- HT, LF, VT, FF.
Code 64 -- ASCII character codes 0 through 31 not listed above.
Note that there is no way provided here to forward on printable,
non-alphanumeric characters (punctuation marks).
Codes may be added to select the union of the associated sets of
characters.
Parameter 4 -- Forward after idle time.
When this parameter is nonzero, the user telnet sends its input
buffer to the host after a given period in which no characters are
typed, even if no forwarding character was received.
Code 0 -- Infinite time limit.
Codes 1 through 255 -- Time limit in 1/20 second units.
The value "1" may be taken to mean "forward immediately" if timed
Levy & Jacobson [Page 9]
^L
RFC 1053 Telnet X.3 PAD Option April 1988
input is inconvenient to provide. For other values, when timing is
available but the exact requested value is not, rounding to larger
time delays is suggested. If timing is requested but none is
available, immediate forwarding on every character is much
preferred over an infinite time limit.
Note the interaction with parameter 15, Local editing, and the
notes made under that heading.
Parameter 5 -- Flow control of user-to-host data.
A user telnet may be overwhelmed by data typed by the user. If
parameter 5 is 1, it may output X-OFF (DC3, ASCII code 19) to ask
the user to suspend input and X-ON (DC1, ASCII code 17) when the
user may resume typing.
Code 0 -- X-OFF and X-ON considered normal output data.
Code 1 -- X-OFF and X-ON used to control user input.
The extension parameters 130 and 131, if defined, specify other
codes to be used instead of ASCII DC3 and DC1.
Parameter 6, referring to messages sent from the PAD to the user,
does not seem to be relevant in this context.
Parameter 7 -- Function of Break, Interrupt, Attention, etc.
This parameter describes handling of some special key or other
character, implementation-defined, on the user's keyboard. It is
bit-encoded; codes may be added to select multiple functions.
Multiple functions may be performed in any order. Any messages
generated should be promptly sent to the host.
Code 0 -- No action.
Code 1 -- Send interrupt packet (Telnet IAC IP).
Code 2 -- Reset (break Telnet connection).
Code 4 -- Discard input from user not yet consumed by host.
Code 8 -- Escape to local Telnet command mode.
Code 16 -- Discard output from host (see parameter 8).
The X.25 'Interrupt', 'Reset', and 'Indication of Break' messages
are here translated to Telnet equivalents. See section 8 for
suggestions on discarding input and output.
Levy & Jacobson [Page 10]
^L
RFC 1053 Telnet X.3 PAD Option April 1988
Parameter 8 -- Discarding output from host.
This parameter is intended as a flag, indicating whether host
output is being ignored.
Code 0 -- Host output is sent to user.
Code 1 -- Host output is discarded.
This parameter is normally used in conjunction with parameter 7
when the 16's bit (Discard output on Break/Interrupt/Attention) is
set. An implementation is suggested in section 8 of this RFC.
Note that, if a signal from the user causes parameter 8 to be
changed and parameter 0 is set to 1, an X.3-PAD IS message should
be sent to the host.
Parameter 9 -- Padding after carriage return.
This parameter selects insertion of ASCII NUL padding characters
after output of each carriage return.
Codes 0 through 7 -- Insert that many padding characters.
Parameter 10 -- Line folding.
Output lines may be folded (e.g., by insertion of carriage return
and line feed) when they exceed a specified width.
Code 0 -- No output line folding.
Codes 1 through 255 -- Fold lines after that many characters.
Parameter 11 -- Bit rate.
This parameter indicates the serial data rate of the user's
terminal, if any. Though CCITT X.3 considers this parameter to be
read-only, it may be meaningful to allow the host to set as well as
read this value, thus changing the user's line speed dynamically.
Code 0 -- 110 bps Code 10 -- 50 bps
Code 1 -- 134.5 bps Code 11 -- 75 bps in, 1200 out
Code 2 -- 300 bps Code 12 -- 2400 bps
Code 3 -- 1200 bps Code 13 -- 4800 bps
Code 4 -- 600 bps Code 14 -- 9600 bps
Code 5 -- 75 bps Code 15 -- 19200 bps
Code 6 -- 150 bps Code 16 -- 48000 bps
Code 7 -- 1800 bps Code 17 -- 56000 bps
Code 8 -- 200 bps Code 18 -- 64000 bps
Code 9 -- 100 bps
Levy & Jacobson [Page 11]
^L
RFC 1053 Telnet X.3 PAD Option April 1988
Parameter 12 -- Flow control of host-to-user data.
When this parameter is 1, the user may type X-OFF (DC3, ASCII code
19) to suspend printing output, and X-ON (DC1, ASCII code 17) to
resume output.
Code 0 -- X-OFF and X-ON are sent as data to host.
Code 1 -- X-OFF and X-ON control output.
See also the extension parameters 130, 131 and 132.
Parameter 13 -- Line feed insertion; Telnet CR LF vs CR NUL.
The CCITT uses this parameter to select whether a typed CR should
be sent as CR or CR-LF, whether an output CR should have a LF
printed after it, and whether an echoed CR should be echoed with an
accompanying LF.
Here, it resolves the questions of mapping between the Telnet CR-LF
sequence and single ASCII codes (i.e., when the user presses the
carriage return key, should CR LF or CR NUL be sent to the host?
When the host sends CR LF, should the user see CR LF or merely CR?)
The value is bit-encoded; codes may be added to select multiple
functions.
Code 0 -- No line feed insertion
(typed CR sent as CR NUL; host CR LF printed as CR).
Code 1 -- Add line feed on output (host CR LF printed as CR LF).
Code 2 -- Add line feed on input (typed CR sent as CR LF to host).
Code 4 -- When echoing a typed CR locally, echo as CR LF.
Note the interaction with the TRANSMIT-BINARY Telnet option [5].
If the host has said WILL TRANSMIT-BINARY, then CR has no special
meaning on output; it always stands for the single character CR
regardless of this parameter's value. If the user telnet has said
WILL TRANSMIT-BINARY, a typed CR should likewise always be sent as
itself and not as CR LF or CR NUL.
Parameter 14 -- Output padding after line feed.
Gives the number of ASCII NUL padding characters to be sent to the
user's terminal after each output line feed.
Codes 0 through 7 -- Send that many padding characters.
Levy & Jacobson [Page 12]
^L
RFC 1053 Telnet X.3 PAD Option April 1988
Parameter 15 -- Local editing.
If this parameter is 1, the character delete, line delete and line
reprint functions (parameters 16, 17 and 18), if implemented,
should be enabled. Data should be sent to the host when a
forwarding character (see parameter 3) is typed or in case the user
telnet's input buffer becomes full.
Note the interaction with parameter 4, Forward after idle time.
User telnets need not handle the case where idle-time forwarding
and local editing are both enabled, i.e., the host should
explicitly request changing parameter 4 to 0 along with setting
parameter 15 to 1.
Code 0 -- No input editing. Any editing characters are considered
data.
Code 1 -- Input editing. Editing characters edit the input buffer.
Parameter 16 -- Character-delete character.
While local editing (parameter 15) is enabled, typing this
character erases the last character in the editing buffer, if any.
When editing is disabled, this character is not treated specially.
Code 0 -- No character has this function.
Codes 1 through 127 -- ASCII code of character-delete character.
See also parameter 19.
Parameter 17 -- Line-delete character.
While local editing (parameter 15) is enabled, this character
erases the entire contents of the editing buffer. When editing is
disabled, this character is not treated specially.
Code 0 -- No character has this function.
Codes 1 through 127 -- ASCII code of line-delete character.
See also parameter 19.
Parameter 18 -- Line-display character.
While local editing (parameter 15) is enabled, typing this
character causes the current contents of the editing buffer to be
printed on the user's terminal; nothing is sent to the host. When
editing is disabled, this character is not treated specially.
Code 0 -- No character has this function.
Levy & Jacobson [Page 13]
^L
RFC 1053 Telnet X.3 PAD Option April 1988
Codes 1 through 127 -- ASCII code of line-display character.
Parameter 19 -- Editing service signals.
This determines what is echoed to the user when local editing is
enabled and the character-delete or line-delete character is
entered.
Code 0 -- Nothing is echoed.
Code 1 -- Editing style is suitable for printing terminals.
Code 2 -- Editing style is suitable for display terminals.
Codes 8 and 32-126 -- Echo that ASCII character for
character-delete.
X.3 is specific on handling character- and line-deletion. If
parameter 19 is 1, echo character-delete with a "line delete with
three X's followed by CR LF. If 2, a character-delete echoes BS
SPACE BS, while a line delete echoes enough BS SPACE BS's to erase
the entire line. If 8 or 32-126, character-delete echoes that
character, and line delete echoes XXX CR LF. An extension
parameter could override these, selecting other styles if desired,
though none is proposed here.
Parameter 20 -- Echo mask.
When local echoing, parameter 2, is enabled, each nonzero bit in
this bit-encoded parameter's value suppresses echoing of some
subset of ASCII characters. Adding values suppresses echo for the
union of the specified subsets.
Code 0 -- all ASCII characters are echoed.
Code 1 -- CR is not echoed.
Code 2 -- LF is not echoed.
Code 4 -- VT, HT, and FF are not echoed.
Code 8 -- BEL and BS are not echoed.
Code 16 -- ESC and ENQ are not echoed.
Code 32 -- ACK, NAK, STX, SOH, EOT, ETB and ETX are not echoed.
Code 64 -- Editing characters are not echoed.
Code 128 -- other non-printing ASCII characters, and DEL, not
echoed.
Nothing is echoed when parameter 2 is 0. Some characters should
not be echoed regardless of parameter 20. If any of parameters 5,
12, or 22 are enabled (non-zero), then the XON and XOFF characters
should not be echoed. Nor should the escape-to-local command mode
character, parameter 1.
Levy & Jacobson [Page 14]
^L
RFC 1053 Telnet X.3 PAD Option April 1988
Parameter 21 -- Parity.
This parameter determines whether parity is checked on user input
and generated on output to the user. Values may be added to select
both.
Code 0 -- Parity neither generated nor checked.
Code 1 -- Even parity checked on input.
Code 2 -- Even parity generated on output.
Parameter 22 -- Page wait.
If enabled, this parameter causes the user telnet to pause after
every N lines of output as if X-OFF had been received. Output
resumes when X-ON is typed.
Code 0 -- No pause.
Codes 1-255 -- Pause after output of that many line feeds.
See also parameters 130, 131 and 132.
The following parameters are not part of CCITT X.3, but use the
extension mechanism proposed for this Telnet option.
Parameter 128 -- Extension set number.
This parameter selects one of a potentially large number of
"extension sets" -- more or less coherent collections of parameters
added to the basic X.3 family. User telnets may support several
extension sets. The host may determine whether a particular one is
supported by trying to set parameter 128. The user telnet should
accept the value if it provides some or all of the parameters in
that set.
Extension sets might be defined for a variety of purposes. For
example, Berkeley UNIX tty emulation, VMS emulation, Telenet's
extended parameters, French national PDN parameters, and so on.
Initial values need not be specified for extension parameters
(i.e., a host should explicitly negotiate for their values after
selecting an extension set). However, it is recommended that
default settings give service that resembles normal CCITT X.3
behavior where possible.
Extension sets are mutually exclusive. Different sets may use the
same parameters (from 129 through 255) for different purposes.
Only one extension set is in effect at a time. That is, if a host
Levy & Jacobson [Page 15]
^L
RFC 1053 Telnet X.3 PAD Option April 1988
requests service X from extension set A, then switches to extension
set B and requests its service Y, it should not expect that service
X is still being provided.
Some values of this parameter are reserved:
Code 0 -- Null extension set. Only (a subset of) the basic CCITT
X.3 parameters is provided. Every user telnet should
accept this setting.
Code 1 -- (A subset of) the extension set 1 parameters described
below is provided.
Code 255 -- Reserved for purely local (e.g., to a site), non-
standard collections of extensions.
Other extension sets may be proposed and assigned set numbers in
the range 2 through 254.
Set number are registered with the Internet Assigned Numbers
Coordinator at USC-ISI. Please contact:
Joyce K. Reynolds
USC Information Sciences Institute
Suite 1001
4676 Admiralty Way
Marina del Rey, CA 90292-6695
213-822-1511 JKReynolds@ISI.EDU
The following parameters form extension set number 1.
Parameter 129, extension set 1 -- Word-delete character.
Typing this character while local editing is enabled causes the
last word in the editing buffer to be erased. Several definitions
for a "word" are in common use; this RFC does not specify one.
There should be an indication to the user of what was erased. When
editing is disabled, this character is not treated specially.
Code 0 -- No character has this function.
Codes 1 through 127 -- ASCII code of word-delete character.
Parameter 130, extension set 1 -- Flow control OFF character.
Parameter 131, extension set 1 -- Flow control ON character.
Typing these characters while parameter 12 is enabled cause output
to be suspended or resumed, respectively. The user telnet may send
them to the user while parameter 5 is enabled to ask the user to
cease or resume supplying input.
Levy & Jacobson [Page 16]
^L
RFC 1053 Telnet X.3 PAD Option April 1988
If defined, these parameters should have default values of 19
(ASCII DC3) for parameter 130, and 17 (ASCII DC1) for parameter
131.
Code 0 -- No character has this function.
Codes 1 through 127 -- Function performed by that ASCII code.
Parameter 132, extension set 1 -- Host-to-user flow control convention.
Some styles of flow control accept only a particular character
(e.g., X-ON) to resume output; others resume on receipt of any
character. This parameter selects which to use. The default
should be zero, as this matches the X.3 convention.
Code 0 -- Resume output only when correct character is received.
Code 1 -- Resume output when any character is received.
Parameter 133, extension set 1 -- Alternate Attention, etc., character.
This character serves as a synonym for the Break, Attention, etc.,
key whose function is given by parameter 7.
Code 0 -- No ASCII character has this function
(there may still be a special key or other mechanism).
Codes 1 through 127 -- ASCII code of the character.
Parameter 134, extension set 1 -- Local echo style.
This parameter selects how non-printing characters should be
echoed, when parameter 2 is set to 1. The default should be zero,
where all characters are simply echoed as themselves (except
possibly carriage return; see parameter 13).
Code 0 -- All characters echo as themselves.
Code 1 -- Non-editing control characters echo as ^X for some
printable character X.
See also parameters 2, Local echo, and 20, Echo mask, which may
suppress echo of some or all characters regardless of this
parameter.
Parameter 135, extension set 1 -- Accept following character as data.
After typing this character, the next character entered is accepted
as data for transmission to the host even if it would normally have
a special meaning.
The default should be zero.
Levy & Jacobson [Page 17]
^L
RFC 1053 Telnet X.3 PAD Option April 1988
Code 0 -- No character has this function.
Codes 1 through 127 -- ASCII code of the character.
Parameter 136, extension set 1 -- Character to toggle discarding output.
Typing this character changes the state of parameter 8 (discarding
host-to-user output) from 0 to 1 or from 1 to 0. Thus an
indeterminate amount of host output, received between successive
instances of this character, will be discarded.
As usual, the host should be notified of each change if parameter 0
is set to 1. The host might wish to send SET messages at
appropriate points (e.g., preceding command prompts) to re-enable
output.
The default should be zero.
Code 0 -- No character performs this function (though another
mechanism still may do so).
Codes 1 through 127 -- Typing that character toggles parameter 8.
Parameter 137, extension set 1 -- User-to-host bits per character.
Parameter 138, extension set 1 -- Host-to-user bits per character.
These parameters determine whether, for example, a full 8-bit input
or output data path is available, or whether the most significant
bit(s) of input or output data is stripped. Typical values would
be 7 or 8.
Note that an 8-bit data path does not by itself imply transparent
input/output; CR -> CR LF translation, XON/XOFF interpretation,
parity and so on must also be disabled to achieve this.
7. Subsets, Extensions and Conflicts
An option as complex (and easy to extend) as this one, needs a policy
for what subsets and extensions are allowed, and recommendations for
negotiating one's way through a maze of partial implementations. In
short, what does it mean to say DO or WILL X.3-PAD?
A basic principle is that, since hardly any user telnet
implementation will provide all possible features, a host cannot
expect to get precisely any desired kind of service.
[This may be an arguable point. The CCITT defines a mandatory
subset of supported values for each X.3 parameter, with further
Levy & Jacobson [Page 18]
^L
RFC 1053 Telnet X.3 PAD Option April 1988
values optional. For example, the set of forwarding characters,
parameter 4, must accept at least the values 0 (none), 2 (carriage
return), and 126 (any control character or DEL). Though it would be
possible to adopt the CCITT's set of mandatory values there, I don't
think that would be desirable for two reasons.
First, some of the features specified (e.g., timed input) may be
hard to implement in some environments, and may well not be
necessary for many applications.
Second, this option provides for definition of entirely new
parameters. Unlike the X.3 case, one peer may use parameters whose
very existence is unknown to the other. So one cannot specify
mandatory or default values for ALL parameters.]
On the other hand, a host is at least entitled to know what kind of
service is being provided to the ultimate user. A user telnet's
status report may be incomplete (not describing features its
implementor did not know of); it may not describe the style of
interaction the host (or user, or application) would wish for, but it
should at least describe reality.
For telnet parameters with a range of possible values, if a user
telnet implements only one "enabled" and one "disabled" value, it
should choose the "enabled" value when asked for a setting it cannot
supply. A VMS telnet, for example, might allow only DEL or nothing
as the character-delete code. If a host asks it to use "backspace",
it should choose DEL rather than nothing. The host may then interpret
this contrary behavior as indicating a preferred value.
The problem of conflicting parameters, where several parameters
control overlapping services and may conflict, is a serious one. The
extension set scheme (see parameter 128) is intended to limit the
problem. Each extension set's parameters should be selfconsistent
and consistent with the CCITT X.3 parameters, but separate extension
sets need not be concerned with each other's parameters.
Where parameters might conflict, it is important to specify priority
as part of the parameters' description. For example, among
parameters 2 (Local echo), 20 (Echo mask), and extension set 1's 134
(Local echo style), Echo mask is significant only if Local echo is
enabled, and Local echo style applies only to characters selected for
echoing by the first two parameters.
This option's functions overlap with those of some existing Telnet
options, for example, ECHO (which can be interpreted to affect local
echo and possibly local line editing), NAOCRD and NAOLFD [6]
(specifying padding after output carriage returns and line feeds),
Levy & Jacobson [Page 19]
^L
RFC 1053 Telnet X.3 PAD Option April 1988
TRANSMIT-BINARY, Remote Controlled Transmission and Echo [3], and
SUPDUP [4].
Where X.3-PAD completely subsumes the function of another option, as
for ECHO, NAOCRD and NAOLFD, it's probably best to let the X.3-PAD
option, where acceptable to both sides, supplant them and to refuse
the other option.
The TRANSMIT-BINARY option can change (actually suppress) the
interpretation of some bits of parameter 13 related to Telnet newline
encoding, as mentioned under that parameter. As such it is
compatible with this option but must be kept in mind.
RCTE would be a much more difficult case, since its service does not
fit into this option's scheme and vice versa. However, it probably
is unimportant because of the scarcity of RCTE implementations.
Some existing Telnet options can serve related but complementary
functions, for example NAOHTS [7] for output tab handling, or
TERMINAL-TYPE [8].
8. Implementation suggestions
It is strongly recommended that a user telnet support at least the
combination with parameters 2=0, 3=126, and 4=1 (no local echo,
forward immediately or nearly so on any input character) so that a
dissatisfied host has the option of backing off and doing its own
character handling.
The "discard output" function invoked by the Break, Interrupt,
Attention, etc., key if the 16's bit is set in parameter 7 may be
implemented as follows.
1. When the key is pressed, set parameter 8 to 1, begin
discarding output, send IAC SB X.3-PAD IS 8 1 IAC SE to
notify the host. (It may not need to know, but the
message should be sent for consistency.)
2. Send IAC DO TIMING-MARK.
3. Send any other messages associated with the key (e.g.,
IAC IP).
4. Eventually, the host should send either IAC WILL
TIMING-MARK or IAC WON'T TIMING-MARK, even if it knows
nothing about the TIMING-MARK option. It will probably
appear close, in the output stream, to the point where
the host recognized any associated messages (e.g., IP).
Levy & Jacobson [Page 20]
^L
RFC 1053 Telnet X.3 PAD Option April 1988
When the TIMING-MARK arrives, reset parameter 8 to 0 and
cease discarding output. Send IAC SB X.3-PAD IS 8 0
IAC SE.
The Telnet SYNCH mechanism (see [2]) may be employed in concert with
such a scheme. A closed-loop flush, though, will be more effective
at discarding excess output than SYNCH used alone. Provision of some
such mechanism for discarding unwanted output, e.g., after
interrupting the host, is heartily recommended.
Discarding input is less clear cut. Certainly, any buffered data not
yet sent should be discarded; one might also use SYNCH to encourage
the host telnet to discard more.
9. References
1. Recommendation X.3, from International Telecommunications Union
CCITT Red Book, volume VIII, fascicle VIII.2, 1984.
2. Postel, J., and J. Reynolds, "Telnet Protocol Specification",
RFC-854, USC Information Sciences Institute, May 1983.
3. Postel, J., and D. Crocker, "Remote Controlled Transmission and
Echoing Telnet Option", RFC-726 and NIC-39237, SRI-ARC, March
1977.
4. Crispin, M., "SUPDUP Protocol", RFC-734 and NIC-41953, SU-AI
October 1977; Crispin, M., "Telnet SUPDUP Option", RFC-736 and
NIC-42213, SU-AI, October 1977; also Greenberg, B., "Telnet
SUPDUP-OUTPUT Option", RFC-749 and NIC-45499, MIT-Multics,
September 1978.
5. Postel, J., and J. Reynolds, "Telnet Binary Transmission
Option", RFC-856, USC Information Sciences Institute, May 1983.
6. Crocker, D., "Telnet Output Linefeed Disposition Option", RFC-
658 and NIC-31161, UCLA-NMC, October 1974; and "Telnet Output
Carriage Return Disposition Option", RFC-652 and NIC-31155,
UCLA-NMC, October 1974.
7. Crocker, D., "Telnet Output Horizontal Tab Stops Option", RFC-
653 and NIC-31156, UCLA-NMC, October 1974. [RFC numbers 652
through 658 (NIC 31155 through 31161) are in a similar vein.]
8. Solomon, M., and E. Wimmers, "Telnet Terminal Type Option",
RFC-884, University of Wisconsin - Madison, December 1983.
Levy & Jacobson [Page 21]
^L
|