10mb ether in Interlisp-D. To run on a Dolphin, you need the microcode file XMBDolphinLispMc.eb, which includes a 10mb ether driver in place of the 3mb driver. Load with /M switch. Whenever you return from a LOGOUT, the system figures out what kind of net you have, and does the appropriate thing. If you come up on a 10mb net, it will broadcast a request on the local net for its pup hostnumber (see below); if the lookup fails, it will ask for its number. PROCESS.STATUS.WINDOW] will show that there are two extra processes running, one a "watcher" for the local net (3 or 10) and one \PUPGATELISTENER that listens for routing broadcasts and maintains a local routing cache. Implementors of 10mb gateways and other non-Lisp machines need to be aware of the following protocols: Puplookup protocol: gateways (or whoever) have a table associating the 48-bit host number of each machine that wants to talk pups with an 8-bit manually assigned pup number. The protocol is a simple NS packet exchange protocol: XIP type = 6, destination socket = 11Q, XIP body = 32-bit ID (generated by requestor, copied by responder), 16-bit exchange type (1 = request, 2 = response, 3 = error), followed by other info. In the request, the other info is the 48-bit hostnumber. In the response, the other info is a 2-byte pup address (net, host). In the error, it is an error string (typically "Name not found"). Other unusual protocol is the host translation protocol. Every machine that wants to talk pups on 10 or NS on 3 knows its host number as both an 8-bit host number and a 48-bit hostnumber. To send a pup on a 10 wire requires converting the 8-bit immediate destination address (i.e., either the destination pup address or the address of a local pup gateway) to a 48-bit address to put in the encapsulation. Similarly, to send a XIP on 3 requires converting a 48-bit destination to an 8-bit destination. For shorthand, we call the former "3 to 10 translation" and the latter "10 to 3". The conversion is handled at the lowest level, using a special "translation" ether packet: Packet type = 1001Q (for 3 to 10) or 3001Q (for 10 to 3) source, destination addresses = as per encapsulation body = operation word = request (10101Q) or response (7070Q) desired ns address = 48 bits desired pup address = 8 bits blank = 8 bits sender's ns address = 48 bits sender's pup address = 8 bits blank = 8 bits When a host needs to send a packet to an address of the wrong flavor (a 10 address on the 3 wire or 3 address on 10), it builds a translation packet, filling the desired ns address (for 10 to 3) or desired pup address (for 3 to 10) and leaving the other zero. Requester also fills in her own ns and pup addresses, to make responder's job easier. Responder, i.e. the host that recognizes the desired address as being her own, fills in the address that was left zero and turns the packet around. Note that on a given wire, you will only see, and need to be able to respond to, one of the two kinds of translation packets. c TIMESROMAN c z7