Routing
Hops: TYPE ~ CARD;
maxHops: Hops ~ 15;
unreachable: Hops ~ maxHops + 1;
Anything more than maxHops away is unreachable.
RoutingTableEntry:
TYPE ~
RECORD [
hops: Hops, -- 0 => directly connected
immediate: Arpa.Address,
time: CARDINAL ];
GetHops: PROC [Arpa.Address] RETURNS [Hops];
GetRouting: PROC [Arpa.Address] RETURNS [RoutingTableEntry];
Enumerate:
PROC [
low: Hops ← 0, high: Hops ← unreachable,
proc: PROC [Arpa.Address, RoutingTableEntry] ];
Enumerate routine table entries with delay between low and high, inclusive, calling proc on each of them. Client may abort the enumeration by raising an exception in proc and catching it in the caller of Enumerate. It's okay for proc to send/receive packets.
Fast:
PROC [Arpa.Address]
RETURNS [yes:
BOOL];
Phone lines aren't fast. Directly connected ethernets are.