On Nov 27, 2022, at 6:25 PM, Thomas DeBellis
<tommytimesharing(a)gmail.com> wrote:
Tops-20 NFT, FAL and NRT will do something called Poor Man's Routing (or PMR, for
short). The Tops-10 NRT client will also do it. PMR is something I dimly recall from
Phase II or III; this was back before 36 bit hosts could do full routing. Here is some
background:
On CCnet, we had enough 20's that not all could be connected to each other in a star
network. Not even Columbia had enough KMC's to 'star' our 20's; the
closest we got was a ring. CMU had even more. When a 20 wasn't next door to whatever
system you wanted to get to, you had SET HOST to one that did and then do another SET HOST
accordingly. Or maybe you had to do that a few times.
The manual procedure and all the accounts involved was clunky enough that pretty much
only systems staff did this. It was out of the question for researchers and paying
customers.
So I think some site on CCnet came up with the idea of automating it to a certain extent.
It was called "Poor Man's Routing" and the way it worked is that you
specified the route to the system in question. Let's say you were on NODEA:: and
wanted to go to NODEC:: yet did not have direct connectivity. If both NODEA:: and NODEC::
had connectivity to NODEB::, then the relevant part of the configuration looked something
like this:
NODEA:: ↔ NODEB:: ↔ NODEC::
If NODEB:: was a PMR host, then you could do something like SET HOST NODEB::NODEC:: and
the parser would convert this to some intermediate string. Instead of opening a
connection on DECnet object 23, it would use object 123 and NODEB:: was responsible for
taking the rest of the string and getting you to the right place.
It worked well enough if the systems in question weren't excessively loaded (which
was invariably never the case) and it saved us when the dates for version 6 slipped. I
had been under the impression that some site on CCnet had done this and remember eagerly
flushing all of it when we finished the field test.
Much to my surprise an acquaintance of mine at Marlboro (Larry Campbell) formalized this
with a separate module called DNCONN.MAC. I put this into a conditional assembly in part
to save some address space (only to get blown out of the water by some vestigial code that
had never been hit).
Does anybody remember PMR? Did it exist for the other systems which supported DECnet?
Just curious whether I should turn this on for anyone.
I remember it well. It was indeed used in Phase II, and also in the DEC internal network
for Phase III nodes to reach out of area. And later, when "hidden areas"
appeared, to reach those.
RSTS has an implementation called PMR; VMS also, called PSTHRU I think. The PyDECnet
implementation was reverse engineered from the RSTS version; my Macro-10 is too feeble to
read the TOPS-20 version. And yes, it's compatible with the others; I have tested
TOPS-20 talking via my implementation. The protocol is really quite simple, you can see
the reverse engineered protocol spec in doc/protocols/pmr.txt in the PyDECnet source
tree.
Since it just does a simple repeating of incoming traffic it should be quite a simple
program and not much of a performance issue. The RSTS version is single threaded (one
process per PMR connection). The same goes for the PyDECnet version, though it would not
be hard to make it multi-threaded (not much reason to do so, though).
As mentioned in the document, the various implementations seem to differ a little.
Support or lack of it for interrupt messages is one detail; connect data is another. An
interesting omission is the lack of support (in any version I know of) for returning
connect confirm data, which means that it gets in the way of some protocols that rely on
that data for version number exchange.
By the way, while the node::node2:: ... syntax appears in a bunch of places, that
isn't necessarily PMR. For example, VMS supports that for file access, when the
intermediate nodes are VMS; that works simply because of RMS-32 transparent network
access. And MAIL11 does the analog of PMR internally; I haven't studied the details.
paul