-- Communication.pack, last editted by Andrew Birrell on August 30, 1982 10:15 am
-- Commu
nication.pack, last editted by BLyon, on March 21, 1981 12:42 PM
-- Com
munication.pack, last editted by HGM, on March 14, 1981 6:44 PM

Lo
westCommLevels: SEGMENT =
BEGIN
CommunicationsCantSleep: CODE PACK
=
BEGIN
-- this stuff is always doing sometihing when communications is on
DispatcherImpl [
MainDispatcher, PutOnGlobalInputQueue, PutOnGlobalDoneQueue, DummyInputer];
BufferMgr [
CreditReceiveOisBuffer, ReturnFreeBuffer, GetFreeBuffer, GetInputBuffer, Enqueue,
Dequeue];
RouterImpl [
ReceivePacket, DeliveredToLocalSocket, GetOisPacketTextLength, SetOisPacketLength,
SetOisPacketTextLength];
RoutingT
ableImpl [RoutingInformationPacket];
ChecksumsImpl [TestChecksum];
END;

EthernetCantSleep: CODE
PACK =
BEGIN
-- this stuff is always active if communications is turned on
EthernetDriver [
Watcher, SmashCSBs, DecapsulateBuffer, InInterrupt
, InactiveReceiveAckOrRequest,
MaybeChangeNumberOfInputBuffers];
END;

EthernetOut: CODE PACK =
BEGIN
EthernetDriver [
OutInterrupt, EncapsulateOis,
EncapsulatePup, ForwardBuffer, SendBuffer,
SendBufferInternal];
END;

EthernetTranslation: CODE PACK =
BEGIN
EthernetDriver [
ReceiveRequest, AddAddressPair, DeallocateEntry, Demon, SendRequest,
Receiv
eAck, InactiveTranslate, Translate, FindEntry, RemoveEntry, AddEntry];
END;

EthernetOneCantSleep: CODE
PACK =
BEGIN
-- this stuff is always active if communications is turned on
EthernetOneDriver [
Watcher, SmashCSBs, DecapsulateBuffer, In
Interrupt, InactiveReceiveAck,
MaybeChangeNumberOfInputBuffers, ReturnBuffer--RPC--];
END;

EthernetOneOut: CODE PACK =
BEGIN
EthernetOneDriver [
OutInter
rupt, EncapsulatePup, EncapsulateOis, ForwardBuffer,
SendBuffer, SendBufferInternal];
END;

EthernetOneTranslation: CODE PACK =
BEGIN
EthernetOneDriver [
AddAddressPair, DeallocateEntry, Demon, SendRequest, Receive
Ack, ReceiveRequest,
InactiveTranslate, Translate, FindEntry, RemoveEntry, AddEntry];
END;

PhonesHot: CODE PACK =
BEGIN
PhoneNetworkDriver [
FrameAny, OISFrameIt, PupFrameIt, TypeOfBuffer, SendFrame,
SendWait, TranslateChannelStatus, PreemptedSending, ForwardFrame,
Receiver, AwaitAndDisposeOfFrame, StatsNop, InterruptNop,
StatusCh
angeWait, ProcessStatusChange, StatIncr, StatBump,
EnqueueSend, Sender, DequeueSend];
END;

PhonesHalfDup: CODE PACK =
BEGIN
HalfDuplexImpl [
TimerProcess, WaitTimer, WaitToSend,
SendCompleted, CheckForTurnAround, NotifyOurTurnToSend,
AwaitCTS, SendLTA, ClearOurTurn,
AwaitNoSending, StatIncr,
StatBump, MAIN, Initialize, Destroy, MilliSecondsToPulses];
END;

RoutingTableUpdaterAndWarm: CODE PACK =
BEGIN
-- this stuff is always active if communications is turned on.
-- there are three (odered in importance) criteria here:
-- 1) don’t use more than one page!
-- 2) get the normal workin
gs of the RoutingTableUpdater in here.
-- 3) get the less common entry vectors in here if possible.
RoutingTableImpl [RoutingTableUpdater, FindNetworkNumbe
r];
Boss [Ch
angeNumberOfInputBuffers, GetGiantVector];
PilotCommUtil [LockBuffers];
END;

ExchangeProtocol: CODE PACK =
BEGIN
PacketExchangeImpl [
SendRequestPacket, SendRequest, Wai
tForRequestPacket, WaitForRequest,
SendReplyPacket, SendReply, NotifySendCompleted];
END;

