|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T r
Length: 11700 (0x2db4) Types: TextFile Names: »rev1086«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit └─⟦3b20aab50⟧ »EurOpenD3/network/snmp/kip-snmp.91.tar.Z« └─⟦b503a39fe⟧ └─⟦this⟧ »kip/doc/rev1086«
10/86 REVISION OF IP-ETHER/APPLETALK GATEWAY CODE The October 1986 Stanford revision of the IP-ether/appletalk gateway code (KIP) is used with the Kinetics KFPS. It contains the following new features over the previous, 'KUDP' / seagate release. Some of these items will be discussed in more detail below. Improved IP address management. Centralized configuration/booting control. Full routing using NBP/RTMP/ZIP; 'core' gateway scheme. Gateway debugging via symbolic net ddt. Simple integration with libraries such as CAP/KHOST. Improved packet throughput. IP ADDRESSING IP nets/subnets are no longer tied directly to appletalk net numbers. If your Mac applications are only using appletalk protocols (not MacIP), then only one IP address needs to be assigned, that of the gateway itself. If Mac applications use IP protocols, then each Mac must be assigned a unique IP address. In the past this was done by assigning an IP net or IP subnet number to the appletalk cable, then placing a 'customization file' on each Mac containing its unique IP address. There are a number of administrative reasons this is not a good approach: (1) the custom file must be carefully configured and not accidently copied or moved to another machine/cable. (2) IP net/subnet numbers are valuable resources in certain campuses and companies; assigning one per appletalk cable can be wasteful. (3) the old IP address 'ARP' (address resolution protocol) scheme does not work through 'standard' appletalk bridges such as the Hayes. For these reasons, the gateway code now manages appletalk IP addresses in a new fashion. This is described in detail in the file 'ip.at' in this directory. Briefly, the gateway can be configured so that it takes over responsibility for a 'range' of IP addresses on the ethernet side of the gateway. These addresses can be dynamically or staticly bound to MacIP clients on the appletalk side. Typically a MacIP client program will ask the gateway for an IP address assignment each time the client program (such as Telnet or FTP) executes. The gateway remembers these assignments (even after the client exits) and thus the mapping used between IP address and appletalk address remains relatively fixed. Appletalk NBP (name binding protocol) is used to provide the ARP function. GATEWAY CONFIGURATION / BOOTING CONTROL Rather than each gateway physical site having to edit and maintain a detailed download configuration file, this function is now controlled by an 'appletalk administrator' host / daemon. Each gateway is only configured with a few basic items at download time, such as the IP/ether address of itself and the IP addresses of the admin host, and the nearest 'real' gateway. This information is placed in a special 'read only' section of the gateway RAM along with the TEXT and DATA of the gateway program. When the gateway is powered up or restarts, it asks the admin host for the rest of its configuration, and for the initial routing table showing the next hop IP address for all appletalk net numbers. After this time the admin host is no longer needed and the gateways keep each other informed of dynamic additions to the appletalk topology (such as a Hayes bridge), as they are plugged in. The appletalk admin daemon, /etc/atalkad, runs on the admin host and usually just answers requests from booting gateways (a rare occurance). However the daemon can also be signaled to propagate new routing or config info out to all the gateways. This simplifies administration. Another file in this directory, 'install' describes the daemon and how to setup its database file, /etc/atalkatab. A sample atalkatab is also provided with extensive comments. ROUTING PROTOCOLS This is an outline description of how appletalk routing works in the new gateway code. At boot time the initial routing table is obtained from the admin host. This downloaded table is an array of structures with the following fields: appletalk net number (anet) flags IP net or host address zone name The flags show what kind of appletalk net this IP address represents, either a kbox acting as a gateway to the anet, or an IP net/subnet representing the anet (typically an ethernet segment). For the latter case, other flags show what format of directed broadcast address is used to reach all hosts on that ether segment. Provision is also made for IP nets that dont offer directed broadcast (discouraged). Yet another flag shows which gateways are marked as 'core' gateways, that are used to centralize dynamic updates, discussed below. In the routing table inside the gateway, further fields and flags are available to describe other aspects of the anet entry. For example, the 'hop count' field is used in the appletalk routing update algorithms. For use in the discussion below, we characterize the type of route entry with the following keywords. hop0 - there are only two routes in the table with hop count equal to 0, these are the directly connected cables to the ethernet and appletalk. local - this kind of route points to an appletalk node number of a bridge accessible on the directly connected appletalk. IP - this route points to another kbox or to an IP net. AA - this route was downloaded from the appletalk administrator in the initial route table. AA routes are a subset of IP routes; IP routes can include nets discovered dynamically. Within the gateway code, the following subroutine functions are invoked as described upon timer expiration or packet input: RTMPTIMER runs every 10 seconds and broadcasts an RTMP packet to the directly connected appletalk cable. (10 seconds seems short but this is the Apple standard). This causes the campus route situation to propagate out thru any bridges on the appletalk cable. RTMPTIMER (every 20 seconds) ages the route table. AA and hop0 routes are excluded from aging. Routes are deleted if they are age >= 40 seconds (local routes) or >= 5 minutes (IP routes). RTMPINPUT is called when an RTMP packet is received from the appletalk segment (from other bridges). It updates and adds local routes; doesnt touch hop0 or IP routes. ARTTIMER. 'art' stands for 'arouteTuple'. This is an extended form of routing packet sent between gateways. It contains information similar to the RTMP packets, but also contains IP address information. ARTTIMER runs every 60 seconds. If the gateway hasnt yet obtained its initial routing table, it asks the admin host to send one. Otherwise ARTTIMER sends any local additions in its table to ONE of the core gateways (but never itself). The core is chosen by circularly scanning the table for an entry so flagged. In other words if there are two core's marked, the updates will be sent alternately to them. ARTINPUT is called when an arouteTuple arrives. It could have been sent by the admin host (opcode ROUTEI, 'initial'), by the arttimer above (ROUTEQ, 'query') or as a response to a ROUTEQ, (opcode ROUTE). If it was a ROUTEI, all previous AA routes are purged before merging additions. Hop0 and local routes are never affected; after merging additions/changes the gateway checks the op code again. If it was ROUTE, we're done. If it was ROUTEQ (query), we respond with another arouteTuple containing all of our own non-AA routes. If it was ROUTEI we simply send an acknowledgement so that the admin host knows we got it ok. Now that we have a valid route table, processing NBP BrRq's (bridge requests) is simple: the gateway just goes down the table, sending a LkUp directed broadcast request to each net. The gateway throttles itself so that it doesnt fill all the output queues or deny incoming packets while performing this broadcast propagation. As a form of misconfiguration and security protection, the artinput function in the gateway only accepts routing packets from other 'trusted' gateways: i.e. from the admin host or one of the kboxes configured initially in the database. SYMBOLIC DDT DEBUGGER To aid in debugging the running gateway, some code was added to an existing ddt program to allow network access to the address space in the gateway. The ddt, object file, and symbol table reside on UNIX and simple deposit/examine packets are sent to the gateway. A 'debug host' is setup as part of the gateway configuration and only requests from this host (and in the privileged socket range, superusers only) are allowed. To invoke ddt call it as "ddt gw.sym IP_name_or_address". We have found it useful for monitoring/changing tables, statistics counters and such. There is also a (kludge) way of printing gateway generated packets (if an etherwatcher isnt on your desk): just setup to send the IP packet to an 'undefined' IP address; since these stay in the ARP cache for a few minutes, you have time to find the packet in the cache and print it out. Since the KFPS checksum/powercycle restart code also depends on the TEXT/DATA portion of RAM staying intact, a new operation was added to ddt to do a memory compare between the running gateway and the object file on UNIX. Another operation allows toggling between the display of the gateway address space and the object file. LIBRARY INTEGRATION Talking to the new gateway code is simple for UNIX libraries such as CAP (or KHOST). A configuration file exists per host showing the appletalk addresses of the host itself, and its closest appletalk gateway (which may not be on the same ether cable). We have modified CAP to look in the file /etc/atalk.local, an example of which is shown here: # mynet mynode myzone 123 9 MyZoneName # bridgenet bridgenode bridgeIP 123 240 36.9.0.240 Routing for the host is straightforward: the host keeps variables source_anet, source_anode, and source_IPaddress which are reset by each incoming appletalk packet. Now when the host wants to send, if the appletalk address the host is sending to matches source_anet / source_anode, the host can send the appletalk packet directly to source_IPaddress. This will be the address of a kbox or another ether host. If there is no match, the host simply sends to the 'bridgeIP' address found in /etc/atalk.local. The gateway will do the proper appletalk forwarding. Eventually as a connection becomes established, the host will naturally have cached the addresses of the peer at the other end and thus the appletalk packet can be routed directly. Similarly, NBPLookup's from the UNIX host are sent to the nearest gateway for directed broadcast propagation to all appletalk nets (including the host's own). It would be great if the UNIX host could somehow determine its nearest bridge and appletalk addresses dynamically by sending or listening for special packets from the gateways. But we havent figured out how to do this for the general case when the gateway may be several hops away, behind non-appletalk speaking gateways. If you have some ideas, please post them to info-applebus. IMPROVED THROUGHPUT AND ORGANIZATION The new code has an improved organization that does less buffer copying and handles / routes packets more consistently. Kinetics and Columbia have contributed mods to the ethernet device driver code that perform DMA directly to and from the buffer pool. (The original seagate driver had to contend with separate buffer memory on the Interlan NI3210 interface card). We've made some steps toward reducing the Kinetics dependencies for the dozen or so 'original' seagate builders out there, but this will not be completed until next release. (I'm surprised people are still using that prototype hardware.) --Bill Croft, Stanford University, CSLI.