RFC 437
Data Reconfiguration Service at UCSB
DATA RECONFIGURATION SERVICE AT UCSB β¨
okay bestie π this is RFC 437, also known as NIC 13701, written by E. Faeh from the Computer Systems Laboratory at UCSB and dated 30 June 1973. It's part of the Network Working Group. The header doesn't list a category, and it doesn't obsolete or update anything π
What Even Is This Doc π¦
So this RFC is basically announcing that the Data Reconfiguration Service (DRS) is live at UCSB, and it explains how to use the DRS Time Sharing System. DRS is an experiment in making Network data streams flexible to reformat π§ It couples processes that have different input/output interfaces and runs user-specified transformations on the data passing between them. The representative uses it covers are field insertion, field deletion, variable length string processing, string length computation, field transposition, character packing and unpacking, and character set translations. Iconic, honestly π
To use it, you first define a "form", which is a description of the reformatting to apply to data passing between two sockets. Each unidirectional message path gets its own form. Then DRS can set up Network connections with the two processes and watch the dialogue between them. It takes the input stream from one process, reformats it according to the form's rules, and sends the reformatted output to the second process. The two processes talk as if they were directly connected to each other. It's giving seamless π«Ά
DRS has three main parts π First there's a compiler, which reduces DRS source programs (forms) into a simpler, machine-independent instruction sequence called the object program. Then there's an interpreter, which runs that object program. Last is the executive, the DRS Time Sharing System, which is the bridge between the Network user and DRS. If you want the full scoop on the source language and compiler, these two papers are the ones to read:
- "The Data Reconfiguration Service--An Experiment in Adaptable, Process/Process Communications", The Rand Corp., R-860-ARPA, November 1971.
- "Data Reconfiguration Service Compiler: Communications Among Heterogeneous Computer Centers Using Remote Resource Sharing", The Rand Corp.,R-887-ARPA, April 1972.
Getting Into DRS/TSS πΈ
The DRS Time Sharing System (DRS/TSS) and its server Telnet are currently up and reachable through socket 1281 decimal β DRS/TSS is the interface that lets you use DRS. Besides a subset of 'TENEX-like' executive commands, it gives you commands for creating and storing forms by name and for invoking the DRS compiler or interpreter. The compiler and the interpreter both run asynchronously to DRS/TSS, so you get a notification when your compile or interpret requests start and when they finish. The interpreter also gives you a diagnostic message whenever it stops running a form. Very helpful, no notes π
When you connect to DRS/TSS, you're assigned an internal TTY number that identifies your terminal. When you invoke the compiler or interpreter, your TTY number plus a job name you pick are used to uniquely identify that request. After that, you refer to the request by its job name π A Network host can be given by host name, or by host number preceded by #. A socket number is an integer, and it can optionally be preceded by a (decimal) to indicate the radix. Decimal is the default radix and positive is the default sign. A negative socket number is kept in two's complement form. It's a whole vibe π₯
Control Characters, Real Quick β¨οΈ
DRS recognizes the following control characters, and they're kind of a big deal, so screenshot this πΈ
Control A (SOH)orrubout (DEL)deletes the last character.control V (SYN)deletes the last word.control W (ETB)deletes the last phrase.control X (CAN)deletes the entire line.Control D (EOT)displays the current word.control E (ENQ)displays the current phrase.control F (ACK)displays the entire line.Control Y (EM)displays the name of the current phrase.
Command accept is carriage return-line feed, or a period. A space forces recognition of the current word, and '?' lists the input(s) that are currently possible. Main character energy π
DRS/TSS COMMAND SYNTAX π
Okay, now the syntax stuff π In this notation, <CA> means command accept, and brackets [] mean optional information. Literal information is wrapped in quotes ''. When you see a parenthesized list with items separated by |, pick one of the alternatives. Here's the whole command list:
Commands:
'ATTACH' <tty no.> <password> <CA>
'BREAK' (<tty list>|<CA>) <CA>
'COMPILE' <job name> <formid> <CA>
'CONVERT' <integer> ['TO'] <base> <CA>
'DEFINE' <formid> <CA>
'DELETE' [<file type>] <formid> <CA> <CA>
'DETACH' <CA> <CA>
'DIRECTORY' <formid> <CA>
'DISCONNECT' <CA> <CA>
'FULLDUPLEX' <CA>
'HALFDUPLEX' <CA>
'HELP' <CA>
'LINE_AT_A_TIME' <CA>
'LINK' ('ENABLE'|'DISABLE'|<tty list>|<CA>) <CA>
'LIST' [<file type>] <formid> <CA>
'LOGIN' <userid> <password> <account number> <CA>
'LOGOUT' <CA>
'MONITOR' (<tty list>|<CA>) <CA>
'QUIT' (<job rename>|<CA>) <CA>
'RADIX' <base> <CA>
'RENAME' <formid> ['TO'] <formid> <CA>
'RESPONSE' ('ALL'|HANDHOLD'|'PROMPT'|'NORMAL'|'UNUSUAL'|
'ERRORS'|'NONE') <CA>
'RUN' <job name> ('SIMPLEX' <run parameters>|
'DUPLEX' '('<run parameters> <run parameters>
')' ) <CA>
'SELECT' (<tty list>|<CA>) <CA>
';' <text> <CA>
Substitutions:
These are the building blocks that the commands above are made from β¨
Substitutions:
<formid> = ['<' <userid> ',' <password> '>'] <form name>
<base> = ('DECIMAL'|'HEXADECIMAL'|'OCTAL')
<file type> = ('DIAGNOSTICS'|'OBJECT_CODE'|'SOURCE')
<run parameters> = ('SICP' <socket number>|'UICP'
[<hostid>] <socket number>|'RFC'[<hostid>]
<socket number> [<hostid>] <socket number>)
['BYTE SIZE' <integer>] ['CONNECT_TIME'
<integer>] ['RUN_TIME' <integer>] <formid>
Definitions:
Here's what each of the pieces means π§
Definitions:
<acct no> Account number is a character string whose
maximum length is 4.
<form name> Form name is a character string whose
maximum length is 6, and whose first
character is alphabetic.
<hostid> Host number preceded by '#' or host name
may be used to specify a Network host.
<integer> Integers may optionally be preceded by a
plus or minus sign, and by an H or X
(hexadecimal), 0 (octal), or D (decimal)
to specify the radix used. Decimal is
the default radix and positive the default
sign.
<job name> Job name is a character string whose
maximum length is 6, and whose first
character is alphabetic.
<password> The currently acceptable password is
'ARPA'.
<socket number> Socket numbers are specified as <integer>
(see above).
<tty list> TTY List is one or more TTY numbers,
separated by commas.
<tty no.> TTY number is an integer representing a
DRS terminal identification number.
<userid> User ID is a character string whose
maximum length is 8, and whose first
character is alphabetic.
Command Descriptions π
Alright, here's what each command actually does. Get ready, it's a lot π
'ATTACH' π¦
'ATTACH' <tty no.> <password> <CA>
This connects your console to the DRS/TTS terminal with identification number <tty no.>. That terminal must have been previously detached, and it must not have been deleted. (Right now, detached terminals get deleted after 1 hour.) β°
'BREAK' π
'BREAK' (<tty list>|<CA>) <CA>
This breaks the links to the terminals in <tty list>. If you don't give a <tty list>, then all established links get broken. (Check out 'LINK', 'MONITOR', and 'SELECT' to see how links get set up.)
'COMPILE' π₯
'COMPILE' <job name> formid> <CA>
This makes form <formid> get compiled. Before the DRS Compiler gets invoked, it checks that the source for form <formid> exists and that object code doesn't already exist. The compiler runs asynchronously to your terminal. It generates a diagnostic file for the form and, if there are no errors, object files. <job name> is used to identify the request, and it can't be used to identify any other job while the current request is still outstanding.
Because of main storage requirements, only one compilation is allowed to run at any time. Later requests get queued unless the request queue is full, in which case the request gets refused. You're notified when your compilation starts and when it terminates π
'CONVERT' π’
'CONVERT' <integer> ['TO'] <base> <CA>
This lets you convert octal, decimal, or hexadecimal integers from one radix to another. <base> is the radix you want for the result, and it can be 'OCTAL', DECIMAL', or 'HEXADECIMAL'. Math but make it cute β¨
'DEFINE' π
'DEFINE' <formid> <CA>
This lets you define a brand new source form, or append to an existing one. The new line indicator $$ replaces the normal $ to show that input is going toward defining the source form. Control C (ETX) signals the end of form definition and brings back the normal $ new line indicator.
Editing is honestly very limited, so brace yourself π Only the line you're currently typing can be edited. Once a line has been terminated with CR-LF and the new line indicator has shown up, that line can't be edited anymore. These control characters work for editing a form while you're defining it: Control A (SOH) or Rubout (DEL) delete the last character, control X (CAN) deletes the entire line, and control F (ACK) displays the entire line.
If you need to change any line other than the current one, the entire form has to be deleted and reentered. Save your work, bestie π
'DELETE' ποΈ
'DELETE' [<file type>] <formid> <CA> <CA>
This deletes the specified component file(s) of form <formid>. <file type> says which component file to delete, and it's either 'SOURCE', 'DIAGNOSTIC', or 'OBJECT_CODE'. If you don't specify a <file type>, then all components of the form get deleted.
'DETACH' π¦
'DETACH' <CA> <CA>
This breaks the TELNET connection between DRS and you, but it doesn't delete your DRS terminal for a fixed period of time, currently 1 hour. Any jobs your terminal has active are unaffected when it gets detached. You can reconnect to your DRS terminal later with the 'ATTACH' command πΈ
'DIRECTORY' π
'DIRECTORY' <formid> <CA>
This lists which components of form <formid> exist. A complete form consists of 'SOURCE', 'DIAGNOSTICS', and 'OBJECT_CODE' files.
'DISCONNECT' π
'DISCONNECT' <CA> <CA>
This breaks the TELNET connection between DRS and you, and it deletes your DRS terminal. Any jobs your terminal has active get purged. Gone, no take-backs π
'FULLDUPLEX' π
'FULLDUPLEX' <CA>
This directs DRS to echo your input, and it nullifies a previous 'LINE_AT_A_TIME' command β¨
'HALFDUPLEX' π
'HALFDUPLEX' <CA>
This directs DRS not to echo your input, and it nullifies a previous 'LINE_AT_A_TIME' command. Quiet mode, activated π€«
'HELP' π§
'HELP' <CA>
This lists the DRS control characters and what they mean. Literally the cheat sheet you need π«Ά
'LINE_AT_A_TIME' π
'LINE_AT_A_TIME' <CA>
Okay so this one is the line-at-a-time mode switch π
It tells DRS you're typing commands one line at a time, and it cancels any earlier 'FULLDUPLEX' or 'HALFDUPLEX' command β¨ While you're typing commands, DRS won't send you any output π€«
'LINK' ('ENABLE'|'DISABLE'|<tty list>|<CA>) <CA>
The 'LINK' command is how you turn links to other terminals on or off, or how you set up links between terminals π
'LINK' 'ENABLE'
'LINK' 'ENABLE' <CA> tells DRS to let other terminals ask to link up with your terminal from now on π¦
'LINK' 'DISABLE'
'LINK' 'DISABLE' <CA> tells DRS to say no to any future requests from other terminals that want to link with yours π
ββοΈ
'LINK' with <tty list>
'LINK' (<tty list>|<CA>) <CA> asks DRS to set up bidirectional links between your terminal and the terminals in <tty list> π If you leave <tty list> out, DRS tries to link you to every other active terminal πΈ While your terminal is linked to another one, everything sent to your terminal also goes to the linked terminal, and everything sent to the linked terminal also comes to you. Unidirectional links are a different vibe, and you set those up with 'MONITOR' and 'SELECT' π
'LIST'
'LIST' [<file type>] <formid> <CA>
This one lists the contents of the <file type> file for form <formid> π <file type> can be 'SOURCE', 'DIAGNOSTIC' or 'OBJECT_CODE', and if you don't pick one it defaults to 'SOURCE' π
'LOGIN'
'LOGIN' <userid> <password> <acct no.> <CA>
Logging in gets you signed in, turns on job-oriented commands, and picks the account your DRS usage gets billed to π§ Billing isn't actually implemented for DRS yet, so you can pick your own <userid> and <acct no.> and they can be whatever you want π Once billing does get implemented, user IDs and account numbers will be assigned and checked for validity when you log in. The only <password> that works right now is 'ARPA' π
'LOGOUT'
'LOGOUT' <CA>
Logging out signs you out, turns off job-oriented commands, and stops billing any new activity to the accounting parameters you gave earlier π Same as with 'DISCONNECT', any jobs your terminal has running get purged π§Ή
'MONITOR'
'MONITOR' (<tty list>|<CA>) <CA>
'MONITOR' asks DRS to set up unidirectional links between your terminal and the terminals in <tty list> π If you skip <tty list>, DRS tries to link you to all the other active terminals. While your terminal is monitoring another terminal, everything sent to that terminal also gets routed to yours π
'QUIT'
'QUIT' (<job name>|<CA>) <CA>
'QUIT' asks DRS to purge the job (a request for compiling or interpreting) that's identified by <job name> ποΈ If you leave out <job name>, every active job gets purged π
'RADIX'
'RADIX' <base> <CA>
This lets you choose the radix used for displaying integers from now on π’ <base> can be 'OCTAL', 'DECIMAL', or 'HEXADECIMAL' π The default display radix is decimal π
'RENAME'
'RENAME' <formid> ["TO'] <formid> <CA>
This one lets you rename a form π·οΈ Every component of the form named by the first <formid> gets renamed to match the second <formid>. But if a form with the second <formid> name already exists, nothing gets renamed and you get a notification instead π
'RESPONSE'
'RESPONSE' ('ALL'|'HANDHOLD'|'PROMPT'|'NORMAL'|'UNUSUAL'| 'ERRORS'|
'NONE') <CA>
'RESPONSE' controls how chatty the system is with its messages π¬ The default response level is 'ALL' π«Ά
'RUN'
'RUN' <job name> ('SIMPLEX' <run parameters>|'DUPLEX' '(' <run
parameters> <run parameters> ')') <CA>
'RUN' is the big one π₯ It makes DRS set up the Network connections you asked for, and tells the DRS interpreter to apply your form(s) to the data flowing over those connections π You start by naming your request with a <job name>, and then you say whether you want 'SIMPLEX' or 'DUPLEX' connections. 'SIMPLEX' means one unidirectional message path, and it needs one set of <run parameters>. 'DUPLEX' means two message paths, which means two sets of <run parameters> π―ββοΈ Each set of <run parameters> holds the info DRS needs to set up a Network connection, the time limits for the DRS interpreter, and the form that gets applied to the Network data stream π¦
Here's the grammar for <run parameters>, verbatim:
<run parameters> = ('SICP' <socket number>|'UICP' [<hostid>]
<socket number>|'RFC' [<hostid>] <socket
number> [<hostid>] <socket number>)
['BYTE_SIZE' <integer>] ['CONNECT_TIME'
<integer>] ['RUN_TIME' <integer>] <formid>
There are three ways to set up Network connections: 'SICP', 'UICP', and 'RFC' π§© 'SICP' (Server Initial Connection Protocol) and 'UICP' both make DRS pretend to be a server process that you can reach through <socket number> at UCSB, and then it waits for a user process to connect π₯οΈ 'UICP' is the one where DRS pretends to be a user process instead, and it connects to the server reachable at Host <hostid>, socket <socket number> π± 'RFC' tells DRS to connect straight to the two sockets you gave it π With 'RFC', one socket has to be a send socket and the other has to be a receive socket π€π₯ <hostid> defaults to the Host you logged into DRS/TSS from π
Here are the rest of the <run parameters> fields, in the original layout:
'BYTE_SIZE' <integer> specifies the byte size to be used, and
defaults to 8.
'CONNECT_TIME' <integer> specifies the amount of time, in seconds,
that DRS should wait for the connection to
be established. The default value is 30
seconds.
'RUN_TIME' <integer> specifies the maximum amount of time, in
seconds, that DRS interpreter will be
allowed to execute. The default value for
'RUN_TIME' is five minutes.
<formid> specifies the form which is to be applied
to the Network data stream.
Every instance of <run parameters> gets one socket pair and one form β±οΈ For 'SIMPLEX' runs, the Network data flows between those two sockets, and the form gets applied to it along the way π· 'DUPLEX' runs are a little more involved π You give two sets of <run parameters>, so two socket pairs get allocated and two forms get specified. Let's call them send socket 1, receive socket 1, and form 1 (set up by the first set of <run parameters>), and send socket 2, receive socket 2, and form 2 (set up by the second set). When interpreting starts, data flows from send socket 1, through form 1, into receive socket 2, and from send socket 2, through form 2, into receive socket 1. (Note that without this socket switching, processes would be connected to themselves when 'SICP' or 'UICP' is specified π)
You get notified when your connection requests start, and again when the interpreter starts applying a form to a connection π£ When a form finishes running, you get a diagnostic message from the interpreter along with the actual run time of the interpreter π
'SELECT'
'SELECT' (<tty list>|<CA>) <CA>
'SELECT' asks DRS to set up unidirectional links between your terminal and the terminals in <tty list> π― If you skip <tty list>, DRS tries to link you to every other active terminal. While your terminal has another terminal selected, everything sent from your terminal also gets routed to the selected one πͺ
';' (comments)
';' <text> <CA>
Use this to leave any comments you want π <text> can include the characters '?' and '.'. Heads up: <CA> has to be CR-LF, not a period π¨
[This RFC was put into machine readable form for entry]
[into the online RFC archives by Helene Morin, Via Genie, 12/1999]
π¦ where this page comes from
- ietf: rfc437 1973-06
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms