Movatterモバイル変換


[0]ホーム

URL:


[RFC Home] [TEXT|PDF|HTML] [Tracker] [IPR] [Info page]

HISTORIC
Network Working Group                              Joel Lilienkamp (SDC)Request for Comments: 929                          Richard Mandell (SDC)                                         Michael Padlipsky (Mitre Corp.)                                                           December 1984PROPOSED HOST-FRONT END PROTOCOLStatus Of This Memo   The reader should be aware of several things in regard to what the   present document is up to.  First and foremost, IT IS A PROPOSAL FOR   A STANDARD, NOT A STANDARD ITSELF.  Next, it assumes that the   separate document,RFC 928, which is an introduction to the present   document, has been read before it is. Next, it should be understood   that "final cut" over this version of the document has been exercised   by the author ofRFC 928, not by the primary author of the present   document, so any readers bothered by style considerations should feel   free to blame the former, who's used to it, rather than the latter,   who may well be guiltless.  (Editing at a distance finally become too   hard to manage, so if I'm typing it myself I'm going to fiddle with   it myself too, including, but not limited to, sticking my own section   on the Conceptual Model in before Joel's words start, rather than   leaving it in the Introduction.  MAP)   Finally, it should be noted that this is not a finished document.   That is, the intent is eventually to supply appendices for all of the   protocol offloadings, describing their uses of protocol idiosyncratic   parameters and even their interpretations of the standard per-command   parameters, but in order to get what we've got into circulation we   haven't waited until all such appendices have been written up.  (We   do have notes on how to handle FTP, e.g., and UDP will be pretty   straightforward, but getting them ready would have delayed things   into still another calendar year, which would have been very annoying   ... not to say embarrassing.) For that matter, it's not even a   finished document with respect to what is here. Not only is it our   stated intention to revise the protocol based upon implementation   experience gained from volunteer test implementations, but it's also   the case that it hasn't proven feasible to iron out all known   wrinkles in what is being presented.  For example, the response codes   almost certainly need clarification and expansion, and at least one   of us doesn't think mandatory initial parameters need control flags.   However, to try too hard for polish would be to stay in subcommittee   for the better part of forever, so what you see is what we've got,   but certainly isn't meant to be what you or we are stuck with.   This RFC suggests a proposed protocol for the ARPA-Internet   community, and requests discussion and suggestions for improvements.   Distribution of this memo is unlimited.Lilienkamp & Mandell & Padlipsky                                [Page 1]

RFC 929                                                    December 1984Proposed Host-Front End ProtocolConceptual Model   There are two fundamental motivations for doing outboard processing.   One is to conserve the Hosts' resources (CPU cycles and memory) in a   resource sharing intercomputer network, by offloading as much of the   required networking software from the Hosts to Outboard Processing   Environments (or "Network Front-Ends") as possible. The other is to   facilitate procurement of implementations of the various   intercomputer networking protocols for the several types of Host in   play in a typical heterogeneous intercomputer network, by employing   common implementations in the OPE.  A third motivation, of basing a   network security approach on trusted mandatory OPEs, will not be   dealt with here, but is at least worthy of mention.   Neither motivation should be allowed to detract from the underlying,   assumed desire to perform true intercomputer networking, however.   Therefore, it is further assumed that OPEs will be attached to Hosts   via a flexible attachment strategy, as described in [1]. That is, at   the software level an explicit Host-Front End Protocol (H-FP) will be   employed between Hosts and OPEs, rather than having OPEs emulate   devices or device controllers already "known" to Host operating   systems (in order to avoid introducing new code into the Host).   For reasons discussed in the Introduction, an H-FP resolves into   three layers.  The Link layer enables the exchange of bits between   Host and OPE.  The Channel layer enables the bit streams to be   demultiplexed and flow controlled  (both the Channel and Link layers   may use preexisting per-Host mechanizations, it should be recalled).   The Command (or "Service Access") layer is our primary concern at   present. It serves as the distributed processing mechanism which   allows processes on Hosts to manipulate protocol interpreters (PIs)   in OPEs on their behalf; for convenience, it will be referred to as   "the H-FP" here.  (It should be noted that the Link and Channel   layers may be viewed as roughly equivalent to the inboard processing   investment for a Host-comm subnet processor PI and device driver, so   in practical terms the savings of resources achieved by outboard   processing come from making the H-FP "smaller" than the inboard   implementations of the protocols it allows to be offloaded.)   The crucial property of the H-FP conceptually is that it stands as   the interface between a (Host) process and a PI (which is actually   outboard).  Usually, the model is that of a closed subroutine   interface, although in some cases an interprocess communication   mechanism model must be appealed to.  That is, the interactions   between cooperating H-FP PIs in some sense mimic subroutine or IPC   calls, from the perspective of Host processes calling upon their own   H-FP PIs, which in turn are of course interfacing via just suchLilienkamp & Mandell & Padlipsky                                [Page 2]

