DIRECTORY DriverDefs USING [Network], BufferDefs USING [PupBuffer, Byte, PupNetID, PupHostID, Queue], PupTypes USING [Pair, PupAddress, PupErrorCode], Rope USING [ROPE]; PupRouterDefs: DEFINITIONS = BEGIN OPEN DriverDefs, BufferDefs; wordsPerPupHeader: CARDINAL = 11; bytesPerPupHeader: CARDINAL = wordsPerPupHeader*2; BeSurePupIsOn: PROCEDURE; NextPupConnectionID: PROCEDURE RETURNS [PupTypes.Pair]; PupRouterKnowAboutSocket: PROCEDURE [PupRouterSocket]; PupRouterForgetAboutSocket: PROCEDURE [PupRouterSocket]; GetFirstPupSocket: PROCEDURE RETURNS [PupRouterSocket]; PupRouterSocket: TYPE = LONG POINTER TO PupRouterSocketObject; PupRouterSocketObject: TYPE = RECORD [ next: PupRouterSocket, local: PupTypes.PupAddress, remote: PupTypes.PupAddress, -- this lives here only for debugging ready: CONDITION, input: BufferDefs.Queue, checkit: BOOLEAN, id: PupTypes.Pair]; -- only used by listeners SetPupChecksum: PROCEDURE [PupBuffer]; TestPupChecksum: PROCEDURE [PupBuffer] RETURNS [BOOLEAN]; SetBadPupProc: PROCEDURE [PROCEDURE [PupBuffer]]; GetRoutingTableEntry: PROCEDURE [PupNetID] RETURNS [RoutingTableEntry]; EnumerateRoutingTable: PROCEDURE [PROCEDURE [RoutingTableEntry]]; GetRoutingTable: PROCEDURE RETURNS [RoutingTable]; PupGatewaySee: PROCEDURE [PupBuffer] RETURNS [BOOLEAN]; RoutingTable: TYPE = REF RoutingTableSeq; RoutingTableSeq: TYPE = RECORD[SEQUENCE length: CARDINAL OF RoutingTableObject]; RoutingTableEntry: TYPE = LONG POINTER TO RoutingTableObject; RoutingTableObject: TYPE = RECORD [ net: PupNetID, hop: Byte, time: Byte, route: PupHostID, network: DriverDefs.Network]; maxHop: CARDINAL = 15; PupGateInfo: TYPE = MACHINE DEPENDENT RECORD [ net: PupNetID, viaNet: PupNetID, viaHost: PupHostID, hop: Byte]; PupInputer: PROCEDURE [PupBuffer]; PupBroadcaster: PROCEDURE [PupBuffer]; DontForwardPupBuffer: PROCEDURE [PupBuffer]; DoForwardPupBuffer: PROCEDURE [PupBuffer]; SetPupForwarder: PROCEDURE [PROCEDURE [PupBuffer]]; SneakySendUnlocked: PROCEDURE [PupBuffer]; RejectPupWithBadChecksum: PROCEDURE [PupBuffer]; Reject: PROCEDURE [PupBuffer, PupErrorCode]; Timeout: PROCEDURE; PupErrorCode: TYPE = PupTypes.PupErrorCode; BuildErrorPup: PROCEDURE [PupBuffer, PupErrorCode, Rope.ROPE] RETURNS [ok: BOOLEAN]; routerLock: MONITORLOCK; routingTableUpdateTimeout: CONDITION; probeResponse: CONDITION; numberOfNetworks: CARDINAL; dataWordsPerPup: CARDINAL; routerIsActive: BOOLEAN; routingTable: RoutingTable; firstSocket: PupRouterSocket; outThings: OutThings; OutThings: TYPE = RECORD [ outStormy: BOOLEAN, showOut: BOOLEAN, outShower: PROCEDURE [CARDINAL, PupBuffer]]; inThings: InThings; InThings: TYPE = RECORD [ inStormy: BOOLEAN, watcherIsWatching: BOOLEAN, watcherSeesBroadcast: BOOLEAN, watcherCallsThis: PROCEDURE [PupBuffer] RETURNS [BOOLEAN], badChecksumProc: PROCEDURE [PupBuffer], showIn: BOOLEAN, inShower: PROCEDURE [CARDINAL, PupBuffer]]; Checksum: TYPE = {none, software, alto, princOps}; checksum: Checksum; PupRouterCold, PupRouterOut, PupRouterIn, PupChecksums: PROGRAM; PupSockets, PupErrors: PROGRAM; END. PupRouterDefs.Mesa, Last Edit: HGM February 25, 1981 1:59 PM Copyright c 1985 by Xerox Corporation. All rights reserved. Birrell June 16, 1983 9:42 am Format of one slot of routing info from gateways, in routing info pups. Note: the middle half of this info isn't really needed for routing, but it is handy for debugging Dispatcher interface misc routines SemiPublic things from PupRouter Κ_˜codešœ?™?Kšœ Οmœ1™šœžœžœ˜&K˜K˜KšœΟc%˜BKšœž œ˜K˜Kšœ žœ˜Kšœ ˜-K˜—KšŸœž œ ˜&KšŸœž œ žœžœ˜9KšŸ œž œž œ˜1K˜KšŸœž œ žœ˜GKšŸœž œž œ˜AKšŸœž œžœ˜2KšŸ œž œ žœžœ˜7K˜Kšœžœžœ˜)Kš œžœžœžœ žœžœ˜PKš œžœžœžœžœ˜=šœžœžœ˜#K˜K˜ K˜ K˜K˜—Kšœžœ˜K˜KšœG™GKšœC™CKšœ™š œ žœžœž œžœ˜.K˜@K˜—Kšœ™KšŸ œž œ ˜"KšŸœž œ ˜&KšŸœž œ ˜,KšŸœž œ ˜*KšŸœž œž œ˜3KšŸœž œ ˜*KšŸœž œ ˜0KšŸœž œ˜,KšŸœž œ˜K˜Kšœ ™ Kšœžœ˜+šŸ œž œ žœ˜=Kšžœžœ˜K˜K˜—Kšœ ™ Kšœ ž œ˜Kšœž œ˜%Kšœž œ˜Kšœžœ˜Kšœžœ˜Kšœžœ˜K˜K˜K˜K˜šœ žœžœ˜Kšœ žœ˜Kšœ žœ˜Kšœ ž œžœ˜,K˜—K˜šœ žœžœ˜Kšœ žœ˜Kšœžœ˜Kšœžœ˜Kšœž œ žœžœ˜:Kšœž œ ˜'Kšœžœ˜Kšœ ž œžœ˜+K˜—Kšœ žœ$˜2K˜K˜Kšœ8žœ˜@Kšœžœ˜K˜Kšžœ˜K˜——…— ϊι