-- File: AltoPRDefs.mesa -- Last Edit: L. Stewart February 20, 1980 4:24 PM -- Last Edit: HGM September 14, 1980 12:17 AM DIRECTORY DriverTypes USING [PRPacketType], StatsDefs USING [StatCounterIndex]; AltoPRDefs: DEFINITIONS = BEGIN -- Useful Types Byte: TYPE = [0..377B]; --Packet Radio Stuff PRLengthWord: TYPE = MACHINE DEPENDENT RECORD [ blank: INTEGER [0..15], header: INTEGER [0..15], packet: INTEGER [0..377B]]; PRAddress: TYPE = WORD; PRSequence: TYPE = MACHINE DEPENDENT RECORD [ number: INTEGER [0..8191], spp: INTEGER [0..7]]; PRControlWord: TYPE = RECORD [WORD]; PRStatisticsWord: TYPE = RECORD [WORD]; PRRouteIndex: TYPE = INTEGER [1..8]; PRRoute: TYPE = ARRAY PRRouteIndex OF PRAddress; PRLeader: TYPE = MACHINE DEPENDENT RECORD [ length: PRLengthWord, source: PRAddress, destination: PRAddress, sequence: PRSequence, control: PRControlWord, stats: PRStatisticsWord, route: PRRoute]; PRTOP: TYPE = MACHINE DEPENDENT RECORD [ leader: PRLeader, startID, endID: PRAddress]; PRPupHeader: TYPE = MACHINE DEPENDENT RECORD [ leader: PRLeader, magic: Byte, fragmentation: RECORD [ thisFrag: INTEGER [0..3], numFrags: INTEGER [0..3], packetType: DriverTypes.PRPacketType], packetNumber: INTEGER]; PRBuffer: TYPE = MACHINE DEPENDENT RECORD [ h: PRPupHeader, body: ARRAY [1..127 - SIZE[PRPupHeader] + 3] OF WORD --one longer than needed ]; -- Particular values prInvalidAddress: PRAddress = 177777B; prInitialSequenceNumber: PRSequence = [0, 0]; prNoStats: PRStatisticsWord = [0]; prNullRoute: PRRoute = [0, 0, 0, 0, 0, 0, 0, 0]; prTOPControlWord: PRControlWord = [000000B]; prRegularControlWord: PRControlWord = [064001B]; prTOPLeader: PRLeader = [length: [0, SIZE[PRLeader], SIZE[PRTOP]], source: 0B, destination: 0B, sequence: prInitialSequenceNumber, control: prTOPControlWord, stats: prNoStats, route: prNullRoute]; prPupLeader: PRLeader = [length: [0, SIZE[PRLeader], 0], source: 0B, destination: 0B, sequence: prInitialSequenceNumber, control: prRegularControlWord, stats: prNoStats, route: prNullRoute]; prSecretNumber: Byte = 303B; -- Types for driver WatchMode: TYPE = {normal, flappingRelay, justFlapped}; InputMode: TYPE = {discard, normal}; OutputMode: TYPE = {idle, sendTop, normal}; PRRouteSet: TYPE = ARRAY [1..maxPRPupAddress] OF PRRoute; PRAliveTable: TYPE = ARRAY [1..maxPRPupAddress] OF BOOLEAN; PRImAliveEntry: TYPE = MACHINE DEPENDENT RECORD [ source: CARDINAL, iHeardYou: PRAliveTable]; -- Special record for poking driver from outside GetPRDriverVars: PROCEDURE RETURNS [POINTER TO PRDriverVars]; PRDriverVars: TYPE = RECORD [ outBufp: POINTER TO PRBuffer, --outputHeader inBufp: POINTER TO PRBuffer, --inputHeader topp: POINTER TO PRTOP, --TOP cbp: POINTER, prRouteSetp: POINTER TO PRRouteSet, prTOPInterval: CARDINAL, -- these are Alto ticks outputTimeoutInterval: CARDINAL, assemblyTimeoutInterval: CARDINAL, imAliveInterval: CARDINAL, prHostAliveTimeoutInterval: CARDINAL, maxOutputQueueLength: CARDINAL, maxAssemblyQueueLength: CARDINAL, hiQ, loQ: POINTER, --outputQueues aQ: POINTER, --assemblyQueue youAreOK: PRAliveTable, iHearYou: ARRAY [1..maxPRPupAddress] OF CARDINAL]; -- Things that are not provided anywhere maxFragSize: CARDINAL = 127 - SIZE[PRPupHeader]; -- = 111 these days maxOneFragSize: CARDINAL = maxFragSize; maxTwoFragSize: CARDINAL = 2*maxFragSize; maxThreeFragSize: CARDINAL = 3*maxFragSize; maxPRPupAddress: CARDINAL = 5; prAddressBase: CARDINAL = 10220B; -- Procedures, etc. AltoPRInit: PROGRAM; SetupPRThings: PROCEDURE; statPRPacketsReceived: StatsDefs.StatCounterIndex; statPRImAliveReceived: StatsDefs.StatCounterIndex; statPROneFragRcvd: StatsDefs.StatCounterIndex; statPRTwoFragsRcvd: StatsDefs.StatCounterIndex; statPRThreeFragsRcvd: StatsDefs.StatCounterIndex; statPRWordsReceived: StatsDefs.StatCounterIndex; statPRPacketsSent: StatsDefs.StatCounterIndex; statPRImAliveSent: StatsDefs.StatCounterIndex; statPROneFragSent: StatsDefs.StatCounterIndex; statPRTwoFragsSent: StatsDefs.StatCounterIndex; statPRThreeFragsSent: StatsDefs.StatCounterIndex; statPRWordsSent: StatsDefs.StatCounterIndex; statPRDuplicateFragment: StatsDefs.StatCounterIndex; statPRAssemblyTimeout: StatsDefs.StatCounterIndex; statPRAssemblyQOvf: StatsDefs.StatCounterIndex; statPRInputBufferOvf: StatsDefs.StatCounterIndex; statPRBadMagic: StatsDefs.StatCounterIndex; statPRNotForMe: StatsDefs.StatCounterIndex; statPRTooManyFragments: StatsDefs.StatCounterIndex; statPRTotalTooBig: StatsDefs.StatCounterIndex; statPREmptyFreeQueue: StatsDefs.StatCounterIndex; statPROldPackets: StatsDefs.StatCounterIndex; statPRPacketsSkipped: StatsDefs.StatCounterIndex; statPRSequenceReset: StatsDefs.StatCounterIndex; statPRLengthOvf: StatsDefs.StatCounterIndex; statPRInvalidAddress: StatsDefs.StatCounterIndex; statPRDestinationDown: StatsDefs.StatCounterIndex; statPROutputQOvf: StatsDefs.StatCounterIndex; statPRConnectionLimit: StatsDefs.StatCounterIndex; statPROutPacketsDiscarded: StatsDefs.StatCounterIndex; stat1822MissingInterrupt: StatsDefs.StatCounterIndex; statPRTransferTimeout: StatsDefs.StatCounterIndex; statPRROPsReceived: StatsDefs.StatCounterIndex; statPRTOPsSent: StatsDefs.StatCounterIndex; statPRImpWasDown: StatsDefs.StatCounterIndex; -- GateControl Things prStatsReply: WORD = 5; PRStatsEntry: TYPE = RECORD [ version: WORD, packetsReceived, imAliveReceived, oneFragPupRcvd, twoFragPupRcvd, threeFragPupRcvd, wordsReceived, packetsSent, imAliveSent, oneFragPupSent, twoFragPupSent, threeFragPupSent, wordsSent, topsSent, assemblyTimeout, assemblyOverflow, destinationDown, inputFilter, oldPackets, skippedPackets, sequencerResets, outputPacketsDiscarded, transferTimeout: LONG INTEGER, maxHosts: CARDINAL, hostsUp: ARRAY [0..0) OF BOOLEAN]; prVersion: WORD = 1; END. -- AltoPRDefs