RFC 929                                                    December 1984Proposed Host-Front End Protocol   mechanisms themselves. Another way of putting it is that "if the   protocols were inboard," the processes invoking H-FP wouldn't know   the difference.  H-FP, then, may be viewed as a roundabout way of   letting Host processes "get at" various PIs.   Naturally, the mechanization of the desired concept cannot be   particularly literal.  After all, the Hosts and the OPEs are   different processors, so we're not envisioning a passing through of   parameters in an exact fashion.  However, in broad terms the model is   just that of a somewhat funny interface between a process and a PI.   (This should not be construed as ruling out the occurrence of events   which prompt the OPE to initiate an exchange of commands with the   Host, though; see the Introduction for more on the topic of   "Symmetric Begins.")Interaction Discipline   The interaction between the Host and the OPE must be capable of   providing a suitable interface between processes (or protocol   interpreters) in the Host and the off-loaded protocol interpreters in   the OPE.  This interaction must not, however, burden the Host more   heavily than would have resulted from supporting the protocols   inboard, lest the advantage of using an OPE be overridden.   Channel Level Interaction   As stated elsewhere, the Channel level protocol (implicitly in   conjunction with the Link level) provides two major functions. These   are demultiplexing the traffic from the Link level into distinct data   streams, and providing flow control between the Host and the OPE on a   per stream basis.  These hold even if the Host-OPE attachment is DMA.   The data streams between the Host and the OPE are bidirectional. In   this document, the basic unit of data transferred by the Channel   level is referred to as a "chunk".  The primary motivation for this   terminology is that the H-FP permits the Channel level to be one of   several possible protocols, each with its own terminology.  For   example, a chunk on an X.25 Channel would be a packet, while a chunk   on the DTI H-FP channel would be a message.  While the Command level   is, in a sense, "more efficient" when the chunk size is permitted to   be large, the flexibility permitted in the choice of protocols at the   Channel level precludes any assumptions about the chunk size.   Each data stream is fully asynchronous.  A Channel protocol user can   send data at any time, once the channel has been properly opened.   (The Command level's logic may render some actions meaningless,   however.) The data transfer service provided by the Channel protocolLilienkamp & Mandell & Padlipsky                                [Page 3]

RFC 929                                                    December 1984Proposed Host-Front End Protocol   is reliable;  this entails delivery in the correct order, without   duplication, and checked for bit errors.  All retransmission, error   checking, and duplicate detection is provided by this protocol in a   way that is transparent to the user.  (If the attachment is DMA,   stream identification and chunk length must still be provided for.)   The flow control at the Channel level is provided to prevent the OPE   and the Host from overloading each other's resources by excessive   transmissions.  In general, this flow control should not directly   affect the outboard protocol interpreters' operation.  On the other   had, this flow control has the same effect as explicit interface   events that provide flow control between the user and the protocol   interpreter (e.g., the Allocate event of the interface specification   for TCP found in MIL-STD 1778).  Hence, such events do not need to be   communicated explicitly at the Command level.  (If the attachment is   DMA, flow control must still be provided for.)   Should Hosts require an OPE to be attached via a Link Level that   furnishes physical demultiplexing (e.g., a group of RS232 ports), any   attempt to avoid furnishing reliability and explicit flow control, is   done at their peril;  we have not chosen to assist such an   enterprise, but neither have we precluded it.  (It would certainly   violate the spirit of the thing, however.)   Command Level Interaction   The approach chosen for this H-FP is to base the interaction on a   small set of commands, separately applicable to a given Channel Level   channel. The commands are simple, but sufficiently flexible to permit   the off-loading of the interpreters of the large number of protocols   at various levels in the hierarchy.  This flexibility is made   possible in part by the similar nature of the interfaces to most   protocols, combined with the provision of "protocol idiosyncratic   parameters". These parameters are defined for each offloaded protocol   interpreter in the OPE.  The use of such parameters does not   complicate the basic design of the OPE, since it must be customized   for each off-loaded protocol anyway, and all that is required of the   OPE for those parameters is to pass them to the off-loaded protocol   interpreter.  Hence, an interface tailored to a particular protocol   can be created in a straightforward and cost-effective way.   The command dialog is more or less asynchronous.  Commands can be   issued at any particular time (except when there is a pending   command, which will be discussed below), and there is no need for   dummy traffic on a channel when no commands are issued.   Associated with each command is a response.  The purpose of thisLilienkamp & Mandell & Padlipsky                                [Page 4]

RFC 929                                                    December 1984Proposed Host-Front End Protocol   response is to indicate, at some level that depends in part on the   particular protocol interpreter that is offloaded to the OPE, whether   the command was successfully executed, and if unsuccessful, the   reason.  Often, generating the response involves interaction with the   protocol interpreter before a response can be generated.   When a command is issued, the issuer must wait for a response before   another command is issued.  The nature of the communication between   the Host and the OPE is thus a lock step command/response dialog.   There are two major exceptions to this principle, however. One   exception is the abrupt form of the End command, which can be issued   at any time to cancel any previously issued commands, and indicate   that services are no longer desired.  The other exception is the   Signal command.  Since a Signal is out-of-band and usually of high   importance, forcing it to wait on a response would be undesirable.   Hence, a Signal command can be issued while commands (other than   Signal) are pending.  However, a Signal command should not be issued   before a successful response to the Begin command has been received.   Since it is possible for more than one command of different types to   be pending at one time, a mechanism to distinguish responses is   needed.  Since there are never two commands of the same type pending,   including the command name in the response is sufficient to make this   distinction.   A special case command is the Transmit command.  Details of the   Transmit command are provided in the next section. Essentially, the   Transmit command is used to invoke the data transfer services of the   off-loaded protocol (when issued by the Host) or to indicate the   arrival of new data from the network (when issued by the OPE).  The   nature of specific protocol interfaces for these events varies widely   between protocols.  Some may block until the data is accepted by the   remote counterpart (or "peer") protocol interpreter, while others may   not.  Hence, there is a special parameter which indicates the nature   of the Transmit command interface.  It can either require that the   response should be generated immediately after determining the   Transmit command is complete and formed properly, or can indicate   that the response should not be generated until the appropriate   interface event is given by the remote protocol interpreter.  The   default action for all Transmit commands can be initialized using the   Begin command and changed using the Condition command.  Also, the   default action can be temporarily overridden by specifying a   parameter with the Transmit command. The net result of this mechanism   is to allow the Host to determine within reason just how lock-stepped   transmissions are to be.  (It is assumed that the usual case will be   to transfer the burden of buffering to the OPE by taking immediate   responses, provided that doing so "makes sense" with the particular   offloaded protocol in play.)Lilienkamp & Mandell & Padlipsky                                [Page 5]

RFC 929                                                    December 1984Proposed Host-Front End Protocol   Some protocols provide a block-oriented data transfer service rather   than a stream-oriented one.  With such a service, the data associated   with a transfer request is viewed as an integral unit.  For actual   network transmission, the protocol may permit these units to be   grouped or fragmented. However, the receiving end must deliver the   data in the original, integral units. Protocols that conform to this   model include some datagram protocols such as IP and UDP, and also   some connection protocols such as NBS TP.   To cater to these types of protocols, it is a convention that   commands, their parameters, and any associated data be transferred   between the Host and the OPE in a single chunk. Any data associated   with an H-FP command is viewed as an integral unit which is used in   the corresponding service request given to the outboard protocol   interpreter or delivered as a complete unit to the process in the   Host. Operation of stream-oriented protocols such as TCP will not be   adversely affected by this convention.   To accommodate Channel protocols that do not provide for arbitrarily   large chunks, a mechanism at the Command level is required to permit   the linking of multiple chunks into a single command, in order to   transfer the burden of buffering as much as possible from the Host to   the OPE.  The facility proposed here would consist of an indication   at the beginning of each chunk which would distinguish integral   commands, fragments of a command for which more fragments are yet to   arrive, and the final fragment of a command.  The details of this   mechanism are discussed in the section on the syntax of commands and   responses.   It is a convention for this H-FP that any data associated with a   command must start on a word boundary (as defined by the local   system).  Consequently, there is a need to provide padding within the   commands.  Such padding is used only to fill to the next appropriate   boundary, and has no semantic significance to the command interpreter   (i.e., two commands that are identical except for the amount of   padding should behave identically).  The details of this padding are   discussed in the section on the syntax of commands and responses.Lilienkamp & Mandell & Padlipsky                                [Page 6]

RFC 929                                                    December 1984Proposed Host-Front End ProtocolSyntax Rules   At the Command Level, communication between the Host and the OPE   takes the form of commands and responses.  A command is a request for   some particular action, and the response indicates the success or   failure of performing the requested action.   All commands and responses are coded in ASCII characters. (Nothing   precludes OPEs from accepting EBCDIC from Hosts that use it in native   mode, but that is not required.) These characters are sent in some   way convenient for the Host, and the OPE is sufficiently flexible to   interpret them.  (i.e., OPEs are expected to accommodate Host   idiosyncracies in regard to such things as use of 7-bit ASCII in a   9-bit field.) This approach offers several advantages:   Adaptabilities in most Hosts:  Most Hosts have the ability to   generate and interpret ASCII character streams.  Hence, integrating   H-FP into a Host will not require difficult software.   Script generation:  Generation of test and operational command   scripts will be simplified, since they will not need to contain   special characters.   Terminal Operation:  Using simple command streams simplifies the   conversion of an OPE to a generic virtual terminal support machine.   This is particularly useful during development and testing.   Testing:  Testing will not require special hardware to interpret   commands and responses.  A terminal or data line analyzer would be   adequate.   The specific format for the commands and responses will be discussed   in the sections that follow. In those sections, the quote character   is used to indicate strings.  The symbols "<" and ">" (referred to as   angle brackets) are used as meta-characters.   Syntax of Commands   As alluded to in the section discussing the interaction discipline   between the Host and the OPE, a function is provided by which a chunk   can be used to carry either a complete command or a fragment of a   command.  The mechanism chosen to provide this function entails use   of the first character position in the chunk as a chunk usage   identifier.  The character "C" in the first position indicates a   chunk containing a single, complete command.  "F" in the first   position indicates a chunk which is the first part of a multichunk   command. "M" in the first position indicates the chunk is a middleLilienkamp & Mandell & Padlipsky                                [Page 7]

RFC 929                                                    December 1984Proposed Host-Front End Protocol   part (neither the first nor the last chunk) of a command.  Finally,   "L" indicates the chunk is the last chunk of a multi-chunk command.   Hence, the following sequences of chunks (the letter corresponds to   the chunk usage identifier in each chunk, and the angle brackets   enclose a chunk) are legal:      <C>      <F><L>      <F><M><M><L>   while the following are not legal:      <L>      <M><L>      <F><C>   Tactics for handling multiple chunks with regard to OPE buffering   limits are left to the ingenuity of OPE builders. The spirit is to   take as much as you can, in order to relieve the Host of the   necessity of buffering itself.   A command always begins immediately following the indicator   character, with possible intervening spaces.  This implies a chunk   can contain at most one complete command.  The end of the command   (not including the data) is signified by a newline (denoted as <nl>   in this document) that does not appear inside a quoted string (see   below).  The end of the data is designated by the end of the last   chunk.   Commands take the form of an ASCII string.  The command identifier is   the first word of the chunk.  It consists of at least the first two   letters of the command, in either upper or lower case (e.g., the   sequences "BE", "Be", "bE", and "be" all identify the Begin command).   Additional letters of the command name can be included if desired to   aid readability of the command stream.   Following the command identifier is a list of parameters. These   parameters are also represented as ASCII strings, although the   specific format will depend on the particular parameter.  The data to   be transmitted is not considered a control parameter, however, and   need not be ASCII data.   Parameters are separated by one or more spaces.  Tabs, newlines, and   other white space are not legal parameter separators.   Parameter strings may be quoted, using the character <">. AnyLilienkamp & Mandell & Padlipsky                                [Page 8]

RFC 929                                                    December 1984Proposed Host-Front End Protocol   characters between the <"> characters are a part of the parameter,   including spaces and newlines.  The character <"> that is part of the   parameter is represented inside a quoted string as <"">.   The order in which the parameters appear within the command is   significant to their interpretation by the Host and by the OPE.   Optional parameters may be skipped by using the characters ",," to   indicate a NULL parameter.  Such a NULL parameter takes its default   value.  Alternatively, each parameter has a MULTICS/UNIX style   Control Argument/Flag associated with it that can be used to identify   the parameter, without placing NULL parameters for each parameter   skipped.  This flag consists of one or two ASCII characters, and   either upper or lower case may be used.  For example, if the fourth   parameter of a command had a flag of "-p" and the user wished the   first three parameters to be null, he could use:      command -p value   or      command -P value   instead of      command ,, ,, ,, value   if it were more convenient for the Host to do so.  Flagged parameters   must still appear in the correct sequence within the command,   however.   There may be data associated with some of the commands.  Any such   data is placed into the chunk following all the parameters and the   unquoted newline. Padding can be provided by placing spaces between   the end of the final parameter string and the newline, so that data   begins on a word boundary. The OPE will always pad to a host word   boundary.  Padding by hosts is optional.   Syntax of Responses   Responses are actually just a special form of a command.  It is   anticipated that all responses would fit into a single channel chunk,   although the mechanisms described for multichunk commands can   certainly be used in responses.  The ASCII string used to uniquely   identify the response command is "RE" ("Re", "rE", and "re" are also   permitted).   After the response command identifier is the original commandLilienkamp & Mandell & Padlipsky                                [Page 9]

RFC 929                                                    December 1984Proposed Host-Front End Protocol   identifier, so the response can be associated with the proper   command.  Following this identifier is a three ASCII digit response   code, a set of protocol idiosyncratic parameters, and a textual   message.  The protocol idiosyncratic parameters are used to transfer   interface information between the Host and the OPE, and may not be   needed when off-loading some protocol interpreters.  The textual   message is intended for human interpretation of the response codes,   and is not required by the protocol.  The three digits uniquely   identify the semantics of the response, at least within the context   of a particular command and particular outboarded protocol   interpreter.   Responses are numerically grouped by the type of information they   convey.  The first digit identifies this group, and the last two   digits further qualify the reply.  The following list illustrates   this grouping.      0XX Successful:  The command was executed successfully. The          response code may contain further information.      1XX Conditional Success:  The command was executed successfully,          but not exactly according to the service and flow control          suggestions.  If those suggestions were particularly important          to the requester, he may wish to issue an End command.  The          response code contains information on what suggestion or          suggestions could not be followed.      2XX Command Level Error:  An error at the command level has          occurred.  This could include requesting services of a          protocol not supported, or a problem in the way those services          were requested.  This level does not include problems with the          syntax of the command or its parameters.      3XX Syntax and Parameter Errors:  An error in the syntax of the          command or a problem with one of its parameters has occurred.          A problem with a parameter may be other than syntactical, such          as illegal address.      4XX Off-loaded Protocol Interpreter Problems:  Some problem with          the particular off-loaded protocol has occurred.      5XX Local OPE Internal Problems:  Problems, such as insufficient          OPE resources, or problems with OPE to subnet interface.      6XX Security Problem:  Some problem with Host, network, or OPE          security has occurred.  The response code indicates the          problem.Lilienkamp & Mandell & Padlipsky                               [Page 10]

RFC 929                                                    December 1984Proposed Host-Front End Protocol      7XX Reserved for Future Expansion      8XX Reserved for Future Expansion      9XX Protocol Idiosyncratic Errors:  Some error occurred that is          idiosyncratic to the particular off-loaded protocol being          used.  The response code indicates the error.Description of the Commands   As stated above, communication between the Host and the OPE at the   Command Level is accomplished using commands and responses.  Commands   may be issued by either the Host or the OPE, and are used to   stimulate activity in the other entity. Some commands may only have a   meaningful interpretation in one direction, however.  A response   indicates that the activity started by the command was completed, and   a code indicates success or failure of the command, and perhaps other   information related to the command as well.   Associated with each command is a set of parameters.  The order in   which the parameters appear is significant to the correct operation   of the protocols.  More information on the syntax of command   parameters can be found in the syntax descriptions.   The commands are:      - Begin: initiate communication between a process in the Host and      an off-loaded protocol interpreter in the OPE.  (A Channel level      stream/connection will typically have been opened as a prior step.      All other commands, except No-op, apply to a stream on which a      successful Begin has been done.)      - Transmit: transmit data between a process in the Host and an      off-loaded protocol interpreter in the OPE.      - Signal:  cause an out-of-band signal to be sent by the      off-loaded protocol interpreter to its peer, or indicate the      arrival of such a signal from the remote side.      - Condition: alter the off-loaded protocol interpreter's      operational characteristics.      - Status: transfer status requests or information between a      process in the Host and an off-loaded protocol interpreter in the      OPE.Lilienkamp & Mandell & Padlipsky                               [Page 11]

RFC 929                                                    December 1984Proposed Host-Front End Protocol      - End: indicate that services from the off-loaded protocol      interpreter are no longer required, or will no longer be provided.      - No-op:  performs no operation, but facilitates testing.   These commands will be discussed in the following sections. Each of   these sections includes a discussion of the purpose of the command, a   description of each of the parameters used with the command, a list   of responses for the command, an example of the command, and a set of   notes for the implementor.  (An appendix will eventually be furnished   for each protocol offloading, showing the use of its protocol   idiosyncratic parameters as well as of the general parameters on a   per-command basis.  Initially, only representative offloadings will   be treated in appendices, with others to be added after the protocol   gains acceptance.)   Begin      Purpose of the Begin Command         The purpose of a Begin command is to initiate communication         between the Host and the OPE on a particular stream or channel         (the channel is opened as a separate step, of course). The         interpretation of the command is somewhat dependent upon         whether it was issued by the Host of the OPE.         - If the command was issued by the Host, it means some process         in the Host is requesting services of a protocol that was         off-loaded to the OPE.  The user request results in the         establishment of a channel connection between the Host and the         OPE, and a Begin command to the Command interpreter in the OPE.         - If the command was issued by the OPE, it means some protocol         interpreter in the OPE has data for some process in the Host         which is not currently known by the OPE.  An example would be         an incoming UDP datagram on a new port, or if no Begin for UDP         had been issued at all by the Host.  (An incoming TCP         connection request could be handled by a response to the user's         Passive Open request, which had previously caused a Begin         request from the Host; an incoming TCP connection request to a         port on which no Listen had been issued would cause an OPE         generated Begin, however.)         As indicated earlier, any particular Host is not required to         support two-way Begins.Lilienkamp & Mandell & Padlipsky                               [Page 12]

RFC 929                                                    December 1984Proposed Host-Front End Protocol      Parameters of the Begin Command         The Begin command has several parameters associated with it.         These parameters contain information needed by the offloaded         protocol to provide an adequate level of network service.  This         information includes protocol, source and destination         addresses, and also type of service and flow control advice.         These parameters are discussed in detail below.      Protocol         The protocol parameter identifies that off-loaded protocol in         the OPE to which Begin is directed, or which issued the Begin         to the Host.  For example, if the user wished to utilize TCP         services, and the TCP software was off-loaded into the OPE,         then the Protocol parameter for the Begin command would be TCP.         There are two categories of protocol parameters -- generic and         specific.  A generic parameter identifies a type of protocol         service required, but does not identify the actual protocol.         Use of generic protocols allows a Host process to obtain         network services without specific knowledge of what protocol is         being used; this could be appropriate for use in situations         where no specific aspect(s) of a specific protocol is/are         required.  For example, the user may select a generic         Host-to-Host connection protocol, and (at some point in the         future) may actually receive services from either TCP or the         NBS Transport Protocol, depending on the network (or even the         foreign Host) in question.  A specific protocol parameter         identifies some particular protocol, e.g., TCP, whose use is         required for the given channel.         The valid entries for the protocol field include:            Generic   Specific  Comment            GIP       IP        Datagram Internetwork Protocol            HHP       TCP       Connection Transport/Host-Host Protocol            GDP       UDP       Datagram Transport/Host-Host Protocol            VTP       TEL       Virtual Terminal (Telnet) Protocol            GFP       FTP       File Transfer Protocol            MAIL      SMTP      Mail Transfer Protocol            PROX      PROX      Proximate Net Interface Protocol         (Note that the final line is meant to allow for a process in an         OPE'd Host's getting at the PI of the Network Interface         Protocol for whatever the proximate network is.  Of course, soLilienkamp & Mandell & Padlipsky                               [Page 13]

RFC 929                                                    December 1984Proposed Host-Front End Protocol         doing only makes sense in specialized contexts.  We conceive of         the desirability of "pumping bits at a peripheral" on a LAN,         though, and don't want to preclude it, even if it would be         impossible on many LAN's to deal with the problem of         distinguishing traffic coming back on the LAN in this "raw"         mode from normal, IP traffic.  Indeed, in some contexts it is         likely that administrative considerations would preclude         avoidance of IP even if technical considerations allowed it,         but it's still the case that "the protocol" should provide a         hook for going directly to the L I protocol in play.)         There is no default value for this parameter.  If it is not         present, the Begin command is in error.  The control flag for         this parameter is -pr.      Active/Passive         The Active/Passive parameter indicates whether the issuer of         the Begin command desires to be the Active or Passive user of         the protocol.  This parameter is particularly relevant to         connection-oriented protocols such as TCP, where the user may         actively pursue connection establishment, or else may passively         wait for the remote entity to actively establish the         connection; it also allows some process to establish itself as         the Host "fielder" of incoming traffic for a connectionless         protocol such as IP.         Active is requested using the single character "A".  Passive is         indicated using the character "P".  The default value of this         parameter is "A". Also, when the OPE issues the Begin command,         the value must be "A".  The control flag for this parameter is         -ap.      Foreign Address Primary Component         The addressing structure supported by H-FP is two level. Each         address has two components, the primary and the secondary.  The         exact interpretation of these two components is protocol         specific, but some generalities do apply.  The primary         component of the address identifies where the protocol is to         deliver the information. The secondary component identifies         which recipient at that location is to receive the information.         For example, the TCP primary address component is the Host's         Internet Address, while the secondary address component is the         TCP port.  Similarly, IP's primary address component is the         Host's Internet Address, and the secondary address component is         the IP ULP field.  Some protocols provide only a single levelLilienkamp & Mandell & Padlipsky                               [Page 14]

RFC 929                                                    December 1984Proposed Host-Front End Protocol         of addressing, or the secondary level can be deduced from some         other information (e.g., Telnet).  In these cases, only the         primary component is used.  To cater to such cases, the         secondary component parameter comes later in the parameter         list.         The Foreign Address Primary Component parameter contains the         primary component of the destination address.  It may be in         either a numeric or symbolic form.  (Note that this allows for         the OPE to exercise a Name Server type of protocol if         appropriate, as well as freeing the Host from the necessity of         maintaining an in-board name to address table.) The default         value for this parameter, although it only makes sense for         Passive Begins, is "Any Host".  The control flag for this         parameter is -fp.      Mediation Level         The mediation level parameter is an indication of the role the         Host wishes the OPE to play in the operation of the protocol.         The extreme ranges of this mediation would be the case where         the Host wished to remain completely uninvolved, and the case         where the Host wished to make every possible decision.  The         specific interpretation of this parameter is dependent upon the         particular off-loaded protocol.         The concept of mediation level can best be clarified by means         of example.  A full inboard implementation of the Telnet         protocol places several responsibilities on the Host. These         responsibilities include negotiation and provision of protocol         options, translation between local and network character codes         and formats, and monitoring the well-known socket for incoming         connection requests.  The mediation level indicates whether         these responsibilities are assigned to the Host or to the OPE         when the Telnet implementation is outboard.  If no OPE         mediation is selected, the Host is involved with all         negotiation of the Telnet options, and all format conversions.         With full OPE mediation, all option negotiation and all format         conversions are performed by the OPE.  An intermediate level of         mediation might have ordinary option negotiation, format         conversion, and socket monitoring done in the OPE, while         options not known to the OPE are handled by the Host.         The parameter is represented with a single ASCII digit.  The         value 9 represents full OPE mediation, and the value 0         represents no OPE mediation.  Other values may be defined forLilienkamp & Mandell & Padlipsky                               [Page 15]

RFC 929                                                    December 1984Proposed Host-Front End Protocol         some protocols (e.g., the intermediate mediation level         discussed above for Telnet).  The default value for this         parameter is 9.  The control flag for this parameter is -m.      Transmit Response Discipline         The Transmit Response Discipline parameter is used to set the         desired action on the OPE's part for generating responses to         Transmit commands.  Essentially the parameter determines when         the OPE's response to the transmit command occurs (i.e.,         immediately or delayed).         The Transmit Response Discipline value is represented by a         single ASCII character.  The character "N" is used for         nonblocking Transmit commands, which implies that responses for         Transmit commands should be generated as soon as the command         has been examined for correctness (i.e., that the syntax is         good and the parameters appear reasonable).  In other words,         the outboard protocol interpreter has the data in its queue,         but hasn't necessarily transmitted it to the net.  The         character "B" is used for blocking Transmit commands, which         requests that the response not be generated until the protocol         interpreter has successfully transmitted the data (unless, of         course, the Transmit command was badly formed). The default         value for this parameter is "N", or a nonblocking Transmit         command.  The control flag for this parameter is -tr.         (Depending on the protocol in play, "successfully transmitted"         might well imply that an acknowledgment of some sort has been         received from the foreign Host, but for other protocols it         might only mean that the given collection of bits has been         passed from the OPE to the proximate net.)      Foreign Address Secondary Component         The addressing mechanisms supported by this level of H-FP are         discussed above.  The Foreign Address Secondary Component         parameter contains the value of the destination address's         secondary component.  Some protocols do not require this         parameter, or can obtain it from other information.  Therefore,         the default value for this parameter is NULL.  A NULL secondary         component might be an error for some protocols, however.  The         secondary component can be expressed either numerically or         symbolically.  The control flag for this parameter is -fs.         (Note that it is intended to be "legal" to specify a Secondary         Component other than the Well-Known Socket for the protocol in         play; in such cases, the result should be that the virtualizing         of the given protocol be applied to the stream, in theLilienkamp & Mandell & Padlipsky                               [Page 16]

RFC 929                                                    December 1984Proposed Host-Front End Protocol         expectation that that's what the other side is expecting.  This         is to cater to, for example, a Terminal-Terminal protocol that         merely "does Telnet" to a socket other than the usual Logger.)      Local Address Secondary Component         The Local Address Secondary Component parameter contains the         value of the local address's secondary component.  (The primary         component is assumed to be the default for the Host, but can be         altered as well; see below.) Some protocols do not require this         parameter, or can obtain it from other information.  In some         cases, the OPE may already know the value for this parameter         and therefore not require it. The default value of this         parameter is NULL.  The local address secondary component can         be expressed either numerically or symbolically.  The control         flag for this parameter is -ls.      Begin Timeout Interval         After a Begin command is issued, a timer can be started.  If         the activity requested cannot be performed within some timed         interval, then the Begin command may expire.  An expired Begin         command returns a response code indicating a Begin timeout         occurred.  The Begin Timeout Interval parameter contains the         length of time the timer will run before the Begin timeout         occurs.         The parameter is represented as a string of ASCII digits         indicating the time interval in seconds.  The default value of         this parameter is infinity (i.e., the Begin command will never         timeout).  The control flag for this parameter is -bt.      Type of Service Advice         The Type of Service Advice parameter contains information on         the service characteristics the user desires from the offloaded         protocol.  Included in this parameter is the precedence of the         data transfer, and also indication of whether high throughput,         fast response time, or low error rate is the primary goal.         The format of this parameter is a letter immediately (i.e. no         intervening spaces) followed by a digit.  The letter "T"         indicates that high throughput is desired.  The letter "R"         indicates minimal response time is the goal.  The letter "E"         indicates that low error rates are the goal.  The letter "N"         indicates there are no special service requirements to be         conveyed.  The digit immediately following the characterLilienkamp & Mandell & Padlipsky                               [Page 17]

RFC 929                                                    December 1984Proposed Host-Front End Protocol         indicates the desired precedence level, with zero being the         lowest, and nine being the highest.  The specific         interpretation of this parameter is dependent on what service         options are provided by the protocol.  The default value of         this parameter is the lowest precedence (ROUTINE), and no         special service requests.  The control flag for this parameter         is -ts.      Flow Control Advice         The Flow Control Advice parameter contains information on the         flow characteristics desired by the user.  Some applications         such as file transfer operate more efficiently if the data is         transferred in large pieces, while other, more interactive         applications are more efficiently served if smaller pieces are         used.  This parameter then indicates whether large or small         data blocks should be used.  It is only relevant in stream or         connection-oriented protocols, where the user sends more than a         single piece of data.         This parameter is represented by a single ASCII digit. A value         0 means the data should be sent in relatively small blocks         (e.g., character or line oriented applications), while a value         9 means the data should be sent in relatively large blocks         (e.g., block or file oriented applications). Other values         represent sizes between those extremes.  The character "N"         indicates that no special flow control advice is provided.  The         actual interpretation of this parameter is dependent on the         particular protocol in the OPE.  The default value of this         parameter is no flow control advice. In this case, the protocol         in the OPE will operate based only on information available in         the OPE.  The control flag for this parameter is -fc.      Local Address Primary Component         This parameter contains the local address primary component. It         is anticipated that under most circumstances, this component is         known to both the Host and the OPE.  Consequently, this         parameter is seldom required.  It would be useful if the Host         desired to select one of several valid addresses, however.  The         control flag for this parameter is -lp.      Security         The security parameters contain a set of security level,         compartment, community of interest, and handling restriction         information.  Currently, security is provided by performing allLilienkamp & Mandell & Padlipsky                               [Page 18]

RFC 929                                                    December 1984Proposed Host-Front End Protocol         processing at system high level or at a single level.         Consequently, these parameters are probably redundant, since         the security information is known.  In the future, however,         these parameters may be required.  Therefore a field is         provided. The control flag for this parameter is -s.      Protcol Idiosyncratic Parameters         The remaining parameters are protocol idiosyncratic.  That is,         each protocol that is off-loaded may have a set of these         parameters, which are documented with a description of the         off-loaded protocol.  The default value for these parameters is         NULL, unless otherwise specified by a particular offloaded         protocol.  The control flag for this set of parameters is -pi,         which identifies the first protocol idiosyncratic parameters.         Control flags for other protocol idiosyncratic parameters must         be defined for each off-loaded protocol.      Data         After the Protocol Idiosyncratic Parameters, if any, and the         required <nl>, if the protocol in play allows for it at this         juncture the rest of the chunk will be interpreted as data to         be transmitted.  That is, in connection oriented protocols data         may or may not be permitted at connection initiation time, but         in connectionless protocols it certainly makes sense to allow         the H-FP Begin command to convey data. (This will also be         useful when we get to the Condition command.)      Responses         The following responses have been identified for the Begin         command:            000    Command completed successfully            101    Throughput not available; using maximum            102    Reliability not available; using maximum            103    Delay not available; using minimum            110    Flow Control advice not followed; smaller blocks used            111    Flow Control advice not followed; larger blocks used            201    Failed; Begin not implemented in this direction            202    Failed; timeout            203    Failed; Begin command on already active channel            300    Problem with multiple chunks            301    Syntax problem with Begin command            302    Protocol not supported in OPE/Host            303    Active service not availableLilienkamp & Mandell & Padlipsky                               [Page 19]

RFC 929                                                    December 1984Proposed Host-Front End Protocol            304    Passive service not available            305    Invalid Foreign Address Primary Component            306    Invalid Transmit Discipline            307    Invalid Foreign Address Secondary Component            308    Invalid Local Address Secondary Component            309    Invalid Timeout Interval            310    Invalid Type of Service Advice            311    Invalid Flow control Advice            312    Invalid Local Address Primary Component            401    Protocol Interpreter in OPE not responding            402    Remote Protocol Interpreter not available            403    Failed; insufficient protocol interpreter resources            501    Failed; insufficient OPE resources            601    Request violates security policy            602    Security parameter problem         Additionally, protocol idiosyncratic responses will be defined         for each off-loaded protocol.      Example of Begin Command         The Begin command is the most complex of the H-FP Command         Level. When the off-loaded protocol is TCP, the Begin command         is used to open TCP connections.  One possible example of a         Begin command issued by an inboard Telnet interpreter to open a         TCP connection to ISIA, with no begin timeout interval, is:            C BE TCP A ISIA 9 N 23 ,, ,, N0 S <nl>         Where:            TCP    The code for the protocol TCP            A      Indicates Active Begin            ISIA   The name of a Host at USC-ISI            9      Mediation Level 9:  Full OPE mediation            N      Non-blocking transmit            23     Destination Telnet Port            ,,     skip  over parameters  (Local Address Secondary,                   Begin Timeout Interval)            N0     Type of Service Advice:  No special Advice,                   Normal Precedence            S      Flow Control Advice: use small blocks         This command will cause the OPE to invoke the TCP interpreter         to generate the initial SYN packet to the well-known Telnet         socket on Host ISIA.  It also informs the OPE to do all TCP         related processing via the Mediation Level, accepts defaultLilienkamp & Mandell & Padlipsky                               [Page 20]

RFC 929                                                    December 1984Proposed Host-Front End Protocol         Local Address parameters, and sets the Begin Timeout Interval         to infinity.  The precedence of the TCP connection is Normal,         and the TCP interpreter is informed that the data stream will         consist of primarily small blocks.      Notes to the Implementor         Response 203 might seem silly to some readers, but it's there         in case somebody goofed in using the Channel Layer.   Transmit      Purpose of the Transmit Command         The purpose of the Transmit command is to permit the process in         the Host to send data using an off-loaded protocol interpreter         in the OPE, and also to permit the OPE to deliver data received         from the network destined for the process in the Host.  The         Transmit command is particularly relevant to connection and         stream type protocols, although it has applications for         connectionless protocols as well.  After the Begin command is         issued successfully and the proper Response received, Transmit         commands can be issued on the given channel.  The semantics of         the Transmit command depend on whether it was issued by the         Host or the OPE.         - If the Host issues the Transmit command, a process in the         Host wishes to send the data to the destination specified to         the off-loaded protocol interpreter that was established         (typically) by a previous Begin command on the given H-FP         channel.         - If the OPE issues the command, the OPE has received data         destined for a process in the Host from a connection or stream         supported by the off-loaded protocol that was established by a         previous Begin command on the given H-FP channel.      Parameters of the Transmit Command         The Transmit command has one parameter associated with it. It         is an optional parameter, to temporarily override the response         discipline for this particular transmit command. Some protocols         may have protocol-idiosyncratic parameters as well.  The         transmit command also has data associated with it.  All         parameters must precede the data to be transmitted.Lilienkamp & Mandell & Padlipsky                               [Page 21]

RFC 929                                                    December 1984Proposed Host-Front End Protocol      Response Discipline Override         The Response Discipline Override parameter indicates the         desired response discipline for that individual Transmit         Command, overriding the default response discipline.  A single         ASCII character is used to indicate the desired discipline.         The character "N" indicates that this Transmit command should         not block, and should return a response as soon as the data is         given to the protocol interpreter in the OPE. The character "B"         indicates that this Transmit command should block, meaning that         a response should not be generated until the data has been sent         to the destination.  The default value of this parameter is the         currently defined Transmit Command response discipline.  The         use of this parameter does not alter the currently defined         Transmit command response discipline; the default is changed         with the Condition command.  The control flag for this         parameter is -rd.      Protocol-Idiosyncratic Parameters         Any other parameters to the Transmit command are         protocol-idiosyncratic. That is, each protocol that is         off-loaded has a set of these parameters, which are documented         with a description of the off-loaded protocol.  The default         value for these parameters is NULL, unless otherwise specified         by a particular off-loaded protocol.  The control flag for this         set of parameters is -pi, which identifies the first         protocol-idiosyncratic parameters.  Control flags for other         protocol-idiosyncratic parameters must be defined for each         off-loaded protocol.      Responses         The following responses for the Transmit command have been         identified:            000    Transmit Command completed successfully            201    Transmit Command not appropriate            300    Problem with multiple chunks            301    Syntax problem with Transmit Command            302    Invalid Transmit Command Response Discipline            401    Protocol Interpreter in OPE not responding            402    Failure in remote protocol interpreter            403    Failed; insufficient protocol interpreter resources            501    Failed; insufficient OPE resources            601    Request violates security policyLilienkamp & Mandell & Padlipsky                               [Page 22]

RFC 929                                                    December 1984Proposed Host-Front End Protocol         Additionally, protocol-idiosyncratic responses will be defined         for each off-loaded protocol.      Example of Transmit Command         The transmit command is used in TCP to provide the TCP write         call.  An example of such a transmit command would be:            C TR N <nl> <DATA>         Where N indicates non-blocking transmission discipline, <nl> is         the required command-ending newline, and <DATA> is presumed to         be the user's data that is to be transmitted.      Notes to the Implementor         If you get a 403 or a 501 response and have sent a multiple         chunk it probably makes sense to try a single chunk; if you've         sent a single chunk, it makes sense to wait a while and try         again a few times before giving up on the stream/channel.   Condition      Purpose of the Condition Command         The primary purpose of the Condition command is to permit a         process to alter the characteristics that were originally set         up with the Begin command. (That is, "condition" is a verb.)         These characteristics include the addresses, the mediation         level, the type of service, and the flow control parameters         from Begin. They may also include protocol-idiosyncratic         characteristics. (Although Condition is usually thought of as a         Host->OPE command, it may also be used OPE->Host in some         contexts.)         Condition is a generic command that may find little use in some         off-loaded protocols.  In others, only some of the parameters         identified may make sense.  For example, changing the         destination address of a TCP connection involves closing one         connection and opening another.  Consequently, in may make more         sense to first issue an End command, and then a Begin with the         new address.  In other protocols, such as IP or UDP, changing         the address on each datagram would be a perfectly reasonable         thing to do.Lilienkamp & Mandell & Padlipsky                               [Page 23]

RFC 929                                                    December 1984Proposed Host-Front End Protocol      Parameters of the Condition Command         The Condition command has the same parameters as the Begin         command.  Any parameters expressed in a Condition command         indicate the new values of the characteristics to be altered;         all parameters not expressed retain the current value.         Although it is possible to express the change of any of the         characteristics originally set up in the Begin command using         the Condition command, there are some characteristics that do         not make sense to alter, at least for some protocols. For         example, once a connection is opened, it does not make much         sense to change the Foreign Address Primary or Secondary         Components.  Doing so is inconsistent with current versions of         TCP, and would require the closing of the existing connection         and opening a new one to another address.  Earlier versions of         TCP did permit connections to be moved.  If a protocol that         provided such a feature was implemented in the OPE, the         changing the Secondary Address Components would be a reasonable         thing to do.      Responses         The responses to the Condition command are the same as those to         the Begin command.      Example of Condition Command         The Condition Command can be quite complex, and can be used for         many purposes.  One conceived use of the condition command         would be to change the type of service advice associated with         the channel. An example of this (which also demonstrates the         ability to skip parameters) is:            C -ts T <nl>         which causes the offloaded PI associated with the current         channel to attempt to achieve high throughput (in its use of         the comm subnet(s) in play).      Notes to the ImplementorLilienkamp & Mandell & Padlipsky                               [Page 24]

RFC 929                                                    December 1984Proposed Host-Front End Protocol   Signal      Purpose of Signal Command         The purpose of the Signal Command (implicitly at least) is to         permit the transfer of out-of-band signals or information         between the Host and the OPE, in order to utilize (explicitly)         out-of-band signaling services of the off-loaded protocol. The         semantics of the Signal command depend upon whether it was         issued by the Host or the OPE.         - If the Signal command was issued by the Host, it means a         process in the Host desires to send out-of-band data or an         out-of-band signal.         - If the Signal command was issued by the OPE, it means         out-of-band data or an out-of-band signal arrived for the         process associated with the channel in the Host.      Parameters of the Signal Command         The basic usage of the Signal command is with no parameters,         which sends or reports the receipt of an out-of-band signal.         Some protocols, such as the NBS Transport Protocol, permit the         user to send data with the out-of-band signal.  Hence, data is         permitted to accompany the Signal command.  There may also be         protocol-idiosyncratic parameters for the Signal command.  If         this is the case, these parameters would come before the data.      Protocol-Idiosyncratic Parameters         The parameters for the Signal command are protocol         idiosyncratic.  That is, each protocol off-loaded has a set of         these parameters.  The default value for these parameters is         their previous values. Control flags for multiple         protocol-idiosyncratic parameters must be defined for each         off-loaded protocol.      Responses         The following responses have been identified for the Signal         command:            000    Command completed successfully            201    Command not appropriate            300    Problem with multiple chunks            301    Syntax problem with CommandLilienkamp & Mandell & Padlipsky                               [Page 25]

RFC 929                                                    December 1984Proposed Host-Front End Protocol            401    Protocol Interpreter in OPE not responding            402    Failure in remote protocol interpreter            403    Failed; insufficient protocol interpreter resources            501    Failed; insufficient OPE resources            601    Request violates security policy         Additionally, protocol-idiosyncratic responses will be defined         for each off-loaded protocol.      Example of Signal Command         The major perceived use for the Signal command when offloading         a connection protocol is sending an out-of-band signal with no         data.  In such a case, the appropriate signal command would be:            C SI <nl>      Notes to the Implementor         Some protocols may allow only only one outstanding signal at a         time.  For these protocols, it is an implementation issue         whether the OPE will buffer several signals, but a good case         could be made for the position that a scrupulous OPE would         reflect a 202 response back to the Host in such cases.         There is some question as to the proper handling of the         "expedited data" notion of some (particularly ISO) protocols.         It might be more appropriate to deal with such a thing as a         protocol idiosyncratic parameter on the Transmit command         instead of using the Signal command (even if it's the closest         approximation to an out-of-band signal in the given protocol).         If it's provided using the Signal command, the expedited data         should not be passed as ASCII, and should appear after the         command-terminating newline character (and appropriate padding         with space characters).   Status      Purpose of Status Command         The purpose of the Status command is to permit the Host to         request and obtain status information from the OPE, and vice         versa. This includes status request of a conventional protocol         interface (e.g., in TCP, there is a request to determine the         state of a particular connection).Lilienkamp & Mandell & Padlipsky                               [Page 26]

RFC 929                                                    December 1984Proposed Host-Front End Protocol      Parameters of the Status Command         The parameters for the Status command indicate whether it is a         request or a response, and contain the status information.         Request/Report            This parameter indicates whether the command is a Status            request or a Status report.  It consists of a single ASCII            character.  Q indicates a request (query), and R indicates a            report.  It should be noted that a report may be generated            as the result of a query, or may be generated as the result            of specific protocol mechanisms.      Protocol-Idiosyncratic Parameters         The parameters to the status command are         protocol-idiosyncratic. That is, each protocol off-loaded has a         set of these parameters.  The default value for these         parameters is their previous values.  Among these parameters is         an identifier of the type of status information contained or         requested, and a value or set of values that contain the         particular status information. The status information itself         should be the last item in the command. The control flag for         this set of parameters is -pi, which identifies the first         protocol-idiosyncratic parameters.  Control flags for other         protocol-idiosyncratic parameters must be defined for each         off-loaded protocol.      Responses         The following responses have been identified for the Status         command:            000    Command completed successfully            201    Command not appropriate            300    Problem with multiple chunks            301    Syntax problem with Command            302    Inappropriate status request            303    Inappropriate status response            401    Protocol Interpreter in OPE not responding            402    Failure in remote protocol interpreter            403    Failed; insufficient protocol interpreter resources            501    Failed; insufficient OPE resources            601    Request violates security policy            9xx    Protocol Idiosyncratic status responsesLilienkamp & Mandell & Padlipsky                               [Page 27]

RFC 929                                                    December 1984Proposed Host-Front End Protocol      Example of Status Command         The status command can be particularly complex, depending on         the protocol and particular type of status information.  One         possible use of the status command when off-loading TCP is to         communicate the status service request.  For performing this         operation the status command would be:            C ST Q <nl>      Notes to the Implementor   End      Purpose of the End Command         The purpose of the End command is to communicate that services         of the off-loaded protocol are not required.  The semantics of         the End command depends upon whether it was issued by the Host         or the OPE.         - If the Host issues the End command, it means the process in         the Host no longer requires the services of the offloaded         protocol.         - If the OPE issues the End command, it means the remote entity         has no more data to send (e.g., the off-loaded protocol is TCP         and the remote user has issued a TCP close).      Parameters of the End Command         One parameter is associated with the End Command.  It indicates         whether the termination should be "graceful" or "abrupt" (see         below).         Graceful/Abrupt            The Graceful/Abrupt parameter indicates whether the End            should be handled gracefully or abruptly.  If it is handled            gracefully, then data in transit is allowed to reach its            destination before service is actually terminated.  An            abrupt End occurs immediately; all data transmitted from the            Host but still pending in the OPE is discarded, and no new            incoming data is sent to the Host from the OPE.Lilienkamp & Mandell & Padlipsky                               [Page 28]

RFC 929                                                    December 1984Proposed Host-Front End Protocol            The parameter is indicated by a single ASCII character.  The            character "G" denotes graceful, and "A" denotes abrupt.  The            default value for this parameter is graceful.      Responses         The following responses have been identified for the End         command:            000    Command completed successfully            201    Command not appropriate            300    Problem with multiple chunks            301    Syntax problem with Command            302    Illegal Type of End Command            401    Protocol Interpreter in OPE not responding            402    Failure in remote protocol interpreter            403    Failed; insufficient protocol interpreter resources            501    Failed; insufficient OPE resources            601    Request violates security policy         Additionally, protocol idiosyncratic responses will be defined         for each off-loaded protocol.      Example of End Command         The syntax of the End command is relatively straightforward. It         consists of a chunk that contains only a chunk usage         identifier, the end command string, and the parameter         indicating whether the end should be graceful or abrupt.  A         possible valid (abrupt) End command would be:            C EN A <nl>      Notes to the Implementor         Once an End has been issued in a given direction any other         commands on the channel in the same direction are in error and         should be responded to appropriately.Lilienkamp & Mandell & Padlipsky                               [Page 29]

RFC 929                                                    December 1984Proposed Host-Front End Protocol   No-op      Purpose of the No-op Command         The No-op command performs no operation.  Its purpose is to         permit the Host and OPE to participate in a dialog which does         not alter the state of communication activities, both for         debugging purposes and to support features of certain protocols         (e.g., Telnet's Are You There command).      Parameters of the No-op Command         There are no parameters associated with the No-op command.      Responses         There are only two possible legal responses to the No-op         command.  They are:            000    No-op Command Completed Correctly            300    Problem with multiple chunks      Example of No-op Command         Syntactically the No-op command is quite simple.  It consists         of a chunk that contains only the chunk usage identifier and         the string for the command, and the newline.  One possible         valid No-op command is:            C NO <nl>      Notes to the Implementor         No-ops are included for use in testing and initial         synchronization.  (The latter use is not mandatory, however.         That is, no exchange of No-ops is required at start-up time,         but it is conceivable that some implementations might want to         do it just for exercise.) They are also traditional.Lilienkamp & Mandell & Padlipsky                               [Page 30]

RFC 929                                                    December 1984Proposed Host-Front End ProtocolReferences   (References [1]-[3] will be available in M. A. Padlipsky's "The   Elements of Networking Style", Prentice Hall, 1985.)   [1] Padlipsky, M. A., "The Host-Front End Protocol Approach",   MTR-3996, Vol. III, MITRE Corp., 1980.   [2] Padlipsky, M. A., "The Elements of Networking Style", M81-41,   MITRE Corp., 1981.   [3] Padlipsky, M. A., "A Perspective on the ARPANET Reference Model",   M82-47, MITRE Corp., 1982.   [4] Bailey, G., "Network Access Protocol", S-216,718, National   Security Agency Central Security Service, 1982.   [5] Day, J. D., G. R. Grossman, and R. H. Howe, "WWMCCS Host to Front   End Protocol", 78012.C-INFE.14, Digital Technology Incorporated,   1979.Lilienkamp & Mandell & Padlipsky                               [Page 31]

RFC 929                                                    December 1984Proposed Host-Front End ProtocolAPPENDIX   Per-Protocol Offloading Descriptions   1.  Command Level Interface to an Off-loaded TCP      This appendix discusses the use of the commands described in the      body of this document to provide an interface between a Host      process and an off-loaded interpreter of the DoD's Transmission      Control Protocol (TCP).  The interface described here is      functionally equivalent to the interface found in the MIL-STD 1778      specification of TCP.  It is not, however, identical, in that some      features of the interface are particularly relevant only in an      inboard implementation.      The first section describes the mapping between the interface      events of MIL-STD 1778 and the commands and responses of this      H-FP, and highlights the unique features of the interface.  The      next sections discuss the details of each command.  These details      include the specialized usages of the command and the      protocol-idiosyncratic parameters for that command.      1.1.  Relation to MIL-STD 1778 Interface         Most of the requests and responses of the TCP interface         specified in MIL-STD 1778 are mapped directly to H-FP Commands         and responses.  The exceptions are noted in the following         descriptions.         1.1.1. Requests            Unspecified Passive Open, Fully Specified Passive Open,            Active Open, and Active Open with Data requests are all            implemented using variations of the Begin command.  The            distinction between Passive and Active Open is made using            the Active/Passive parameter of Begin.  The distinction            between unspecified and fully specified lies in the presence            or absence of the destination address fields.  An active            open with data is identical to a normal active open, except            for the presence of data following the command.            The Send Service Request is implemented using the Transmit            command.  Special protocol idiosyncratic parameters are            provided for Urgent, Push, and changing the ULP timeout            action and values.  The response to the Transmit command            indicates that the appropriate Send call has been made.Lilienkamp & Mandell & Padlipsky                               [Page 32]

RFC 929                                                    December 1984Proposed Host-Front End Protocol            There is no corresponding response in the specified TCP            interface; its only significance is that the Host can issue            another Transmit command.            The Allocate event is a specification feature of MIL-STD            1778 to indicate the willingness of the user to accept            incoming data across the interface.  However, because this            is precisely the type of flow control provided by the            Channel level, the Allocate event would be a superfluous            mechanism.  Thus, there is no direct analogy to that event            in the H-FP interface. A Host process indicates its            willingness to accept new data by informing the channel via            its flow control interface (if it has an explicit one).            Close and Abort are provided by the End command.  Close uses            the graceful version of the End command, while Abort uses            the abrupt version.  The response indicates that the End            command has been received and the corresponding Close or            Abort was issued.  There is no corresponding response in the            specified TCP interface.            Status is provided by using the query form of the Status            command.  The response to the Status command contains the            information (see below).         1.1.2. Responses            The Open Id response is provided so that the user has a            shorthand name by which to refer to the connection.  With an            outboarded TCP interpreter, there is a one-to-one mapping            between TCP connections and H-FP channels.  Hence, the Open            Id event is not needed, since the channel ID is sufficient            to indicate the desired connection.            The Open Failure and Open Success responses are provided            using OPE-generated responses to Begin commands (which            provide the Active and Passive Service response primitives)            issued by the Host.  The value of the response code            indicates whether the Begin command succeeded or failed, and            can be mapped to the appropriate Open Failure or Open            Success indication by the Host.            Deliver is provided by having the OPE issue a Transmit            command.  As mentioned above, the "flow control" between the            TCP interpreter and the Host is provided by the Channel            layer, so no explicit interface events are needed.  TheLilienkamp & Mandell & Padlipsky                               [Page 33]

RFC 929                                                    December 1984Proposed Host-Front End Protocol            response to the Transmit command indicates the data was            received by the Host process.  There is no corresponding            response in the specified TCP interface.            The Closing and Terminate service responses are provided            using the End command. Closing is indicated using the            graceful version of the command, while terminate is provided            using the abrupt version.  The response indicates the End            command was received by the Host process.  There is no            corresponding response in the specified TCP interface.            Status Response is provided by a response to the query            version of the Status command.  The status information is            communicated via protocol-idiosyncratic parameters following            the Response code.            Error messages are reported using the spontaneously            generated version of the Status command issued by the OPE.            The error message is provided in a parameter.  The response            indicates the error message was received by the Host            process.  There is no corresponding event in the specified            TCP interface.      1.2.  The Begin Command         The Begin command is used in TCP in three major ways:            1. To inform the OPE that a process in the Host wishes to            open a connection to a particular port on a internet            address.            2. To inform the OPE that a process in the Host wishes to be            informed when a connection attempt is made to any or to a            specific port at this Host's internet address.            3. To inform the Host that a connection attempt to the OPE            has arrived, and there was no Begin of the second type            (passive open) issued by the Host relevant to that            particular port.         1.2.1. Specialized Usage            There are four major aspects to the specialized usage of the            Begin command and its parameters.  These parameters are:               1. The meaning of the Mediation Level parameterLilienkamp & Mandell & Padlipsky                               [Page 34]

RFC 929                                                    December 1984Proposed Host-Front End Protocol               2. The selection of blocking treatment of Transmit                  command               3. The meaning of the address components               4. The selection of the TCP Active Open with Data                  primitive.            The Mediation Level parameter has only two possible values            when offloading TCP.  These are "9" and "0".  The normal            usage of an off-loaded TCP uses the value "9", which means            the Host is in no way involved in the operation of TCP.  The            value "0" indicates the Host wishes to negotiate with the            TCP options.            The normal TCP Send event is non-blocking.  That is, when a            user issues the send command, it counts on the reliability            services of TCP, and is not explicitly notified when the            data has reached the other end of the connection and been            properly acknowledged. Hence, the default value for this            parameter with TCP is "N".  There are some applications            where the user may not wish to receive a response to a            Transmit command until the data has been acknowledged by the            other end of the connection.  In these cases, the value "B"            should be used for this parameter.  If such a feature is not            supported by the offloaded TCP interpreter, then it is            acceptable to issue a 100 level Conditional acceptance            indicating that blocking is not supported, but the Begin            command will proceed using non-blocking Transmits.            The primary address components of the local and remote            addresses refer to the internet addresses of (or a symbolic            Host name for) the respective Hosts.  The secondary            components refer to the particular sockets at those internet            addresses.  Normally, the secondary components (ports) are            specified numerically. They may, however, be specified by            name if the port is a well-known service port. In an Active            Begin command, the remote addresses primary and secondary            components must be specified.  The local address components            need not be specified, unless the user wishes to indicate            that the connection should be from a particular port or a            particular internet address of a multi-homed Host.  In a            Passive Begin command, the remote addresses are specified            only if connection attempts from one particular Host are of            interest.  The local address secondary component must be            used to indicate on which port to perform the Listen.Lilienkamp & Mandell & Padlipsky                               [Page 35]

RFC 929                                                    December 1984Proposed Host-Front End Protocol            The way the TCP Active Open with data is provided is by            including the data with the Begin Command.  This data is            included in the same Channel level chunk, immediately            following the newline.  If the data is more than a single            chunk can hold, then the multi-chunk command feature of the            H-FP must be used.         1.2.2. Protocol-Idiosyncratic Parameters            The protocol-idiosyncratic parameter identified for the TCP            interface is the "ULP timeout" information.  This            information includes whether the offloaded interpreter            should abort the connection on a ULP timeout or report it to            the inboard user, and also the numerical value of the            timeout interval. The format chosen for this parameter is a            single letter followed immediately (with no spaces) by an            ASCII number. The letter can be either "R" or "A", and            indicates that the ULP timeout should cause a report or an            abort, respectively. The number is interpreted to be the            timeout interval in seconds.         1.2.3. Examples of the Command            An example of an Active Begin command that might be issued            by an inboard user Telnet is:               C BE TCP A ISIA 9 N 23 ,, 60 R 0 -pi R120 <nl>            ISIA is the destination Host, 23 is the well-known port            number for Telnet connections, a Begin timeout of 60 seconds            was chosen.  The desired type of service is to strive for            good response time, the transmissions are expected to be in            small units, and protocol-idiosyncratic parameter R120            implies that a ULP timeout of 120 seconds should be            reported.            An example of a Passive Begin Command that might be issued            by an inboard server Telnet is:               C BE TCP P ,, 9 N ,, 23 ,, R 0 -pi R120 <nl>            The major differences are that no remote address components            are specified, and the local secondary address component is            identified as the socket on which the Listen is being            performed.  Also, the default ("infinite") timeout is taken.Lilienkamp & Mandell & Padlipsky                               [Page 36]

RFC 929                                                    December 1984Proposed Host-Front End Protocol      1.3.  The Transmit Command         The Transmit command is used by the Host process to instruct         the off-loaded TCP interpreter to send data to a remote site         via the TCP connection associated with the command's channel.         It is used by the OPE to deliver incoming data from the         connection to the process in the Host.         1.3.1. Specialized Usage            The Transmit command must be capable of providing all the            specialized features of the Send and Deliver Event.  These            special features are Urgent, Push, and modification of the            ULP Timeout action and/or interval.            Urgent is a means to communicate that some point upcoming in            the data stream has been marked as URGENT by the sender.            While the actual Urgent bit travels through the connection            out-of-band, it carries a pointer that is related to the            sequence numbers of the in-band communication. Hence, the            urgency must be indicated in the Transmit command rather            than the Signal command.            Push is a feature of the TCP Send Event that is used to            indicate that the data in the Transmit command should be            sent immediately (within the flow control constraints),            rather than waiting for additional send commands or a            timeout.  Push is indicated in the Transmit Command. The            push feature has the same meaning when sent from the OPE to            the Host.  If the Host implementation does no internal            queuing, the flag has no meaning.            The TCP Send event permits the user to modify the "ULP            timeout action" and/or the "ULP timeout interval" associated            with that connection.  When changed, the new values take            effect for the remainder of the connection, unless changed            later with another Send.  This feature is provided in this            H-FP using the Transmit Command.         1.3.2. Protocol-Idiosyncratic Parameters            The three features identified above are provided using            protocol-idiosyncratic parameters.            The first such parameter is the Urgent parameter.  From the            point of view of the interface, it is just a flag that            indicates the data is urgent (the actual Urgent pointer is aLilienkamp & Mandell & Padlipsky                               [Page 37]

RFC 929                                                    December 1984Proposed Host-Front End Protocol            concern of the off-loaded TCP interpreter, which is keeping            track of the sequence numbers).  When issued by the Host            process, the Urgent flag means the stream should be marked.            When issued by the OPE, it means the receiver should go to            (or remain in) the Urgent receive mode.  If the flag is not            set in the Transmit issued by the OPE, then the receiver            should remain in (or return to) the non-urgent receive mode.            The value of this protocol-idiosyncratic parameter is "U" if            the Urgent is set, or "N" if it is not set.  The default            value for this parameter is "N".  Since this parameter is            the first protocol-idiosyncratic parameter for the Transmit            command, it requires no special flag, and can be indicated            using the flag -pi.            The second protocol-idiosyncratic parameter is the Push            flag.  This parameter is only issued by the Host, since            there is no Push in the TCP Deliver event.  Its value is "P"            for push, or "N" for normal.  The default value of this            parameter is "N".  Its control flag is -pu.            The third protocol-idiosyncratic parameter is the ULP            timeout action and value parameter.  The action part            indicates whether the offloaded interpreter should abort the            connection on a timeout or report it to the inboard user.            The value part is the numerical value of the timeout            interval.  The format used for this parameter is the same as            in the Begin command, which is a single letter followed            immediately (with no spaces) by an ASCII number.  The letter            can be either "R" or "A", and indicates that the ULP timeout            should cause a report or an abort, respectively.  The number            is interpreted to be the timeout interval in seconds.  The            default interpretation for this parameter is its previous            value. The control flag for this parameter is -ul.         1.3.3. Examples of the Command            An example of a Transmit command issued by a Host process is               C TR -pi N P R160 <nl> <DATA>            where <DATA> is the data contained within the chunk.  This            command is for a non-urgent but pushed TCP Send event, that            also resets the timeout action and interval to Report with a            value of 160 seconds. The response mode (i.e., nonblocking)            is derived from the Begin command and not effected by            transmit.Lilienkamp & Mandell & Padlipsky                               [Page 38]

RFC 929                                                    December 1984Proposed Host-Front End Protocol            An example of a Transmit command issued by the OPE is               C TR -pi N <nl> <DATA>            where <DATA> is the data contained within the chunk.  This            command is for a non-urgent delivery (presumably, after a            previous Urgent delivery).      1.4.  The Condition Command         The Condition command is used to modify the transmission         characteristics of the connection.  The parameters that make         sense to modify with TCP are the Transmit Response discipline,         the Type of Service, and the Flow Control Advice.         1.4.1. Specialized Usage            There is no usage of the Condition command with an offloaded            TCP interpreter that is particularly specialized.         1.4.2. Protocol-Idiosyncratic Parameters            There are no protocol-idiosyncratic parameters for the            condition command for the off-loaded TCP. It would be            possible for the ULP timeout action values to be changed            with a condition command.  However, this is accomplished            with the Transmit command, which more closely models the            interface specified in MIL-STD 1778.  We propose that the            condition command not provide this capability.         1.4.3. Examples of the Command            An example of the Condition command to change the flow            control advice for a connection is               C CO -fc 1 <nl>            which indicates that relatively small transmission units are            now expected.Lilienkamp & Mandell & Padlipsky                               [Page 39]

RFC 929                                                    December 1984Proposed Host-Front End Protocol      1.5.  The Signal Command         As we currently understand it, TCP's URGENT feature provides an         INband signal rather than a true out-of-band signal (and at         least one of us deeply regrets this).  The actual URGENT bit is         sent out-of-band, but it contains an URGENT pointer which         relates the URGENT to its position in the data stream.  The         actual semantics of the URGENT is left to the higher level         protocol (e.g., Telnet says to discard all data up to the         URGENT pointer).  Since the Signal command is allowed to cross         a pending Transmit in the H-FP channel, it would be potentially         dangerous to implement the interface to TCP URGENT using the         Signal command since the wrong sequence number could be used as         the urgent pointer.  Barring persuasive arguments to the         contrary, it is proposed that Signal should not be used with         TCP.      1.6.  The Status Command         The Status command maps directly into the TCP Status event when         issued by a Host process. It is also used for the TCP error         event when issued by the OPE.  There is currently some question         as to how information from lower protocol levels (e.g., ICMP         error messages) should be reported to TCP users. When these         issues are resolved, there may be other uses for the Status         command.  We solicit other ideas for the Status command with         this report.         1.6.1. Specialized Usage            The major specialized usage of the Status command is to            provide the error reporting service.  This usage is a form            of the Status generated by the OPE.         1.6.2. Protocol-Idiosyncratic Parameters            When used as a TCP Status request (command issued by the            Host process), there are no protocol-idiosyncratic            parameters associated with the Status command.  The OPE            response codes the TCP status.            When used as a TCP error report (command issued by the OPE),            there is one protocol-idiosyncratic parameter associated            with the Status command.  It is an error description in the            form of a text string. It requires no special control flag            since the flag -pi is unambiguous and there are no other            protocol-idiosyncratic parameters.Lilienkamp & Mandell & Padlipsky                               [Page 40]

RFC 929                                                    December 1984Proposed Host-Front End Protocol         1.6.3. Examples of the Command            An example of the Status command issued by the Host process            to request status information is               C ST Q <nl>            The status information is returned in the response to the            status command.            An example of the Status command issued by the OPE to report            an error from the TCP interpreter is               C ST R -pi "Connection already exists" <nl>            which is issued when a TCP open (HFP Begin) is issued to an            already opened (foreign) connection.      1.7.  The End Command         The End command is used to indicate that TCP services are no         longer required.  Thus, it can be mapped into either the TCP         Graceful Close or the TCP Abort events.  It is also used as the         TCP Closing response (as contrasted with the response by the         OPE to the close command), when issued by the OPE.         1.7.1. Specialized Usage            Because of the nature of the two-way close provided by TCP,            there is a possibility that the Host and the OPE wish to            gracefully terminate the connection at the same instant.  If            this happens, then both the Host and the OPE would issue End            commands at the same time.  To be prepared for this, it is            necessary to make this the normal graceful closing sequence.            In other words, both the Graceful Close request and the            Closing response are mapped to End commands, and the            response to one of those commands only indicates that the            command has been received and executed, but not that the            connection is actually fully closed.  The connection is            gracefully closed when both End commands have been issued,            and both successful responses have been received.            With an abrupt end, a two-way exchange is not necessary.            Only the Host or the OPE need issue it, for the connection            to be aborted.Lilienkamp & Mandell & Padlipsky                               [Page 41]

RFC 929                                                    December 1984Proposed Host-Front End Protocol         1.7.2. Protocol-Idiosyncratic Parameters            There are no protocol-idiosyncratic parameters for the End            command used with TCP.         1.7.3. Examples of the Command            An example of the End command used to indicate either a TCP            Close request (from the Host process) or TCP Closing            response (from the OPE) is               C EN G <nl>            An example of the End command used as an Abort request (from            the Host process) or as a Terminate response is               C EN A <nl>   2.  Command Level Interface to an Off-loaded Telnet      This appendix is provided to discuss the use of the commands      described in the body of this document to provide an interface      between a Host process and an off-loaded interpreter of the Telnet      protocol.      The interface described here is not based on a formal interface.      There are several reasons for this, including the lack of a widely      accepted standard interface to Telnet, and its headerless nature.      Consequently, the interface described here is very similar to the      actual Telnet data stream.      2.1.  The Begin Command         The Begin command is used with Telnet to initiate Telnet         connections.         2.1.1. Specialized Usage            There are three major specialized usages to the Begin            command.  They are the meaning of the Mediation Level            parameter, the way the number of incoming Telnet connections            are supported, and the meaning of the secondary address            components.            The mediation level is used in Telnet to control which of            the various Telnet activities are performed by the OPE, and            which are controlled by the Host.  It has been determinedLilienkamp & Mandell & Padlipsky                               [Page 42]

RFC 929                                                    December 1984Proposed Host-Front End Protocol            that all monitoring of the Telnet Socket should be performed            by the OPE.  Mediation level 9, which is the default,            indicates the Host desires to play no role in Telnet            operation. Level 5 means that protocol-idiosyncratic            parameters to this Begin command indicate which incoming            options the Host wishes to handle; all other options, and            all NVT translations, are to be performed by the OPE. Level            0 indicates that the Host will handle all options, while all            NVT translations are to be performed in the OPE (see Section            B.1.3).            The Host can either accept the connections by fielding OPE            generated Begins, or by issuing passive Begins to the OPE.            The Host may wish to restrict the number of incoming Telnet            connections that it will handle at any particular time.  It            can do this by rejecting OPE-generated Begins above a            certain number, or by limiting the number of Host-issued            passive Begins.  However, precedence constraints dictate            that the Host actually issue additional passive Begins or            accept additional Begins from the OPE beyond the maximum            number it is normally willing to support, so that            high-priority service requests can be accommodated, possibly            by preempting lower priority activities.            The secondary address component is used to refer to specific            ports. Normally, they are used only when the standard or            default ports are not used, such as special purpose            applications or testing.         2.1.2. Protocol-Idiosyncratic Parameters            The protocol-idiosyncratic parameters to the Telnet Begin            command are the identifiers for the options which the host            wishes to negotiate when using mediation level 5.  On other            mediation levels, these parameters are not used.         2.1.3. Examples of the Command            An example of a passive Begin for an outboard Telnet            protocol is:               C BE TEL P ,, 5 N -fc 0 -pi 9 <nl>            Where the parameters are:               TEL   Code for the Telnet Protocol               P     Passive BeginLilienkamp & Mandell & Padlipsky                               [Page 43]

RFC 929                                                    December 1984Proposed Host-Front End Protocol               ,,    Skip the Foreign Address Primary Component               5     Mediation Level is 5               N     Non Blocking Transmits               -fc   Skips over parameters up to Flow Control Advice               S     Small Blocks are appropriate for Telnet               -pi   Skips over parameters to the Protocol Idiosyncratic                     List of Options to be Handled by the Host.               9     Option Code for Line Length Option            Here, no remote address component was specified, since the            Host will accept connections from any Host.  Similarly, no            local addresses are specified, since the default well-known            socket for this Host is to be used.  In this example, the            Host specifies it will handle the line length option (number            9).  Other options are handled in the OPE.            An example of an active Begin for an outboard Telnet            protocol is:               C BE TEL A ISIA 5 N -fc 0 -pi 9 <nl>            This command is identical to the passive command, except            that a remote primary address component is specified to            identify the intended Host.  No remote secondary component            is specified, since the well-known socket at that Host is to            be used.  No local secondary address components are            specified, since the connection can originate from any            available socket of the appropriate type selected by the            OPE.      2.2.  The Transmit Command         The Transmit Command is used to send data across a Telnet         connection.         2.2.1. Specialized Usage            The Transmit command is used to transmit data over the            Telnet connection.  There is one specialized aspect of the            Transmit command used with an outboard Telnet interpreter.            This is the provision of the Go Ahead feature of Telnet that            supports half-duplex devices.            Go Ahead is provided as a protocol idiosyncratic parameter            to the Transmit.  It is only used if the Host will support            it, however.  It is our opinion that Go Ahead is probably            not a proper thing for the default case.Lilienkamp & Mandell & Padlipsky                               [Page 44]

RFC 929                                                    December 1984Proposed Host-Front End Protocol            Go Aheads are a matter between the Host and the terminal. It            is difficult to offload the generation of Go Aheads to the            OPE, since the OPE is not really cognizant of the semantics            of the communication between the Host and the terminal.            Hence, the OPE does not know when the Host is done            transmitting and willing to pass "the turn" back to the            terminal. Similarly when the remote site relinquishes            control, the OPE includes Go Ahead in its TR.            We don't believe this Go Ahead problem to be an indictment            against outboard processing.  It merely illustrates that            functionality not found in a Host cannot necessarily be            provided by the OPE.  Hence, we provide this note to the            implementor:  if the Host cannot generate the            protocol-idiosyncratic Go Ahead parameter, then the DO            Suppress Go Ahead must be issued immediately after the            connection is established.         2.2.2. Protocol Idiosyncratic Parameters            The protocol idiosyncratic parameter is the Go Ahead            indicator.  When present, the character "G" is used to mean            the Go Ahead can be sent to the other end of the connection,            but only after the data associated with that Transmit            command is sent.  When the character is any other value, or            is absent, the Go Ahead should not be sent.         2.2.3. Examples of the Command            An example of the Transmit command is:               C TR -pi G <nl> <DATA>            With this command, the Go Ahead is passed to the other side            after the data is sent.      2.3.  The Condition Command         The Condition command is used with Telnet to modify the         Transmission characteristics and to enable or disable Telnet         options on a Telnet connection.         2.3.1. Specialized Usage            The Condition command takes on specialized usage with            Telnet, in addition to its normal usage.  It is used toLilienkamp & Mandell & Padlipsky                               [Page 45]

RFC 929                                                    December 1984Proposed Host-Front End Protocol            control the option selection and negotiation process, when            such selection is performed by the Host (currently, this is            done at mediation levels 5 and 1, but not at level 9).            A set of protocol-idiosyncratic parameters has been defined            for this purpose.  They are based heavily on the Telnet            negotiation and subnegotiation mechanisms.  For simple            negotiations there are two parameters, a negotiation type            (from the set {DO, DONT, WILL, WONT}) followed by the code            (numeric) or name (symbolic) for the desired option.  The            codes for the options are identified below.  A basic            difference between the H-FP interface to Telnet and the            internal Telnet protocol is that additional parameters are            included with the request (DO or WILL). The Telnet protocol            subnegotiation is used internally to communicate that            information in the Telnet data stream.  Option-specific,            protocol-idiosyncratic parameters are used for these            additional parameters.            Both the Host and the OPE can issue these Condition            commands. When issued by the Host, it means the user wishes            to enable or disable a particular option. The OPE proceeds            to issue the appropriate negotiation commands (i.e., IAC            <DO> <code>) in the Telnet data stream.  When the results of            the option negotiation are available, a response is            generated by the OPE.  For the types DO and WILL, a 000            Response indicates the appropriate acceptance (WILL or DO,            respectively). A nonzero Response code may indicate            negotiation failure or negotiation rejection (among other            things).  For the types DONT and WONT, a 000 Response            indicates the option will be disabled.  A negotiation            rejection should not be expected in those cases.            When the Condition command is issued by the OPE, it means            the other end of the connection is negotiating a change.            Here the response from the Host indicates the Host's desired            action for the option negotiation.  Again, valid requests to            disable options (DONT and WONT requests) should always get a            000 Response.         2.3.2. Protocol-Idiosyncratic Parameters            There are two protocol-idiosyncratic parameters for primary            negotiation using the Condition command.  These are the            negotiation type and the option code.  The negotiation type            is one of the set of {DO, DONT, WILL, WONT}.  The option            code is a numeric value used to identify the particularLilienkamp & Mandell & Padlipsky                               [Page 46]

RFC 929                                                    December 1984Proposed Host-Front End Protocol            option being negotiated.  The values for these codes are            indicated here, but are identical to the codes used in the            actual Telnet negotiation.  The codes are:               Option Name     Option Code       Short Name               Transmit Binary           0       Binary               Echo                      1       Echo               Suppress Go-Ahead         3       SuppressGA               Approximate Message Size  4       NAMS               Status                    5       Status               Timing Mark               6       TimingMark               RCTE                      7       RCTE               Line Length               8       LineLength               Page Size                 9       PageSize               Carriage Return Disp     10       CRDisp               Horizontal Tabstops      11       HTabStops               Horizontal Tab Disp      12       HTabDisp               Formfeed Disposition     13       FFDisp               Vertical Tabstops        14       VTabStops               Vertical Tab Disposition 15       VTabDisp               Linefeed Disposition     16       LFDisp               Extended ASCII           17       ExASCII               Logout                   18       Logout               Data Entry Terminal      20       DET               Terminal Type            24       TermType               Extended options list   255       ExOptions            Options not listed here may of course be used. The code            number should be the same as the option code used in Telnet            negotiation.            2.3.2.1.  Simple Options               Options that do not require additional parameters use the               simple negotiation mechanisms described briefly above and               in greater detail in the Telnet documentation.  No               additional parameters are required.  These options               include the Transmit Binary, Echo, Suppress Go Ahead,               Status, Timing Mark, and Logout options.            2.3.2.2.  Approximate Message Size Option               The Approximate Message Size option requires two               parameters. The first indicates whether the approximate               message size being negotiated applies to the local or the               remote end of the connection.  DS means the size appliesLilienkamp & Mandell & Padlipsky                               [Page 47]

RFC 929                                                    December 1984Proposed Host-Front End Protocol               to the sender of the command (i.e., if the Host issues               the command, DS means the local end of the connection;               if issued by the OPE, DS means the remote end of the               connection).  DR means the size applies to the receiver               of the command (i.e., if the Host issues the command, DR               means the remote end;  if issued by the OPE, DR means the               local end of the connection).  This convention is               consistent with the Telnet subnegotiation mechanisms.               The second character is an ASCII encoded numeric value,               which is a character count of the message size.         2.3.3. Line Width and Page Size Options            The Line Width and Page Size Options require two additional            parameters.  The first indicates whether the line width or            page size being negotiated applies to the local or the            remote end of the connection, and uses the DS and DR            convention described above.  The second parameter is an            ASCII encoded numeric value, which is interpreted as follows            (assuming the Condition command was issued by the Host):               0         The Host requests that it handle length or size                         considerations for the direction indicated by                         the first parameter.               1 to 253  The Host requests that the remote end handle                         the size or length considerations for the                         direction indicated by the first parameter, but                         suggests that the value indicated be used as                         the size or length.               254       The Host requests that the remote end handle                         the size or length considerations for the                         direction indicated by the first parameter, but                         suggests that the size or length be considered                         to be infinity.               255       The Host requests that the remote end handle                         the tabstop considerations, and suggests                         nothing about what the value should be.            If the Condition command is issued by the OPE, then the            roles of the Host and the remote end are reversed.Lilienkamp & Mandell & Padlipsky                               [Page 48]

RFC 929                                                    December 1984Proposed Host-Front End Protocol         2.3.4. Tabstop Options            The Horizontal and Vertical Tabstops options require two            option specific parameters.  The first is either DR or DS,            as was described previously.  The second is a list of one or            more ASCII encoded numeric values separated by spaces which,            assuming the Condition command is issued by the Host, are            individually interpreted as:               0         The Host requests that it handle tabstops for                         the direction indicated by the first parameter.               1 to 250  The Host requests that the remote end handle                         the tabstop considerations for the direction                         indicated by the first parameter, but suggests                         that the value(s) indicated should be used as                         the tabstops.               255       The Host requests that the remote end handle                         the tabstop considerations for the direction                         indicated by the first parameter, and suggests                         nothing about what the value should be.            If the Condition command is issued by the OPE, then the            roles of the Host and the remote end are reversed.         2.3.5. Character Disposition Options            The Carriage Return Disposition option, the Horizontal Tab            Disposition option, the  Formfeed Disposition option, the            Vertical Tab Disposition option, and the Linefeed            Disposition option are all considered character disposition            options from the perspective of H-FP.  Two option-specific            parameters are required for the character disposition            options.  The first is the DR or DS code, which was            described previously. The second is a single ASCII encoded            numeric value, which is interpreted as (assuming that the            Host issued the Condition command):               0         The Host requests that it handle the character                         disposition for this connection.               1 to 250  The Host suggests that the remote end handle                         the character disposition considerations, but                         suggests that the value indicated should be                         taken as the number of nulls which should beLilienkamp & Mandell & Padlipsky                               [Page 49]

RFC 929                                                    December 1984Proposed Host-Front End Protocol                         inserted in the data stream following the                         particular format character being                         subnegotiated.               251       The Host suggests that the remote end handle                         the character disposition considerations, but                         recommends that it replace the character with                         some simplified character similar to but not                         identical with it (e.g., replace a tab with a                         space, or a formfeed with a newline).               252       The Host suggests that the remote end handle                         the character disposition considerations, but                         recommends that it discard the character.               253       The Host suggests that the remote end handle                         the character disposition, but recommends that                         the effect of the character be simulated using                         other characters such as spaces or linefeeds.               254       The Host suggests that the remote end handle                         the character disposition considerations, but                         recommends that it wait for additional data                         before sending more data.               255       The Host suggests that the remote end handle                         the tabstop considerations, and suggests                         nothing about what the value should be.            Some of the codes between 251 and 254 are not used with some            character disposition options. Refer to the ARPANET            documentation for additional details.            If the Condition command is issued by the OPE, then the            roles of the Host and the remote end are reversed.            2.3.5.1.  RCTE Option               The Remote Controlled Transmission and Echoing option               requires parameters to indicate the sets of break               characters and transmit characters.  There are two               option-idiosyncratic parameters for RCTE.  The first is a               list of the character classes that make up the set of               break characters, as defined in the RCTE documentation.               The second is a list of character classes that make up               the set of transmit characters, as defined in the RCTE               documentation.  Since the two classes are optional andLilienkamp & Mandell & Padlipsky                               [Page 50]

RFC 929                                                    December 1984Proposed Host-Front End Protocol               can be of arbitrary length, it is necessary to precede               each list with a -bc (break characters) or -tc (transmit               characters). The character classes are defined as                  1 Upper Case Letters   A through Z                  2 Lower Case Letters   a through z                  3 Digits  0 through 9                  4 Format effectors  <BS> <CR> <LF> <FF> <HT> <VT>                  5 Non-format control codes, plus <ESC> and <DEL>                  6 Punctuation  . , ; : ? !                  7 Grouping    { [ ( < > ) ] }                  8 Misc  ' ` " / \ % @ $ &   + - * = ^ _ | ~                  9 <space>            2.3.5.2.  Extended Option List               The Extended Option List option requires a parameter to               carry the number of the option on the extended list.               There is thus one option specific parameter to the               Condition command when used for this purpose, which is               the number of the option on the extended option list.  It               can be expressed in ASCII using an octal, decimal, or               hexadecimal format.            2.3.5.3.  Terminal Extension Options               The Extended ASCII, SUPDUP, and Data Entry Terminal               options of Telnet were all attempts to extend the basic               capabilities of the Telnet data stream beyond the simple,               scroll mode terminal model that was the basis of the               original Telnet design.               All of these options have limitations to their               effectiveness.  The Extended ASCII option lacks a               standardized interpretation of the bit patterns into               extended ASCII characters.  The SUPDUP effort was               actually an independent mode where a different virtual               terminal protocol was used, and the option was there               merely to switch to and from this protocol. The Data               Entry Terminal option requires the excessive overhead of               subnegotiation for each use of extended features.  All of               these options lack the more valuable asset of widespread               implementation and use.               The way these options should be handled is not detailed               in this appendix. It is clear that the Condition command               could be used for initiating and terminating the use ofLilienkamp & Mandell & Padlipsky                               [Page 51]

RFC 929                                                    December 1984Proposed Host-Front End Protocol               these options.  The actual transmission of characters               related to the extended terminal features should be               provided by the Transmit command, either as part of the               normal Host-to-OPE data stream or by using               protocol-idiosyncratic parameters.               A more recent option, the Terminal Type option, should be               mentioned here.  It permits one end of a connection to               request information about the terminal at the other end               or send information about the terminal at the local end.               This is convenient for systems that provide a wide               variety of terminal support, but it clearly does not               follow the model of reducing the MxN problem by use of a               virtual terminal. Its use is very straightforward in the               H-FP context.  It only requires sending the terminal type               to the other end, and activating the Binary Transmission               Option.            2.3.5.4.  Status Option               The Status option is enabled using the negotiation               mechanism of Telnet.  However, the means to transfer               status information between OPE and the Host is provided               via the Status command.  Therefore, details of status               negotiation are irrelevant to the interface to the               outboard Telnet.         2.3.6. Examples of the Command            The following example shows the command issued by a Host to            the OPE, requesting that the OPE negotiate with the other            side so that remote echo is performed.               C CO -pi DO 1 <nl>            The numeral 1 is the option code for ECHO from the table            above. All of the simple options listed above use this same            basic format.            The options with additional parameters use straightforward            extensions of this syntax.  For example, a possible usage of            Condition by the Host to set the approximate message size            is:               C CO -pi DO 4 DS 1024Lilienkamp & Mandell & Padlipsky                               [Page 52]

RFC 929                                                    December 1984Proposed Host-Front End Protocol            The 4 is the Option Code for the Approximate Message Size            option, the DS indicates that Host's message size should be            set, and 1024 is the desired size.      2.4.  The Signal Command         The Signal command is used with Telnet to provide the Telnet         Interrupt Process and Abort Output services.         2.4.1. Specialized Usage            The Signal command is used with an outboard Telnet            interpreter to interface to the Telnet synch mechanism.            This mechanism is used with a protocol-idiosyncratic            parameter, which indicates what particular command is being            "synched." It is expected that normally, this Signal            mechanism will only be used with the Interrupt Process and            Abort Output Telnet signals.  When the Signal command is            issued by the Host, it goes through the Channel            (out-of-band) to the OPE, where the Telnet interpreter            issues the corresponding Telnet signal and synch sequence.            When such a sequence is received by the OPE, it immediately            issues a Signal to the Host.  It is expected that a Host or            OPE would not, in general, reject the Signal command unless            it is badly formed.         2.4.2. Protocol-Idiosyncratic Parameters            The Telnet protocol-idiosyncratic parameter used with the            Signal command identifies which Telnet signal is begin            issued.  Normally, it would have the value of either "IP" or            "AO", for Interrupt Process or Abort Output.  If absent, the            default value is "IP".         2.4.3. Examples of the Command            An example of a Telnet Signal Command (in this case, to send            an Interrupt Process signal) is:               C SI IP <nl>Lilienkamp & Mandell & Padlipsky                               [Page 53]

RFC 929                                                    December 1984Proposed Host-Front End Protocol      2.5.  The Status Command         The Status command is used with Telnet to obtain information         about the Telnet connection and the options in effect.         2.5.1. Specialized Usage            The Status command has one specialized aspect when used to            interface to an outboard Telnet interpreter.  That is to            send and receive the Telnet Protocol status request            subnegotiation message to and from the data stream.  In            order to invoke the status command for this purpose,            however, the user must have previously issued the Condition            Status command, which causes the ability to request status            to be negotiated.  The OPE, when it receives a valid Status            request command, immediately responds to the user indicating            the status.  The OPE can issue a status to request the            Host's negotiated positions.         2.5.2. Protocol-Idiosyncratic Parameters            There are no protocol-idiosyncratic parameters to the Status            query command. The Status Response command has a single            protocol-idiosyncratic parameter.  It is an ASCII string            containing the status of the various options (not at their            default values).         2.5.3. Examples of the Command            An example of a Status Query command is:               C ST Q            An example of a Status Response command is:               F ST R "WILL ECHO  DO SUPPRESS-GO-AHEAD               L WILL STATUS  DO STATUS" <nl>            In the previous example, note the opening quote is in the            first chunk, and the closing quote is in the last chunk.            This technique permits parameters to span chunk boundaries.Lilienkamp & Mandell & Padlipsky                               [Page 54]

RFC 929                                                    December 1984Proposed Host-Front End Protocol      2.6.  The End Command         The End command is used to terminate the Telnet connection,         either gracefully or abruptly.         2.6.1. Specialized Usage            The graceful termination of a Telnet requires End commands            to be issued by both the Host and the OPE.  This specialized            usage is identical to that of the outboard TCP interface,            however.         2.6.2. Examples of the Command            An example of the graceful End command is:               C EN G <nl>            The abrupt End command is similar.      2.7.  The No-op Command         The No-op command is used with Telnet so the Host can determine         if the OPE is active, and vice versa.         2.7.1. Specialized Usage            The No-op command has one specialized usage when offloading            Telnet.  This is to provide the Telnet Are You There (AYT)            feature.  When an (AYT) message is received by the OPE, it            issues a No-op command to the Host. Upon receiving the            response from the Host, the appropriate response is sent            back in the data stream.         2.7.2. Protocol Idiosyncratic Parameters            There are no protocol-idiosyncratic parameters to the No-op            command.         2.7.3. Examples of the Command            An example of the No-op command is:               C NO <nl>Lilienkamp & Mandell & Padlipsky                               [Page 55]

RFC 929                                                    December 1984Proposed Host-Front End Protocol   3. FTP Offloading      TBS   4. Mail Offloading      TBS   5. Whatever Offloading      TBS   Where TBS nominally = To Be Supplied, but really means: We'll argue   through these once we get sufficiently positive feedback on the   others (and on the H-FP as a whole).Lilienkamp & Mandell & Padlipsky                               [Page 56]

[8]ページ先頭

©2009-2025 Movatter.jp