importProject builds what the simulation core runs from Java's view of a
file: nodes with kinds and ports, links between port ids, device and
interface IP configurations, documentation items with Swift's derived
ids. The core gains the model types it needs (node, link, graph,
documentation item), ported from filius-ipad.
Checked against the Swift import, which the Swift oracle now writes in
full (corpus.swift.json, "state"), on the 13 files Swift reads
completely. Two differences are intended and named in the test:
- a device the file leaves unnamed has Java's default name
("Switch / WLAN"), not Swift's;
- multicast_server.fls: useIPAsName refers to a shared Boolean that
Swift cannot follow; Java shows the IP address, and so do we.
All 23 files import with as many devices and cables as Java has, and an
imported example pings across its router in the core.
Port counts of switches and routers follow Java's lists instead of
Swift's guess from references.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5.2 KiB
5.2 KiB
Herkunft und Änderungen
Nach GPL §5a: was aus welcher Quelle übertragen und wie es verändert wurde.
Swift-Pfade relativ zu filius-ipad/ios/FiliusPad/TopologyEditor/ (Stand
3b5ded0, 27.08.2026), Tests relativ zu filius-ipad/ios/FiliusPadTests/.
packages/core
| Datei | Quelle | Art der Übertragung |
|---|---|---|
src/ids.ts |
Swift-Sortierung nach UUID.uuidString |
neu, bildet die Swift-Ordnung nach |
src/model/node.ts |
Model/TopologyNode.swift |
übertragen; Standard-Ports und -Namen wie Java; ein gegebener Name bleibt, auch leer (Java lässt Router unbenannt) |
src/model/link.ts, src/model/graph.ts |
Model/TopologyLink.swift, Model/TopologyGraph.swift |
übertragen, bisher nur die Daten (Abfragen folgen mit dem Editor) |
src/model/documentation.ts |
Model/TopologyDocumentation.swift |
übertragen; FNV-Kennung mit BigInt, gegen die IDs aus dem Swift-Import geprüft |
src/runtime/config.ts |
State/TopologyEditorState.swift (Laufzeit-Konfigurationen, Firewall) |
übertragen; Java-Beschriftungen der Oberfläche weggelassen |
src/runtime/engine.ts |
State/TopologyNetworkRuntimeEngine.swift Z. ~313–3585, ~4753–4850 |
übertragen: Warteschlange, Uhr, Ethernet, Switch, ARP, IPv4, ICMP, Routing, Firewall. Klasse statt Werttyp. Noch nicht übertragen (wirft NotPortedError): Gateway-NAT, UDP, TCP, DHCP, DNS, RIP, Remote Link, WLAN |
src/runtime/ipv4.ts |
Engine parseIPv4/sameSubnet |
übertragen |
src/runtime/packets.ts |
Engine, Paketmodelle | übertragen; Data → Uint8Array |
src/runtime/random.ts |
Engine, TopologyJavaCompatibleRandom |
übertragen; BigInt für die 48-Bit-Arithmetik |
src/runtime/routeTable.ts |
State/TopologyJavaRouteTable.swift |
übertragen ohne Tabellengeometrie (gehört in den Editor) |
src/runtime/snapshot.ts |
Engine, TopologyNetworkRuntimeTopologySnapshot |
übertragen, bisher mit den Feldern der übertragenen Schichten |
src/runtime/speed.ts |
Engine, TopologyNetworkRuntimeSpeed |
übertragen |
src/runtime/trace.ts |
Engine, Paketspur-Modell | übertragen |
src/util/equal.ts |
— | neu (Ersatz für Swifts Equatable) |
test/engine.test.ts |
TopologyNetworkRuntimeEngineTests.swift (21 von 72 Tests) |
übertragen; nextInt-Referenzwerte an OpenJDK 21 gemessen |
test/oracle.test.ts, test/scenarios/ |
— | neu: 5 Szenarien, Ergebnis mit dem Swift-Kern abgeglichen (tools/swift-oracle) |
test/routeTable.test.ts |
TopologyJavaRouteTableTests.swift (8 von 12 Tests) |
übertragen; Geometrie- und Reducer-Tests folgen mit Editor und Dokument |
packages/fls
| Datei | Quelle | Art der Übertragung |
|---|---|---|
src/zip.ts |
Persistence/TopologyFLSArchive.swift (Fehler, Grenzen, Pfadregeln, ZIP-Leser/-Schreiber, CRC-32) |
übertragen; DEFLATE über fflate, mit Apples Abschneide-Verhalten nachgebildet; Pfadfaltung (NFC, Breite, volles Case-Folding) an 41 Paaren gegen das Swift-Orakel gemessen |
src/archive.ts |
ebenda, Archiv-Teil von Import und Export | übertragen, ohne die XML-Ebene |
src/javabeans.ts, src/javaDefaults.json |
— | neu: XMLEncoder-Leser nach den Regeln von java.beans.XMLDecoder (Swift liest elementweise und verliert geteilte Werte); Getter-Standardwerte und statische Konstanten mit tools/java-oracle gemessen |
src/importProject.ts |
Persistence/TopologyProjectStore.swift (Knoten, Ports, Kabel, IP-Konfiguration, Doku-Elemente des Imports) |
übertragen, Eingabe ist Javas Sicht: Name und Port-Anzahl wie Java, abgelehnte Adresse → Swift-Standard; gegen Swifts importiertes Modell auf 13 Dateien geprüft |
test/importProject.test.ts |
— | neu: Swifts importiertes Modell (13 Dateien, zwei begründete Abweichungen), Vollständigkeit aller 23, Ping über den Router im Kern |
src/javaIp.ts |
Java IP.inetAton/ipCheck |
neu nach Java; an 46 Fällen mit Java gemessen |
src/topology.ts |
Java SzenarioVerwaltung.netzwerkLaden, Konstruktoren und Setter der Geräte; Swift Persistence/TopologyProjectStore.swift (Parser) als Vergleich |
neu nach Java statt Übertragung: Geräteart aus der Klasse statt aus der Beschriftung, Geräte ohne Koordinaten bei 0,0 statt verworfen, Werte durch Javas Setter |
test/javabeans.test.ts |
— | neu: je XMLDecoder-Regel ein Test; alle 23 Korpus-Dateien, Klasse und Position jedes Geräts wie Java |
test/topology.test.ts |
— | neu: alle 23 Korpus-Dateien Feld für Feld wie Java (Geräte, Schnittstellen, Kabel, Doku-Elemente), dazu die Regeln, die der Korpus nicht berührt |
test/javaIp.test.ts, test/ip-check.* |
— | neu: IP.ipCheck-Fälle, Ergebnis aus Java |
test/zip.test.ts |
TopologyProjectPersistenceTests.swift (Archiv-Ablehnungstests, makeMinimalZIP, makePayloadZIP) |
übertragen, ergänzt um DEFLATE-Grenzfälle |
test/corpus.test.ts |
— | neu: 23 Korpus-Dateien, gegengeprüft mit fflate.unzipSync |
test/pathFolding.test.ts, test/path-folding.*.json |
— | neu: welche Pfade dieselbe Datei meinen, Ergebnis aus dem Swift-Kern |
tools/swift-oracle
Baut den unveränderten Swift-Kern (Stand 3b5ded0) unter Linux, nur zwei
Ausdrücke sind für den Linux-Compiler aufgeteilt (patches/). Die Quellen
selbst werden beim Bau geholt und nicht eingecheckt.