mcc@ETN-WLV.EATON.COM (Crockett) (08/06/87)
(yet another long message) 1) Before I am chastised severely for my interpretations of the TELNET protocol, I would like to note that much of the work that I perform is related to communications over networks used within the DoDIIS community. The acceptance of the DDN network architecture to replace AUTODIN, DSSCS/DIN, IDHSC II, etc. presents some interesting problems. First, the DoDIIS community has a significant involvement with Digital Equipment Corporation and, in particular, PDP11 processors and the IAS operating system. Second, there is a desire not to invalidate a rather significant investment in software that has been developed over the last ten (10) years. Third, there is a migration to LAN architectures which permit workstations (PCs) to replace directly connected terminals. As a result, the implementation and interpretation of TELNET is rather significant. The Digital IAS, RSX-11M (PLUS), and VMS TT drivers/handlers trigger on <CR> as the end-of-line terminator. From the perspective of these operating systems, an <LF> is generally regarded simply as a vertical positioning command to the next line from the current cursor/ print head position. TELNET software provided with various DDN protocol suite packages present particular problems when they are too blatant in their UNIX style treatment of an end-of-line condition (\n). 2) For the DDN three (3) different TELNET specifications/standards have been established. They are: a. RFC 854 which governs the ARPANET, b. MIL-STD-1782 which governs the MILNET, and c. DoDIIS TELNET Specification which governs other subnets that are currently separated from the ARPANET and MILNET. RFC 854 does not have the legal stature of a standard and cannot be specified for government procurements; therefore, MIL-STD-1782 which is a legal standard is the document that must be conformed to when providing TELNET to DoD or other governmental agencies. The RFC and the MIL-STD are essentially the same except that some of the asides and discussions contained in the RFC have been abbreviated or deleted. The most significant departure from the RFC is the deletion of the reference to "...a companion document, 'TELNET Option Specifications', which should be consulted..." and the inclusion of a set of appendices which define the options that are required in the MIL-STD. The DoDIIS TELNET Specification has the most significant differences primarily as a result of the Network Virtual Data Entry Terminal (NVDET) abstraction definition. In contracts, the DoDIIS TELNET is generally specified in addition to the MIL-STD to include the NVDET. [The neat trick is how to determine whether the remote terminal is an NVT or an NVDET since some of the option defaults are different.] 3) My original comments on the use <CR><NUL> and <CR><LF> were based on my interpretation of MIL-STD-1782. From my reading of RFC 854, there is no reason for me to change my interpretation. Both documents state that a "...<CR><LF> must be treated as a single 'new line' character and used whenever their combined action is intended; the sequence <CR> <NUL> must be used where a carriage return alone is actually desired...". The following excerpt is from the discussion of the GA option but is equally valid when discussing the action taken when a <CR> is encount- ered. "The 'local' computer is no longer able to decide whether to retain control after seeing an end-of-line signal or not; this decision can only be made by the 'remote' computer which is processing the data." When the ENTER or RETURN key is struck, the local host has no idea what the intended action is to be and therefore should transmit a <CR><NUL> and allow the remote host to provide the interpretation. The transmission of a <CR><LF> is presumptuous except when the user enters a <LF> as the next character. In the case of a 'gateway' computer, it should perform absolutely no conversions and pass the data on as it was received. <CR><NUL> input, <CR><NUL> output. <CR><LF> input, <CR><LF> output. 4) An interesting question is what will happen when a TELNET connection is used to edit, read, or write an AUTODIN message. The AUTODIN ELF is <CR><CR><LF>. (Believe it or not, there are still devices out there that require the <CR><CR> before the <LF> to compensate for head travel time) Merton Campbell Crockett AN/GYQ-21(V) Program EATON Information Management Systems mcc@etn-wlv.EATON.COM
jas@MONK.PROTEON.COM (John A. Shriver) (08/06/87)
So why can't the IAS system be generous and accept <CR><NUL> or <CR><LF> and type <CR> on the virtual teletype, and type <LF> on the virtual teletype when <LF> is received? The general interpretation in the Internet community is that <CR><LF> is what is sent as the generic end-of-line on input. (Making this change would be consonant with the robustness principle of TCP.) Of course, IAS can generate whatever it want on output, and it the user Telnet does the wrong thing with it, then shame on it. I think part of the clarity problem in the spec is that it does not adequately seperate the meanings on input and output.
mcc@ETN-WLV.EATON.COM (Crockett) (08/08/87)
Sorry for not responding earlier to your message, John. I fully intend to have a robust implementation under IAS; however, I want to be sure that I understand what TELNET is doing and what it expects. There are some IAS processes that a user could invoke during a TELNET session that utilize <CR>, <LF>, or <ESC> as line terminators. What the process will do is dependent upon which line terminator is used. I would prefer not to change any of these processes to distinguish between a local terminal and a TELNET terminal or to prohibit the use of these processes to a TELNET terminal. At the moment we have a crude brute force TELNET port which suffers due to archtectural differences between UNIX and IAS and will produce an unacceptable system load in the target application system environment. Our current TELNET port is based on one of our vendors upper layer protocol support package for his TCP/IP board level implementation for an Ethernet interface. It's attrocious! The code looks okay until you notice '/*' and '*/' surrounding rather significant portions of code. When linked to our 4.3bsd gateway machine, we found that it lies about its ability to perform some of the options. Unlike Unix, VMS, RSX-11M (11M PLUS), etc. which have device and pseudo drivers that are integrated into the operating system; IAS has independent tasks referred to as handlers to support devices and pseudo devices. The thought was to split "telnetd" into one portion that was to listen for and accept connections and to integrate the remainder of it with the pseudo terminal handler which significantly reduces the number of context switches that would be required to pass data between the Ethernet interface handler, telnetd, and pseudo terminal handler. I could go off and do whatever I please since the rest of the world won't be permitted access to the network until a "secure" gateway can be developed but it seemed nicer to plan for the future when there will be a common backbone for all the networks. Merton Campbell Crockett