-- File: ArpaRoutingTable.mesa - last edit:
-- JAV 13-Oct-87 11:48:01
-- AOF 10-Mar-87 19:31:47
-- SMA 10-Jun-86 14:09:49
-- Copyright (C) 1985, 1986, 1987 by Xerox Corporation. All rights reserved.
DIRECTORY
ArpaBuffer USING [Buffer],
ArpaRouter USING [InternetAddress],
Driver USING [Device];
ArpaRoutingTable: DEFINITIONS =
BEGIN
NetworkContext: TYPE = LONG POINTER TO ContextObject;
ContextObject: TYPE = RECORD[
protocol: ProtocolHandle, --driver/network dependent
network: Driver.Device, stats: LONG POINTER,
host, net, hostMask, netMask: ArpaRouter.InternetAddress];
ProtocolHandle: TYPE = LONG POINTER;
--Routing table stuff.
RoutersFunction: TYPE = {normal, gateway};
Handle: TYPE = LONG POINTER TO Object;
Object: TYPE = RECORD[
type: RoutersFunction, --what type of service provided
start, stop: PROC, --start/stop the service after/before registering
startEnumeration: ArpaRouter.InternetAddress, --starts enumeration
endEnumeration: ArpaRouter.InternetAddress, --ends enumeration
enumerate: EnumerateProc, --to enumerate current table
fillTable: FillTableProc, --to make enumerations meaningful
getDelay: GetDelayProc, --to find delay to specific network
transmit: TransmitProc, --transmit this packet towards destination net
forward: ForwardProc, --forward this packet towards destination net
findNetwork: FindNetworkProc, --find immediate net towards destination
addNetwork: AddNetworkProc, --add new network
removeNetwork: RemoveNetworkProc, --remove old network
flushCache: FlushCacheProc, --flush cache entry for 'net'
stateChanged: StateChangedProc, --state of network changed
addRoute: AddRouteProc, --for subnet static table routing.
removeRoute: RemoveRouteProc]; --ditto
Register: PROCEDURE [h: Handle ← NIL]; --(un)register new object (NIL => default)
defaultRth: Handle;
AddRouteProc: TYPE = PROC [dest, mask, route: ArpaRouter.InternetAddress,
delay: CARDINAL, context: NetworkContext];
RemoveRouteProc: TYPE = PROC [dest: ArpaRouter.InternetAddress];
EnumerateProc: TYPE = PROC [previous: ArpaRouter.InternetAddress, delay: CARDINAL, onlyChangedValues: BOOLEAN ← FALSE]
RETURNS[route: ArpaRouter.InternetAddress];
FillTableProc: TYPE = PROC [maxDelay: CARDINAL];
GetDelayProc: TYPE = PROC [net: ArpaRouter.InternetAddress]
RETURNS [delay: CARDINAL];
TransmitProc: TYPE = PROC[ArpaBuffer.Buffer];
ForwardProc: TYPE = PROC[ArpaBuffer.Buffer];
FindNetworkProc: TYPE = PROC[net: ArpaRouter.InternetAddress]
RETURNS[ArpaRouter.InternetAddress];
AddNetworkProc: TYPE = PROC[NetworkContext];
RemoveNetworkProc: TYPE = PROC[NetworkContext];
FlushCacheProc: TYPE = PROC[net: ArpaRouter.InternetAddress];
StateChangedProc: TYPE = PROC[NetworkContext];
Redirect: PROCEDURE [b: ArpaBuffer.Buffer];
InfoReply: PROCEDURE [b: ArpaBuffer.Buffer];
ProbeGateway: PROCEDURE;
END.
LOG
15-Jan-85 16:16:48 SMA Created file.
7-Jan-86 14:55:34 SMA Added Redirect and InfoReply for icmp.
9-Jan-86 12:23:43 SMA Added ProbeGateway.
2-Jun-86 15:57:15 SMA Added procs for subnetting with static routing tables.
10-Jun-86 14:09:37 SMA Changed type of EnumerateProc.
10-Mar-87 19:30:08 AOF Funston buffer manager.