<> <> <> <> DIRECTORY Basics USING [BITAND], Endian USING [HWORD], IP USING [Address], NS USING [broadcastHost, Host], Pup USING [allHosts, Host]; DriverType: CEDAR DEFINITIONS IMPORTS Basics = { BYTE: TYPE = [0..100H); HWORD: TYPE = Endian.HWORD; <> Encapsulation: TYPE = MACHINE DEPENDENT RECORD [ SELECT OVERLAID * FROM ethernet => [ <> ethernetDest: NS.Host, ethernetSource: NS.Host, ethernetType: EthernetPacketType], ethernetOne => [ etherSpare1, etherSpare2, etherSpare3, etherSpare4, etherSpare5: HWORD, <> ethernetOneDest, ethernetOneSource: Pup.Host, ethernetOneType: EthernetOnePacketType], impRelay => [ immediate: IP.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: NS.Host = NS.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 <> ns(0600H), -- 3000B ip(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), ip(1001B), arp(1002B), toImp(1004B), fromImp(1005B), -- For Alto acting as a remote head ns(3000B), translation(3001B), (LAST[HWORD])}; IsMulticastHost: PROC [host: NS.Host] RETURNS[BOOL] = INLINE { <> RETURN[Basics.BITAND[host.a, 1] # 0 ]; }; }.