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. PupDefs.Mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Andrew Birrell May 20, 1983 2:11 pm 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 Κ›˜codešœ ™ Kšœ Οmœ1™KšŸœž œ žœ˜5KšŸœž œ žœ˜5Kš Ÿœžœž œžœžœ˜9K˜Kšœ™šŸ œžœž œ˜K˜HKšžœ ˜—šŸœžœž œ*˜KKšžœ ˜—KšŸ œžœž œ ˜*KšŸœžœž œ ˜-Kšœ žœžœ˜&šœžœžœ˜Kšœžœ ˜"Kšœž œžœ !˜EKšœž œ˜)Kšœžœ˜1K˜K˜—Kšœ™KšŸœžœž œžœ˜IKš Ÿœžœž œžœžœ˜NKšŸœžœž œ˜KšŸœžœž œ˜"Kš Ÿœžœž œžœžœ˜9KšŸœž œ˜$KšŸœž œ˜(KšŸœž œ˜$KšŸœž œ˜(KšŸœž œžœ˜(K˜Kšœ ™ Kš Ÿ œžœžœžœžœ ˜]Kš Ÿ œžœžœžœžœ ˜YKšœžœ!˜:Kš Ÿœžœžœžœžœž œ ˜ZšŸœžœžœ˜"Kš œ žœ ž œžœžœ˜BKšžœžœ˜—Kš Ÿœžœž œžœžœ  ˜LKš Ÿœžœž œžœžœ ˜SKš Ÿ œžœž œžœžœ˜=Kš Ÿ œžœž œžœžœ˜.KšŸœž œžœ˜6KšŸœž œžœ˜8K˜Kšœ:™:KšŸ œž œ)žœ˜FK˜K˜Kšœ™Kšœžœ žœ˜@Kšœžœ˜K˜Kšœ ™ KšŸ œž œžœ˜"šŸ œž œžœž˜.Kšž˜Kšžœžœ žœ˜IKšžœ˜K˜—KšŸ œž œžœ ˜9KšŸœž œžœ˜9KšŸœž œ žœ˜8KšŸ œž œžœžœ˜(KšŸ œž œž œžœ˜-K˜Kš Ÿœž œžœž œžœ˜JKš Ÿœž œžœž œžœ˜JKš Ÿ œž œžœžœ ˜JKšœ žœ ˜5Kšœ žœ˜Kšœžœ˜"Kšœžœ˜"K˜Kšžœ˜K˜——…—Σ