SocketsActive: CODE PACK =
BEGIN
BufferMgr [MaybeGetFreeBuffer];
PacketExchangeImpl [GetFreeSendPacket];
SocketImpl [GetPacket, PutPacket];
RouterImpl [SendPacket, SendErrorPacket];
RoutingTableImpl [
FindNetworkAndTransmit,
FindDestinationRelativeNetID];
ChecksumsImpl [SetChecksum];
Boss [GetDeviceChain];
END;

INRAndMultinetBroadcast: CODE PACK =
BEGIN
DispatcherImpl [SendToNextNetwork];
SocketImpl [PutPacketToAllConnectedNets];
RouterImpl [SendBroadcastPacketToCorrectNet, BroadcastThisPacket];
RoutingTableImpl [
RoutingTableCacheFault, InternetRouterServer, SendRoutingInfoRe
sponse,
ForwardPacket];
ChecksumsImpl [IncrOisTransportControlAndUpdateChecksum];
END;

SocketCreation: CODE PACK =
BEGIN
RouterImpl [AssignOisAddress, AddSocket, AssignDestinationRelativeOisAddress];
SocketImpl [
A
ssignNetworkAddress, Create, SetWaitTime, MilliSecondsToPulses, GetBufferPool];
PacketExchangeImpl [Create, CreateRequestor, CreateReplyer, SetWaitTime];
Buffe
rMgr [QueueInitialize, MakeBufferPool];
PilotCommUtil [AllocateBuffers, AllocateIocbs];
END;

SocketDe
letion: CODE PACK =
BEGIN
SocketImpl [Delete, Abort, Reset, GetStatus];
PacketExchangeImpl [Delete];
RouterImpl [RemoveSocket];
BufferMgr [
QueueCleanup, FreeBufferPool, DestroyBufferPoolLo
cked, EnqueueActiveBuffersOnly];
PilotCommUtil [FreeIocbs, FreeBuffers, UnlockBuffers];
END;

CommonCool: CODE PACK =
BEGIN
DispatcherImpl [
DummyAddDelete, DummyBroadcaster, DummyStateChanged, GetOisRouter];
BufferMgr [
DataWordsPerRawBuffer, DataWordsPerOisBuffer, DataWordsPerSppBuffer,
SendBuffersLeft, ReceiveBuffersLeft, ExtractFromQueue];
RouterImpl [
FindMyHostID, SetOisStormy, SetOisCheckit, SetOisDriverLoopback];
RoutingTableImpl [
AddNetwork, AddNetworkLocked, RemoveNetwork, RemoveNet
workLocked,
StateChanged, ProbeAnInternetRouter, FindNetwork, RemoveEntry, AddEntry];
END;

PhonesCool: CODE PACK =
BEGIN
PhoneNetworkDriver [
MAIN, ActivateTransporter, KillTransporter, CreatePhonePath, PreemptCleanup,
Initialize, Destroy, CreateSendReceiveProcesses, CheckPath,
RemoveSendReceiveProcesses, NotifySenderToGoAway, NotifyDialComplete,
WaitDialComplete];
PhoneNetworkImpl
[
MA
IN, FindPhonePath, KnowAboutPhonePath, ForgetAboutPhonePath,
AppendString];
END;

CommonCold: CODE PACK =
BEGIN
Boss [
AddDeviceToChain, RemoveDeviceFromChain, SmashDeviceChain, GetNthDevice,
GetNetworkID, SetNetworkID];
DispatcherImpl [SetOisRouter, SetSpyProc];
BufferMgr [
GetWordsPerIocb, GetBufferSize, BuffersLeft, EnumerateBuffersInPool,
AdjustBufferSize, SetWordsPerIocb];
EthernetOneDriver [
AdjustLengtoOfD0EthernetInputQueue, GetNthDeviceLikeMe,
EthernetOneListenForHost, GetRPCPackets, SetEthernetOneCollectGarbageToo,
SetCollectGarbageToo, SetEthernetOneListener];
EthernetDriver [
AdjustLengtoOfD0EthernetInputQueue, GetNthDeviceLikeMe, EthernetListenForHost,
SetEthernetCollectGarbageToo, SetCollectGarbageToo,
SetEthernetListener];
RoutingTableImpl [SetRouterFunction, GetRouterFunction, EnumerateRoutingTable];
END;

CommunicationTurnOnTurnOff: CODE PACK =
BEGIN
-- start-up + finish-up procedures
CommunicationControl [OiscpPackageMake, OiscpPackageDestroy];
Boss [OiscpPackageReady, CommPackageReady, CommPackageGo, CommPackageOff];
EthernetDriver [
MAIN, CreateDefaultEthernetDrivers, CreateAnEthernetDriver, SetupEthernetDriver,
ActivateDriver, DeactivateDriver, DeleteDriver];
EthernetOneDriver [
MAIN, CreateDefaultEthernetOneDrivers, CreateAnEthernetOneDriver,
SetupEthernetOneDriver, ActivateDriver, DeactivateDriver, DeleteDriver];
PilotCommUtil [Zero];
DispatcherImpl [DispatcherOn, DispatcherOff];
RouterImpl [OisR
outerOn, OisRouterOff];
RoutingTableImpl [R
outingTableOn, RoutingTableOff];
SocketImpl [SocketOn];
END;

