117 lines
131 KiB
Plaintext
117 lines
131 KiB
Plaintext
1
|
||
|
||
Interlisp-D Reference Manual
|
||
1
|
||
|
||
Interlisp-D Reference Manual
|
||
31. ETHERNET
|
||
1
|
||
|
||
31. ETHERNET
|
||
1
|
||
|
||
|
||
"31"31. ETHERNET
|
||
6
|
||
|
||
Interlisp was first developed on large timesharing machines which provided each user with access to large amounts of disk storage, printers, mail systems, etc. Interlisp-D, however, was designed to run on smaller, single-user machines without these facilities. In order to provide Interlisp-D users with access to all of these services, Interlisp-D supports the Ethernet communications network, which allows multiple Interlisp-D machines to share common printers, file servers, etc.
|
||
Interlisp-D supports the Experimental Ethernet (3 Megabits per second) and the Ethernet (10 Megabits per second) local communications networks. These networks may be used for accessing file servers, remote printers, mail servers, or other machines. This chapter is divided into three sections: First, an overview of the various Ethernet and Experimental Ethernet protocols is presented. Then follow sections documenting the functions used for implementing PUP and NS protocols at various levels.
|
||
Ethernet(ETHERNET NIL Ethernet NIL NIL 1 SUBNAME PROTOCOLS SUBTEXT protocols) Protocols
|
||
1
|
||
|
||
The members of the Xerox 1100 family (1108, 1132), Xerox file servers and laser xerographic printers, along with machines made by other manufacturers (most notably DEC) have the capability of communicating over 3 Megabit per second Experimental Ethernets, 10 Megabit per second Ethernets and telephone lines.
|
||
Xerox pioneered its work with Ethernet using a set of protocols known as PARC Universal Packet (PUP) computer communication protocols. The architecture has evolved into the newer Network Systems (NS) protocols developed for use in Xerox office products. All of the members of the Xerox 1100 family can use both NS and PUP protocols.
|
||
Protocol Layering(ETHERNET NIL Ethernet NIL NIL 1 SUBNAME PROTOCOLS SUBTEXT protocols SUBSUBNAME LAYERING SUBSUBTEXT layering)
|
||
The communication protocols used by the members of the Xerox 1100 family are implemented in a "layered" fashion, which means that different levels of communication are implemented as different protocol layers. Protocol Layering allows implementations of specific layers to be changed without requiring changes to any other layers. The layering also allows use of the same higher level software with different lower levels of protocols. Protocol designers can implement new types of protocols at the correct protocol level for their specific application in a layered system.
|
||
At the bottom level, level zero, there is a need to physically transmit data from one point to another. This level is highly dependent on the particular transmission medium involved. There are many different level zero protocols, and some of them may contain several internal levels. At level one, there is a need to decide where the data should go. This level is concerned with how to address a source and destination, and how to choose the correct transmission medium to use in order to route the packet towards its destination. A level one packet is transmitted by encapsulating it in the level zero packet appropriate for the transmission medium selected. For each independent communication protocol system, a single level one protocol is defined. The rule for delivery of a level one packet is that the communication system must only make a best effort to deliver the packet. There is no guarantee that the packet is delivered, that the packet is not duplicated and delivered twice, or that the packets will be delivered in the same order as they were sent.
|
||
The addresses used in level zero and level one packets are not necessarily the same. Level zero packets are specific to a particular transmission medium. For example, the destination address of a level zero packet transmitted on one of the two kinds of Ethernet is the Ethernet address (host number) of a machine on the particular network. Level one packets specify addresses meaningful to the particular class of protocols being implemented. For the PUP and NS protocols, the destination address comprises a network number, host number (not necessarily the same as the level zero host number), and a socket number. The socket number is a higher-level protocol concept, used to multiplex packets arriving at a single machine destined for separate logical processes on the machine.
|
||
Protocols in level two add order and reliability to the level one facilities. They suppress duplicate packets, and are responsible for retransmission of packets for which acknowledgement has not been received. The protocol layers above level two add conventions for data structuring, and implement application specific protocols.
|
||
Level Zero Protocols(ETHERNET NIL Ethernet NIL NIL 2 SUBNAME PROTOCOLS SUBTEXT protocols SUBSUBNAME LEVEL% ZERO SUBSUBTEXT level% zero)
|
||
Level zero protocols are used to physically connect computers. The addresses used in level zero protocols are protocol specific. The Ethernet and Experimental Ethernet level zero protocols use host numbers, but level zero phone line protocols contain less addressing information since there are only two hosts connected to the telephone line, one at each end. As noted above, a level zero protocol does not include network numbers.
|
||
The 3MB Experimental Ethernet [1] was developed at PARC. Each Experimental Ethernet packet includes a source and destination host address of eight bits. The Experimental Ethernet standard is used by any machine attached to an Experimental Ethernet.
|
||
The 10MB Ethernet [2] was jointly developed and standardized by Digital, Intel, and Xerox. Each Ethernet level zero packet includes a source and destination host address that is 48 bits long. The Ethernet standard is used by any machine attached to an Ethernet.
|
||
Both of the level one protocols described later (PUP and NS) can be transported on any of the level zero protocols described above.
|
||
The Ethernet and Experimental Ethernet protocols are broadcast mediums. Data packets can be sent on these networks to every host attached to the net. A packet directed at every host on a network is a broadcast packet.
|
||
Other Level 0 protocols in use in industry include X.25, broadband networks, and Chaosnet. In addition, by using the notion of "mutual encapsulation", it is possible to treat a higher-level protocol (e.g. ARPANET) as if it were a Level Zero Protocol.
|
||
Level One Protocols(ETHERNET NIL Ethernet NIL NIL 2 SUBNAME PROTOCOLS SUBTEXT protocols SUBSUBNAME LEVEL% ONE SUBSUBTEXT level% one)
|
||
Two Level One Protocols are used in the Xerox 1100 Family, the PUP and the NS protocols. With the proper software, computers attached to Ethernets or Experimental Ethernets can send PUPs and NS packets to other computers on the same network, and to computers attached to other Ethernets or Experimental Ethernets.
|
||
The PUP protocols [3] were designed by Xerox computer scientists at the Palo Alto Research Center. The destination and source addresses in a PUP packet are specified using an 8-bit network number, an 8-bit host number, and a 32-bit socket number. The 8-bit network number allows an absolute maximum of 256 PUP networks in an internet. The 8-bit host number is network relative. That is, there may be many host number "1"s, but only one per network. 8 bits for the host number limits the number of hosts per network to 256. The socket number is used for further levels of addressing within a specific machine.
|
||
The Network Systems (NS) protocols [4, 5] were developed by the Xerox Office Products Division. Each NS packet address includes a 32-bit network number, a 48-bit host number, and a 16-bit socket number. The NS host and network numbers are unique through all space and time. A specific NS host number is generally assigned to a machine when it is manufactured, and is never changed. In the same fashion, all networks (including those sold by Xerox and those used within Xerox) use the same network numbering space---there is only one network "74".
|
||
Higher Level Protocols(ETHERNET NIL Ethernet NIL NIL 3 SUBNAME PROTOCOLS SUBTEXT protocols SUBSUBNAME HIGHER% LEVEL SUBSUBTEXT higher% level)
|
||
The higher level PUP protocols include the File Transfer Protocol (FTP) and the Leaf Protocol used to send and retrieve files from Interim File Servers (IFSs) and DEC File Servers, the Telnet protocol implemented by "Chat" windows and servers, and the EFTP protocol used to communicate with the laser xerographic printers developed by PARC ("Dovers" and "Penguins").
|
||
The higher level NS protocols include the Filing Protocol which allows workstations to access the product File Services sold by Xerox, the Clearinghouse Protocol used to access product Clearinghouse Services, and the TelePress Protocol used to communicate with the Xerox model 8044 Print Server.
|
||
Connecting Networks: Routers and Gateways
|
||
When a level one packet is sent from one machine to another, and the two machines are not on the same network, the packet must be passed between networks. Computers that are connected to two or more level zero mediums are used for this function. In the PUP world, these machines have been historically called "Gateways." In the NS world these machines are called Internetwork Routers (Routers), and the function is packaged and sold by Xerox as the Internetwork Routing Service (IRS).
|
||
Every host that uses the PUP protocols requires a PUP address; NS Hosts require NS addresses. An address consists of two parts: the host number and the network number. A computer learns its network number by communicating with a Router or Gateway that is attached to the same network. Host number determination is dependent on the hardware and the type of host number, PUP or NS.
|
||
Note that there is absolutely no relationship between a host's NS host and net numbers and the same host's PUP host and net numbers.
|
||
Addressing Conflicts with Level Zero Mediums
|
||
For convenience in the respective protocols, a level one PUP (8-bit) host number is the same as a level zero Experimental Ethernet host number; i.e., when a PUP level one packet is transported by an Experimental Ethernet to another host on the same network, the level zero packet specifies the same host number as the level one packet. Similarly, a level one NS (48-bit) host number is the same as a level zero Ethernet host number.
|
||
When a PUP level one packet is transported by an Ethernet, or an NS level one packet is sent on Experimental Ethernet, the level one host number cannot be used as the level zero address, but rather some means must be provided to determine the correct level zero address. Xerox solved this problem by specifying another level-one protocol called translation to allow hosts on an Experimental Ethernet to announce their NS host numbers, or hosts on an Ethernet to announce their PUP host numbers. Thus, both the Ethernet and Experimental Ethernet Level Zero Protocols totally support both families of higher level protocols.
|
||
References
|
||
[1] Robert M. Metcalfe and David R. Boggs, Ethernet: Distributed Packet Switching for Local Computer Networks, Communications of the ACM, vol. 19 no. 7, July 1976.
|
||
[2] Digital Equipment Corporation, Intel Corporation, Xerox Corporation. The Ethernet, A Local Area Network: Data Link Layer and Physical Layer Specifications. September 30, 1980, Version 1.0
|
||
[3] D. R. Boggs, J. F. Shoch, E. A. Taft, and R. M. Metcalfe, PUP: An Internetwork Architecture, IEEE Transactions on Communications, com-28:4, April 1980.
|
||
[4] Xerox Corporation. Courier: The Remote Procedure Call Protocol. Xerox System Integration Standard. Stamford, Connecticut, December, 1981, XSIS 038112.
|
||
[5] Xerox Corporation. Internet Transport Protocols. Xerox System Integration Standard. Stamford, Connecticut, December, 1981, XSIS 028112.
|
||
Higher Level PUP Protocol Functions(ETHERNET NIL Ethernet NIL NIL 4 SUBNAME PUP% PROTOCOL% FUNCTIONS SUBTEXT Pup% protocol% functions)
|
||
1
|
||
|
||
This section describes some of the functions provided in Interlisp-D to perform protocols above Level One. Level One functions are described in a later section, for the benefit of those users who wish to program new protocols.
|
||
(ETHERHOSTNUMBER(ETHERHOSTNUMBER (Function) NIL NIL NIL 4) NAME) [Function]
|
||
Returns the number of the named host. The number is 16-bit quantity, the high 8 bits designating the net and the low 8 bits the host. If NAME is NIL, returns the number of the local host.
|
||
(ETHERPORT(ETHERPORT (Function) NIL NIL NIL 4) NAME ERRORFLG MULTFLG) [Function]
|
||
Returns a port corresponding to NAME. A "port" is a network address that represents (potentially) one end of a network connection, and includes a socket number in addition to the network and host numbers. Most network functions that take a port as argument allow the socket to be zero, in which case a well-known socket is supplied. A port is currently represented as a dotted pair (NETHOST . SOCKET).
|
||
NAME may be a litatom, in which case its address is looked up, or a port, which is just returned directly. If ERRORFLG is true, generates an error "host not found" if the address lookup fails, else it returns NIL. If MULTFLG is true, returns a list of alternative port specifications for NAME, rather than a single port (this is provided because it is possible for a single name in the name database to have multiple addresses). If MULTFLG is NIL and NAME has more than one address, the currently nearest one is returned. ETHERPORT caches its results.
|
||
The SOCKET of a port is usually zero, unless the name explicitly contains a socket designation, a number or symbolic name following a + in NAME, e.g., PHYLUM+LEAF. A port can also be specified in the form "NET#HOST#SOCKET", where each of NET, HOST and SOCKET is a sequence of octal digits; the socket, but not the terminating #, can be omitted, in which case the socket is zero.
|
||
(ETHERHOSTNAME(ETHERHOSTNAME (Function) NIL NIL NIL 5) PORT USE.OCTAL.DEFAULT) [Function]
|
||
Looks up the name of the host at address PORT. PORT may be a numeric address, a (NETHOST . SOCKET) pair returned from ETHERPORT, or a numeric designation in string form, "NET#HOST#SOCKET", as described above. In the first case, the net defaults to the local net. If PORT is NIL, returns the name of the local host. If there is no name for the given port, but USE.OCTAL.DEFAULT is true, the function returns a string specifying the port in octal digits, in the form "NET#HOST#SOCKET", with SOCKET omitted if it is zero. Most functions that take a port argument will also accept ports in this octal format.
|
||
(EFTP(EFTP (Function) NIL NIL NIL 5) HOST FILE PRINTOPTIONS) [Function]
|
||
Transmits FILE to HOST using the EFTP protocol. The FILE need not be open on entry, but in any case is closed on exit. EFTP returns only on success; if HOST does not respond, it keeps trying.
|
||
The principal use of the EFTP protocol is for transmitting Press files to a printer. If PRINTOPTIONS is non-NIL, EFTP assumes that HOST is a printer and FILE is a Press file, and takes additional action: it calls PRINTERSTATUS (see Chapter 29) for HOST and prints this information to the prompt window; and it fills in the "printed-by" field on the last page of the press file with the value of USERNAME (see Chapter 24). Also, PRINTOPTIONS is interpreted as a list in property list format that controls details of the printing. Possible properties are as follows:
|
||
#COPIES Value is the number copies of the file to print. Default is one.
|
||
#SIDES If the value is 2, select two-sided printing (if the printer can print two-sided copies).
|
||
DOCUMENT.CREATION.DATE Value is the document creation date to appear on the header page (an integer date as returned by IDATE).
|
||
DOCUMENT.NAME Value is the document name to appear on the header page (as a string). Default is the full name of the file.
|
||
Higher Level NS Protocol Functions(ETHERNET NIL Ethernet NIL NIL 5 SUBNAME NS% PROTOCOL% FUNCTIONS SUBTEXT NS% protocol% functions)
|
||
1
|
||
|
||
The following is a description of the Interlisp-D facilities for using Xerox SPP and Courier protocols and the services based on them. The sections on naming conventions, Printing, and Filing are of general interest to users of Network Systems servers. The remaining sections describe interfaces of interest to those who wish to program other applications on top of either Courier or SPP.
|
||
Name and Address Conventions
|
||
Addresses of hosts in the NS world consist of three parts, a network number, a machine number, and a socket number. These three parts are embodied in the Interlisp-D data type NSADDRESS. Objects of type NSADDRESS print as "net#h1.h2.h3#socket", where all the numbers are printed in octal radix, and the 48-bit host number is broken into three 16-bit fields. Most functions that accept an address argument will accept either an NSADDRESS object or a string that is the printed representation of the address.
|
||
Higher-level functions accept host arguments in the form of a symbolic name for the host. The NS world has a hierarchical name space. Each object name is in three parts: the Organization, the Domain, and the Object parts. There can be many domains in a single organization, and many objects in a single domain. The name space is maintained by the Clearinghouse, a distributed network database service.
|
||
A Clearinghouse name is standardly notated as object:domain:organization. The parts organization or domain:organization may be omitted if they are the default (see below). Alphabetic case is not significant. Internally, names are represented as objects of data type NSNAME, but most functions accept the textual representation as well, either as a litatom or a string. Objects of type NSNAME print as object:domain:organization, with fields omitted when they are equal to the default. A Domain is standardly represented as an NSNAME in which the object part is null. If frequent use is to be made of an NS name, it is generally preferable to convert it to an NSNAME once, by calling PARSE.NSNAME, then passing the resultant object to all functions desiring it.
|
||
CH.DEFAULT.ORGANIZATION(CH.DEFAULT.ORGANIZATION (Variable) NIL NIL NIL 6) [Variable]
|
||
This is a string specifying the default Clearinghouse organization.
|
||
CH.DEFAULT.DOMAIN(CH.DEFAULT.DOMAIN (Variable) NIL NIL NIL 6) [Variable]
|
||
This is a string specifying the default Clearinghouse domain. If it or the variable CH.DEFAULT.ORGANIZATION is NIL, they are set by Lisp system code (when they are needed) to be the first domain served by the nearest Clearinghouse server.
|
||
In small organizations with just one domain, it is reasonable to just leave these variables NIL and have the system set them appropriately. In organizations with more than one domain, it is wise to set them in the site initialization file, so as not to be dependent on exactly which Clearinghouse servers are up at any time.
|
||
(PARSE.NSNAME(PARSE.NSNAME (Function) NIL NIL NIL 6) NAME #PARTS DEFAULTDOMAIN) [Function]
|
||
When #PARTS is 3 (or NIL), parses NAME, a litatom or string, into its three parts, returning an object of type NSNAME. If the domain or organization is omitted, defaults are supplied, either from DEFAULTDOMAIN (an NSNAME whose domain and organization fields only are used) or from the variables CH.DEFAULT.DOMAIN and CH.DEFAULT.ORGANIZATION.
|
||
If #PARTS is 2, NAME is interpreted as a domain name, and an with null object is returned. In this case, if NAME is a full 3-part name, the object part is stripped off.
|
||
If #PARTS is 1, NAME is interpreted as an organization name, and a simple string is returned. In this case, if NAME is a 2- or 3-part name, the organization is extracted from it.
|
||
If NAME is already an object of type , then it is returned as is (if #PARTS is 3), or its domain and/or organization parts are extracted (if #PARTS is 1 or 2).
|
||
(NSNAME.TO.STRING(NSNAME.TO.STRING (Function) NIL NIL NIL 6) NSNAME FULLNAMEFLG) [Function]
|
||
Converts NSNAME, an object of type , to its string representation. If FULLNAMEFLG is true, the full printed name is returned; otherwise, fields that are equal to the default are omitted.
|
||
Programmers who wish to manipulate NSADDRESS and NSNAME objects directly should load the Library package ETHERRECORDS.
|
||
Clearinghouse Functions
|
||
This section describes functions that may be used to access information in the Clearinghouse.
|
||
(START.CLEARINGHOUSE(START.CLEARINGHOUSE (Function) NIL NIL NIL 7) RESTARTFLG) [Function]
|
||
Performs an expanding ring broadcast in order to find the nearest Clearinghouse server, whose address it returns. If a Clearinghouse has already been located, this function simply returns its address immediately, unless RESTARTFLG is true, in which case the cache of Clearinghouse information is invalidated and a new broadcast is performed. START.CLEARINGHOUSE is normally performed automatically by the system the first time it needs Clearinghouse information; however, it may be necessary to call it explicitly (with RESTARTFLG set) if the local Clearinghouse server goes down.
|
||
CH.NET.HINT(CH.NET.HINT (Variable) NIL NIL NIL 7) [Variable]
|
||
A number or list of numbers, giving a hint as to which network the nearest Clearinghouse server is on. When START.CLEARINGHOUSE looks for a Clearinghouse server, it probes the network(s) given by CH.NET.HINT first, performing the expanding ring broadcast only if it fails there. If the nearest Clearinghouse server is not on the directly connected network, setting CH.NET.HINT to the proper network number in the local site init file (see Chapter 12) can speed up START.CLEARINGHOUSE considerably.
|
||
(SHOW.CLEARINGHOUSE(SHOW.CLEARINGHOUSE (Function) NIL NIL NIL 7) ENTIRE.CLEARINGHOUSE? DONT.GRAPH) [Function]
|
||
This function displays the structure of the cached Clearinghouse information in a window. Once created, it will be redisplayed whenever the cache is updated, until the window is closed. The structure is shown using the Library package GRAPHER.
|
||
If ENTIRE.CLEARINGHOUSE? is true, then this function probes the Clearinghouse to discover the entire domain:organization structure of the Internet, and graphs the result. If DONT.GRAPH is true, the structure is not graphed, but rather the results are returned as a nested list indicating the structure.
|
||
(LOOKUP.NS.SERVER(LOOKUP.NS.SERVER (Function) NIL NIL NIL 7) NAME TYPE FULLFLG) [Function]
|
||
Returns the address, as an NSADDRESS, for the object NAME. TYPE is the property under which the address is stored, which defaults to ADDRESS.LIST. The information is cached so that it need not be recomputed on each call; the cache is cleared by restarting the Clearinghouse. If FULLFLG is true, returns a list whose first element is the canonical name of NAME and whose tail is the address list.
|
||
The following functions perform various sorts of retrieval operations on database entries in the Clearinghouse. Here, "The Clearinghouse" refers to the collective service offered by all the Clearinghouse servers on an internet; Lisp internally deals with which actual server(s) it needs to contact to obtain the desried information. The argument(s) describing the objects under consideration can be strings or NSNAME's, and in most cases can contain the wild card "*", which matches a subsequence of zero or more characters. Wildcards are permitted only in the most specific field of a name (e.g., in the object part of a full three-part name). When an operation intended for a single object is instead given a pattern, the operation is usually performed on the first matching object in the database, which may or may not be interesting.
|
||
(CH.LOOKUP.OBJECT(CH.LOOKUP.OBJECT (Function) NIL NIL NIL 8) OBJECTPATTERN) [Function]
|
||
Looks up OBJECTPATTERN in the Clearinghouse database, returning its canonical name (as an NSNAME) if found, NIL otherwise. If OBJECTPATTERN contains a "*", returns the first matching name.
|
||
(CH.LIST.ORGANIZATIONS(CH.LIST.ORGANIZATIONS (Function) NIL NIL NIL 8) ORGANIZATIONPATTERN) [Function]
|
||
Returns a list of organization names in the Clearinghouse database matching ORGANIZATIONPATTERN. The default pattern is "*", which matches anything.
|
||
(CH.LIST.DOMAINS(CH.LIST.DOMAINS (Function) NIL NIL NIL 8) DOMAINPATTERN) [Function]
|
||
Returns a list of domain names (two-part NSNAME's) in the Clearinghouse database matching DOMAINPATTERN. The default pattern is "*", which matches anything in the default organization.
|
||
(CH.LIST.OBJECTS(CH.LIST.OBJECTS (Function) NIL NIL NIL 8) OBJECTPATTERN PROPERTY) [Function]
|
||
Returns a list of object names matching OBJECTPATTERN and having the property PROPERTY. PROPERTY is a number or a symbolic name for a Clearinghouse property; the latter include USER, PRINT.SERVICE, FILE.SERVICE, MEMBERS, ADDRESS.LIST and ALL.
|
||
For example,
|
||
(CH.LIST.OBJECTS "*:PARC:Xerox" (QUOTE USER))
|
||
returns a list of the names of users in the domain PARC:Xerox.
|
||
(CH.LIST.OBJECTS "*lisp*:PARC:Xerox" (QUOTE MEMBERS))
|
||
returns a list of all group names in PARC:Xerox containing the substring "lisp".
|
||
(CH.LIST.ALIASES(CH.LIST.ALIASES (Function) NIL NIL NIL 8) OBJECTNAMEPATTERN) [Function]
|
||
Returns a list of all objects in the Clearinghouse database that are aliases and match OBJECTNAMEPATTERN.
|
||
(CH.LIST.ALIASES.OF(CH.LIST.ALIASES.OF (Function) NIL NIL NIL 8) OBJECTPATTERN) [Function]
|
||
Returns a list of all objects in the Clearinghouse database that are aliases of OBJECTPATTERN.
|
||
(CH.RETRIEVE.ITEM(CH.RETRIEVE.ITEM (Function) NIL NIL NIL 8) OBJECTPATTERN PROPERTY
|
||
INTERPRETATION) [Function]
|
||
Retrieves the value of the PROPERTY property of OBJECTPATTERN. Returns a list of two elements, the canonical name of the object and the value. If INTERPRETATION is given, it is a Clearinghouse type (see the Constructed Types section below) with which to interpret the bits that come back; otherwise, the value is simply of the form (SEQUENCE UNSPECIFIED), a list of 16-bit integers representing the value.<2E><> |