test: F2 acceptance — five of FILIUS' examples run as Java FILIUS runs them
ExampleRun opens an example as FILIUS opens it (SzenarioVerwaltung.laden into the window's lists), starts it as the action mode does, plays a story and writes every card's frames and tables, the calls, the addresses and the RIP tables' changes. examplesJava.test.ts reads the same file with this package's reader and runs it in the core (projectSnapshot, new): routing (internetwork_komplett), DHCP (einfaches_rechnernetz_komplett), DNS (dns_server), NAT (nat_with_mapped_port) and firewall (Internet_Komplett_..._DE) match card by card. Found and fixed: a host's ipForwardingEnabled, which Java saves and obeys, was unknown to the reader, the model, the core, the writer, the export and FlsOracle; and Java's ARP learns only from a request for its own address or a reply. Named Java bugs: a ping without a gateway throws a NullPointerException; a home router drops the answer of a second remote end. Open: Java picks between equally long RIP routes by thread timing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -506,3 +506,43 @@ RIP: Der Anlauf entscheidet, wie viele Zufallspausen jeder Router zieht
|
||||
(jede Nachricht zieht eine), und der hängt an Javas Startreihenfolge. Eine
|
||||
Aufnahme, deren Anlauf von dem des Kerns (alle Router zugleich) abweicht,
|
||||
liegt danach in allen Zeiten daneben; das Werkzeug wird dann wiederholt.
|
||||
|
||||
## Beispiele von Filius (Abnahme F2)
|
||||
|
||||
`ExampleRun` öffnet eine Beispieldatei aus `corpus/java-examples` so, wie
|
||||
Filius eine Datei öffnet (`ScenarioNetwork.fromFile`:
|
||||
`SzenarioVerwaltung.laden` in die Listen des Fensters), startet sie wie der
|
||||
Aktionsmodus (jedes Gerät in der Reihenfolge der Datei), spielt einen Ablauf
|
||||
und schreibt nach `packages/fls/test/examples/<ablauf>.java.json` die Frames
|
||||
jeder Karte (unter ihrer MAC-Adresse), Javas Tabellen, die Zuordnung der
|
||||
Karten (`cards`: MAC → `Gerät/Index`, ein wiederholter Name mit `#2`, `#3`, …),
|
||||
die Aufrufe, die Adressen am Ende und jede Änderung der RIP-Tabellen. Abläufe:
|
||||
`routing` (internetwork_komplett: Pings über drei Router, dann von einem
|
||||
Notebook ohne Gateway), `dhcp` (einfaches_rechnernetz_komplett: vier
|
||||
Clients), `dns` (dns_server: rekursiv über Wurzel, `de.`, `filius.de.`),
|
||||
`nat` (nat_with_mapped_port: Pings durch zwei Heimrouter), `firewall`
|
||||
(Internet_Komplett_…_DE: acht DHCP-Clients, dann Pings durch die Firewall).
|
||||
|
||||
Gemessen (01.10.2026):
|
||||
|
||||
* **`ipForwardingEnabled`** eines Rechners: Java speichert und beachtet den
|
||||
Schalter (`meine-schule.de` leitet die Pakete der iPads weiter); Leser,
|
||||
Modell, Kern und `FlsOracle` kannten ihn nicht. `FlsOracle` schreibt ihn
|
||||
jetzt für jeden Knoten mit IP-Stapel; Korpus, Schreiber und Export neu
|
||||
geprüft.
|
||||
* **ARP-Lernregel** (`ARPThread`): Einen Eintrag lernt ein Gerät nur aus einer
|
||||
Anfrage nach seiner eigenen Adresse oder aus einer Antwort, eine Antwort
|
||||
gibt es nur auf eine Anfrage mit Ziel-MAC `ff:ff:ff:ff:ff:ff`, und ein
|
||||
Paket von der Netzadresse wird verworfen. Der Kern lernte aus jedem Paket.
|
||||
* Javas Firewall wendet ihre Regeln nur auf TCP und UDP an; ICMP lässt sie
|
||||
durch, außer „ICMP verwerfen" ist an (`checkAcceptIcmp`). Der Kern ebenso.
|
||||
* Ein Ping von einem Rechner ohne Gateway an ein fremdes Netz wirft in Java
|
||||
eine `NullPointerException`; der Kern meldet „Netz nicht erreichbar".
|
||||
* **Gleich lange RIP-Wege**: Hat ein Router zwei gleich lange Wege, nimmt
|
||||
Java den, dessen Nachricht seine Threads zuerst verarbeiten; im
|
||||
Firewall-Beispiel wechselte das zwischen Läufen (Router #3 zu 42.0.0.0
|
||||
über Router `""` oder über #2). Der Ablauf meidet solche Ziele.
|
||||
* Gleichzeitig startende DHCP-Clients bedient der Server in der Reihenfolge,
|
||||
in der Javas Threads senden; mit acht Clients stauen sich die Broadcasts,
|
||||
ein Frame erreicht die Karten bis zu rund 450 ms versetzt, und Javas
|
||||
Mitschnitt verliert eigene Frames eines Clients.
|
||||
|
||||
Reference in New Issue
Block a user