DIRECTORY BufferDefs USING [PupBuffer, Queue, QueueObject], PupStream USING [NameLookupErrorCode, Tocks, veryLongWait, veryShortWait], PupTypes USING [ maxDataWordsPerGatewayPup, Pair, PupType, PupAddress, PupErrorCode, PupHostID, PupNetID, PupSocketID], Rope USING [ROPE]; PupDefs: DEFINITIONS = BEGIN Byte: TYPE = [0..377B]; PupBuffer: TYPE = BufferDefs.PupBuffer; Queue: TYPE = BufferDefs.Queue; QueueObject: TYPE = BufferDefs.QueueObject; PupAddress: TYPE = PupTypes.PupAddress; PupNetID: TYPE = PupTypes.PupNetID; PupHostID: TYPE = PupTypes.PupHostID; PupSocketID: TYPE = PupTypes.PupSocketID; Pair: TYPE = PupTypes.Pair; 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]; InspectStrayPups: SAFE PROCEDURE [ on: BOOLEAN, seeBroadcast: BOOLEAN, proc: PROCEDURE [PupBuffer] RETURNS [error: BOOLEAN]]; PupRouterBroadcastThis: PROCEDURE [PupBuffer]; PupRouterSendThis: PROCEDURE [PupBuffer]; GetHopsToNetwork: SAFE PROCEDURE [PupNetID] RETURNS [CARDINAL]; FastPath: SAFE PROCEDURE [PupAddress] RETURNS [BOOLEAN]; defaultNumberOfNetworks: CARDINAL = 126; -- two pages from the heap defaultDataWordsPerPup: CARDINAL = PupTypes.maxDataWordsPerGatewayPup; defaultPupsToAllocate: CARDINAL = 5; -- allocates for PktStreams GetLocalPupAddress: SAFE PROCEDURE [ local: PupSocketID, remote: PupAddress] RETURNS [PupAddress]; AnyLocalPupAddress: SAFE PROCEDURE [local: PupSocketID] RETURNS [PupAddress]; UniqueLocalPupSocketID: SAFE PROCEDURE RETURNS [PupSocketID]; UniqueLocalPupAddress: SAFE PROCEDURE [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]; Tocks: TYPE = PupStream.Tocks; veryLongWait: Tocks = PupStream.veryLongWait; veryShortWait: Tocks = PupStream.veryShortWait; SecondsToTocks: SAFE PROCEDURE [CARDINAL] RETURNS [Tocks]; MsToTocks: SAFE PROCEDURE [CARDINAL] RETURNS [Tocks]; GetPupContentsBytes: PROCEDURE [PupBuffer] RETURNS [CARDINAL]; SetPupContentsBytes: PROCEDURE [PupBuffer, CARDINAL]; SetPupContentsWords: PROCEDURE [PupBuffer, CARDINAL]; DataWordsPerPupBuffer: SAFE PROCEDURE RETURNS [CARDINAL]; PupSocketMake: SAFE PROCEDURE [ local: PupSocketID, remote: PupAddress, ticks: Tocks, id: Pair _ [0, 0]] RETURNS [PupSocket]; PupSocketMakeFull: SAFE PROCEDURE [local, remote: PupAddress, ticks: Tocks] RETURNS [PupSocket]; PupSocketKick: SAFE PROCEDURE [PupSocket]; PupSocketDestroy: SAFE PROCEDURE [PupSocket]; PupSocket: TYPE = REF PupSocketObject; PupSocketObject: TYPE = RECORD[ put: UNSAFE PROCEDURE [PupBuffer], get: PROCEDURE RETURNS [PupBuffer], -- if none, wait, then return NIL setRemoteAddress: PROCEDURE [PupAddress], getLocalAddress: PROCEDURE RETURNS [PupAddress]]; AdjustBufferParms: SAFE PROCEDURE [bufferPoolSize, bufferSize: CARDINAL]; GetBufferParms: SAFE PROCEDURE RETURNS [bufferPoolSize, bufferSize: CARDINAL]; PupPackageMake: SAFE PROCEDURE; PupPackageDestroy: SAFE PROCEDURE; GetPupPackageUseCount: SAFE PROCEDURE RETURNS [CARDINAL]; UseNullChecksumMicrocode: PROCEDURE; UseSoftwareChecksumMicrocode: PROCEDURE; UseAltoChecksumMicrocode: PROCEDURE; UsePrincOpsChecksumMicrocode: PROCEDURE; SmashMyHostNumber: PROCEDURE [CARDINAL]; GetPupAddress: SAFE PROC [PupSocketID, Rope.ROPE] RETURNS[ PupAddress ];--Parse or NameLookup PupNameLookup: SAFE PROC [PupSocketID, Rope.ROPE] RETURNS[ PupAddress ];--NameLookup only NameLookupErrorCode: TYPE = PupStream.NameLookupErrorCode; ParsePupAddressConstant: SAFE PROC [PupSocketID, Rope.ROPE] RETURNS [BOOLEAN, PupAddress]; EnumeratePupAddresses: SAFE PROC [ name: Rope.ROPE, filter: PROCEDURE [PupAddress] RETURNS [BOOLEAN]] RETURNS [hit: BOOLEAN]; PupAddressLookup: SAFE PROCEDURE [PupAddress] RETURNS [Rope.ROPE];-- via NLS PupAddressToRope: SAFE PROCEDURE [PupAddress] RETURNS [Rope.ROPE];-- e.g. 3#14#1234 GetHostName: SAFE PROCEDURE [PupAddress] RETURNS [Rope.ROPE]; GetMyName: SAFE PROCEDURE RETURNS [Rope.ROPE]; MoveRopeToPupBuffer: PROCEDURE [PupBuffer, Rope.ROPE]; AppendRopeToPupBuffer: PROCEDURE [PupBuffer, Rope.ROPE]; SendErrorPup: PROCEDURE [PupBuffer, PupTypes.PupErrorCode, Rope.ROPE]; PupNameTrouble: ERROR [e: Rope.ROPE, code: NameLookupErrorCode]; TockConversionTroubles: ERROR; 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. File: PupDefs.Mesa, Last Edit: Andrew Birrell May 20, 1983 2:11 pm Last Edited by: Levin, June 24, 1983 5:18 pm TYPEs Copied from BufferDefs TYPEs Copied things from PupTypes Buffer/Queue procedures Pup Routing Start of things like this returns a big number if can't get there default parameters collected here Misc utilities Timeout things PupBuffer level utilities Socket Interface Start and Stop NameConversion and ROPE diddling Does SwapPupSourceAndDest and such, then PupRouterSendThis ERRORs Debugging ÊŽ˜JšœD™DJ™,šÏk ˜ Jšœ œ!˜1Jšœ œ;˜Jšœ œ˜J˜NJ˜—Jšœœœ˜J˜—šœ œ˜Jš˜J˜Jšœœ ˜J˜Jšœ™Jšœ œ˜'Jšœœ˜Jšœ œ˜+J˜Jšœ!™!Jšœ œ˜'Jšœ œ˜#Jšœ œ˜%Jšœ œ˜)Jšœœ˜J˜J˜Jšœ™JšÏn œ œ˜)Jšž œ œ œ ˜2Jšžœ œœ ˜0Jšžœ œ ˜+Jšžœ œœœ˜GJšžœ œœ ˜FJ˜J˜Jšœ ™ šžœœ œ˜"Jšœœœ˜#Jšœ œ œ œ˜6—Jšžœ œ ˜.Jšžœ œ ˜)J˜Jšœ™Jš žœœ œ œœ˜?Jšœ'™'Jš žœœ œœœ˜8J˜Jšœ!™!JšœœÏc˜CJšœœ&˜FJšœœŸ˜@J˜J˜Jšœ™šžœœ œ˜$Jšœ(œ˜=—Jšžœœ œœ˜MJšžœœ œœ˜=Jšžœœ œœ˜HJšžœ œŸ˜FJ˜Jšžœ œ/œ˜KJšž œ œ/œ˜MJ˜J˜Jšœ™Jšœœ˜J˜-J˜/Jš žœœ œœœ ˜:Jš ž œœ œœœ ˜5J˜Jšœ™Jšžœ œ œœ˜>Jšžœ œ œ˜5Jšžœ œ œ˜5Jš žœœ œœœ˜9J˜Jšœ™šž œœ œ˜J˜HJšœ ˜—šžœœ œ*˜KJšœ ˜—Jšž œœ œ ˜*Jšžœœ œ ˜-Jšœ œœ˜&šœœœ˜Jšœœ ˜"Jšœ œœŸ!˜EJšœ œ˜)Jšœœ˜1J˜J˜—Jšœ™Jšžœœ œœ˜IJš žœœ œœœ˜NJšžœœ œ˜Jšžœœ œ˜"Jš žœœ œœœ˜9Jšžœ œ˜$Jšžœ œ˜(Jšžœ œ˜$Jšžœ œ˜(Jšžœ œœ˜(J˜Jšœ ™ Jš ž œœœœœŸ˜]Jš ž œœœœœŸ˜YJšœœ!˜:Jš žœœœœœ œ ˜Zšžœœœ˜"Jš œ œ œœœ˜BJšœœ˜—Jš žœœ œœœŸ ˜LJš žœœ œœœŸ˜SJš ž œœ œœœ˜=Jš ž œœ œœœ˜.Jšžœ œœ˜6Jšžœ œœ˜8J˜Jšœ:™:Jšž œ œ)œ˜FJ˜J˜Jšœ™Jšœœ œ˜@Jšœœ˜J˜Jšœ ™ Jšž œ œœ˜"šž œ œœ˜.Jš˜Jšœœ œ˜IJšœ˜J˜—Jšž œ œœŸ˜9Jšžœ œœ˜9Jšžœ œ œ˜8Jšž œ œœœ˜(Jšž œ œ œœ˜-J˜Jš žœ œœ œœ˜JJš žœ œœ œœ˜JJš ž œ œœœŸ˜JJšœ œŸ˜5Jšœ œ˜Jšœœ˜"Jšœœ˜"J˜Jšœ˜J˜——…—®