<> <> <> <> DIRECTORY Arpa USING [Address], Basics USING [BITAND], Endian USING [HWORD], Pup USING [allHosts, Host], XNS USING [broadcastHost, Host]; CommDriverType: CEDAR DEFINITIONS IMPORTS Basics = { BYTE: TYPE = [0..100H); HWORD: TYPE = Endian.HWORD; <> Encapsulation: TYPE = MACHINE DEPENDENT RECORD [ SELECT OVERLAID * FROM ethernet => [ <> ethernetDest: XNS.Host, ethernetSource: XNS.Host, ethernetType: EthernetPacketType], ethernetOne => [ etherSpare1, etherSpare2, etherSpare3, etherSpare4, etherSpare5: HWORD, <> ethernetOneDest, ethernetOneSource: Pup.Host, ethernetOneType: EthernetOnePacketType], impRelay => [ immediate: Arpa.Address, spare1, spare2, spare3: HWORD, <> impEthernetOneDest, impEthernetOneSource: Pup.Host, impEthernetOneType: EthernetOnePacketType], spare => [spare1, spare2, spare3, spare4, spare5, spare6, spare7: HWORD], ENDCASE]; trap: NAT [7..7] = SIZE[Encapsulation]; <> ethernetOneBroadcastHost: Pup.Host = Pup.allHosts; ethernetOneBootLoaderHost: Pup.Host = [377B]; <> ethernetBroadcastHost: XNS.Host = XNS.broadcastHost; <> ethernetMinBytes: NAT = 46; ethernetEncapsulationOffset: NAT = 0; ethernetEncapsulationBytes: NAT = 14; ethernetOneEncapsulationOffset: NAT = 5; ethernetOneEncapsulationBytes: NAT = 4; EthernetPacketType: TYPE = MACHINE DEPENDENT { translationFailed(0B), <> oldPup(1000B), oldPupTranslation(1001B), -- 0200H, 0201H <> xns(0600H), -- 3000B arpa(0800H), -- 4000B arp(0806H), -- "Address Resolution Protocol" newPup(0A00H), newPupTranslation(0A01H), (LAST[HWORD])}; EthernetOnePacketType: TYPE = MACHINE DEPENDENT { translationFailed(0B), <> peekData(402B), breathOfLife(602B), echoMe(700B), echoed(701B), pup(1000B), arpa(1001B), arp(1002B), toImp(1004B), fromImp(1005B), -- For Alto acting as a remote head xns(3000B), translation(3001B), (LAST[HWORD])}; IsMulticastHost: PROC [host: XNS.Host] RETURNS [BOOL] = INLINE { <> RETURN[Basics.BITAND[host.a, 1] # 0 ]; }; }.