We'll have to do some digging. And having too been part of too many, but
similar of different implementations. The Chaos code used the partial
parsing as did a few others. IIRC: That's the same trick Apollo used with
Domain too. I had thought I had remember that Chesson and the UofI folks
used the same trick with the Arpanet code, but I have not looked at it in
years and clearly as you point out he did not.
As for DataKit et al.. Greg Chesson was a grad student at UoI. The UoI
folks did the original V6 Arpanet for UNIX code and Greg was the one of
the primary developers same. What I do not remember is who came first, the
Rand networking work for the UoI work. Rand did the the ports (later
called named pipes) and a few other things pretty early. But again all
those dates sort of mix together in the early middle 70s. USENIX was not
yet publishing proceedings so it's hard to keep straight. It pretty much
just email and memories of those of us that were sharing things at the time.
Anyway, when Greg graduated, he was hired by Ken when he finished and
developed DataKit at Bell labs. One of the pieces of datakit that was
released as part of V7 was Greg's mpx(2) code - which was the multiplexer.
The legend is that on is way to UCB for his sabbatical, Ken was checking in
Greg and the infamous v6 patches tape was left behind at UoI. Greg used to
deny all knowledge of same, but smiled all the time he said it.
Clem
On Mon, May 22, 2017 at 6:07 PM, Paul Ruizendaal <pnr(a)planet.nl> wrote:
Clem,
You've got me confused.
The API pretty much worked this way... there was
one simple kernel
hook. A small mod was done to the old nami routine (what modern
UNIX
calls 'lookup'), as a path was being parsed, the rest of the path was left
in place made available to other routines.
The UoI Arpanet code did not use the partial path parsing that you
describe.
The namei() routine is unchanged (see
http://www.tuhs.org/cgi-bin/
utree.pl?file=SRI-NOSC/ken/nami.c).
The code recognizes a network open, because the open() is of a special
character file with major number 255;
the minor number would be the remote address (1974 arpanet used 8 bit
network addresses - 6 bits IMP, 2 bits host).
If the 'mode' parameter to open() is 0, 1 or 2, then a NCP/telnet
connection would be made to that host. If the mode parameter was anything
else, it was a pointer to a data block with the full specification of the
connection to be made. See:
http://www.tuhs.org/cgi-bin/utree.pl?file=SRI-NOSC/ken/sys2.c - open1()
http://www.tuhs.org/cgi-bin/utree.pl?file=SRI-NOSC/ncpk/nopcls.c -
netopen()
The data block contained all the parameters that are set via calls to
connect/bind/listen in the BSD sockets API.
There were a couple of different schemes with
V7's multiplexor call was
created by Chesson for DataKit (which was similar to
was used in the UofI
code Arpanet code).
You've lost me here.
Paul
On 22 May 2017, at 18:29 , Clem Cole wrote:
The Rand API is documented in a couple of papers
that have been
discussed here previously. I'll have to do a little googling
to find
them. The ChaosNET docs are the best MIT docs.
>
>
The API pretty much worked this way... there was
one simple kernel
hook. A small mod was done to the old nami routine (what modern
UNIX
calls 'lookup'), as a path was being parsed, the rest of the path was left
in place made available to other routines.
Thus you could open: /dev/tcp/xxx and the string xxx was available in
call that
was implementing tcp and was then able to be passed xxx as a
parameter. Hence, the traditional open/close/read/write was all that was
needed.
Joy codified a new API that was supposed to be more network centric and
map to
different network protocols - the thinking being that
open/close/read/write were insufficient semantics for network operations.
Also, the only other issue at the time was that BSD's select(2) did not
exist, and the UNIX I/O were 100% synchronous. So some other mechanism
(also discussed here) needed to be created to avoid blocking in the
application. There were a couple of different schemes with V7's
multiplexor call was created by Chesson for DataKit (which was similar to
was used in the UofI code Arpanet code). Rand, UNET & Chaos had something
else that gave the save async function, who's name I've forgotten at the
moment, but I believe Noel posted the code for same in the last year from
one of the MIT kernels - we had used it at CMU that we had gotten from Rand.
On Mon, May 22, 2017 at 10:51 AM, Steve Simon <steve(a)quintile.net>
wrote:
hi Clem,
do you have pointers to any documentation on the rand/MIT network API?
-Steve