DIRECTORY ArpaTranslation USING [DetermineAddressAndSubnetMaskForInterface], CommBuffer USING [Overhead], CommDriver USING [GetNetworkChain, InsertReceiveProc, Network, RecvProc], CommDriverType USING [Encapsulation]; ArpaEthernetOneTranslation: CEDAR MONITOR LOCKS cH USING cH: Cache IMPORTS ArpaTranslation, CommDriver EXPORTS CommBuffer ~ { Buffer: TYPE ~ CommDriver.Buffer; Network: TYPE ~ CommDriver.Network; Encapsulation: PUBLIC TYPE ~ CommDriverType.Encapsulation; -- exported to CommBuffer GetEncapsulation: PROC [network: Network, address: Address] RETURNS [Encapsulation] ~ { TRUSTED { RETURN[ [ethernetOne[etherSpare1~[0,0], etherSpare2~[0,0], etherSpare3~[0,0], etherSpare4~[0,0], etherSpare5~[0,0], ethernetOneDest~address.d, ethernetOneSource~network.pup.host, ethernetOneType~arpa]] ] } }; }; RecvTranslation: CommDriver.RecvProc ~ { RETURN[buffer]; }; Init: PROC = { FOR network: Network _ CommDriver.GetNetworkChain[], network.next UNTIL network = NIL DO IF network.type # ethernetOne THEN LOOP; IF NOT ArpaTranslation.DetermineAddressAndSubnetMaskForInterface[network].ok THEN LOOP; network.arpa.getEncapsulation _ GetEncapsulation; CommDriver.InsertReceiveProc[network~network, type~arpaTranslate, proc~RecvTranslation]; ENDLOOP; }; Init[]; }. ώArpaEthernetOneTranslation.mesa Copyright c 1986 by Xerox Corporation. All rights reserved. Demers, August 19, 1987 5:33:23 pm PDT This is a dummy to be used until we get our act together on RARP, ICMP Subnet Mask, ... Encapsulating Arpa Packets Pup host to use is just low order byte of Arpa address. This works for broadcast too. Processing Received Translation Packets [network: Network, buffer: Buffer, bytes: NAT] RETURNS [Buffer] Initialization Install self for each ethernetOne on the chain. ΚΙ˜codešœ™Kšœ Οmœ1™