fix(core): a learned RIP route expires at its time and is announced at once

Java's RIPTable.check marks an expired route only at the router's next
beacon, up to some 35 s late. The engine schedules each router's first
expiry, marks the route with 16 hops at that time and sends its table
at once, as after any change (better than Java where Java only samples,
decided 01.10.2026). ripJava's expire story is compared up to the
expiry and then checks that R2 marks the route at its time and R1 a
cable later.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-01 14:14:07 +00:00
co-authored by Claude Opus 5.5
parent 739deafbf4
commit 0a34f3a4c4
5 changed files with 112 additions and 28 deletions
+4
View File
@@ -371,6 +371,10 @@ Gemessen (30.09.2026, dazu die Pausenformel am JDK):
nach dem Verfallen (`RIPTable.check`): R3s Netz verfiel bei R2 nach rund
76,4 s, R2 setzte es bei seinem Beacon um 86,7 s auf 16; R1 hörte die 16 vom
selben Router und meldete sofort. Der Ping bekommt dann ICMP 3/0 von R1.
Der Kern setzt die Route seit 01.10.2026 genau beim Verfallen auf 16 und
meldet sofort (besser als Java, wo Java nur bei seinem Takt nachsieht);
`ripJava.test.ts` vergleicht `expire` bis dahin und prüft danach, dass R2
zur Zeit und R1 ein Kabel später auf 16 steht (`BETTER_THAN_JAVA_FROM`).
* Die Router starten nacheinander, rund 20 ms auseinander; wer einen
Nachbarn vor seinem ersten Beacon hört, sendet die gelernte Route gleich
mit. Senden mehrere zugleich, fehlt im Lauscher mancher eigene Frame.