-- OISCPTypes.mesa (last edited by: Garlick on: January 21, 1981 4:36 PM) DIRECTORY SpecialSystem USING [NetworkAddress, NetworkNumber]; OISCPTypes: DEFINITIONS = BEGIN -- TYPEs and definitions Nibble: TYPE = [0..17B]; Byte: TYPE = [0..377B]; WaitTime: TYPE = LONG CARDINAL; -- in milliseconds ConnectionID: TYPE = RECORD [WORD]; ExchangeClientType: TYPE = MACHINE DEPENDENT{ unspecified(0), timeService(1), clearinghouseService(2), (LAST[CARDINAL])}; ExchangeID: TYPE = MACHINE DEPENDENT RECORD [a, b: CARDINAL]; PacketType: TYPE = MACHINE DEPENDENT{ -- eight bits!! private(0), routingInformation(1), echo(2), error(3), packetExchange(4), sequencedPacket(5), (LAST[Byte])}; RoutingInfoType: TYPE = MACHINE DEPENDENT{ private(0), routingInfoRequest(1), routingInfoResponse(2), (LAST[CARDINAL])}; EchoType: TYPE = MACHINE DEPENDENT{ private(0), echoRequest(1), echoResponse(2), (LAST[CARDINAL])}; OISErrorCode: TYPE = MACHINE DEPENDENT{ -- packet got to the destination machine, but wasn't processed unspecifiedOisErrorCode(0B), badChecksumOisErrorCode(1B), noSocketOisErrorCode(2B), resourceLimitsOisErrorCode(3B), -- Pup didn't get to the destination machine unspecifiedInRouteOisErrorCode(1000B), inconsistentOisErrorCode(1001B), cantGetThereOisErrorCode(1002B), excessHopsOisErrorCode(1003B), tooBigOisErrorCode(1004B), -- used by ForwardBuffer for various hacks noErrorOisErrorCode(10000), connectionLimitOisErrorCode(10001), filler(LAST[WORD])}; TransPortControl: TYPE = MACHINE DEPENDENT RECORD [ trace: BOOLEAN, filler: [0..7], hopCount: [0..17B]]; -- the TransportControl is included here so that we can obtain the address of the -- WORD containing the transport control. TransControlAndPacketType: TYPE = MACHINE DEPENDENT RECORD [ transportControl: TransPortControl, -- eight bits!! packetType: PacketType]; RoutingInfoTuple: TYPE = MACHINE DEPENDENT RECORD [ objectNetID: SpecialSystem.NetworkNumber, interrouterDelay: CARDINAL]; BufferBody: TYPE = MACHINE DEPENDENT RECORD [ checksum: CARDINAL, pktLength: CARDINAL, -- in bytes, includes header transCntlAndPktTp: TransControlAndPacketType, destination, source: SpecialSystem.NetworkAddress, oisBody: SELECT OVERLAID * FROM oisWords => [oisWords: ARRAY [0..0) OF WORD], oisBytes => [oisBytes: PACKED ARRAY [0..0) OF Byte], oisChars => [oisChars: PACKED ARRAY [0..0) OF CHARACTER], routingInformation => [ routingType: RoutingInfoType, routingTuple: ARRAY [0..0) OF RoutingInfoTuple], error => [ errorType: OISErrorCode, errorParameter: CARDINAL, errorBody: ARRAY [0..0) OF WORD], echo => [ echoType: EchoType, echoBody: SELECT OVERLAID * FROM echoWords => [echoWords: ARRAY [0..0) OF WORD], echoBytes => [echoBytes: PACKED ARRAY [0..0) OF Byte], ENDCASE], spp => [ -- first word of level 2 Sequenced Protocol systemPacket: BOOLEAN, sendAck: BOOLEAN, attention: BOOLEAN, endOfMessage: BOOLEAN, unusedType: [0B..17B], subtype: Byte, sourceConnectionID: ConnectionID, destinationConnectionID: ConnectionID, sequenceNumber: CARDINAL, acknowledgeNumber: CARDINAL, allocationNumber: CARDINAL, sppBody: SELECT OVERLAID * FROM sppWords => [sppWords: ARRAY [0..0) OF WORD], sppBytes => [sppBytes: PACKED ARRAY [0..0) OF Byte], sppChars => [sppChars: PACKED ARRAY [0..0) OF CHARACTER], sppString => [sppString: StringBody], ENDCASE], packetExchange => [ exchangeID: ExchangeID, exchangeType: ExchangeClientType, exchangeBody: SELECT OVERLAID * FROM exchangeWords => [exchangeWords: ARRAY [0..0) OF WORD], exchangeBytes => [exchangeBytes: PACKED ARRAY [0..0) OF Byte], exchangeChars => [exchangeChars: PACKED ARRAY [0..0) OF CHARACTER], exchangeString => [exchangeString: StringBody], ENDCASE], ENDCASE]; -- Magic numbers for the OIS communication (transport) protocols. -- OIS packet header lengths. zz: PRIVATE POINTER TO BufferBody = NIL; -- zz is declared so we can do arithmetic maxBytesPerPkt: CARDINAL = 576; wordPerPktHeader: CARDINAL = LOOPHOLE[@zz.oisBody, CARDINAL] - LOOPHOLE[zz, CARDINAL]; bytesPerPktHeader: CARDINAL = wordPerPktHeader*2; bytesPerPktText: CARDINAL = maxBytesPerPkt - bytesPerPktHeader; wordsPerLevel2SppHeader: CARDINAL = LOOPHOLE[@zz.sppBody, CARDINAL] - LOOPHOLE[@zz.oisBody, CARDINAL]; bytesPerLevel2SppHeader: CARDINAL = wordsPerLevel2SppHeader*2; maxDataWordsPerSpp: CARDINAL = (bytesPerPktText - bytesPerLevel2SppHeader)/2; wordsPerExchangeHeader: CARDINAL = LOOPHOLE[@zz.exchangeBody, CARDINAL] - LOOPHOLE[@zz.oisBody, CARDINAL]; bytesPerExchangeHeader: CARDINAL = wordsPerExchangeHeader*2; maxDataBytePerExchange: CARDINAL = bytesPerPktText - bytesPerExchangeHeader; END.. LOG Time: January 21, 1981 4:36 PM By: Garlick Action: Added OISErrorCode type and RoutingInfoType and altered BufferBody to use them. Added timeService and clearinghouseService to ExchangeClientType.