OISCPTypes.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Garlick on: January 21, 1981 4:36 PM)
Russ Atkinson (RRA) February 2, 1985 4:01:35 pm PST
(folded in OISCPTypesAdditions)
DIRECTORY
NSAddress 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), pupAddrTransPacket(6), (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: NSAddress.NetworkNumber, interrouterDelay: CARDINAL];
BufferBody: TYPE = MACHINE DEPENDENT RECORD [
checksum: CARDINAL,
pktLength: CARDINAL, -- in bytes, includes header
transCntlAndPktTp: TransControlAndPacketType,
destination, source: NSAddress.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.