CommunicationDeepFreeze: CODE PACK =
BEGIN
-- in order of STARTs
CommunicationControl [
MAIN, InitializeCommunication, StartupCommunication];
PilotCommUtil [MAIN, CaptureErrors, DefaultErrorHandler, Glitch];
PacketExchangeImpl [LostBuffer];
Boss [MAIN];
BufferMgr [MAIN];
DispatcherImpl [MAIN];
ChecksumsImpl [MAIN];

RouterImpl
[MAIN];
RoutingTableImpl [MAIN];
SocketImpl [MAIN];
PacketExchangeImpl [MAIN];
END;

DevelopmentStuff: CODE PACK =
BEGIN
BufferMgr [GetFreePupBuffer, GetClumpOfPupBuffers, DataWordsPerPupBuffer];
StatsHot [MAIN, StatGetCounter
, StatIncr, StatBump];
RouterImpl [PacketHit];
DispatcherImpl [GetPupRouter, SetPupRouter];
PilotCommUtil [SecondsToTocks, MsToTocks];
END;

ShitCan: CODE PACK =
BEGIN
Boss [GetDoStats, GetUseCount];
ChecksumsImpl [SlowlyComputeChecksum];
PilotCommUtil [FriendOfCopyLong];
PilotCommUtilPup;
END;

END;

HighCommLevels: SEGMENT =
BEGIN
HotAndEVs: CODE PACK =
BEGIN
PacketStreamIn
stance [
Send
SystemPacket, PutPacketOnSocketChannel,
EnqueueTransmittedPacketAppropriately];
END;

RetransmitAndReceive: CODE PACK =
BEGIN
PacketStreamInstance [
Retransmitter, Re
ceiver, GotSequencedPacket,
AttentionPacketProcessed, UpdateAttnSeqTable,
GotErrorPacket];
END;

InOut: CODE PACK =
BEGIN
PacketStreamInstance [
TakeFromUser, GetForUser, WaitForAttention, ReturnGetSppDataBuffer];
NetworkStreamInstance [
SendNow, PutBlock, PutBy
te, PutWord, SetSST, SendAttention,
FlushOutputBuffer, GetByte, GetWord, GetBlock, WaitAttention];
END;

Cool: CODE PACK =
BEGIN
PacketStreamInstance [
MAIN, SetWaitTime, SuspendStream, SuspendStreamLocked,
FindAddresses, GetSenderSizeLimit, EstablishThi
sConnection,
ActivelyEstablish, WaitUntilEstablished, Delete, MilliSecondsToPulses];
PacketStreamMgr [
MAIN, Make, Destroy, GetUniqueConnectionID, InsertIntoConnectionTable,
RemoveFromConnectionTable, ConnectionAlreadyThere];
NetworkStreamInsta
nce [MAIN, Delete];
Networ
kStreamMgr [
MAIN, Create, AssignNetworkAddress, FindAddress
es, SetWaitTime,
CreateListener, DeleteListener, CreateTr
ansducer, Close, CloseReply,
Listen];
END;

TheEchoServer: CODE PACK =
BEGIN
EchoServerImpl [MAIN, CreateServer, DeleteServer, EchoServer];
END;
END;

CommunicationAlwaysActiveFrames: FRAME PACK =
BEGIN
Communication.BufferMgr;
Communication.Level0 [EthernetDriver, DispatcherImpl];
Communication.Level1;
END;

CommunicationHotFrames: FRAME PACK =
BEGIN
Communication.Level2 [
PacketStreamMgr, NetworkStreamMgr, PacketStreamInstance, NetworkStreamInstance];
END;

CommunicationOtherFrames: FRAME PACK =
BEGIN
Communication.PilotCommUtil;
Communication.PilotCommUtilPup;
Communication.Boss;
Communication.CommunicationControl;
Communication.Level0 [PhoneNetworkDriver, PhoneNetworkImpl, HalfDuplexImpl];
Communication.Level2 [EchoServerImpl];
Communication.Level2 [PacketExchangeImpl];
END;

CommunicationDevelopementEnvironment: FRAME PACK =
BEGIN
Communication.StatsHot;
Communication.Level0 [EthernetOneDriver];
END;