test(core): RIP measured with Java FILIUS

RipRun runs rip-chain's three routers in Java FILIUS, each router's random
set by reflection to the core's ripSeed, and writes the frames, every
change of each RIP table and the calls. converge: the tables fill, a ping
at 45 s. expire: R3 falls silent at 10 s; R2 marks its network 16 hops only
at its own next beacon, R1 passes it on at once, the ping gets ICMP 3/0.
Both match: per sending card the same messages at the same times, every
table through the same states. The first 5 s are compared by the state the
tables reach, since Java's routers start one after the other.

Measured on the JDK: Java's pause divides nextFloat() by 3 in float; the
core does too now (a millisecond off in one draw of about 10,000 before).
Scenarios name their RIP routers in the new field rip.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-30 19:41:56 +00:00
co-authored by Claude Opus 5.5
parent a4036f12a3
commit 37f5d77477
12 changed files with 1695 additions and 6 deletions
@@ -0,0 +1,563 @@
{
"frames": {
"00000000-0000-0000-0000-000000000401": [
{
"time": 1293,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0"
},
{
"time": 1353,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1"
},
{
"time": 1409,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 2"
},
{
"time": 27398,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 2"
},
{
"time": 58184,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 2"
},
{
"time": 86804,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 16"
},
{
"time": 113461,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 16"
},
{
"time": 125001,
"source": "02:00:00:00:04:11",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "10.0.1.2",
"targetIp": "10.0.1.1"
},
{
"time": 125114,
"source": "02:00:00:00:04:21",
"destination": "02:00:00:00:04:11",
"arp": 2,
"senderIp": "10.0.1.1",
"targetIp": "10.0.1.2"
},
{
"time": 125116,
"source": "02:00:00:00:04:11",
"destination": "02:00:00:00:04:21",
"icmp": 8,
"icmpCode": 0,
"sourceIp": "10.0.1.2",
"destinationIp": "10.0.3.2",
"sequence": 1
},
{
"time": 125228,
"source": "02:00:00:00:04:21",
"destination": "02:00:00:00:04:11",
"icmp": 3,
"icmpCode": 0,
"sourceIp": "10.0.1.1",
"destinationIp": "10.0.1.2",
"sequence": 0
}
],
"00000000-0000-0000-0000-000000000402": [
{
"time": 1297,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1"
},
{
"time": 1353,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 2"
},
{
"time": 27343,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 2"
},
{
"time": 58129,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 2"
},
{
"time": 86749,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 16"
},
{
"time": 113405,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 16"
},
{
"time": 125058,
"source": "02:00:00:00:04:11",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "10.0.1.2",
"targetIp": "10.0.1.1"
},
{
"time": 125059,
"source": "02:00:00:00:04:21",
"destination": "02:00:00:00:04:11",
"arp": 2,
"senderIp": "10.0.1.1",
"targetIp": "10.0.1.2"
},
{
"time": 125173,
"source": "02:00:00:00:04:11",
"destination": "02:00:00:00:04:21",
"icmp": 8,
"icmpCode": 0,
"sourceIp": "10.0.1.2",
"destinationIp": "10.0.3.2",
"sequence": 1
},
{
"time": 125173,
"source": "02:00:00:00:04:21",
"destination": "02:00:00:00:04:11",
"icmp": 3,
"icmpCode": 0,
"sourceIp": "10.0.1.1",
"destinationIp": "10.0.1.2",
"sequence": 0
}
],
"00000000-0000-0000-0000-000000000403": [
{
"time": 1218,
"source": "02:00:00:00:04:31",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.2\n10.0.12.2\n16\n75000\n10.0.23.0 255.255.255.0 0"
},
{
"time": 1293,
"source": "02:00:00:00:04:22",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.1\n10.0.1.1\n16\n75000\n10.0.1.0 255.255.255.0 0"
},
{
"time": 1297,
"source": "02:00:00:00:04:31",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.2\n10.0.12.2\n16\n75000\n10.0.23.0 255.255.255.0 0\n10.0.3.0 255.255.255.0 1"
},
{
"time": 1353,
"source": "02:00:00:00:04:22",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.1\n10.0.1.1\n16\n75000\n10.0.1.0 255.255.255.0 0"
},
{
"time": 1409,
"source": "02:00:00:00:04:22",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.1\n10.0.1.1\n16\n75000\n10.0.1.0 255.255.255.0 0"
},
{
"time": 27398,
"source": "02:00:00:00:04:22",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.1\n10.0.1.1\n16\n75000\n10.0.1.0 255.255.255.0 0"
},
{
"time": 29222,
"source": "02:00:00:00:04:31",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.2\n10.0.12.2\n16\n75000\n10.0.23.0 255.255.255.0 0\n10.0.3.0 255.255.255.0 1"
},
{
"time": 58184,
"source": "02:00:00:00:04:22",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.1\n10.0.1.1\n16\n75000\n10.0.1.0 255.255.255.0 0"
},
{
"time": 61273,
"source": "02:00:00:00:04:31",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.2\n10.0.12.2\n16\n75000\n10.0.23.0 255.255.255.0 0\n10.0.3.0 255.255.255.0 1"
},
{
"time": 86692,
"source": "02:00:00:00:04:31",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.2\n10.0.12.2\n16\n75000\n10.0.23.0 255.255.255.0 0\n10.0.3.0 255.255.255.0 16"
},
{
"time": 86804,
"source": "02:00:00:00:04:22",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.1\n10.0.1.1\n16\n75000\n10.0.1.0 255.255.255.0 0"
},
{
"time": 113461,
"source": "02:00:00:00:04:22",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.1\n10.0.1.1\n16\n75000\n10.0.1.0 255.255.255.0 0"
},
{
"time": 114340,
"source": "02:00:00:00:04:31",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.2\n10.0.12.2\n16\n75000\n10.0.23.0 255.255.255.0 0\n10.0.3.0 255.255.255.0 16"
}
],
"00000000-0000-0000-0000-000000000404": [
{
"time": 1293,
"source": "02:00:00:00:04:32",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.2\n10.0.12.2\n16\n75000\n10.0.12.0 255.255.255.0 0"
},
{
"time": 1297,
"source": "02:00:00:00:04:41",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.3",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.3\n10.0.23.3\n16\n75000\n10.0.3.0 255.255.255.0 0"
},
{
"time": 1353,
"source": "02:00:00:00:04:32",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.2\n10.0.12.2\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.1.0 255.255.255.0 1"
},
{
"time": 1354,
"source": "02:00:00:00:04:41",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.3",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.3\n10.0.23.3\n16\n75000\n10.0.3.0 255.255.255.0 0"
},
{
"time": 29278,
"source": "02:00:00:00:04:32",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.2\n10.0.12.2\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.1.0 255.255.255.0 1"
},
{
"time": 61329,
"source": "02:00:00:00:04:32",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.2\n10.0.12.2\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.1.0 255.255.255.0 1"
},
{
"time": 86748,
"source": "02:00:00:00:04:32",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.2\n10.0.12.2\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.1.0 255.255.255.0 1"
},
{
"time": 114396,
"source": "02:00:00:00:04:32",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.2\n10.0.12.2\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.1.0 255.255.255.0 1"
}
],
"00000000-0000-0000-0000-000000000405": [
{
"time": 1293,
"source": "02:00:00:00:04:42",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.3.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.3.1\n10.0.23.3\n16\n75000\n10.0.23.0 255.255.255.0 0"
},
{
"time": 1353,
"source": "02:00:00:00:04:42",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.3.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.3.1\n10.0.23.3\n16\n75000\n10.0.23.0 255.255.255.0 0\n10.0.12.0 255.255.255.0 1"
},
{
"time": 1409,
"source": "02:00:00:00:04:42",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.3.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.3.1\n10.0.23.3\n16\n75000\n10.0.23.0 255.255.255.0 0\n10.0.12.0 255.255.255.0 1\n10.0.1.0 255.255.255.0 2"
}
]
},
"events": [
[
216,
"seeded"
],
[
10000,
"R3 silent"
],
[
125000,
"sendProbe 10.0.3.2 called"
],
[
125233,
"sendProbe 10.0.3.2 returned ICMP 3/0 from 10.0.1.1"
]
],
"tables": [
[
218,
"00000000-0000-0000-0000-000000000402",
"10.0.1.0/255.255.255.0 10.0.1.1 10.0.1.1 0; 10.0.12.0/255.255.255.0 10.0.12.1 10.0.12.1 0"
],
[
218,
"00000000-0000-0000-0000-000000000403",
"10.0.12.0/255.255.255.0 10.0.12.2 10.0.12.2 0; 10.0.23.0/255.255.255.0 10.0.23.2 10.0.23.2 0"
],
[
218,
"00000000-0000-0000-0000-000000000404",
"10.0.23.0/255.255.255.0 10.0.23.3 10.0.23.3 0; 10.0.3.0/255.255.255.0 10.0.3.1 10.0.3.1 0"
],
[
1299,
"00000000-0000-0000-0000-000000000402",
"10.0.1.0/255.255.255.0 10.0.1.1 10.0.1.1 0; 10.0.12.0/255.255.255.0 10.0.12.1 10.0.12.1 0; 10.0.23.0/255.255.255.0 10.0.12.2 10.0.12.1 1"
],
[
1299,
"00000000-0000-0000-0000-000000000403",
"10.0.12.0/255.255.255.0 10.0.12.2 10.0.12.2 0; 10.0.23.0/255.255.255.0 10.0.23.2 10.0.23.2 0; 10.0.1.0/255.255.255.0 10.0.12.1 10.0.12.2 1; 10.0.3.0/255.255.255.0 10.0.23.3 10.0.23.2 1"
],
[
1299,
"00000000-0000-0000-0000-000000000404",
"10.0.23.0/255.255.255.0 10.0.23.3 10.0.23.3 0; 10.0.3.0/255.255.255.0 10.0.3.1 10.0.3.1 0; 10.0.12.0/255.255.255.0 10.0.23.2 10.0.23.3 1"
],
[
1354,
"00000000-0000-0000-0000-000000000402",
"10.0.1.0/255.255.255.0 10.0.1.1 10.0.1.1 0; 10.0.12.0/255.255.255.0 10.0.12.1 10.0.12.1 0; 10.0.23.0/255.255.255.0 10.0.12.2 10.0.12.1 1; 10.0.3.0/255.255.255.0 10.0.12.2 10.0.12.1 2"
],
[
1354,
"00000000-0000-0000-0000-000000000404",
"10.0.23.0/255.255.255.0 10.0.23.3 10.0.23.3 0; 10.0.3.0/255.255.255.0 10.0.3.1 10.0.3.1 0; 10.0.12.0/255.255.255.0 10.0.23.2 10.0.23.3 1; 10.0.1.0/255.255.255.0 10.0.23.2 10.0.23.3 2"
],
[
86694,
"00000000-0000-0000-0000-000000000403",
"10.0.12.0/255.255.255.0 10.0.12.2 10.0.12.2 0; 10.0.23.0/255.255.255.0 10.0.23.2 10.0.23.2 0; 10.0.1.0/255.255.255.0 10.0.12.1 10.0.12.2 1; 10.0.3.0/255.255.255.0 10.0.23.3 10.0.23.2 16"
],
[
86749,
"00000000-0000-0000-0000-000000000402",
"10.0.1.0/255.255.255.0 10.0.1.1 10.0.1.1 0; 10.0.12.0/255.255.255.0 10.0.12.1 10.0.12.1 0; 10.0.23.0/255.255.255.0 10.0.12.2 10.0.12.1 1; 10.0.3.0/255.255.255.0 10.0.12.2 10.0.12.1 16"
]
]
}