-- File: PupDefs.Mesa, Last Edit: Garlick January 26, 1981 1:58 PM DIRECTORY BufferDefs USING [PupBuffer, Queue, QueueObject], PupStream USING [NameLookupErrorCode, Tocks, veryLongWait, veryShortWait], PupTypes USING [ maxDataWordsPerGatewayPup, Pair, PupType, PupAddress, PupErrorCode, PupHostID, PupNetID, PupSocketID]; PupDefs: DEFINITIONS IMPORTS BufferDefs = BEGIN Byte: TYPE = [0..377B]; -- TYPEs Copied from BufferDefs PupBuffer: TYPE = BufferDefs.PupBuffer; Queue: TYPE = BufferDefs.Queue; QueueObject: TYPE = BufferDefs.QueueObject; -- TYPEs Copied things from PupTypes PupAddress: TYPE = PupTypes.PupAddress; PupNetID: TYPE = PupTypes.PupNetID; PupHostID: TYPE = PupTypes.PupHostID; PupSocketID: TYPE = PupTypes.PupSocketID; Pair: TYPE = PupTypes.Pair; -- Buffer/Queue procedures EnqueuePup: PROCEDURE [Queue, PupBuffer]; DequeuePup: PROCEDURE [Queue] RETURNS [PupBuffer]; GetFreePupBuffer: PROCEDURE RETURNS [PupBuffer]; ReturnFreePupBuffer: PROCEDURE [PupBuffer]; GetClumpOfPupBuffers: PROCEDURE [q: Queue, n: CARDINAL, wait: BOOLEAN]; ExtractPupFromQueue: PROCEDURE [Queue, PupBuffer] RETURNS [PupBuffer]; -- Pup Routing InspectStrayPups: PROCEDURE [ on: BOOLEAN, seeBroadcast: BOOLEAN, proc: PROCEDURE [PupBuffer] RETURNS [error: BOOLEAN]]; PupRouterBroadcastThis: PROCEDURE [PupBuffer]; PupRouterSendThis: PROCEDURE [PupBuffer]; -- Start of things like this GetHopsToNetwork: PROCEDURE [PupNetID] RETURNS [CARDINAL]; -- returns a big number if can't get there FastPath: PROCEDURE [PupAddress] RETURNS [BOOLEAN]; -- default parameters collected here defaultNumberOfNetworks: CARDINAL = 126; -- two pages from the heap defaultDataWordsPerPup: CARDINAL = PupTypes.maxDataWordsPerGatewayPup; defaultPupsToAllocate: CARDINAL = 5; -- allocates for PktStreams -- Misc utilities GetLocalPupAddress: PROCEDURE [ local: PupSocketID, remote: POINTER TO PupAddress] RETURNS [PupAddress]; UniqueLocalPupSocketID: PROCEDURE RETURNS [PupSocketID]; UniqueLocalPupAddress: PROCEDURE [POINTER TO PupAddress] RETURNS [PupAddress]; SwapPupSourceAndDest: PROCEDURE [PupBuffer]; -- fixes up broadcast too SendPup: PROCEDURE [b: PupBuffer, type: PupTypes.PupType, bytes: CARDINAL]; ReturnPup: PROCEDURE [b: PupBuffer, type: PupTypes.PupType, bytes: CARDINAL]; -- Timeout things Tocks: TYPE = PupStream.Tocks; veryLongWait: Tocks = PupStream.veryLongWait; veryShortWait: Tocks = PupStream.veryShortWait; SecondsToTocks: PROCEDURE [CARDINAL] RETURNS [Tocks]; MsToTocks: PROCEDURE [CARDINAL] RETURNS [Tocks]; -- PupBuffer level utilities GetPupContentsBytes: PROCEDURE [PupBuffer] RETURNS [CARDINAL]; SetPupContentsBytes: PROCEDURE [PupBuffer, CARDINAL]; SetPupContentsWords: PROCEDURE [PupBuffer, CARDINAL]; DataWordsPerPupBuffer: PROCEDURE RETURNS [CARDINAL]; -- Socket Interface PupSocketMake: PROCEDURE [ local: PupSocketID, remote: PupAddress, ticks: Tocks, id: Pair _ [0, 0]] RETURNS [PupSocket]; PupSocketMakeFull: PROCEDURE [local, remote: PupAddress, ticks: Tocks] RETURNS [PupSocket]; PupSocketKick: PROCEDURE [PupSocket]; PupSocketDestroy: PROCEDURE [PupSocket]; PupSocket: TYPE = POINTER TO PupSocketObject; PupSocketObject: TYPE = RECORD [ put: PROCEDURE [PupBuffer], get: PROCEDURE RETURNS [PupBuffer], -- if none, wait, then return NIL setRemoteAddress: PROCEDURE [PupAddress], getLocalAddress: PROCEDURE RETURNS [PupAddress]]; -- Start and Stop AdjustBufferParms: PROCEDURE [bufferPoolSize, bufferSize: CARDINAL]; GetBufferParms: PROCEDURE RETURNS [bufferPoolSize, bufferSize: CARDINAL]; PupPackageMake: PROCEDURE; PupPackageDestroy: PROCEDURE; GetPupPackageUseCount: PROCEDURE RETURNS [CARDINAL]; UseNullChecksumMicrocode: PROCEDURE; UseSoftwareChecksumMicrocode: PROCEDURE; UseAltoChecksumMicrocode: PROCEDURE; UsePrincOpsChecksumMicrocode: PROCEDURE; SmashMyHostNumber: PROCEDURE [CARDINAL]; -- NameConversion and STRING diddling GetPupAddress: PROCEDURE [POINTER TO PupAddress, STRING]; PupNameLookup: PROCEDURE [POINTER TO PupAddress, STRING]; NameLookupErrorCode: TYPE = PupStream.NameLookupErrorCode; ParsePupAddressConstant: PROCEDURE [POINTER TO PupAddress, STRING] RETURNS [BOOLEAN]; EnumeratePupAddresses: PROCEDURE [ s: STRING, filter: PROCEDURE [PupAddress] RETURNS [BOOLEAN]] RETURNS [hit: BOOLEAN]; PupAddressLookup: PROCEDURE [STRING, PupAddress]; AppendPupAddress: PROCEDURE [STRING, PupAddress]; AppendHostName: PROCEDURE [STRING, PupAddress]; AppendMyName: PROCEDURE [STRING]; MoveStringBodyToPupBuffer: PROCEDURE [PupBuffer, STRING]; AppendStringBodyToPupBuffer: PROCEDURE [PupBuffer, STRING]; AppendErrorPup: PROCEDURE [STRING, PupBuffer]; -- Does SwapPupSourceAndDest and such, then PupRouterSendThis SendErrorPup: PROCEDURE [PupBuffer, PupTypes.PupErrorCode, STRING]; -- ERRORs PupNameTrouble: ERROR [e: STRING, code: NameLookupErrorCode]; TockConversionTroubles: ERROR; -- Debugging SetLocalOnly: PROCEDURE [BOOLEAN]; SetPupCheckit: PROCEDURE [x: BOOLEAN] = INLINE BEGIN IF x THEN UseSoftwareChecksumMicrocode[] ELSE UseNullChecksumMicrocode[]; END; SetPupStormy: PROCEDURE [BOOLEAN]; -- lightning in Router SetErrorSuppression: PROCEDURE [dontSendErrors: BOOLEAN]; SetBufferFullSuppression: PROCEDURE [dontSend: BOOLEAN]; GetDoStats: PROCEDURE RETURNS [BOOLEAN]; CaptureErrors: PROCEDURE [PROCEDURE [ERROR]]; InspectIncomingPups: PROCEDURE [BOOLEAN, PROCEDURE [CARDINAL, PupBuffer]]; InspectOutgoingPups: PROCEDURE [BOOLEAN, PROCEDURE [CARDINAL, PupBuffer]]; ShowPupBuffer: PROCEDURE [POINTER, CARDINAL, PupBuffer]; -- in PupShow.bcd incomingPup: CARDINAL = 100; -- code numbers for Show outgoingPup: CARDINAL = 101; zappedIncomingPup: CARDINAL = 102; zappedOutgoingPup: CARDINAL = 103; END.