home *** CD-ROM | disk | FTP | other *** search
/ Internet Access: To the Information Highway / InternetAccessToTheInformationHighway1994.disc1of1.iso / internet / rfc1 / rfc740.txt < prev    next >
Text File  |  1994-05-28  |  19KB  |  446 lines

  1.  
  2. RFC 740                                              RTB 42423 22 Nov 77
  3. NETRJS Protocol
  4.  
  5.  
  6.  
  7. Network Working Group                                          R. Braden
  8. Request for Comments: 740                                       UCLA-CCN
  9. NIC: 42423                                              22 November 1977
  10. Obsoletes: 189, 599
  11.  
  12.  
  13.  
  14.                             NETRJS PROTOCOL
  15.  
  16.  
  17.  
  18.  
  19. A.  Introduction
  20.  
  21.    NETRJS, a private protocol for remote job entry service, was defined
  22.    and implemented by the UCLA Campus Computing Network (CCN) for batch
  23.    job submission to an IBM 360 Model 91. CCN's NETRJS server allows a
  24.    remote user, or a daemon process working in behalf of a user, to
  25.    access CCN's RJS ("Remote Job Service") subsystem.  RJS provides
  26.    remote job entry service to real remote batch (card reader/line
  27.    printer) terminals over direct communications lines as well as to the
  28.    ARPANET.
  29.  
  30.    A batch user at a remote host needs a NETRJS user process to
  31.    communicate with the NETRJS server at the batch host. An active
  32.    NETRJS user process simulates a "Virtual Remote Batch Terminal", or
  33.    "VRBT".
  34.  
  35.    A VRBT may have virtual card readers, printers, and punches. In
  36.    addition, every VRBT has a virtual remote operator console. Using a
  37.    virtual card reader, a Network user can transmit a stream of card
  38.    images comprising one or more batch jobs, complete with job control
  39.    language ("JCL"), to the batch server host. The NETRJS server will
  40.    cause these jobs to be spooled into the batch system to be executed
  41.    according to their priority.  NETRJS will automatically return the
  42.    print and/or punch output images which are created by these jobs to
  43.    the virtual printer and/or card punch at the VRBT from which the job
  44.    was submitted. The batch user can wait for his output, or he can
  45.    signoff and signon again later to receive it.
  46.  
  47.    To initiate  a NETRJS session, the user process must execute a
  48.    standard ICP to a fixed socket at the server.  The result is to
  49.    establish a full-duplex Telnet connection for the virtual remote
  50.    operator console, allowing the VRBT to signon to RJS.  The virtual
  51.    remote operator console can then be used to issue commands to NETRJS
  52.    and to receive status, confirmation, and error messages from the
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59. Braden                                                          [page 1]
  60.  
  61. RFC 740                                              RTB 42423 22 Nov 77
  62. NETRJS Protocol
  63.  
  64.  
  65.  
  66.    server.  The most important remote operator commands are summarized
  67.    in Appendix D.
  68.  
  69.    Different VRBT's are distinguished by 8-character terminal id's,
  70.    which are assigned by the server site to individual batch users or
  71.    user groups.
  72.  
  73. B.  Connections and Protocols
  74.  
  75.    The protocol uses up to five connections between the user and server
  76.    processes.  The operator console uses a a full-duplex Telnet
  77.    connection. The data transfer streams for the virtual card reader,
  78.    printer, and punch each use a separate simplex connection under a
  79.    data transfer protocol defined in Appendix A. This document will use
  80.    the term "channel" for one of these simplex data transfer connections
  81.    and will designate a connection "input" or "output" with reference to
  82.    the server.
  83.  
  84.    A particular data transfer channel needs to be open only while it is
  85.    in use, and different channels may be used sequentially or
  86.    simultaneously. CCN's NETRJS server will support simultaneous
  87.    operation of a virtual card reader, a virtual printer, and a virtual
  88.    punch (in addition to the operator console) on the same VRBT process.
  89.    The NETRJS protocol could easily be extended to any number of
  90.    simultaneously-operating virtual card readers, printers, and punches.
  91.  
  92.    The NETRJS server takes a passive role in opening the data channels:
  93.    the server only "listens" for an RFC from the user process. NETRJS is
  94.    defined with an 8-bit byte size on all data channels.
  95.  
  96.    Some implementations of NETRJS user processes are daemons, operating
  97.    as background processes to submit jobs from a list of user requests;
  98.    other implementations are interactive processes executed directly
  99.    under terminal control by remote users. In the latter case, the VRBT
  100.    process generally multiplexes the user terminal between NETRJS, i.e.,
  101.    acting as the remote operator console, and entering local commands to
  102.    control the VRBT. Local VRBT commands allow selection of the files
  103.    containing job streams to be sent to the server as well as files to
  104.    receive job output from the server.  Other local commands would cause
  105.    the VRBT to open data transfer channels to the NETRJS server and to
  106.    close these channels to free buffer space or abort transmission.
  107.  
  108.    The user process has a choice of three ICP sockets, to select the
  109.    character set of the VRBT -- ASCII-68, ASCII-63, or EBCDIC. The
  110.    server will make the corresponding translation of the data in the
  111.    card reader and printer channels. (In the CCN implementation of
  112.    NETRJS, an EBCDIC VRBT will transmit and receive, without
  113.  
  114.  
  115.  
  116.  
  117.  
  118. Braden                                                          [page 2]
  119.  
  120. RFC 740                                              RTB 42423 22 Nov 77
  121. NETRJS Protocol
  122.  
  123.  
  124.  
  125.    translation, "transparent" streams of 8-bit bytes, since CCN is an
  126.    EBCDIC installation). The punch stream will always be transparent,
  127.    outputting "binary decks"  of 80-byte records untranslated. The
  128.    operator console connections always use Network ASCII, as defined by
  129.    the Telnet protocol.
  130.  
  131.    The NETRJS protocol provides data compression, replacing repeated
  132.    blanks or other characters by repeat counts.  However, when the
  133.    terminal id is assigned, a particular network VRBT may be specified
  134.    to use no data compression.  In this case, NETRJS will simply
  135.    truncate trailing blanks and send records in a simple "op
  136.    code-length-data" form, called "truncated format" (see Appendix A).
  137.  
  138. C.  Starting and Terminating a Session
  139.  
  140.    The remote user establishes a connection to the NETRJS server by
  141.    executing an ICP to the contact socket 71 (decimal) for EBCDIC,
  142.    socket 73 (decimal) for ASCII-68, or to socket 75 (decimal) for
  143.    ASCII-63. A successful ICP results in a pair of connections which are
  144.    in fact the NETRJS operator console connections. NETRJS will send a
  145.    READY message over the operator output connection.
  146.  
  147.    The user (process) must now enter a valid NETRJS signon command
  148.    ("SIGNON terminal-id") through the virtual remote operator console.
  149.    RJS will normally acknowledge signon with a console message; however,
  150.    if there is no available NETRJS server port, NETRJS will indicate
  151.    refusal by closing both operator connections.  If the user fails to
  152.    enter a valid signon within 3 minutes, NETRJS will close the operator
  153.    connections. If the VRBT attempts to open data transfer channels
  154.    before the signon command is accepted, the data transfer channels
  155.    will be refused  with an error message to the VRBT operator console.
  156.  
  157.    Suppose that S is the even number sent in the ICP; then the NETRJS
  158.    connections have sockets at the server with fixed relation to S, as
  159.    shown in the following table:
  160.  
  161.    Channel                          Server Socket     User Socket
  162.    -------                          -------------     -----------
  163.    Remote Operator Console Input         S            U + 3 Telnet
  164.    Remote Operator Console Output        S + 1        U + 2 Telnet
  165.    Data Transfer - Card Reader #1        S + 2        any odd number
  166.    Data Transfer - Printer #1            S + 3        any even number
  167.    Data Transfer - Punch #1              S + 5        any even number
  168.  
  169.    Once the VRBT has issued a valid signon, it can open data transfer
  170.    channels and initiate input and output operations as explained in the
  171.    following sections.  To terminate the session, the VRBT may close all
  172.  
  173.  
  174.  
  175.  
  176.  
  177. Braden                                                          [page 3]
  178.  
  179. RFC 740                                              RTB 42423 22 Nov 77
  180. NETRJS Protocol
  181.  
  182.  
  183.  
  184.    connections.  Alternatively, it may enter a SIGNOFF command through
  185.    the virtual remote operator console.  Receiving a SIGNOFF, NETRJS
  186.    will wait until the current job output streams are complete and then
  187.    itself terminate the session by closing all connections.
  188.  
  189. D.  Input Operations
  190.  
  191.    A job stream for submission to the NETRJS server is a series of
  192.    logical records, each of which is a card image of at most 80
  193.    characters. The user can submit a "stack" of successive jobs through
  194.    the card reader channel with no end-of-job indication between jobs;
  195.    NETRJS is able to parse the JCL sufficiently to recognize the
  196.    beginning of each job.
  197.  
  198.    To submit a batch job or stack of jobs for execution, the user
  199.    process must first open the card reader channel by issuing an Init
  200.    for foreign socket S+2 and the appropriate local socket. NETRJS,
  201.    which is listening on socket S+2, will return an RTS command to open
  202.    the channel. When the channel is open, the user can begin sending his
  203.    job stream using the protocol defined in Apendix A.  For each job
  204.    successfully spooled, NETRJS will send a confirming message to the
  205.    remote operator console.
  206.  
  207.    At the end of the job stack, the user process must send an
  208.    End-of-Data transaction to initiate processing of the last job.
  209.    NETRJS will then close the channel (to avoid holding buffer space
  210.    unnecessarily).  At any time during the session, the user process can
  211.    re-open the card reader channel and transmit another job stack.  It
  212.    can also terminate the session and signon later to get the output.
  213.  
  214.    If the user process leaves the channel open for 5 minutes without
  215.    sending any bits, the server will abort (close) the channel. The user
  216.    process can abort the card reader channel at any time by closing the
  217.    channel;  NETRJS will then discard the last partially spooled job.
  218.    If NETRJS finds an error (e.g., transaction sequence number error or
  219.    a dropped bit), it will abort the channel by closing the channel
  220.    prematurely, and also inform the user process that the job was
  221.    discarded (thus solving the race condition between End-of-Data and
  222.    aborting).  The user process should retransmit only those jobs in the
  223.    stack that have not been completely spooled.
  224.  
  225.    If the user's process, NCP, or host, or the Network itself fails
  226.    during input, RJS will discard the job being transmitted.  A message
  227.    informing the user that this job was discarded will be generated and
  228.    sent to him the next time he signs on.  On the other hand, those jobs
  229.    whose receipt have been acknowledged on the operator's console will
  230.    not be affected by the failure, but will be executed by the server.
  231.  
  232.  
  233.  
  234.  
  235.  
  236. Braden                                                          [page 4]
  237.  
  238. RFC 740                                              RTB 42423 22 Nov 77
  239. NETRJS Protocol
  240.  
  241.  
  242.  
  243. E.  Output Operations
  244.  
  245.    The VRBT may wait to set up a virtual printer or punch and open its
  246.    channel until a STATUS message from NETRJS indicates output is ready;
  247.    or it may leave the output channel(s) open during the entire session,
  248.    ready to receive output whenever it becomes available.  The VRBT can
  249.    also control which one of several available jobs is to be returned by
  250.    entering appropriate operator commands.
  251.  
  252.    To be prepared to receive printer (or punch) output from its jobs,
  253.    the VRBT issues an Init for foreign socket S+3 or S+5 for printer or
  254.    punch output, respectively. NETRJS is listening on these sockets and
  255.    should immediately return an STR.  However, it is possible that
  256.    because of a buffer shortage, NETRJS will refuse the connection by
  257.    returning a CLS; in this case, try again later.
  258.  
  259.    When NETRJS has job output for a particular virtual terminal and a
  260.    corresponding open output channel, it will send the output as a
  261.    series of logical records using the protocol in Appendix A.  The
  262.    first record will consist of the job name (8 characters) followed by
  263.    a comma and then the ID string from the JOB card, if any.  In the
  264.    printer stream, the first column of each record after the first will
  265.    be an ASA carriage control character (see Appendix C). A virtual
  266.    printer in NETRJS has 254 columns, exclusive of carriage control;
  267.    NETRJS will send up to 255 characters of a logical record it finds in
  268.    a SYSOUT data set.  If the user wishes to reject or fold records
  269.    longer than some smaller record size, he can do so in his VRBT
  270.    process.
  271.  
  272.    NETRJS will send an End-of-Data transaction and then close an output
  273.    channel at the end of the output for each complete batch job; the
  274.    remote site must then send a new RFC to start output for another job.
  275.    This gives the remote site a chance to allocate a new file for each
  276.    job without breaking the output within a job.
  277.  
  278.    If the batch user wants to cancel (or backspace or defer) the output
  279.    of a particular job, he can enter appropriate NETRJS commands on the
  280.    operator input channel (see Appendix D).
  281.  
  282.    If NETRJS encounters a permanent I/O error in reading the disk data
  283.    set, it will notify the user via his console, skip forward to the
  284.    next set of system messages or SYSOUT data set in the same job, and
  285.    continue. If the user process stops accepting bits for 5 minutes, the
  286.    server will abort the channel. In any case, the user will receive
  287.    notification of termination of output data transfer for each job via
  288.    a remote console message.
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295. Braden                                                          [page 5]
  296.  
  297. RFC 740                                              RTB 42423 22 Nov 77
  298. NETRJS Protocol
  299.  
  300.  
  301.  
  302.    If the user detects an error in the stream, he can issue a Backspace
  303.    (BSP) command from his console to repeat the last "page" of output,
  304.    or a Restart (RST) command to repeat from the last SYSOUT data set or
  305.    the beginning of the job, or he can abort the channel by closing his
  306.    socket.  If he aborts the channel, NETRJS will simulate a Backspace
  307.    command, and when the user re-opens the channel the job will begin
  308.    transmission again from an earlier point in the same data set.  This
  309.    is true even if the user terminates the current session first and
  310.    reopens the channnel in a later session; RJS saves the state of every
  311.    incomplete output stream.  However, before re-opening the channel he
  312.    can defer this job for later output, restart it at the beginning, or
  313.    cancel its output (see Appendix D).  Note that aborting the channel
  314.    is only effective if NETRJS has not yet sent the End-of-Data
  315.    transaction.
  316.  
  317.    If the user's process, NCP, or host or the Network itself fails
  318.    during an output operation, NETRJS will act as if the channel had
  319.    been aborted and the user signed off. NETRJS will discard the output
  320.    of a job only after receiving the RFNM from the last data transfer
  321.    message (containing an End-of-Data).  In no case should a NETRJS user
  322.    lose output from a batch job.
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354. Braden                                                          [page 6]
  355.  
  356. RFC 740                                              RTB 42423 22 Nov 77
  357. NETRJS Protocol
  358.  
  359.  
  360.  
  361.                                APPENDIX A
  362.  
  363.                     Data Transfer Protocol in NETRJS
  364.  
  365.    1.  Introduction
  366.  
  367.       The records in the data transfer channels (for virtual card
  368.       reader, printer, and punch) are generally grouped into
  369.       transactions preceded by headers.  The transaction header includes
  370.       a sequence number and the length of the transaction.  Network byte
  371.       size must be 8 bits in these data streams.
  372.  
  373.       A transaction is the unit of buffering within the server software,
  374.       and is limited to 880 8-bit bytes. Transactions can be as short as
  375.       one record; however, those sites which are concerned with
  376.       efficiency should send transactions as close as possible to the
  377.       880 byte limit.
  378.  
  379.       There is no necessary connection between physical message
  380.       boundaries and transactions ("logical messages"); the NCP can
  381.       break a transaction arbitrarily into physical messages. The CCN
  382.       server starts each transaction at the beginning of a new physical
  383.       message, but this is not a requirement of the protocol.
  384.  
  385.       Each logical record within a transaction begins with an "op code"
  386.       byte which contains the channel identification, so its value is
  387.       unique to each channel but constant within a channel.  This choice
  388.       provides the receiver with a convenient way to verify
  389.       bit-synchronization, and it also allows an extension in the future
  390.       to true "multi-leaving" (i.e., multiplexing all channels within
  391.       one connection in each direction).
  392.  
  393.       The only provisions for transmission error detection in the
  394.       current NETRJS protocol are (1) the "op code" byte to verify bit
  395.       synchronization and (2) the transaction sequence number. Under the
  396.       NETRJS protocol, a data transfer error must abort the entire
  397.       transmission; there is no provision for restart.
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411.  
  412.  
  413. Braden                                                          [page 7]
  414.  
  415. RFC 740                                              RTB 42423 22 Nov 77
  416. NETRJS Protocol
  417.  
  418.  
  419.  
  420.    2.  Meta-Notation
  421.  
  422.       The following description of the NETRJS data transfer protocol
  423.       uses a formal notation derived from that proposed in RFC 31 by
  424.       Bobrow and Sutherland. The notation consists of a series of
  425.       productions for bit string variables. Each variable name which
  426.       represents a fixed length field is followed by the length in bits
  427.       (e.g., SEQNUMB(16)).  Numbers enclosed in quotes are decimal,
  428.       unless qualified by a leading X meaning hex.  Since each hex digit
  429.       is 4 bits, the length is not shown explicitly in hex numbers.  For
  430.       example, '255'(8) and X'FF' both represent a string of 8 one bits.
  431.  
  432.       The meta-syntactic operators are:
  433.  
  434.          |     :alternative string
  435.  
  436.          [ ]   :optional string
  437.  
  438.          ( )   :grouping
  439.  
  440.          +     :catenation of bit strings
  441.  
  442.       The numerical value of a bit string (interpreted as an integer) is
  443.       symbolized by a lower case identifier preceding the string
  444.       expression and separated by a colon.  For example, in
  445.       
  446.