[ih] APIs (was Re: History of the TCP/UDP port space)

Noel Chiappa jnc at mercury.lcs.mit.edu
Tue Jan 24 05:30:27 PST 2006


    > From: Dan McDonald <danmcd at sun.com>

    > For those of us younger (or only months older) than the ARPAnet and/or
    > UNIX

:-)

    > do you think we - the audience - could hear about some of these other
    > API approaches?

Well, most of them were pretty vanilla/obvious and/or boring, and I'm not at
all sure they are worth the effort to recover from the trash-heap of
history.... I no longer recall most of them (not that I was that familiar
with them anway, even at the time), no doubt for a good reason!

I do recall much of one that I wrote for Bridge/3Com, but other than the use
of upcalls (more below), it was relatively uninteresting - just passed all
the relevant data (e.g. for passive TCP open, just the local port number,
along with a routine to upcall when a connection opened) in the obvious way.

There were a number that did have interesting ideas (such as upcalls), and I
don't know about all of them, but I do know some of them had papers about
them which it ought to be possible to find.

    > The x-kernel oriented itself around upcalls, citing a Clark paper when
    > crediting the concept. (My papers are at the office, but is this the
    > same BCPL stuff you mentioned, Noel?)

I don't recall exactly how much the early BCPL versions used upcalls, but
yes, it was those implementations (plus, I think, the Multics one) where he
developed the concept of upcalls.

The other thing that came out of those early implementations (specifically
the BCPL one) was some ideas he had about how TCP could be split up, so that
the TCP state machine would be (basically) a library, and the buffering would
be integrated with the application, to optimize data handling (e.g. minimize
the number of copies) - not sure if there was a paper that talked about that.
I don't think that idea ever caught on - I know some systems did use a
variant of that, where there were multiple TCP implementations, and e.g. the
user TELNET used a simple single shift register for the output buffer,
because it only had to handle a human typing. Both Dave's original BCPL one,
and ones we did at MIT for a PDP-11 Unix (where only the input packet demux
was in the kernel) used that concept, so the latter machine actually had two
different TCP implementations, one suitable for low-rate applications, and
one for high.

    > What use is history if you can't learn from it?

Indeed... :-)

	Noel



More information about the Internet-history mailing list