feat(core): Java's IP and ICMP threads, measured with Java FILIUS

Every packet that comes in goes through its node's IP thread (UDP, TCP) or
ICMP thread (ICMP), as Java's IPThread and ICMPThread: deliver, answer an
echo request or forward, one after the other; while one waits for ARP, the
next wait behind it. A packet a node sends to itself is delivered at once,
as Java's IP.senden does. The transport send threads and these are one
mechanism now (handToProtocolThread).

ArpRun has three stories through the router (routedUdpBehind,
routedPingBesideUdp, routedPingBehindPing); the oracle writes ICMP frames
with type, code, addresses and sequence number. All seven ArpRun stories
match Java FILIUS.

Measured and not taken: Java's ARP wakes one waiter with notify, not the
one whose answer came; the core wakes all that wait for the address.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-30 18:32:48 +00:00
co-authored by Claude Opus 5.5
parent 7e0348636c
commit f5c61cdce7
13 changed files with 950 additions and 97 deletions
@@ -0,0 +1,192 @@
{
"frames": {
"00000000-0000-0000-0000-000000000301": [
{
"time": 718,
"source": "02:00:00:00:03:11",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "10.0.0.2",
"targetIp": "10.0.0.1"
},
{
"time": 952,
"source": "02:00:00:00:03:21",
"destination": "02:00:00:00:03:11",
"arp": 2,
"senderIp": "10.0.0.1",
"targetIp": "10.0.0.2"
},
{
"time": 955,
"source": "02:00:00:00:03:11",
"destination": "02:00:00:00:03:21",
"icmp": 8,
"icmpCode": 0,
"sourceIp": "10.0.0.2",
"destinationIp": "20.0.0.9",
"sequence": 2
},
{
"time": 1012,
"source": "02:00:00:00:03:11",
"destination": "02:00:00:00:03:21",
"icmp": 8,
"icmpCode": 0,
"sourceIp": "10.0.0.2",
"destinationIp": "20.0.0.2",
"sequence": 1
},
{
"time": 6681,
"source": "02:00:00:00:03:21",
"destination": "02:00:00:00:03:11",
"icmp": 3,
"icmpCode": 1,
"sourceIp": "10.0.0.1",
"destinationIp": "10.0.0.2",
"sequence": 0
},
{
"time": 6904,
"source": "02:00:00:00:03:21",
"destination": "02:00:00:00:03:11",
"icmp": 0,
"icmpCode": 0,
"sourceIp": "20.0.0.2",
"destinationIp": "10.0.0.2",
"sequence": 1
}
],
"00000000-0000-0000-0000-000000000302": [
{
"time": 838,
"source": "02:00:00:00:03:11",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "10.0.0.2",
"targetIp": "10.0.0.1"
},
{
"time": 840,
"source": "02:00:00:00:03:21",
"destination": "02:00:00:00:03:11",
"arp": 2,
"senderIp": "10.0.0.1",
"targetIp": "10.0.0.2"
},
{
"time": 1068,
"source": "02:00:00:00:03:11",
"destination": "02:00:00:00:03:21",
"icmp": 8,
"icmpCode": 0,
"sourceIp": "10.0.0.2",
"destinationIp": "20.0.0.9",
"sequence": 2
},
{
"time": 1124,
"source": "02:00:00:00:03:11",
"destination": "02:00:00:00:03:21",
"icmp": 8,
"icmpCode": 0,
"sourceIp": "10.0.0.2",
"destinationIp": "20.0.0.2",
"sequence": 1
},
{
"time": 6570,
"source": "02:00:00:00:03:21",
"destination": "02:00:00:00:03:11",
"icmp": 3,
"icmpCode": 1,
"sourceIp": "10.0.0.1",
"destinationIp": "10.0.0.2",
"sequence": 0
},
{
"time": 6793,
"source": "02:00:00:00:03:21",
"destination": "02:00:00:00:03:11",
"icmp": 0,
"icmpCode": 0,
"sourceIp": "20.0.0.2",
"destinationIp": "10.0.0.2",
"sequence": 1
}
],
"00000000-0000-0000-0000-000000000303": [
{
"time": 1124,
"source": "02:00:00:00:03:22",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "20.0.0.1",
"targetIp": "20.0.0.9"
},
{
"time": 3874,
"source": "02:00:00:00:03:22",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "20.0.0.1",
"targetIp": "20.0.0.9"
},
{
"time": 6625,
"source": "02:00:00:00:03:22",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "20.0.0.1",
"targetIp": "20.0.0.2"
},
{
"time": 6625,
"source": "02:00:00:00:03:13",
"destination": "02:00:00:00:03:22",
"arp": 2,
"senderIp": "20.0.0.2",
"targetIp": "20.0.0.1"
},
{
"time": 6737,
"source": "02:00:00:00:03:22",
"destination": "02:00:00:00:03:13",
"icmp": 8,
"icmpCode": 0,
"sourceIp": "10.0.0.2",
"destinationIp": "20.0.0.2",
"sequence": 1
},
{
"time": 6737,
"source": "02:00:00:00:03:13",
"destination": "02:00:00:00:03:22",
"icmp": 0,
"icmpCode": 0,
"sourceIp": "20.0.0.2",
"destinationIp": "10.0.0.2",
"sequence": 1
}
]
},
"events": [
[
713,
"sendeICMP 20.0.0.9 called"
],
[
955,
"sendeICMP 20.0.0.9 returned "
],
[
955,
"sendProbe 20.0.0.2 called"
],
[
3763,
"sendProbe 20.0.0.2 returned null"
]
]
}