1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
|
Network Working Group R. Braden
Request for Comments: 88 S. Wolfe
NIC: 5668 UCLA/CCN
13 January 1971
NETRJS - A THIRD LEVEL PROTOCOL FOR REMOTE JOB ENTRY
A. Introduction
NETRJS is the name for a message protocol and set of control
conventions which will allow users at remote Hosts to access the RJS
("Remote Job Service") remote batch subsystem of CCN. RJS[1] was
written at CCN to support remote batch (car reader/line printer)
terminals over communications lines.
RJS makes a remote batch terminal's unit record devices operate as if
they were at the central site; thus, a remote user enters OS/360
jobs, complete with JCL, into the remote reader. The jobs are
spooled into the operating system and run in their turn, and the
printed and/or punched output is returned to the remote terminal from
which the jobs originated (unless the user or operator re-routes the
output). The remote terminal may also include a console typewriter
to be used by the remote operator to receive and send messages and to
exert control over his terminal [2].
When RJS is used via the ARPA Network, the "remote terminal" is
expected to be a multiprogrammed user process in a remote Host. We
will use the RJS term "remote site" for such a user process, which
presumably simulates unit record devices by file I/O. Furthermore,
several users at the same remote Host may simultaneously use NETRJS,
acting as independent "remote sites" distinguished by 8-character
names called _terminal-ids_ (because each remote site appears to RJS
as a separate physical terminal). Valid terminal-ids will be
assigned to individual users or user groups at remote Hosts who wish
to use NETRJS.
Under NETRJS, a separate ARPA network connection is opened from this
remote site to CCN for each (simulated) unit record device. Each
such connection will be called a _channel_ and be designated _input_
or _output_ with reference to CCN. We define a _standard_ remote
site in NETRJS to have the following five channels (See Figure 1):
1._Operator Input Channel_ - Commands and messages entered by
remote "operator" console.
2 _Operator Output Channel_ - Message stream which would normally
be directed to remote operator.
Braden, et. al. [Page 1]
^L
RFC 88 NETRJS - A THIRD LEVEL PROTOCOL 13 January 1971
3._Input Stream_ - One simulated Hollerith card reader for job
submission.
4._Printer Stream_ - One simulated line printer to record printed
output (system messages and SYSOUT data sets) from jobs.
5._Punch Stream_ - One simulated card punch, capable of recording
arbitrary (i.e., transparent) binary text.
RJS actually will support more than one reader, printer, and punch at
each remote terminal, so the NETRJS protocol could easily be expanded
to allow multiple simultaneous I/O streams to each Network user.
However, this does not presently appear useful, as the ARPA Network
bandwidth will normally be the limitation on the transmission speed
under NETRJS.
Under NETRJS, the text of a single network message is called a
_block_. A block is of variable length, up to 900 bytes (except
operator input and output blocks, which may not exceed 130 bytes).
Here the term _byte_ refers to the set of 8 bits representing one
character; each byte is to be aligned on an 8-bit boundary within the
message (and block). Thus we may consider a block to be a string of
bytes. The detailed format of a block will be defined in Sections E,
F, and G, using essentially the formalism suggested by Bobrow and
Sutherland in RFC #31.
Since the central site Host (CCN) is an IBM 360, NETRJS uses the IBM
EBCDIC character code to avoid redundant code conversion at both
hosts in those cases when the remote host also uses EBCDIC
internally. However, the message formats make no assumption about
the code, and in fact, "object decks" sent to the (simulated) card
punch will normally contain arbitrary binary text.
To maximize the use of the available Network bandwidth, we strongly
recommend transmitting input blocks as large as possible; CCN will
always fully block NETRJS output. Furthermore, to avoid excessive
overhead, we urge that all NETRJS users make their marking _a
multiple of 8 bits_, so the messages received at CCN arrive on a byte
boundary.
B. Starting a Session[3]
The initial connection protocol for NETRJS is essentially that of
Crocker in RFC #66 (as restated by Harslem and Heafner in RFC #80),
with some extensions. User U at a remote Host presumably requests
his outgoing logger to make a NETRJS connection to CCN. This
Braden, et. al. [Page 2]
^L
RFC 88 NETRJS - A THIRD LEVEL PROTOCOL 13 January 1971
logger does so by first sending an initial RFC to connect socket
(user,aen) = (U,s) to CCN socket (0,5). User 0 at CCN is the
incoming logger, and aen = 5 signifies NETRJS.
The CCN incoming logger will allocate a set of (six) consecutive aen
numbers A, A+1,......A+5, for user U, return a message containing the
socket number (U,A) as specified in RFC #66, and close the initial
connection. The remote and central sites will then open an input
channel between CCN socket (U,A) (socket f in Figure 1) and remote
socket (U, s+1). This is the remote operator input channel. The
other devices have fixed aen's at CCN assigned relative to A, in
particular:
CCN Socket
Channel (User,aen)
Operator Input (U,A)
Operator Output (U,A+1)
Card Reader (No. 1) (U,A+2)
Printer (No. 1) (U,A+3)
Punch (No. 1) (U,A+5)
Once the operator input channel is open, the remote site must
transmit a valid RJS signon message [2]. This message is free-format
and consists of the command verb "SIGNON" followed by the user's
terminal-id. If RJS does not recognize the terminal-id or has no
available Line Handler for the Network, it will indicate refusal by
closing the operator input channel. Central site issues subsequent
RFC's for the other channels listed above only in response to
corresponding RFC's from the remote site
To terminate the session, the remote site may close the console input
channel (socket "a" in figure 1). Alternatively, the user can enter
a SIGNOFF command through the operator input channel; in this case,
RJS will wait until the current job output streams are complete and
then terminate the session. RJS terminates the session by closing
the console output channel (socket g). Also, if RJS should abend
then socket g will close. If either site terminates the session, all
other connections for this remote site should be closed. Note that a
user can submit a number of jobs, sign off, and later receive his
output when he signs on again.
C. Channel Control
Flow control in NETRJS is handled by the Network protocol ALL
mechanism. Before transmission of a stream of records can begin on a
particular channel, the remote site must issue an RFC and Central
must reply. This allows the central site to determine the remote
Braden, et. al. [Page 3]
^L
RFC 88 NETRJS - A THIRD LEVEL PROTOCOL 13 January 1971
configuration dynamically. A particular card reader, printer, or
punch channel is open only while it is active, so the receiver need
not tie up buffer space needlessly. Each of these channels, when
open, assumes a buffer allocation of at least 900 bytes at the
receiver.
The operator input and output channels, on the other hand, are open
throughout the session. On these channels the receiver must provide
an allocation of at least 130 bytes.
After sending the SIGNON command over the operator input channel, the
remote site should send RFC's for all output channels which are ready
to receive data. When output is available for that site, Central
returns an RFC and begins transmission. Central closes an output
channel (socket i and j) at the end of the output for each complete
batch job.[4] The remote site must then send a new RFC and Central
must reply with an RFC to start output for another job to that
device. This gives the remote site a chance to allocate a new file
for each job without breaking the output within a job. If the user
at the remote site wants to cancel (or backspace or defer) the output
of a particular job, he enters appropriate RJS commands[2] on the
operator input channel.
When the remote site is ready to submit a job (or stack of
consecutive jobs), it issues an RFC for the card reader input
channel. The remote site is not required to close the channel
(socket c) after each job in a "stack" of jobs, but he must close it
following the last job in the stack to initiate its processing.
It may be necessary for the receiver site to abort a particular
channel, perhaps due to a transmission error (see Section D below on
checking) or a disk I/O error. The receiver may abort a channel
(other than console output) by closing it (sockets d, e, f, and h).
This action signals the transmitter to re-transmit the information
after the channel has been reopened (initiated by the remote site, as
always). The transmitter, on the other hand, aborts a channel by
sending a block with a particular bit combination (e = 2 in BCBYTE;
see Section E).
If either site aborts card reader (input) channel, RJS will discard
the text of the last partially-spooled job; the remote site should
re-transmit this job. Note that repeating an entire stack will enter
duplicate jobs into the system, but the second copy of a job will
"flush" due to its duplicate job name.
If a printer or punch (output) channel is aborted, Central will re-
transmit from the beginning of the current SYSOUT data set; the
effect is the same as a RESTART command.[2]
Braden, et. al. [Page 4]
^L
RFC 88 NETRJS - A THIRD LEVEL PROTOCOL 13 January 1971
If the operator input channel is aborted, the remote site must re-
transmit the last _block_. Finally, the operator output channel has
no abort condition defined. Central will never send Channel Abort
message on this channel; if the remote site closes its socket (socket
b), Central will not re-transmit, but simply cease sending messages
until the channel is reopened. Therefore a remote site can operate
without an operator output channel; however we do not recommend this,
as the user will then miss operator advisory messages such as a
warning of an impending IPL.
D. Checking
The nature of remote job entry service is such that a low rate of
undetected errors is mandatory. The IMP's use CRC's and sequence
numbers over the communication lines, so the effective IMP-IMP error
rate should be negligible. Although there is no checking provided
for the IMP-Host interface, it seems likely that these interfaces
will either be reliable or fail catastrophically; it seems unlikely
that "drop-outs" or other random failures will occur. Therefore only
the following simple checks are provided:
1. Each block will (at least initially) contain a fixed bit check
pattern using both on and off states of each bit path in the 16
bit PDA interface at CCN.
It is anticipated that even this crude check on IMP-Host
transmission will be useful both during the initial checkout of
hardware and software and also later if the interface becomes
marginal. However, either site can omit the check pattern if it
sets a bit in the Block Control Byte (BCBYTE); see Section F.
2. Each block contains a sequence number. Again this is intended for
initial checkout and to signal catastrophic hardware or software
problems. If the receiver detects an incorrect check pattern or
block sequence number, he aborts the channel by closing the
corresponding network connection; the remote site should then
issue an RFC to re-establish the network connection. The sequence
number of the first block after an RFC is 0. The numbers are
never reset while the connection is open.
Braden, et. al. [Page 5]
^L
RFC 88 NETRJS - A THIRD LEVEL PROTOCOL 13 January 1971
E. Block Format
BLOCK <---- BLOCKHEAD + (RECORD = r) + ENDOFBLOCK
Here r > 0
=
BLOCKHEAD <-- BCBYTE + [e=0=>CHECK] + DEVBYTE
The Blockhead field consists of a Block Control Byte,
a 32-bit check field CHECK, and a Device Byte.
BCBYTE <---- '1'BIT + e:ERRORCONTROL + b:BLKSEQ
Here BLKSEQ contains a 5-bit modulo 32 block sequence
number b. ERRORCONTROL is a 2 bit field with the
following meanings:
e=0 : Normal block. Contains a (presumably valid)
check field CHECK.
e=1 : Block contains no check field CHECK.
e=2 : Abort channel, initiated by transmitter.
Channels is not closed, transmission restarts
on job-related boundary.
DEVBYTE <---- '1'BIT + n:DEVNO + t:DEVTYPE
This byte identifies a particular remote device, i.e.,
it identifies a stream. DEVTYPE specifies the type of
device, as follows:
t=1: Output to remote operator console.
2: Input from remote operator console.
3: Input from card reader.
4: Output to printer.
5: Output to card punch.
6,7: Unused.
DEVNO is a 3-bit integer which identifies the
particular device type of type t at this remote site.
CHECK <--- '10101111'BYTE + 01010000'BYTE + '11111010'BYTE +
'00000101'BYTE
ENDOFBLOCK<----'0'BYTE
Braden, et. al. [Page 6]
^L
RFC 88 NETRJS - A THIRD LEVEL PROTOCOL 13 January 1971
Record Format
RECORD <------ DATA RECORD | JOBNAMERECORD
The first record sent on a printer or punch output channel will be a
JOBNAMERECORD, identifying the OS/360 jobname of the job which
produced the following output.
DATARECORD <--- '10'BIT2 + DEVCNTRL + (STRING=p) + ENDOFRECORD
JOBNAMERECORD <-- '11000000'BYTE + '11001000'BYTE + JOBNAME +
ENDOFRECORD
JOBNAME <---- (TEXTBYTE = 8)
This is the 8-character OS/360 jobname for the
following job.
DEVCNTRL <----- d:BIT2 + k:BIT4
DEVCNTRL specifies carriage control for a printer,
so if the device is not a printer then DEVCNTRL
should be '000000'. For a printer:
d=0 : Space k lines after printing; 0 < k < 3
= =
is allowed
d=2 : Immediately space k lines.
d=1, k=1: Skip to top of new page after printing.
d=3, k=1: Immediately skip to top of new page.
STRING <--- ('100' + i:DUPCOUNT)| This is a string of i
consecutive blanks.
('101' + i:DUPCOUNT + TEXTBYTE)|
This is a string of i consecutive duplicates of
TEXTBYTE.
('11' + j:LENGTH + (TEXTBYTE=j)| This is an
uncompressed string of j characters.
ENDOFRECORD <---- '0'BYTE
Braden, et. al. [Page 7]
^L
RFC 88 NETRJS - A THIRD LEVEL PROTOCOL 13 January 1971
G. Field Definitions
Name* Meaning Length (bits)
_____ _______ _____________
BIT 1-bit field 1
BIT2 2-bit field 2
BIT4 4-bit field 4
BLKSEQ Block sequence number 5
BYTE 8-bit field aligned on 8-bit 8
boundary
CHECK Block check number 32
DEVNO Device number of a given 3
type
DEVTYPE Device type 4
DUPCOUNT Number of replications of 5
duplicated character in
compressed text.
ERRORCONTROL Block transmission error 2
control.
LENGTH Length in bytes of the 6
following string of text.
TEXTBYTE An 8-bit byte of text 8
*Note: All non-terminal fields whose names end in
"...BYTE" represent bytes in both length and
alignment.
Braden, et. al. [Page 8]
^L
RFC 88 NETRJS - A THIRD LEVEL PROTOCOL 13 January 1971
H. NOTES AND REFERENCES
1. Martin, V.A. and Springer, T.W., "Implementation of A Remote Job
Service", Technical Report TR2, Campus Computing Network, UCLA,
Los Angeles, (undated).
2. The RJS operator commands and messages are described in detail in
Reference 1.
3. We use the phrase "starting a session" rather than "logging on"
because RJS has its own log on procedure, which is, we suppose, a
fourth-level protocol.
4. Note that NETRJS uses closing of connections as end-of-file
signals.
REMOTE SITE CENTRAL SITE (CCN)
+---------------------+ +--------------------+
| a | | |
| Console Input o----------->o f |
| b | | |
| Console Output o<-----------o g |
| c | | |
| Card Reader o------------o h |
| d | | |
| Printer o<-----------o i |
| e | | |
| Card Punch o<-----------o j |
| | | |
+---------------------+ +--------------------+
FIGURE 1
ARPA Network Connections (Channels)
For a Standard Remote Site Under NETRJS
R.T. Braden/rb.
S.M. Wolfe
[This RFC was put into machine readable form for entry]
[into the online RFC archives by Lorrie Shiota, 10/01]
Braden, et. al. [Page 9]
^L
|