feat(core): home router NAT after Java, measured with Java FILIUS

The core translates before the IP thread, as Java's NAT threads sit
between card and Ethernet: out, the WAN address and the entry's port (ICMP
keeps its identifier); in, by remote end, port and protocol, else by the
port forwarding, which then makes a dynamic entry; a ping at the WAN
address is answered by the router, packets from outside for the LAN are
dropped, both sides pass the router's firewall, TTL 1 going out gets time
exceeded. Dynamic entries expire at Java's check each second, 300 s times
the delay factor old (55 minutes at 90 %), refreshed only by what comes in.
The home router forwards as a router does.

Measured and not taken: when a LAN endpoint sends to a second remote end,
Java gives it the entry's WAN port but no entry, and the answer stays at
the router; the core adds an entry for each new remote end on that port.

The oracle now records every card of a node (the second card of routers
was missing); the ARP and RIP runs are recorded anew and still match.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-30 20:06:04 +00:00
co-authored by Claude Opus 5.5
parent 5505e8e8af
commit 7a77bc1b43
23 changed files with 2915 additions and 748 deletions
@@ -2,7 +2,7 @@
"frames": {
"00000000-0000-0000-0000-000000000501": [
{
"time": 735,
"time": 717,
"source": "02:00:00:00:05:11",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -10,7 +10,7 @@
"targetIp": "192.168.0.1"
},
{
"time": 860,
"time": 837,
"source": "02:00:00:00:05:22",
"destination": "02:00:00:00:05:11",
"arp": 2,
@@ -18,7 +18,7 @@
"targetIp": "192.168.0.10"
},
{
"time": 866,
"time": 841,
"source": "02:00:00:00:05:11",
"destination": "02:00:00:00:05:22",
"icmp": 8,
@@ -28,7 +28,7 @@
"sequence": 1
},
{
"time": 1444,
"time": 1409,
"source": "02:00:00:00:05:22",
"destination": "02:00:00:00:05:11",
"icmp": 0,
@@ -40,7 +40,7 @@
],
"00000000-0000-0000-0000-000000000502": [
{
"time": 932,
"time": 903,
"source": "02:00:00:00:05:21",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -48,7 +48,7 @@
"targetIp": "42.0.0.20"
},
{
"time": 1164,
"time": 1130,
"source": "02:00:00:00:05:41",
"destination": "02:00:00:00:05:21",
"arp": 2,
@@ -56,7 +56,7 @@
"targetIp": "42.0.0.10"
},
{
"time": 1165,
"time": 1130,
"source": "02:00:00:00:05:21",
"destination": "02:00:00:00:05:41",
"icmp": 8,
@@ -66,7 +66,7 @@
"sequence": 1
},
{
"time": 1388,
"time": 1352,
"source": "02:00:00:00:05:41",
"destination": "02:00:00:00:05:21",
"icmp": 0,
@@ -76,9 +76,47 @@
"sequence": 1
}
],
"00000000-0000-0000-0000-000000000502#1": [
{
"time": 780,
"source": "02:00:00:00:05:11",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "192.168.0.10",
"targetIp": "192.168.0.1"
},
{
"time": 782,
"source": "02:00:00:00:05:22",
"destination": "02:00:00:00:05:11",
"arp": 2,
"senderIp": "192.168.0.1",
"targetIp": "192.168.0.10"
},
{
"time": 898,
"source": "02:00:00:00:05:11",
"destination": "02:00:00:00:05:22",
"icmp": 8,
"icmpCode": 0,
"sourceIp": "192.168.0.10",
"destinationIp": "42.0.0.20",
"sequence": 1
},
{
"time": 1353,
"source": "02:00:00:00:05:22",
"destination": "02:00:00:00:05:11",
"icmp": 0,
"icmpCode": 0,
"sourceIp": "42.0.0.20",
"destinationIp": "192.168.0.10",
"sequence": 1
}
],
"00000000-0000-0000-0000-000000000504": [
{
"time": 1052,
"time": 1018,
"source": "02:00:00:00:05:21",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -86,7 +124,7 @@
"targetIp": "42.0.0.20"
},
{
"time": 1052,
"time": 1018,
"source": "02:00:00:00:05:41",
"destination": "02:00:00:00:05:21",
"arp": 2,
@@ -94,7 +132,7 @@
"targetIp": "42.0.0.10"
},
{
"time": 1276,
"time": 1241,
"source": "02:00:00:00:05:21",
"destination": "02:00:00:00:05:41",
"icmp": 8,
@@ -104,7 +142,7 @@
"sequence": 1
},
{
"time": 1276,
"time": 1241,
"source": "02:00:00:00:05:41",
"destination": "02:00:00:00:05:21",
"icmp": 0,
@@ -116,7 +154,7 @@
],
"00000000-0000-0000-0000-000000000505": [
{
"time": 1052,
"time": 1018,
"source": "02:00:00:00:05:21",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -127,11 +165,11 @@
},
"events": [
[
730,
713,
"sendProbe 42.0.0.20 called"
],
[
1445,
1410,
"sendProbe 42.0.0.20 returned ICMP 0/0 from 42.0.0.20"
]
],