Changes in low-level Ethernet code in Fugue Release
June, 1983

The Ethernet code was substantially rewritten for the Fugue release
to accommodate the 10mb Ethernet and NS protocols, and to remove
some (eventually all) of the Bcpl Ethernet code.  The changes are
largely internal, but there are some user-visible changes.  For
complete details, see the Lisp Ethernet documentation.  Herewith
are the principal visible changes:

The PUP record.  PUP's are now instances of the datatype
ETHERPACKET, which has several special fields and then a large data
section where the actual PUP (or other level-one packet) lives.
The PUP record is an overlay into this structure.  The fields of
the PUP record have been renamed for consistency, although the old
names temporarily continue to give you time to switch over.   Thus,
your existing code with Fetches and Replaces of PUP fields should
still work, although it absolutely MUST be recompiled.  The
PUPCONTENTS field is also still there, even though a PUP is now
physically in one piece; this should not have any logical effect on
your old code.  The "extra" fields of the old PUP record no longer
exist, however.  There are extra fields in an ETHERPACKET that may
be useful: EPFLAGS (a BYTE field) and EPUSERFIELD (a POINTER
field).  The PUP and other records are not included in the standard
loadup; you must load the LispUsers package ETHERRECORDS.

SENDPUP -- is largely the same, except that while the pup is being
sent, it is considered to be no longer in your possession, but
rather in the possession of the ethernet driver.  This means, in
particular, that you may not write into the pup at least until it
has finished transmission.  A packet is in transmission while the
EPTRANSMITTING flag in the packet is true.  For aid in
synchronizing with the transmitter, there is an additional field in
the ETHERPACKET record called EPREQUEUE, which says what the
transmitter should do with the packet when it is finished.  The
value FREE means the packet should be returned to the free pool
(which means you had better not still be hanging on to it after you
do the SENDPUP); a value that is a SYSQUEUE means to place the
packet on the specified queue.  See documentation for description
of SYSQUEUE's.  There is an optional extra argument REQUEUE to
SETUPPUP, to set the EPREQUEUE field.

GETPUP -- takes only one argument, the pup socket, and returns a
brand new pup.  That is, GETPUP no longer takes a scratch pup as
input and copies data into it.  Similarly, EXCHANGEPUPS now ignores
its INPUP argument, instead returning the pup, if any, that
arrived.

CREATESOCKET, FLUSHSOCKET -- are now called OPENPUPSOCKET,
CLOSEPUPSOCKET.  Again, the old names will exist temporarily during
the switchover.

FILLPUPSOURCE -- no longer exists.  If any of the 3 source fields
of a pup (net, host, socket) are zero when the pup is handed to
SENDPUP, the fields are defaulted appropriately.