From da2ec1dae2ced823952fef77831fc090a3b420bf Mon Sep 17 00:00:00 2001 From: Julian Kiedaisch Date: Tue, 29 Sep 2026 20:47:47 +0000 Subject: [PATCH] feat(fls): import a .fls topology into the editor model 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 --- CHANGES.md | 6 +- corpus/corpus.swift.json | 13100 +++++++++++++++++ package-lock.json | 1 + packages/core/src/encoding.d.ts | 7 + packages/core/src/index.ts | 3 + packages/core/src/model/documentation.ts | 150 + packages/core/src/model/graph.ts | 11 + packages/core/src/model/link.ts | 13 + packages/core/src/model/node.ts | 45 + packages/fls/package.json | 1 + packages/fls/src/importProject.ts | 277 + packages/fls/src/index.ts | 1 + packages/fls/test/importProject.test.ts | 339 + packages/fls/tsconfig.json | 5 + tools/swift-oracle/README.md | 9 + tools/swift-oracle/Sources/Oracle/main.swift | 56 + 16 files changed, 14023 insertions(+), 1 deletion(-) create mode 100644 packages/core/src/encoding.d.ts create mode 100644 packages/core/src/model/documentation.ts create mode 100644 packages/core/src/model/graph.ts create mode 100644 packages/core/src/model/link.ts create mode 100644 packages/fls/src/importProject.ts create mode 100644 packages/fls/test/importProject.test.ts diff --git a/CHANGES.md b/CHANGES.md index 1e64422..9701fce 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,7 +9,9 @@ Swift-Pfade relativ zu `filius-ipad/ios/FiliusPad/TopologyEditor/` (Stand | 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 | +| `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 | @@ -31,6 +33,8 @@ Swift-Pfade relativ zu `filius-ipad/ios/FiliusPad/TopologyEditor/` (Stand | `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 | diff --git a/corpus/corpus.swift.json b/corpus/corpus.swift.json index 61ca08f..e95c36c 100644 --- a/corpus/corpus.swift.json +++ b/corpus/corpus.swift.json @@ -10,6 +10,523 @@ "nodes" : 8, "residual" : 0, "skipped" : 0, + "state" : { + "documentation" : [ + + ], + "links" : [ + [ + 0, + 1, + 1, + 0 + ], + [ + 2, + 0, + 0, + 3 + ], + [ + 3, + 0, + 0, + 0 + ], + [ + 0, + 2, + 5, + 0 + ], + [ + 5, + 1, + 4, + 0 + ], + [ + 5, + 2, + 6, + 0 + ], + [ + 5, + 3, + 7, + 0 + ] + ], + "nodes" : [ + { + "device" : null, + "displayName" : "Switch", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 250, + 181 + ] + }, + { + "device" : { + "defaultGateway" : "141.99.5.1", + "dnsServer" : "141.99.5.12", + "ipAddress" : "141.99.5.12", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "DNS-Server (lokal)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 213, + 16 + ] + }, + { + "device" : { + "defaultGateway" : "141.99.5.1", + "dnsServer" : "141.99.5.12", + "ipAddress" : "141.99.5.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Webserver", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 63, + 83 + ] + }, + { + "device" : { + "defaultGateway" : "141.99.5.1", + "dnsServer" : "141.99.5.12", + "ipAddress" : "141.99.5.11", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Notebook", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 289, + 313 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "141.99.5.13", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "DNS-Server (.)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 735, + 25 + ] + }, + { + "device" : null, + "displayName" : "Switch", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 483, + 185 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "141.99.5.14", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "DNS-Server (de.)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 726, + 145 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "141.99.5.15", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "DNS-Server (filius.de.)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 709, + 276 + ] + } + ] + }, "version" : "Filius version: 1.0-SNAPSHOT (11.03.2012)", "warnings" : [ @@ -27,6 +544,589 @@ "nodes" : 6, "residual" : 0, "skipped" : 1, + "state" : { + "documentation" : [ + { + "color" : [ + 0.8196078431372549, + 0.9098039215686274, + 1, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 56, + 9, + 459, + 243 + ], + "id" : "F69F2D74-5079-D567-F2AF-E0B881220D08", + "isBold" : false, + "kind" : "rectangle", + "order" : 7, + "text" : "" + }, + { + "color" : [ + 1, + 0.788235294117647, + 0.788235294117647, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 277, + 260, + 602, + 314 + ], + "id" : "71823B34-3ABA-B93A-3648-D3FAF661BF50", + "isBold" : false, + "kind" : "rectangle", + "order" : 9, + "text" : "" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 508, + 390, + 88, + 24 + ], + "id" : "249E4DC0-27AC-5730-1CAE-C26D80EFDD47", + "isBold" : false, + "kind" : "text", + "order" : 0, + "text" : "8.8.8.1" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 587, + 345, + 100, + 24 + ], + "id" : "CC1F9209-08D0-FB25-6FD1-EFC8EC9DF1D0", + "isBold" : false, + "kind" : "text", + "order" : 1, + "text" : "42.0.0.1" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 453, + 124, + 100, + 24 + ], + "id" : "A879996C-2FB8-FB03-E1FC-1081B0CDA559", + "isBold" : false, + "kind" : "text", + "order" : 2, + "text" : "42.0.0.10" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 308, + 123, + 88, + 24 + ], + "id" : "D2307CC7-E20B-633A-8FFC-758967409D95", + "isBold" : false, + "kind" : "text", + "order" : 3, + "text" : "192.168.0.1" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 631, + 391, + 88, + 24 + ], + "id" : "9744939B-7A8C-9932-97C5-F371EF3A5CBD", + "isBold" : false, + "kind" : "text", + "order" : 4, + "text" : "160.10.20.1" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 373, + 519, + 88, + 41 + ], + "id" : "A3B7F141-2D48-F04B-0D7E-47CE066EF574", + "isBold" : false, + "kind" : "text", + "order" : 5, + "text" : "DNS \nNameserver" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 37, + 615, + 275, + 59 + ], + "id" : "FAED2CD4-41B3-4989-AD12-02B920187AB2", + "isBold" : false, + "kind" : "text", + "order" : 6, + "text" : "This model is copyright © 2026 Josh Buhl and is freely distributable under the creative commons CC BY-NC-SA 4.0CC BY-NC-SA 4.0 License" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 18, + "frame" : [ + 281, + 20, + 175, + 54 + ], + "id" : "B3268767-386B-61E8-4580-DAB00C7C83A8", + "isBold" : true, + "kind" : "text", + "order" : 8, + "text" : "Private Local Area Network (LAN)" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 18, + "frame" : [ + 297, + 283, + 215, + 35 + ], + "id" : "572384EB-F318-D75E-A493-830F025FC8E4", + "isBold" : true, + "kind" : "text", + "order" : 10, + "text" : "Public Network (WAN)" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 352, + 179, + 153, + 54 + ], + "id" : "E194B0F6-BB89-5F74-0948-DE2ED0C03BCF", + "isBold" : false, + "kind" : "text", + "order" : 11, + "text" : "[Gateway and Switch are often integrated into one device especially at home.]" + } + ], + "links" : [ + [ + 1, + 1, + 2, + 0 + ], + [ + 1, + 2, + 3, + 0 + ], + [ + 4, + 0, + 5, + 0 + ], + [ + 0, + 0, + 5, + 2 + ] + ], + "nodes" : [ + { + "device" : { + "defaultGateway" : "192.168.0.1", + "dnsServer" : "8.8.8.8", + "ipAddress" : "192.168.0.12", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "192.168.0.12", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "FB:07:94:E4:05:06", + "occupied" : false + } + ], + "position" : [ + 79, + 124 + ] + }, + { + "device" : null, + "displayName" : "Vermittlungsrechner", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "42.0.0.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "160.10.20.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "8.8.8.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "A7:1D:A9:4C:C4:A7", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "D1:3E:5F:E6:BA:F9", + "occupied" : false + }, + { + "label" : "rt3", + "mac" : "03:3C:DF:0A:44:1E", + "occupied" : false + } + ], + "position" : [ + 521, + 364 + ] + }, + { + "device" : { + "defaultGateway" : "160.10.20.1", + "dnsServer" : "", + "ipAddress" : "160.10.20.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "mywebserver.de (160.10.20.10)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "71:6A:B4:64:00:4E", + "occupied" : false + } + ], + "position" : [ + 656, + 419 + ] + }, + { + "device" : { + "defaultGateway" : "8.8.8.1", + "dnsServer" : "", + "ipAddress" : "8.8.8.8", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "8.8.8.8", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "48:76:39:9B:AC:29", + "occupied" : false + } + ], + "position" : [ + 383, + 422 + ] + }, + { + "device" : { + "defaultGateway" : "192.168.0.1", + "dnsServer" : "8.8.8.8", + "ipAddress" : "192.168.0.11", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "192.168.0.11", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "45:06:FC:3E:2B:59", + "occupied" : false + } + ], + "position" : [ + 168, + 29 + ] + }, + { + "device" : null, + "displayName" : "Wifi Switch", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 255, + 167 + ] + } + ] + }, "version" : "Filius version: 2.9.4 (20.07.2025)", "warnings" : [ "Skipped unsupported FILIUS node type 'Heimrouter' in konfiguration.xml", @@ -46,6 +1146,468 @@ "nodes" : 6, "residual" : 0, "skipped" : 0, + "state" : { + "documentation" : [ + + ], + "links" : [ + [ + 3, + 0, + 0, + 0 + ], + [ + 4, + 0, + 0, + 1 + ], + [ + 1, + 1, + 2, + 0 + ], + [ + 0, + 2, + 5, + 0 + ], + [ + 5, + 1, + 1, + 0 + ] + ], + "nodes" : [ + { + "device" : null, + "displayName" : "Switch 1", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 164, + 178 + ] + }, + { + "device" : null, + "displayName" : "Switch 2", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 612, + 104 + ] + }, + { + "device" : { + "defaultGateway" : "141.99.2.1", + "dnsServer" : "141.99.2.10", + "ipAddress" : "141.99.2.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "DNS-Server 2.10", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "55:69:1F:18:4C:96", + "occupied" : false + } + ], + "position" : [ + 694, + 19 + ] + }, + { + "device" : { + "defaultGateway" : "141.99.1.1", + "dnsServer" : "141.99.2.10", + "ipAddress" : "141.99.1.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Notebook 1.10", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "95:11:22:49:65:CB", + "occupied" : false + } + ], + "position" : [ + 53, + 100 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "141.99.2.10", + "ipAddress" : "141.99.1.11", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Notebook 1.11", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "AE:F4:7A:63:81:B9", + "occupied" : false + } + ], + "position" : [ + 70, + 235 + ] + }, + { + "device" : null, + "displayName" : "Vermittlungsrechner", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "141.99.1.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "141.99.2.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "A4:F4:2A:89:9F:E8", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "6D:B4:5B:F1:70:FC", + "occupied" : false + } + ], + "position" : [ + 373, + 106 + ] + } + ] + }, "version" : "Filius version: 1.3.1.3 (29. Januar 2011)", "warnings" : [ @@ -62,6 +1624,266 @@ "nodes" : 4, "residual" : 0, "skipped" : 0, + "state" : { + "documentation" : [ + + ], + "links" : [ + [ + 1, + 0, + 2, + 0 + ], + [ + 2, + 1, + 0, + 0 + ], + [ + 3, + 0, + 2, + 2 + ] + ], + "nodes" : [ + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "192.168.0.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Server 10", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "4B:82:31:A8:4D:54", + "occupied" : false + } + ], + "position" : [ + 355, + 77 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "192.168.0.1", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Notebook 1", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "43:F8:45:DC:FC:53", + "occupied" : false + } + ], + "position" : [ + 44, + 31 + ] + }, + { + "device" : null, + "displayName" : "Switch", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 212, + 115 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "192.168.0.2", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Notebook 2", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "66:38:EB:F5:F4:3B", + "occupied" : false + } + ], + "position" : [ + 45, + 180 + ] + } + ] + }, "version" : "Filius version: 2.1.0 (11.10.2022)", "warnings" : [ @@ -78,6 +1900,316 @@ "nodes" : 6, "residual" : 0, "skipped" : 1, + "state" : { + "documentation" : [ + + ], + "links" : [ + [ + 1, + 0, + 3, + 0 + ], + [ + 3, + 1, + 0, + 0 + ], + [ + 3, + 2, + 2, + 0 + ] + ], + "nodes" : [ + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "192.168.0.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "192.168.0.10", + "hostLabelPolicy" : "ipAddress", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "91:E4:54:FA:C9:7D", + "occupied" : false + } + ], + "position" : [ + 507, + 96 + ] + }, + { + "device" : { + "defaultGateway" : "0.0.0.0", + "dnsServer" : "0.0.0.0", + "ipAddress" : "192.168.0.101", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "192.168.0.101", + "hostLabelPolicy" : "ipAddress", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "B6:F7:8C:F6:CC:0F", + "occupied" : false + } + ], + "position" : [ + 112, + 49 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "192.168.0.100", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "192.168.0.100", + "hostLabelPolicy" : "ipAddress", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "54:71:65:D0:3A:4B", + "occupied" : false + } + ], + "position" : [ + 97, + 164 + ] + }, + { + "device" : null, + "displayName" : "Switch \/ WLAN", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 307, + 128 + ] + }, + { + "device" : { + "defaultGateway" : "192.168.0.10", + "dnsServer" : "0.0.0.0", + "ipAddress" : "192.168.0.100", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "192.168.0.100", + "hostLabelPolicy" : "ipAddress", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "30:B7:97:00:00:FD", + "occupied" : false + } + ], + "position" : [ + 94, + 320 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "192.168.0.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "192.168.0.10", + "hostLabelPolicy" : "ipAddress", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "24:C4:CA:44:77:A4", + "occupied" : false + } + ], + "position" : [ + 580, + 293 + ] + } + ] + }, "version" : "Filius version: 2.8.0 (15.03.2025)", "warnings" : [ "Skipped unsupported FILIUS node type 'Heimrouter' in konfiguration.xml", @@ -96,6 +2228,523 @@ "nodes" : 8, "residual" : 0, "skipped" : 0, + "state" : { + "documentation" : [ + + ], + "links" : [ + [ + 0, + 1, + 1, + 0 + ], + [ + 2, + 0, + 0, + 3 + ], + [ + 3, + 0, + 0, + 0 + ], + [ + 0, + 2, + 5, + 0 + ], + [ + 5, + 1, + 4, + 0 + ], + [ + 5, + 2, + 6, + 0 + ], + [ + 5, + 3, + 7, + 0 + ] + ], + "nodes" : [ + { + "device" : null, + "displayName" : "Switch", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 250, + 181 + ] + }, + { + "device" : { + "defaultGateway" : "141.99.5.1", + "dnsServer" : "141.99.5.12", + "ipAddress" : "141.99.5.12", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "DNS-Server (lokal)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 213, + 16 + ] + }, + { + "device" : { + "defaultGateway" : "141.99.5.1", + "dnsServer" : "141.99.5.12", + "ipAddress" : "141.99.5.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Webserver", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 63, + 83 + ] + }, + { + "device" : { + "defaultGateway" : "141.99.5.1", + "dnsServer" : "141.99.5.12", + "ipAddress" : "141.99.5.11", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Notebook", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 289, + 313 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "141.99.5.13", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "DNS-Server (.)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 735, + 25 + ] + }, + { + "device" : null, + "displayName" : "Switch", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 483, + 185 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "141.99.5.14", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "DNS-Server (de.)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 726, + 145 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "141.99.5.15", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "DNS-Server (filius.de.)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 709, + 276 + ] + } + ] + }, "version" : "Filius version: 1.0-SNAPSHOT (11.03.2012)", "warnings" : [ @@ -112,6 +2761,780 @@ "nodes" : 12, "residual" : 0, "skipped" : 0, + "state" : { + "documentation" : [ + + ], + "links" : [ + [ + 0, + 0, + 11, + 0 + ], + [ + 1, + 0, + 11, + 1 + ], + [ + 2, + 0, + 11, + 2 + ], + [ + 3, + 0, + 11, + 3 + ], + [ + 11, + 4, + 5, + 0 + ], + [ + 5, + 1, + 4, + 0 + ], + [ + 5, + 2, + 10, + 0 + ], + [ + 6, + 0, + 10, + 1 + ], + [ + 7, + 0, + 10, + 2 + ], + [ + 8, + 0, + 10, + 3 + ], + [ + 9, + 0, + 10, + 4 + ] + ], + "nodes" : [ + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "192.168.0.100", + "ipAddress" : "192.168.0.11", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Rechner 1", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 32, + 97 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "192.168.0.100", + "ipAddress" : "192.168.0.12", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Rechner 2", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 30, + 226 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "192.168.0.100", + "ipAddress" : "192.168.0.13", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Rechner 3", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 31, + 364 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "192.168.0.100", + "ipAddress" : "192.168.0.14", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Rechner 4", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 36, + 503 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "192.168.0.100", + "ipAddress" : "192.168.0.100", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Server", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 564, + 39 + ] + }, + { + "device" : null, + "displayName" : "Switch 3", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 449, + 180 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "192.168.0.100", + "ipAddress" : "169.254.59.98", + "subnetMask" : "0.0.0.0" + }, + "displayName" : "Notebook 1", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 348, + 512 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "192.168.0.100", + "ipAddress" : "169.254.149.102", + "subnetMask" : "0.0.0.0" + }, + "displayName" : "Notebook 2", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 498, + 513 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "192.168.0.100", + "ipAddress" : "169.254.43.216", + "subnetMask" : "0.0.0.0" + }, + "displayName" : "Notebook 3", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 634, + 510 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "192.168.0.100", + "ipAddress" : "169.254.19.11", + "subnetMask" : "0.0.0.0" + }, + "displayName" : "Notebook 4", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 768, + 509 + ] + }, + { + "device" : null, + "displayName" : "Switch 2", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 601, + 368 + ] + }, + { + "device" : null, + "displayName" : "Switch 1", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 224, + 300 + ] + } + ] + }, "version" : "Filius version: 1.4.5 (04.11.2012)", "warnings" : [ @@ -128,6 +3551,421 @@ "nodes" : 9, "residual" : 0, "skipped" : 0, + "state" : { + "documentation" : [ + + ], + "links" : [ + [ + 3, + 0, + 5, + 0 + ], + [ + 4, + 0, + 5, + 1 + ], + [ + 1, + 0, + 5, + 2 + ], + [ + 2, + 0, + 5, + 3 + ], + [ + 5, + 4, + 0, + 0 + ], + [ + 5, + 5, + 6, + 0 + ], + [ + 5, + 6, + 7, + 0 + ], + [ + 5, + 7, + 8, + 0 + ] + ], + "nodes" : [ + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "141.99.50.230", + "ipAddress" : "141.99.50.231", + "subnetMask" : "255.255.255.128" + }, + "displayName" : "Web-Server", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "1A:77:96:CF:32:33", + "occupied" : false + } + ], + "position" : [ + 460, + 147 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "141.99.50.230", + "ipAddress" : "141.99.50.183", + "subnetMask" : "255.255.255.128" + }, + "displayName" : "Rechner 3", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "5F:A4:08:F1:FC:88", + "occupied" : false + } + ], + "position" : [ + 81, + 266 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "141.99.50.230", + "ipAddress" : "141.99.50.184", + "subnetMask" : "255.255.255.128" + }, + "displayName" : "Rechner 4", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "9D:8C:F6:C9:98:AE", + "occupied" : false + } + ], + "position" : [ + 83, + 375 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "141.99.50.230", + "ipAddress" : "141.99.50.181", + "subnetMask" : "255.255.255.128" + }, + "displayName" : "Rechner 1", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "A8:13:4D:62:BF:61", + "occupied" : false + } + ], + "position" : [ + 82, + 59 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "141.99.50.230", + "ipAddress" : "141.99.50.182", + "subnetMask" : "255.255.255.128" + }, + "displayName" : "Rechner 2", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "FD:92:36:FB:99:6D", + "occupied" : false + } + ], + "position" : [ + 82, + 161 + ] + }, + { + "device" : null, + "displayName" : "Switch", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 284, + 238 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "141.99.50.230", + "subnetMask" : "255.255.255.128" + }, + "displayName" : "DNS-Server", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "9D:26:F9:23:B2:F9", + "occupied" : false + } + ], + "position" : [ + 469, + 30 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "141.99.50.230", + "ipAddress" : "141.99.50.232", + "subnetMask" : "255.255.255.128" + }, + "displayName" : "Mail-Server (filius.de)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "37:DF:DC:1A:CF:E0", + "occupied" : false + } + ], + "position" : [ + 432, + 285 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "141.99.50.230", + "ipAddress" : "141.99.50.233", + "subnetMask" : "255.255.255.128" + }, + "displayName" : "Mail-Server (senior.de)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "7A:10:61:61:15:A3", + "occupied" : false + } + ], + "position" : [ + 430, + 414 + ] + } + ] + }, "version" : null, "warnings" : [ "Email Client on 'Rechner 3' has inconsistent kontoListe map entry #2; account bean values remain authoritative.", @@ -150,6 +3988,1410 @@ "nodes" : 21, "residual" : 0, "skipped" : 4, + "state" : { + "documentation" : [ + { + "color" : [ + 1, + 1, + 0.8901960784313725, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 62, + 755, + 255, + 193 + ], + "id" : "D75645AD-31A4-72DF-4057-E2E3FA51D2A2", + "isBold" : false, + "kind" : "rectangle", + "order" : 2, + "text" : "" + }, + { + "color" : [ + 0.9882352941176471, + 0.788235294117647, + 0.6392156862745098, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 331, + 684, + 292, + 263 + ], + "id" : "5116588C-557E-D02D-289B-DB9C49DECC77", + "isBold" : false, + "kind" : "rectangle", + "order" : 7, + "text" : "" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 570, + 583, + 88, + 24 + ], + "id" : "FFEAD1CC-78D9-0609-0C63-502B65F7A1F5", + "isBold" : true, + "kind" : "text", + "order" : 0, + "text" : "INTERNET" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 402, + 164, + 249, + 153 + ], + "id" : "BFBBEAD3-E46A-61D7-BF82-7BCE8F3A10F7", + "isBold" : false, + "kind" : "text", + "order" : 1, + "text" : "Large Intranet with subnets, firewall & portforwarding to Webserver behind Firewall.\n\nLAN-Devices have full internet connectivity. Each has a configured email client.\n\nWiFi-Devices only have HTTP access to the internal Server but can name resolve and ping external internet servers." + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 209, + 907, + 88, + 24 + ], + "id" : "1C88ADA7-CBEB-56EB-E238-104DF9557EF3", + "isBold" : true, + "kind" : "text", + "order" : 3, + "text" : "Home" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 242, + 115, + 88, + 36 + ], + "id" : "057CB4F1-BF76-DEDE-7706-9EAA7A9019B1", + "isBold" : true, + "kind" : "text", + "order" : 4, + "text" : "Wifi-Devices\nSubnet" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 25, + 378, + 88, + 34 + ], + "id" : "0B1DC5E7-4188-29B7-884E-A5097568AF9E", + "isBold" : true, + "kind" : "text", + "order" : 5, + "text" : "LAN-Devices\nSubnet" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 21, + 429, + 272, + 59 + ], + "id" : "B425A4E4-08FB-A300-83C2-2B6A533FDD07", + "isBold" : false, + "kind" : "text", + "order" : 6, + "text" : "This model is copyright © 2026 Josh Buhl and is freely distributable under the creative commons CC BY-NC-SA 4.0CC BY-NC-SA 4.0 License" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 420, + 920, + 110, + 25 + ], + "id" : "6FC82735-25CB-432D-CBEF-CBDB52A08B18", + "isBold" : true, + "kind" : "text", + "order" : 8, + "text" : "Provider Network" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 458, + 383, + 88, + 24 + ], + "id" : "7B81B0F5-1909-B2E8-1521-42761B95C4DC", + "isBold" : false, + "kind" : "text", + "order" : 9, + "text" : "42.0.0.0" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 298, + 268, + 88, + 24 + ], + "id" : "30840058-3364-9703-F9E3-7EAD93CE5C6E", + "isBold" : false, + "kind" : "text", + "order" : 10, + "text" : "10.0.0.0" + } + ], + "links" : [ + [ + 0, + 0, + 1, + 0 + ], + [ + 1, + 1, + 2, + 0 + ], + [ + 3, + 2, + 5, + 0 + ], + [ + 4, + 1, + 5, + 1 + ], + [ + 4, + 3, + 6, + 0 + ], + [ + 5, + 2, + 6, + 1 + ], + [ + 6, + 2, + 7, + 0 + ], + [ + 7, + 1, + 8, + 0 + ], + [ + 8, + 1, + 12, + 0 + ], + [ + 9, + 0, + 6, + 3 + ], + [ + 10, + 0, + 7, + 2 + ], + [ + 13, + 0, + 1, + 4 + ], + [ + 15, + 0, + 17, + 3 + ], + [ + 16, + 0, + 17, + 4 + ], + [ + 17, + 0, + 1, + 3 + ], + [ + 18, + 1, + 6, + 4 + ], + [ + 4, + 2, + 11, + 0 + ], + [ + 3, + 1, + 4, + 0 + ], + [ + 20, + 0, + 19, + 0 + ], + [ + 20, + 1, + 18, + 0 + ] + ], + "nodes" : [ + { + "device" : { + "defaultGateway" : "10.0.0.1", + "dnsServer" : "10.0.0.1", + "ipAddress" : "10.10.20.11", + "subnetMask" : "255.0.0.0" + }, + "displayName" : "10.10.20.11", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "A8:BD:04:A6:63:AD", + "occupied" : false + } + ], + "position" : [ + 5, + 169 + ] + }, + { + "device" : null, + "displayName" : "Switch", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 233, + 173 + ] + }, + { + "device" : { + "defaultGateway" : "10.0.0.1", + "dnsServer" : "10.0.0.1", + "ipAddress" : "10.10.20.12", + "subnetMask" : "255.0.0.0" + }, + "displayName" : "10.10.20.12", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "3D:67:2A:01:2D:91", + "occupied" : false + } + ], + "position" : [ + 2, + 274 + ] + }, + { + "device" : null, + "displayName" : "Provider 1", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "42.0.0.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "6.0.0.2", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "2.0.0.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "2E:E7:53:65:17:0F", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "1E:27:AE:8E:77:14", + "occupied" : false + }, + { + "label" : "rt3", + "mac" : "4B:A0:59:16:7C:2C", + "occupied" : false + } + ], + "position" : [ + 419, + 434 + ] + }, + { + "device" : null, + "displayName" : "Vermittlungsrechner", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "6.0.0.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "11.0.0.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "130.100.200.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "12.0.0.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "C5:AD:0D:4F:97:06", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "E0:3F:89:38:E3:2C", + "occupied" : false + }, + { + "label" : "rt3", + "mac" : "3C:84:27:63:5A:E3", + "occupied" : false + }, + { + "label" : "rt4", + "mac" : "F5:FB:71:A8:11:59", + "occupied" : false + } + ], + "position" : [ + 548, + 490 + ] + }, + { + "device" : null, + "displayName" : "Vermittlungsrechner", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "2.0.0.2", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "11.0.0.2", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "3.0.0.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "3A:DC:16:7C:AA:78", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "91:D6:EC:3F:56:B0", + "occupied" : false + }, + { + "label" : "rt3", + "mac" : "16:F2:4D:40:AA:56", + "occupied" : false + } + ], + "position" : [ + 294, + 518 + ] + }, + { + "device" : null, + "displayName" : "Vermittlungsrechner", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "12.0.0.2", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "3.0.0.2", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "4.0.0.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "8.0.0.1", + "subnetMask" : "255.0.0.0" + }, + { + "ipAddress" : "15.0.0.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "A2:55:52:6B:6F:27", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "27:17:86:69:32:C9", + "occupied" : false + }, + { + "label" : "rt3", + "mac" : "B3:22:50:EC:11:FB", + "occupied" : false + }, + { + "label" : "rt4", + "mac" : "63:D5:E4:BB:37:E6", + "occupied" : false + }, + { + "label" : "rt5", + "mac" : "15:DA:6A:2F:5F:3A", + "occupied" : false + } + ], + "position" : [ + 427, + 583 + ] + }, + { + "device" : null, + "displayName" : "Vermittlungsrechner", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "4.0.0.2", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "5.0.0.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "120.130.140.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "80:6D:2A:57:59:B2", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "69:EB:EB:6E:F6:82", + "occupied" : false + }, + { + "label" : "rt3", + "mac" : "C9:5D:41:10:67:82", + "occupied" : false + } + ], + "position" : [ + 632, + 643 + ] + }, + { + "device" : null, + "displayName" : "Vermittlungsrechner", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "5.0.0.2", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "140.100.200.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "A0:D8:AE:E8:2A:E1", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "A2:3C:B4:FB:9D:D1", + "occupied" : false + } + ], + "position" : [ + 781, + 574 + ] + }, + { + "device" : { + "defaultGateway" : "8.0.0.1", + "dnsServer" : "", + "ipAddress" : "8.8.8.8", + "subnetMask" : "255.0.0.0" + }, + "displayName" : "DNS (8.8.8.8)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "17:66:19:C9:9E:29", + "occupied" : false + } + ], + "position" : [ + 208, + 606 + ] + }, + { + "device" : { + "defaultGateway" : "120.130.140.1", + "dnsServer" : "8.8.8.8", + "ipAddress" : "120.130.140.80", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "webserver.com (120.130.140.80)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "4B:ED:F2:C7:AF:8C", + "occupied" : false + } + ], + "position" : [ + 675, + 793 + ] + }, + { + "device" : { + "defaultGateway" : "130.100.200.1", + "dnsServer" : "8.8.8.8", + "ipAddress" : "130.100.200.25", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "mail.gmx.com (130.100.200.25)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "47:AF:A1:5F:0E:C7", + "occupied" : false + } + ], + "position" : [ + 693, + 417 + ] + }, + { + "device" : { + "defaultGateway" : "140.100.200.1", + "dnsServer" : "8.8.8.8", + "ipAddress" : "140.100.200.25", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "mail.webmail.com (140.100.200.25)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "62:A4:B8:31:8D:33", + "occupied" : false + } + ], + "position" : [ + 823, + 684 + ] + }, + { + "device" : { + "defaultGateway" : "10.0.0.2", + "dnsServer" : "8.8.8.8", + "ipAddress" : "10.0.0.1", + "subnetMask" : "255.0.0.0" + }, + "displayName" : "myschool.org (10.0.0.1)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "C5:39:AE:55:77:F5", + "occupied" : false + } + ], + "position" : [ + 139, + 268 + ] + }, + { + "device" : { + "defaultGateway" : "192.168.1.1", + "dnsServer" : "8.8.8.8", + "ipAddress" : "192.168.1.11", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "192.168.1.11", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "68:3B:FB:D6:E1:D8", + "occupied" : false + } + ], + "position" : [ + 73, + 840 + ] + }, + { + "device" : { + "defaultGateway" : "10.0.0.1", + "dnsServer" : "10.0.0.1", + "ipAddress" : "10.50.50.14", + "subnetMask" : "255.0.0.0" + }, + "displayName" : "iPad 3", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "D3:51:75:D6:71:EA", + "occupied" : false + } + ], + "position" : [ + 372, + 5 + ] + }, + { + "device" : { + "defaultGateway" : "10.0.0.1", + "dnsServer" : "10.0.0.1", + "ipAddress" : "10.50.50.12", + "subnetMask" : "255.0.0.0" + }, + "displayName" : "iPad 4", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "E2:AC:66:8B:39:9F", + "occupied" : false + } + ], + "position" : [ + 462, + 38 + ] + }, + { + "device" : null, + "displayName" : "Access Point", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 11, + 76 + ] + }, + { + "device" : null, + "displayName" : "Provider 2", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "43.0.0.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "15.0.0.2", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "11:EE:8E:9F:31:18", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "B7:E7:AB:01:FE:F6", + "occupied" : false + } + ], + "position" : [ + 433, + 699 + ] + }, + { + "device" : { + "defaultGateway" : "43.0.0.1", + "dnsServer" : "8.8.8.8", + "ipAddress" : "43.0.0.2", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Provider 2 DHCP- Server", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "8B:54:A9:28:2D:18", + "occupied" : false + } + ], + "position" : [ + 446, + 791 + ] + }, + { + "device" : null, + "displayName" : "Provider 2 Switch", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 333, + 760 + ] + } + ] + }, "version" : "Filius version: 2.9.4 (20.07.2025)", "warnings" : [ "Skipped unsupported FILIUS node type 'Heimrouter' in konfiguration.xml", @@ -179,6 +5421,1337 @@ "nodes" : 20, "residual" : 0, "skipped" : 5, + "state" : { + "documentation" : [ + { + "color" : [ + 1, + 1, + 0.8901960784313725, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 107, + 757, + 245, + 181 + ], + "id" : "9E4AED4B-9543-FADF-14A1-AFADECE154DD", + "isBold" : false, + "kind" : "rectangle", + "order" : 2, + "text" : "" + }, + { + "color" : [ + 0.9882352941176471, + 0.788235294117647, + 0.6392156862745098, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 372, + 697, + 246, + 243 + ], + "id" : "2E532119-5F2B-CD8B-D59F-898FD4B6B5FD", + "isBold" : false, + "kind" : "rectangle", + "order" : 7, + "text" : "" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 570, + 583, + 88, + 24 + ], + "id" : "FFEAD1CC-78D9-0609-0C63-502B65F7A1F5", + "isBold" : true, + "kind" : "text", + "order" : 0, + "text" : "INTERNET" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 399, + 170, + 249, + 153 + ], + "id" : "9BE3CCF3-662E-983C-B714-BC1EBAC4D3DF", + "isBold" : false, + "kind" : "text", + "order" : 1, + "text" : "Intranetz mit Subnetzen, Firewall und Portforwarding an Webserver hinter Firewall.\n\nLAN-Geräte haben vollen Internet-Zugriff. Jedes hat einen konfigurierten eMail-Client.\n\nWLAN-Geräte haben HTTP-Zugriff nur auf den internen Server, können aber externe Server auflösen und anpingen." + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 255, + 897, + 88, + 24 + ], + "id" : "2E17B86B-6E4B-67B2-9909-4F6AA5A7C8EA", + "isBold" : true, + "kind" : "text", + "order" : 3, + "text" : "Zu Hause" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 227, + 117, + 88, + 37 + ], + "id" : "4A619F23-8A7B-7880-249A-AC0AEF439EE8", + "isBold" : true, + "kind" : "text", + "order" : 4, + "text" : "WLAN-Geräte\nSubnetz" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 20, + 376, + 88, + 39 + ], + "id" : "D09742DB-CE32-D0E0-8642-3D28BDE11772", + "isBold" : true, + "kind" : "text", + "order" : 5, + "text" : "LAN-Geräte\nSubnetz" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 21, + 429, + 272, + 59 + ], + "id" : "B425A4E4-08FB-A300-83C2-2B6A533FDD07", + "isBold" : false, + "kind" : "text", + "order" : 6, + "text" : "This model is copyright © 2026 Josh Buhl and is freely distributable under the creative commons CC BY-NC-SA 4.0CC BY-NC-SA 4.0 License" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 440, + 907, + 108, + 24 + ], + "id" : "71271736-E47D-58DF-5975-0727AEAF4905", + "isBold" : true, + "kind" : "text", + "order" : 8, + "text" : "Provider Netzwerk" + } + ], + "links" : [ + [ + 0, + 0, + 1, + 0 + ], + [ + 2, + 2, + 4, + 0 + ], + [ + 3, + 1, + 4, + 1 + ], + [ + 3, + 3, + 5, + 0 + ], + [ + 4, + 2, + 5, + 1 + ], + [ + 5, + 2, + 6, + 0 + ], + [ + 6, + 1, + 7, + 0 + ], + [ + 7, + 1, + 11, + 0 + ], + [ + 8, + 0, + 5, + 3 + ], + [ + 9, + 0, + 6, + 2 + ], + [ + 12, + 0, + 1, + 4 + ], + [ + 14, + 0, + 16, + 3 + ], + [ + 15, + 0, + 16, + 4 + ], + [ + 16, + 0, + 1, + 3 + ], + [ + 17, + 1, + 5, + 4 + ], + [ + 3, + 2, + 10, + 0 + ], + [ + 2, + 1, + 3, + 0 + ], + [ + 18, + 0, + 19, + 0 + ], + [ + 17, + 0, + 19, + 1 + ] + ], + "nodes" : [ + { + "device" : { + "defaultGateway" : "10.0.0.1", + "dnsServer" : "10.0.0.1", + "ipAddress" : "10.10.20.11", + "subnetMask" : "255.0.0.0" + }, + "displayName" : "10.10.20.11", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "A8:BD:04:A6:63:AD", + "occupied" : false + } + ], + "position" : [ + 5, + 165 + ] + }, + { + "device" : null, + "displayName" : "Switch 1", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 233, + 173 + ] + }, + { + "device" : null, + "displayName" : "Provider 1", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "42.0.0.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "6.0.0.2", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "2.0.0.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "2E:E7:53:65:17:0F", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "1E:27:AE:8E:77:14", + "occupied" : false + }, + { + "label" : "rt3", + "mac" : "4B:A0:59:16:7C:2C", + "occupied" : false + } + ], + "position" : [ + 419, + 434 + ] + }, + { + "device" : null, + "displayName" : "Vermittlungsrechner", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "6.0.0.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "11.0.0.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "130.100.200.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "12.0.0.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "C5:AD:0D:4F:97:06", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "E0:3F:89:38:E3:2C", + "occupied" : false + }, + { + "label" : "rt3", + "mac" : "3C:84:27:63:5A:E3", + "occupied" : false + }, + { + "label" : "rt4", + "mac" : "F5:FB:71:A8:11:59", + "occupied" : false + } + ], + "position" : [ + 548, + 490 + ] + }, + { + "device" : null, + "displayName" : "Vermittlungsrechner", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "2.0.0.2", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "11.0.0.2", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "3.0.0.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "3A:DC:16:7C:AA:78", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "91:D6:EC:3F:56:B0", + "occupied" : false + }, + { + "label" : "rt3", + "mac" : "16:F2:4D:40:AA:56", + "occupied" : false + } + ], + "position" : [ + 294, + 518 + ] + }, + { + "device" : null, + "displayName" : "Vermittlungsrechner", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "12.0.0.2", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "3.0.0.2", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "4.0.0.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "8.0.0.1", + "subnetMask" : "255.0.0.0" + }, + { + "ipAddress" : "15.0.0.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "A2:55:52:6B:6F:27", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "27:17:86:69:32:C9", + "occupied" : false + }, + { + "label" : "rt3", + "mac" : "B3:22:50:EC:11:FB", + "occupied" : false + }, + { + "label" : "rt4", + "mac" : "63:D5:E4:BB:37:E6", + "occupied" : false + }, + { + "label" : "rt5", + "mac" : "15:DA:6A:2F:5F:3A", + "occupied" : false + } + ], + "position" : [ + 427, + 583 + ] + }, + { + "device" : null, + "displayName" : "Vermittlungsrechner", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "4.0.0.2", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "5.0.0.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "120.130.140.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "80:6D:2A:57:59:B2", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "69:EB:EB:6E:F6:82", + "occupied" : false + }, + { + "label" : "rt3", + "mac" : "C9:5D:41:10:67:82", + "occupied" : false + } + ], + "position" : [ + 606, + 629 + ] + }, + { + "device" : null, + "displayName" : "Vermittlungsrechner", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "5.0.0.2", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "140.100.200.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "A0:D8:AE:E8:2A:E1", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "A2:3C:B4:FB:9D:D1", + "occupied" : false + } + ], + "position" : [ + 746, + 561 + ] + }, + { + "device" : { + "defaultGateway" : "8.0.0.1", + "dnsServer" : "", + "ipAddress" : "8.8.8.8", + "subnetMask" : "255.0.0.0" + }, + "displayName" : "DNS (8.8.8.8)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "17:66:19:C9:9E:29", + "occupied" : false + } + ], + "position" : [ + 208, + 606 + ] + }, + { + "device" : { + "defaultGateway" : "120.130.140.1", + "dnsServer" : "8.8.8.8", + "ipAddress" : "120.130.140.80", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "webserver.de (120.130.140.80)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "4B:ED:F2:C7:AF:8C", + "occupied" : false + } + ], + "position" : [ + 666, + 777 + ] + }, + { + "device" : { + "defaultGateway" : "130.100.200.1", + "dnsServer" : "8.8.8.8", + "ipAddress" : "130.100.200.25", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "mail.gmx.de (130.100.200.25)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "47:AF:A1:5F:0E:C7", + "occupied" : false + } + ], + "position" : [ + 699, + 417 + ] + }, + { + "device" : { + "defaultGateway" : "140.100.200.1", + "dnsServer" : "8.8.8.8", + "ipAddress" : "140.100.200.25", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "mail.webmail.de (140.100.200.25)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "62:A4:B8:31:8D:33", + "occupied" : false + } + ], + "position" : [ + 799, + 649 + ] + }, + { + "device" : { + "defaultGateway" : "10.0.0.2", + "dnsServer" : "8.8.8.8", + "ipAddress" : "10.0.0.1", + "subnetMask" : "255.0.0.0" + }, + "displayName" : "meine-schule.de (10.0.0.1)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "C5:39:AE:55:77:F5", + "occupied" : false + } + ], + "position" : [ + 130, + 268 + ] + }, + { + "device" : { + "defaultGateway" : "192.168.1.1", + "dnsServer" : "8.8.8.8", + "ipAddress" : "192.168.1.11", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "192.168.1.11", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "68:3B:FB:D6:E1:D8", + "occupied" : false + } + ], + "position" : [ + 124, + 826 + ] + }, + { + "device" : { + "defaultGateway" : "10.0.0.1", + "dnsServer" : "10.0.0.1", + "ipAddress" : "10.50.50.13", + "subnetMask" : "255.0.0.0" + }, + "displayName" : "iPad 3", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "D3:51:75:D6:71:EA", + "occupied" : false + } + ], + "position" : [ + 372, + 5 + ] + }, + { + "device" : { + "defaultGateway" : "10.0.0.1", + "dnsServer" : "10.0.0.1", + "ipAddress" : "10.50.50.12", + "subnetMask" : "255.0.0.0" + }, + "displayName" : "iPad 4", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "E2:AC:66:8B:39:9F", + "occupied" : false + } + ], + "position" : [ + 462, + 38 + ] + }, + { + "device" : null, + "displayName" : "Access Point", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 11, + 76 + ] + }, + { + "device" : null, + "displayName" : "Provider 2", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "43.0.0.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "15.0.0.2", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "11:EE:8E:9F:31:18", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "B7:E7:AB:01:FE:F6", + "occupied" : false + } + ], + "position" : [ + 461, + 710 + ] + }, + { + "device" : { + "defaultGateway" : "43.0.0.1", + "dnsServer" : "8.8.8.8", + "ipAddress" : "43.0.0.2", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Provider 2 DCHP Server", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "55:E4:24:B2:2F:7B", + "occupied" : false + } + ], + "position" : [ + 473, + 782 + ] + }, + { + "device" : null, + "displayName" : "Provider 2 Switch", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 367, + 775 + ] + } + ] + }, "version" : "Filius version: 2.9.4 (20.07.2025)", "warnings" : [ "Skipped FILIUS node with missing bounds coordinates", @@ -210,6 +6783,974 @@ "nodes" : 13, "residual" : 0, "skipped" : 1, + "state" : { + "documentation" : [ + + ], + "links" : [ + [ + 7, + 0, + 0, + 1 + ], + [ + 0, + 2, + 2, + 0 + ], + [ + 2, + 1, + 1, + 0 + ], + [ + 1, + 1, + 6, + 0 + ], + [ + 1, + 2, + 3, + 0 + ], + [ + 3, + 1, + 5, + 0 + ], + [ + 3, + 2, + 8, + 0 + ], + [ + 10, + 0, + 5, + 2 + ], + [ + 4, + 0, + 5, + 1 + ], + [ + 4, + 1, + 11, + 0 + ], + [ + 9, + 0, + 11, + 1 + ], + [ + 12, + 0, + 11, + 2 + ] + ], + "nodes" : [ + { + "device" : null, + "displayName" : "Switch 1", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 164, + 178 + ] + }, + { + "device" : null, + "displayName" : "Switch 2", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 612, + 104 + ] + }, + { + "device" : null, + "displayName" : "Router", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "141.99.1.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "141.99.2.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "C1:60:0A:E1:76:C5", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "5A:54:FE:11:5D:6C", + "occupied" : false + } + ], + "position" : [ + 395, + 47 + ] + }, + { + "device" : null, + "displayName" : "Router", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "141.99.2.2", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "141.99.4.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "141.99.3.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "6E:1E:CD:78:BE:78", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "28:09:56:2D:27:6F", + "occupied" : false + }, + { + "label" : "rt3", + "mac" : "F6:A4:32:18:E5:05", + "occupied" : false + } + ], + "position" : [ + 602, + 263 + ] + }, + { + "device" : null, + "displayName" : "Router", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "141.99.4.2", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "141.99.5.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "63:D3:1F:5D:56:02", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "28:1D:80:BE:38:62", + "occupied" : false + } + ], + "position" : [ + 497, + 493 + ] + }, + { + "device" : null, + "displayName" : "Switch 4", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 641, + 392 + ] + }, + { + "device" : { + "defaultGateway" : "141.99.2.1", + "dnsServer" : "141.99.2.10", + "ipAddress" : "141.99.2.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "DNS-Server 2.10", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "55:69:1F:18:4C:96", + "occupied" : false + } + ], + "position" : [ + 694, + 19 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "141.99.2.10", + "ipAddress" : "141.99.1.11", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Notebook 1.11", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "AE:F4:7A:63:81:B9", + "occupied" : false + } + ], + "position" : [ + 70, + 235 + ] + }, + { + "device" : { + "defaultGateway" : "141.99.3.1", + "dnsServer" : "141.99.2.10", + "ipAddress" : "141.99.3.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Rechner 3.10", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "E3:F7:EF:12:BC:94", + "occupied" : false + } + ], + "position" : [ + 759, + 196 + ] + }, + { + "device" : { + "defaultGateway" : "141.99.5.1", + "dnsServer" : "141.99.2.10", + "ipAddress" : "141.99.5.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Webserver 5.10", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "6D:C7:88:09:72:A8", + "occupied" : false + } + ], + "position" : [ + 169, + 366 + ] + }, + { + "device" : { + "defaultGateway" : "141.99.4.1", + "dnsServer" : "141.99.2.10", + "ipAddress" : "141.99.4.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Notebook 4.10", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "3F:34:B7:E1:52:67", + "occupied" : false + } + ], + "position" : [ + 735, + 387 + ] + }, + { + "device" : null, + "displayName" : "Switch 5", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 302, + 408 + ] + }, + { + "device" : { + "defaultGateway" : "141.99.5.1", + "dnsServer" : "141.99.2.10", + "ipAddress" : "141.99.5.11", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Notebook 5.11", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "58:5D:D7:F0:C5:89", + "occupied" : false + } + ], + "position" : [ + 198, + 489 + ] + } + ] + }, "version" : "Filius version: 2.1.0 (11.10.2022)", "warnings" : [ "Skipped FILIUS node with missing bounds coordinates", @@ -227,6 +7768,421 @@ "nodes" : 7, "residual" : 0, "skipped" : 0, + "state" : { + "documentation" : [ + { + "color" : [ + 0.7490196078431373, + 1, + 0.8588235294117647, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 794, + 8, + 397, + 492 + ], + "id" : "992AA1A5-1B36-1973-872B-D93E758A45EF", + "isBold" : false, + "kind" : "rectangle", + "order" : 2, + "text" : "" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 815, + 20, + 349, + 203 + ], + "id" : "CC9FF5BE-AFEF-99EF-944E-F18BBEA994E8", + "isBold" : false, + "kind" : "text", + "order" : 0, + "text" : "The manipulated DNS-Server points to Eve, the \"man in the middle\", for both mail-servers. \n\nEve has her own Mail-Server and her own DNS-Server that points to the correct mail-servers. She receives Alice's and Bob's e-Mails and forwards them on to the correct servers. \n\nAlice and Bob have no way of knowing that Eve is interecepting all of their email. \n\nWatch the logs on all the email servers simultaneously while sending emails from Alice to Bob and back!" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 816, + 258, + 352, + 239 + ], + "id" : "6B3C018B-8699-4F26-D4D5-11141AEC4EE8", + "isBold" : false, + "kind" : "text", + "order" : 1, + "text" : "Der manipulierte DNS-Server gibt für beide Mail-Server Eves IP-Adresse an.\n\nEve hat ihren eigenen DNS-Server, der die richtigen Server-Adressen hat, und einen eigenen Mail-Server, der Alices und Bobs Mails an die jeweils richtigen Server weiterleitet.\n\nAlice und Bob merken nicht, dass Eve alles auf ihrem Mail-Server mitlesen kann.\n\nVerfolge den Verlauf in den Logs aller email-Server gleichzeitig, während Alice eine Mail an Bob sendet!" + } + ], + "links" : [ + [ + 2, + 0, + 3, + 0 + ], + [ + 0, + 0, + 3, + 2 + ], + [ + 1, + 0, + 3, + 3 + ], + [ + 3, + 5, + 4, + 0 + ], + [ + 3, + 6, + 5, + 0 + ], + [ + 3, + 7, + 6, + 0 + ] + ], + "nodes" : [ + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "141.99.50.230", + "ipAddress" : "141.99.50.183", + "subnetMask" : "255.255.255.128" + }, + "displayName" : "Alice", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "EA:B6:32:93:26:33", + "occupied" : false + } + ], + "position" : [ + 53, + 264 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "127.0.0.1", + "ipAddress" : "141.99.50.184", + "subnetMask" : "255.255.255.128" + }, + "displayName" : "Eve (Man-in-the-middle 141.99.50.184)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "FA:17:C7:84:81:6E", + "occupied" : false + } + ], + "position" : [ + 547, + 169 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "141.99.50.230", + "ipAddress" : "141.99.50.181", + "subnetMask" : "255.255.255.128" + }, + "displayName" : "Bob", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "13:84:F1:E6:16:2A", + "occupied" : false + } + ], + "position" : [ + 116, + 120 + ] + }, + { + "device" : null, + "displayName" : "Internet", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 269, + 237 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "141.99.50.230", + "subnetMask" : "255.255.255.128" + }, + "displayName" : "Manipulierter DNS-Server", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "F2:BF:5A:E0:17:CB", + "occupied" : false + } + ], + "position" : [ + 408, + 49 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "141.99.50.230", + "ipAddress" : "141.99.50.232", + "subnetMask" : "255.255.255.128" + }, + "displayName" : "Mail-Server (filius.de 141.99.50.232)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "16:F4:6C:5F:0C:9C", + "occupied" : false + } + ], + "position" : [ + 519, + 382 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "141.99.50.230", + "ipAddress" : "141.99.50.233", + "subnetMask" : "255.255.255.128" + }, + "displayName" : "Mail-Server (senior.de 141.99.50.233)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "D4:7A:40:9D:1B:91", + "occupied" : false + } + ], + "position" : [ + 278, + 405 + ] + } + ] + }, "version" : "Filius version: 2.5.1 (23.10.2023)", "warnings" : [ @@ -243,6 +8199,117 @@ "nodes" : 4, "residual" : 0, "skipped" : 0, + "state" : { + "documentation" : [ + + ], + "links" : [ + [ + 1, + 0, + 2, + 0 + ], + [ + 3, + 0, + 0, + 0 + ] + ], + "nodes" : [ + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "192.168.0.11", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Rechner 0.11", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 586, + 46 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "192.168.0.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Notebook 0.10", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 42, + 182 + ] + }, + { + "device" : null, + "displayName" : "Modem (Zugreifend)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "remoteLink", + "ports" : [ + { + "label" : "remote0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 237, + 212 + ] + }, + { + "device" : null, + "displayName" : "Modem (Zugangspunkt)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "remoteLink", + "ports" : [ + { + "label" : "remote0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 396, + 79 + ] + } + ] + }, "version" : "Filius version: 1.5.4 (08.12.2013)", "warnings" : [ "Imported Java Modem 'Modem (Zugreifend)' as Remote Link pair 'java-modem-port-12345' (mode=CLIENT [2], ip=localhost, port=12345); host socket transport was replaced by deterministic in-project pairing by normalized port, and cross-host identity is not preserved.", @@ -260,6 +8327,266 @@ "nodes" : 4, "residual" : 0, "skipped" : 0, + "state" : { + "documentation" : [ + + ], + "links" : [ + [ + 3, + 1, + 0, + 0 + ], + [ + 2, + 0, + 3, + 0 + ], + [ + 1, + 0, + 3, + 2 + ] + ], + "nodes" : [ + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "192.168.0.1", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "192.168.0.1", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "25:9B:C0:C4:32:17", + "occupied" : false + } + ], + "position" : [ + 731, + 164 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "192.168.0.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "192.168.0.10", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "54:84:0B:8A:58:0C", + "occupied" : false + } + ], + "position" : [ + 213, + 175 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "192.168.0.20", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "192.168.0.20", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "03:42:BB:88:50:95", + "occupied" : false + } + ], + "position" : [ + 192, + 317 + ] + }, + { + "device" : null, + "displayName" : "Switch \/ WLAN", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 475, + 318 + ] + } + ] + }, "version" : "Filius version: 2.4.1 (07.06.2023)", "warnings" : [ @@ -277,6 +8604,1150 @@ "nodes" : 13, "residual" : 0, "skipped" : 2, + "state" : { + "documentation" : [ + { + "color" : [ + 0.8, + 0.8, + 0.8, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 94, + 34, + 428, + 292 + ], + "id" : "D956A848-C8CA-14FE-63FD-7F6790E845DA", + "isBold" : false, + "kind" : "rectangle", + "order" : 0, + "text" : "" + }, + { + "color" : [ + 0.8, + 0.8, + 0.8, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 95, + 349, + 428, + 296 + ], + "id" : "34991DC1-75B8-FDA6-AFC8-5B38327A685F", + "isBold" : false, + "kind" : "rectangle", + "order" : 2, + "text" : "" + }, + { + "color" : [ + 0.8, + 0.8, + 0.8, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 792, + 52, + 224, + 489 + ], + "id" : "875BFF87-CCC6-276D-CAB6-7736B4E82724", + "isBold" : false, + "kind" : "rectangle", + "order" : 6, + "text" : "" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 18, + "frame" : [ + 316, + 42, + 142, + 26 + ], + "id" : "9DB85847-F5C1-EA48-DB00-CBEA711C985E", + "isBold" : false, + "kind" : "text", + "order" : 1, + "text" : "Pauls Home Network" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 18, + "frame" : [ + 322, + 358, + 169, + 27 + ], + "id" : "8AD8A784-CFC8-8358-B179-3948302DADE2", + "isBold" : false, + "kind" : "text", + "order" : 3, + "text" : "Vincents Home Network" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 388, + 523, + 129, + 73 + ], + "id" : "00639873-7C6A-C860-13B4-5EBD161DDCDA", + "isBold" : false, + "kind" : "text", + "order" : 4, + "text" : "The home router is configured to forward traffic on port 80 to the webserver." + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 113, + 483, + 167, + 108 + ], + "id" : "CE763A08-E0BA-C14C-2058-C49EB7AD242A", + "isBold" : false, + "kind" : "text", + "order" : 5, + "text" : "Traffic to the Webserver is forwarded by the home router. But the Echo Server on this host is only reachable from the local network." + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 828, + 430, + 148, + 50 + ], + "id" : "884E319E-2785-E56B-1744-0FF5B0D5A7ED", + "isBold" : false, + "kind" : "text", + "order" : 7, + "text" : "All services on this host are publicly available." + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 802, + 57, + 187, + 50 + ], + "id" : "D3128BF6-2C02-265C-15E8-D2540E93D7EA", + "isBold" : false, + "kind" : "text", + "order" : 8, + "text" : "Hosts with public IP addresses" + } + ], + "links" : [ + [ + 6, + 0, + 0, + 0 + ], + [ + 7, + 0, + 0, + 1 + ], + [ + 2, + 1, + 1, + 0 + ], + [ + 1, + 1, + 5, + 0 + ], + [ + 1, + 2, + 3, + 0 + ], + [ + 9, + 0, + 10, + 1 + ], + [ + 11, + 0, + 10, + 2 + ], + [ + 3, + 1, + 12, + 0 + ], + [ + 12, + 1, + 4, + 0 + ], + [ + 12, + 2, + 8, + 0 + ] + ], + "nodes" : [ + { + "device" : null, + "displayName" : "Switch", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 300, + 131 + ] + }, + { + "device" : null, + "displayName" : "Switch", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 676, + 161 + ] + }, + { + "device" : null, + "displayName" : "Vermittlungsrechner", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "141.99.1.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "141.99.2.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "C1:60:0A:E1:76:C5", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "5A:54:FE:11:5D:6C", + "occupied" : false + } + ], + "position" : [ + 551, + 90 + ] + }, + { + "device" : null, + "displayName" : "Vermittlungsrechner", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "141.99.2.2", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "141.99.4.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "141.99.3.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "6E:1E:CD:78:BE:78", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "28:09:56:2D:27:6F", + "occupied" : false + }, + { + "label" : "rt3", + "mac" : "F6:A4:32:18:E5:05", + "occupied" : false + } + ], + "position" : [ + 559, + 263 + ] + }, + { + "device" : null, + "displayName" : "Vermittlungsrechner", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "141.99.4.2", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "141.99.5.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "63:D3:1F:5D:56:02", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "28:1D:80:BE:38:62", + "occupied" : false + } + ], + "position" : [ + 562, + 426 + ] + }, + { + "device" : { + "defaultGateway" : "141.99.2.1", + "dnsServer" : "141.99.2.10", + "ipAddress" : "141.99.2.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "DNS-Server", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "55:69:1F:18:4C:96", + "occupied" : false + } + ], + "position" : [ + 837, + 119 + ] + }, + { + "device" : { + "defaultGateway" : "192.168.0.1", + "dnsServer" : "141.99.2.10", + "ipAddress" : "192.168.0.100", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Notebook 1.10", + "hostLabelPolicy" : "ipAddress", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "95:11:22:49:65:CB", + "occupied" : false + } + ], + "position" : [ + 152, + 54 + ] + }, + { + "device" : { + "defaultGateway" : "192.168.0.1", + "dnsServer" : "141.99.2.10", + "ipAddress" : "192.168.0.101", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "192.168.0.101", + "hostLabelPolicy" : "ipAddress", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "AE:F4:7A:63:81:B9", + "occupied" : false + } + ], + "position" : [ + 157, + 202 + ] + }, + { + "device" : { + "defaultGateway" : "141.99.4.1", + "dnsServer" : "141.99.2.10", + "ipAddress" : "141.99.4.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Webserver www.jupiter.de", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "E3:F7:EF:12:BC:94", + "occupied" : false + } + ], + "position" : [ + 804, + 307 + ] + }, + { + "device" : { + "defaultGateway" : "192.168.0.1", + "dnsServer" : "141.99.2.10", + "ipAddress" : "192.168.0.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Webserver - 192.168.0.10", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "6D:C7:88:09:72:A8", + "occupied" : false + } + ], + "position" : [ + 99, + 363 + ] + }, + { + "device" : null, + "displayName" : "Switch", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 313, + 444 + ] + }, + { + "device" : { + "defaultGateway" : "192.168.0.1", + "dnsServer" : "141.99.2.10", + "ipAddress" : "192.168.0.100", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Notebook 5.11", + "hostLabelPolicy" : "ipAddress", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "58:5D:D7:F0:C5:89", + "occupied" : false + } + ], + "position" : [ + 260, + 538 + ] + }, + { + "device" : null, + "displayName" : "Switch", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 694, + 342 + ] + } + ] + }, "version" : "Filius version: 2.8.0 (15.03.2025)", "warnings" : [ "Skipped unsupported FILIUS node type 'Heimrouter' in konfiguration.xml", @@ -298,6 +9769,229 @@ "nodes" : 3, "residual" : 0, "skipped" : 1, + "state" : { + "documentation" : [ + + ], + "links" : [ + [ + 2, + 1, + 1, + 0 + ] + ], + "nodes" : [ + { + "device" : { + "defaultGateway" : "192.168.0.1", + "dnsServer" : "192.168.0.1", + "ipAddress" : "192.168.0.100", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "192.168.0.100", + "hostLabelPolicy" : "ipAddress", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "1E:A0:9E:34:FA:24", + "occupied" : false + } + ], + "position" : [ + 169, + 135 + ] + }, + { + "device" : { + "defaultGateway" : "192.168.0.1", + "dnsServer" : "192.168.0.1", + "ipAddress" : "10.0.0.100", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "10.0.0.100", + "hostLabelPolicy" : "ipAddress", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "23:2E:63:7C:81:B7", + "occupied" : false + } + ], + "position" : [ + 850, + 148 + ] + }, + { + "device" : null, + "displayName" : "Internet", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 633, + 190 + ] + } + ] + }, "version" : "Filius version: 2.5.1 (23.10.2023)", "warnings" : [ "Skipped unsupported FILIUS node type 'Heimrouter' in konfiguration.xml", @@ -316,6 +10010,570 @@ "nodes" : 5, "residual" : 0, "skipped" : 1, + "state" : { + "documentation" : [ + { + "color" : [ + 0.8, + 0.8705882352941177, + 0.6784313725490196, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 37, + 24, + 586, + 390 + ], + "id" : "68A4A2EC-E06C-D154-F952-89E16F9FDA08", + "isBold" : false, + "kind" : "rectangle", + "order" : 0, + "text" : "" + }, + { + "color" : [ + 0.8, + 0.8, + 0.8, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 663, + 25, + 619, + 390 + ], + "id" : "433D6727-8684-005C-E3F5-FBCFEF703B51", + "isBold" : false, + "kind" : "rectangle", + "order" : 1, + "text" : "" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 257, + 33, + 343, + 49 + ], + "id" : "21929F31-EE3C-BF03-F133-9A92EF7A291A", + "isBold" : false, + "kind" : "text", + "order" : 2, + "text" : "Heimnetz mit einem Switch bzw. WLAN Access Point und Heimrouter, die häufig in einem Gerät kombiniert sind." + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 702, + 35, + 244, + 74 + ], + "id" : "9D92BD98-565B-DE06-9A4F-2B7A83BFAE51", + "isBold" : false, + "kind" : "text", + "order" : 3, + "text" : "Vereinfachtes Netz des Dienstanbieters mit nur einem Switch und angeschlossenem DNS- und Webserver." + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 361, + 297, + 252, + 108 + ], + "id" : "2E79BE71-A95C-6015-EF49-536B7412887A", + "isBold" : false, + "kind" : "text", + "order" : 4, + "text" : "Der Heimrouter verfügt über einen LAN- und einen WAN-Anschluss und unterstützt Network Address Translation (NAT). Dammit sind lokale IP-Adressen im öffentlichen Netz nicht sichtbar." + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 18, + "frame" : [ + 47, + 31, + 100, + 50 + ], + "id" : "A7476456-D95C-0EA2-C22D-5886FE8A210D", + "isBold" : true, + "kind" : "text", + "order" : 5, + "text" : "Heimnetz" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 18, + "frame" : [ + 1061, + 31, + 204, + 50 + ], + "id" : "02D81582-1BED-AD72-10FC-4BAF2D427499", + "isBold" : true, + "kind" : "text", + "order" : 6, + "text" : "Öffentliches Netz" + } + ], + "links" : [ + [ + 3, + 1, + 4, + 0 + ], + [ + 1, + 0, + 0, + 0 + ], + [ + 2, + 0, + 0, + 1 + ] + ], + "nodes" : [ + { + "device" : null, + "displayName" : "Switch \/ WLAN", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 373, + 185 + ] + }, + { + "device" : { + "defaultGateway" : "192.168.0.1", + "dnsServer" : "141.99.2.10", + "ipAddress" : "192.168.0.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Notebook 1.10", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "95:11:22:49:65:CB", + "occupied" : false + } + ], + "position" : [ + 62, + 100 + ] + }, + { + "device" : { + "defaultGateway" : "192.168.0.1", + "dnsServer" : "141.99.2.10", + "ipAddress" : "192.168.0.11", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Notebook 1.11", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "AE:F4:7A:63:81:B9", + "occupied" : false + } + ], + "position" : [ + 73, + 235 + ] + }, + { + "device" : null, + "displayName" : "Switch", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 726, + 196 + ] + }, + { + "device" : { + "defaultGateway" : "141.99.2.1", + "dnsServer" : "", + "ipAddress" : "141.99.2.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "141.99.2.10", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "7B:2B:66:48:19:16", + "occupied" : false + } + ], + "position" : [ + 978, + 234 + ] + } + ] + }, "version" : "Filius version: 2.5.1 (23.10.2023)", "warnings" : [ "Skipped unsupported FILIUS node type 'Heimrouter' in konfiguration.xml", @@ -335,6 +10593,789 @@ "nodes" : 9, "residual" : 0, "skipped" : 1, + "state" : { + "documentation" : [ + { + "color" : [ + 0.8, + 0.8705882352941177, + 0.6784313725490196, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 37, + 24, + 586, + 390 + ], + "id" : "68A4A2EC-E06C-D154-F952-89E16F9FDA08", + "isBold" : false, + "kind" : "rectangle", + "order" : 0, + "text" : "" + }, + { + "color" : [ + 0.9882352941176471, + 0.788235294117647, + 0.6392156862745098, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 884, + 25, + 400, + 390 + ], + "id" : "4987F288-BF46-679D-D938-375271D5D878", + "isBold" : false, + "kind" : "rectangle", + "order" : 1, + "text" : "" + }, + { + "color" : [ + 0.8705882352941177, + 0.8313725490196079, + 1, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 635, + 25, + 239, + 391 + ], + "id" : "FC6B9A6D-537E-4BAE-DDE3-876F64D2D567", + "isBold" : false, + "kind" : "rectangle", + "order" : 7, + "text" : "" + }, + { + "color" : [ + 0.8, + 0.8, + 0.8, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + -89, + 467, + 100, + 50 + ], + "id" : "6F279043-9167-17FE-965A-D37FDCA2AC2F", + "isBold" : false, + "kind" : "rectangle", + "order" : 8, + "text" : "" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 257, + 33, + 343, + 49 + ], + "id" : "B6275C37-13FB-714E-A7D8-3290D60C2CA3", + "isBold" : false, + "kind" : "text", + "order" : 2, + "text" : "Heimnetz mit einem WLAN-Access-Point und Heimrouter, die häufig in einem Gerät kombiniert sind." + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 644, + 316, + 224, + 48 + ], + "id" : "A0699608-C593-108C-75E0-2B8535379E20", + "isBold" : false, + "kind" : "text", + "order" : 3, + "text" : "Vereinfachtes Netz des Dienstanbieters mit lokalem DNS- und Webserver für Kunden." + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 361, + 297, + 252, + 108 + ], + "id" : "368060C7-D6FF-5186-8049-2191DBF1CEE0", + "isBold" : false, + "kind" : "text", + "order" : 4, + "text" : "Der Heimrouter verfügt über einen LAN- und einen WAN-Anschluss und unterstützt Network Address Translation (NAT). Damit sind lokale IP-Adressen im öffentlichen Netz nicht sichtbar." + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 18, + "frame" : [ + 47, + 31, + 100, + 50 + ], + "id" : "A7476456-D95C-0EA2-C22D-5886FE8A210D", + "isBold" : true, + "kind" : "text", + "order" : 5, + "text" : "Heimnetz" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 18, + "frame" : [ + 1061, + 31, + 204, + 50 + ], + "id" : "02D81582-1BED-AD72-10FC-4BAF2D427499", + "isBold" : true, + "kind" : "text", + "order" : 6, + "text" : "Öffentliches Netz" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 18, + "frame" : [ + 688, + 36, + 131, + 31 + ], + "id" : "84776CB7-3E78-B6F3-B171-EE93F5C74612", + "isBold" : true, + "kind" : "text", + "order" : 9, + "text" : "Provider Netz" + } + ], + "links" : [ + [ + 3, + 1, + 4, + 0 + ], + [ + 1, + 0, + 0, + 0 + ], + [ + 2, + 0, + 0, + 1 + ], + [ + 5, + 0, + 3, + 2 + ], + [ + 8, + 0, + 7, + 0 + ], + [ + 8, + 1, + 6, + 0 + ], + [ + 8, + 2, + 5, + 1 + ] + ], + "nodes" : [ + { + "device" : null, + "displayName" : "WLAN Access Point", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 358, + 185 + ] + }, + { + "device" : { + "defaultGateway" : "192.168.0.1", + "dnsServer" : "42.0.0.2", + "ipAddress" : "192.168.0.11", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Notebook 1.10", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "95:11:22:49:65:CB", + "occupied" : false + } + ], + "position" : [ + 148, + 100 + ] + }, + { + "device" : { + "defaultGateway" : "192.168.0.1", + "dnsServer" : "42.0.0.2", + "ipAddress" : "192.168.0.12", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Notebook 1.11", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "AE:F4:7A:63:81:B9", + "occupied" : false + } + ], + "position" : [ + 78, + 227 + ] + }, + { + "device" : null, + "displayName" : "Switch", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 651, + 83 + ] + }, + { + "device" : { + "defaultGateway" : "42.0.0.1", + "dnsServer" : "8.8.8.8", + "ipAddress" : "42.0.0.2", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Provider Server www.filius.de (42.0.0.2)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "7B:2B:66:48:19:16", + "occupied" : false + } + ], + "position" : [ + 633, + 178 + ] + }, + { + "device" : null, + "displayName" : "Vermittlungsrechner", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "42.0.0.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "1.0.0.2", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "192.168.0.10", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "49:E7:F2:39:E5:58", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "C1:20:94:DC:20:AC", + "occupied" : false + }, + { + "label" : "rt3", + "mac" : "02:0F:87:E5:B6:52", + "occupied" : false + } + ], + "position" : [ + 740, + 84 + ] + }, + { + "device" : { + "defaultGateway" : "120.130.140.1", + "dnsServer" : "", + "ipAddress" : "120.130.140.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "webserver.de (120.130.140.10)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "41:8E:FC:A1:C1:CD", + "occupied" : false + } + ], + "position" : [ + 1026, + 255 + ] + }, + { + "device" : { + "defaultGateway" : "8.8.8.1", + "dnsServer" : "127.0.0.1", + "ipAddress" : "8.8.8.8", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "DNS (8.8.8.8)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "6E:31:51:DD:9E:45", + "occupied" : false + } + ], + "position" : [ + 1098, + 72 + ] + }, + { + "device" : null, + "displayName" : "Vermittlungsrechner", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "8.8.8.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "120.130.140.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "1.0.0.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "B5:EB:CB:68:70:48", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "D6:6E:0A:7C:2A:E9", + "occupied" : false + }, + { + "label" : "rt3", + "mac" : "7B:48:CA:D9:EC:DD", + "occupied" : false + } + ], + "position" : [ + 934, + 181 + ] + } + ] + }, "version" : "Filius version: 2.9.4 (20.07.2025)", "warnings" : [ "Skipped unsupported FILIUS node type 'Heimrouter' in konfiguration.xml", @@ -354,6 +11395,589 @@ "nodes" : 6, "residual" : 0, "skipped" : 1, + "state" : { + "documentation" : [ + { + "color" : [ + 0.8196078431372549, + 0.9098039215686274, + 1, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 56, + 9, + 459, + 243 + ], + "id" : "F69F2D74-5079-D567-F2AF-E0B881220D08", + "isBold" : false, + "kind" : "rectangle", + "order" : 7, + "text" : "" + }, + { + "color" : [ + 1, + 0.788235294117647, + 0.788235294117647, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 277, + 260, + 602, + 314 + ], + "id" : "71823B34-3ABA-B93A-3648-D3FAF661BF50", + "isBold" : false, + "kind" : "rectangle", + "order" : 9, + "text" : "" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 508, + 390, + 88, + 24 + ], + "id" : "249E4DC0-27AC-5730-1CAE-C26D80EFDD47", + "isBold" : false, + "kind" : "text", + "order" : 0, + "text" : "8.8.8.1" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 587, + 345, + 100, + 24 + ], + "id" : "CC1F9209-08D0-FB25-6FD1-EFC8EC9DF1D0", + "isBold" : false, + "kind" : "text", + "order" : 1, + "text" : "42.0.0.1" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 453, + 124, + 100, + 24 + ], + "id" : "A879996C-2FB8-FB03-E1FC-1081B0CDA559", + "isBold" : false, + "kind" : "text", + "order" : 2, + "text" : "42.0.0.10" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 308, + 123, + 88, + 24 + ], + "id" : "D2307CC7-E20B-633A-8FFC-758967409D95", + "isBold" : false, + "kind" : "text", + "order" : 3, + "text" : "192.168.0.1" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 631, + 391, + 88, + 24 + ], + "id" : "9744939B-7A8C-9932-97C5-F371EF3A5CBD", + "isBold" : false, + "kind" : "text", + "order" : 4, + "text" : "160.10.20.1" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 373, + 519, + 88, + 41 + ], + "id" : "A3B7F141-2D48-F04B-0D7E-47CE066EF574", + "isBold" : false, + "kind" : "text", + "order" : 5, + "text" : "DNS \nNameserver" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 37, + 615, + 275, + 59 + ], + "id" : "FAED2CD4-41B3-4989-AD12-02B920187AB2", + "isBold" : false, + "kind" : "text", + "order" : 6, + "text" : "This model is copyright © 2026 Josh Buhl and is freely distributable under the creative commons CC BY-NC-SA 4.0CC BY-NC-SA 4.0 License" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 18, + "frame" : [ + 281, + 20, + 175, + 54 + ], + "id" : "B3268767-386B-61E8-4580-DAB00C7C83A8", + "isBold" : true, + "kind" : "text", + "order" : 8, + "text" : "Private Local Area Network (LAN)" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 18, + "frame" : [ + 297, + 283, + 215, + 35 + ], + "id" : "572384EB-F318-D75E-A493-830F025FC8E4", + "isBold" : true, + "kind" : "text", + "order" : 10, + "text" : "Public Network (WAN)" + }, + { + "color" : [ + 0, + 0, + 0, + 1 + ], + "fontName" : "Dialog", + "fontSize" : 12, + "frame" : [ + 352, + 179, + 153, + 54 + ], + "id" : "E194B0F6-BB89-5F74-0948-DE2ED0C03BCF", + "isBold" : false, + "kind" : "text", + "order" : 11, + "text" : "[Gateway and Switch are often integrated into one device especially at home.]" + } + ], + "links" : [ + [ + 1, + 1, + 2, + 0 + ], + [ + 1, + 2, + 3, + 0 + ], + [ + 4, + 0, + 5, + 0 + ], + [ + 0, + 0, + 5, + 2 + ] + ], + "nodes" : [ + { + "device" : { + "defaultGateway" : "192.168.0.1", + "dnsServer" : "8.8.8.8", + "ipAddress" : "192.168.0.12", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "192.168.0.12", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "FB:07:94:E4:05:06", + "occupied" : false + } + ], + "position" : [ + 79, + 124 + ] + }, + { + "device" : null, + "displayName" : "Vermittlungsrechner", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "42.0.0.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "160.10.20.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "8.8.8.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "A7:1D:A9:4C:C4:A7", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "D1:3E:5F:E6:BA:F9", + "occupied" : false + }, + { + "label" : "rt3", + "mac" : "03:3C:DF:0A:44:1E", + "occupied" : false + } + ], + "position" : [ + 521, + 364 + ] + }, + { + "device" : { + "defaultGateway" : "160.10.20.1", + "dnsServer" : "", + "ipAddress" : "160.10.20.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "mywebserver.de (160.10.20.10)", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "71:6A:B4:64:00:4E", + "occupied" : false + } + ], + "position" : [ + 656, + 419 + ] + }, + { + "device" : { + "defaultGateway" : "8.8.8.1", + "dnsServer" : "", + "ipAddress" : "8.8.8.8", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "8.8.8.8", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "48:76:39:9B:AC:29", + "occupied" : false + } + ], + "position" : [ + 383, + 422 + ] + }, + { + "device" : { + "defaultGateway" : "192.168.0.1", + "dnsServer" : "8.8.8.8", + "ipAddress" : "192.168.0.11", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "192.168.0.11", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "45:06:FC:3E:2B:59", + "occupied" : false + } + ], + "position" : [ + 168, + 29 + ] + }, + { + "device" : null, + "displayName" : "Wifi Switch", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 255, + 167 + ] + } + ] + }, "version" : "Filius version: 2.9.4 (20.07.2025)", "warnings" : [ "Skipped unsupported FILIUS node type 'Heimrouter' in konfiguration.xml", @@ -372,6 +11996,235 @@ "nodes" : 3, "residual" : 0, "skipped" : 0, + "state" : { + "documentation" : [ + + ], + "links" : [ + [ + 1, + 0, + 2, + 0 + ], + [ + 2, + 1, + 0, + 0 + ] + ], + "nodes" : [ + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "192.168.0.100", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Webserver", + "hostLabelPolicy" : "ipAddress", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 501, + 93 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "", + "ipAddress" : "192.168.0.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Notebook", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 102, + 151 + ] + }, + { + "device" : null, + "displayName" : "Switch", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 329, + 146 + ] + } + ] + }, "version" : "Filius version: 1.5.1 (13.02.2013)", "warnings" : [ @@ -389,6 +12242,468 @@ "nodes" : 6, "residual" : 0, "skipped" : 0, + "state" : { + "documentation" : [ + + ], + "links" : [ + [ + 3, + 0, + 0, + 0 + ], + [ + 4, + 0, + 0, + 1 + ], + [ + 1, + 1, + 2, + 0 + ], + [ + 0, + 2, + 5, + 0 + ], + [ + 5, + 1, + 1, + 0 + ] + ], + "nodes" : [ + { + "device" : null, + "displayName" : "Switch 1", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 164, + 178 + ] + }, + { + "device" : null, + "displayName" : "Switch 2", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 612, + 104 + ] + }, + { + "device" : { + "defaultGateway" : "141.99.2.1", + "dnsServer" : "141.99.2.10", + "ipAddress" : "141.99.2.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "DNS-Server 2.10", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : "55:69:1F:18:4C:96", + "occupied" : false + } + ], + "position" : [ + 694, + 19 + ] + }, + { + "device" : { + "defaultGateway" : "141.99.1.1", + "dnsServer" : "141.99.2.10", + "ipAddress" : "141.99.1.10", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Notebook 1.10", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "95:11:22:49:65:CB", + "occupied" : false + } + ], + "position" : [ + 53, + 100 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "141.99.2.10", + "ipAddress" : "141.99.1.11", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Notebook 1.11", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : "AE:F4:7A:63:81:B9", + "occupied" : false + } + ], + "position" : [ + 70, + 235 + ] + }, + { + "device" : null, + "displayName" : "Vermittlungsrechner", + "hostLabelPolicy" : "manual", + "interfaces" : [ + { + "ipAddress" : "141.99.1.1", + "subnetMask" : "255.255.255.0" + }, + { + "ipAddress" : "141.99.2.1", + "subnetMask" : "255.255.255.0" + } + ], + "kind" : "router", + "ports" : [ + { + "label" : "rt1", + "mac" : "A4:F4:2A:89:9F:E8", + "occupied" : false + }, + { + "label" : "rt2", + "mac" : "6D:B4:5B:F1:70:FC", + "occupied" : false + } + ], + "position" : [ + 373, + 106 + ] + } + ] + }, "version" : "Filius version: 1.3.1.3 (29. Januar 2011)", "warnings" : [ @@ -405,6 +12720,780 @@ "nodes" : 12, "residual" : 0, "skipped" : 0, + "state" : { + "documentation" : [ + + ], + "links" : [ + [ + 0, + 0, + 11, + 0 + ], + [ + 1, + 0, + 11, + 1 + ], + [ + 2, + 0, + 11, + 2 + ], + [ + 3, + 0, + 11, + 3 + ], + [ + 11, + 4, + 5, + 0 + ], + [ + 5, + 1, + 4, + 0 + ], + [ + 5, + 2, + 10, + 0 + ], + [ + 6, + 0, + 10, + 1 + ], + [ + 7, + 0, + 10, + 2 + ], + [ + 8, + 0, + 10, + 3 + ], + [ + 9, + 0, + 10, + 4 + ] + ], + "nodes" : [ + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "192.168.0.100", + "ipAddress" : "192.168.0.11", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Rechner 1", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 32, + 97 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "192.168.0.100", + "ipAddress" : "192.168.0.12", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Rechner 2", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 30, + 226 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "192.168.0.100", + "ipAddress" : "192.168.0.13", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Rechner 3", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 31, + 364 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "192.168.0.100", + "ipAddress" : "192.168.0.14", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Rechner 4", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 36, + 503 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "192.168.0.100", + "ipAddress" : "192.168.0.100", + "subnetMask" : "255.255.255.0" + }, + "displayName" : "Server", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "pc", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 564, + 39 + ] + }, + { + "device" : null, + "displayName" : "Switch 3", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 449, + 180 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "192.168.0.100", + "ipAddress" : "169.254.59.98", + "subnetMask" : "0.0.0.0" + }, + "displayName" : "Notebook 1", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 348, + 512 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "192.168.0.100", + "ipAddress" : "169.254.149.102", + "subnetMask" : "0.0.0.0" + }, + "displayName" : "Notebook 2", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 498, + 513 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "192.168.0.100", + "ipAddress" : "169.254.43.216", + "subnetMask" : "0.0.0.0" + }, + "displayName" : "Notebook 3", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 634, + 510 + ] + }, + { + "device" : { + "defaultGateway" : "", + "dnsServer" : "192.168.0.100", + "ipAddress" : "169.254.19.11", + "subnetMask" : "0.0.0.0" + }, + "displayName" : "Notebook 4", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null + ], + "kind" : "notebook", + "ports" : [ + { + "label" : "eth0", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 768, + 509 + ] + }, + { + "device" : null, + "displayName" : "Switch 2", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 601, + 368 + ] + }, + { + "device" : null, + "displayName" : "Switch 1", + "hostLabelPolicy" : "manual", + "interfaces" : [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "kind" : "networkSwitch", + "ports" : [ + { + "label" : "sw1", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw2", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw3", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw4", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw5", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw6", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw7", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw8", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw9", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw10", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw11", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw12", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw13", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw14", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw15", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw16", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw17", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw18", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw19", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw20", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw21", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw22", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw23", + "mac" : null, + "occupied" : false + }, + { + "label" : "sw24", + "mac" : null, + "occupied" : false + } + ], + "position" : [ + 224, + 300 + ] + } + ] + }, "version" : "Filius version: 1.4.5 (04.11.2012)", "warnings" : [ @@ -419,6 +13508,17 @@ "nodes" : 0, "residual" : 0, "skipped" : 0, + "state" : { + "documentation" : [ + + ], + "links" : [ + + ], + "nodes" : [ + + ] + }, "version" : "Filius version: 1.9.0 (02.05.2020)", "warnings" : [ diff --git a/package-lock.json b/package-lock.json index 430e4da..8ada56e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1679,6 +1679,7 @@ "version": "0.0.0", "license": "GPL-3.0-only", "dependencies": { + "@mdg-filius/core": "0.0.0", "fflate": "^0.8.2", "saxes": "^6.0.0" } diff --git a/packages/core/src/encoding.d.ts b/packages/core/src/encoding.d.ts new file mode 100644 index 0000000..30f9e3b --- /dev/null +++ b/packages/core/src/encoding.d.ts @@ -0,0 +1,7 @@ +// TextEncoder exists in every target (browsers, Node, workers) but belongs to +// the DOM and Node type libraries, which this package does not load on +// purpose. Declared here to the extent the core uses it. + +declare class TextEncoder { + encode(input?: string): Uint8Array; +} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 3232dc4..efac237 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,5 +1,8 @@ // Public surface of the simulation core. export * from './ids.js'; +export * from './model/documentation.js'; +export * from './model/graph.js'; +export * from './model/link.js'; export * from './model/node.js'; export * from './runtime/config.js'; export * from './runtime/engine.js'; diff --git a/packages/core/src/model/documentation.ts b/packages/core/src/model/documentation.ts new file mode 100644 index 0000000..51865eb --- /dev/null +++ b/packages/core/src/model/documentation.ts @@ -0,0 +1,150 @@ +// Ported from filius-ipad (GPLv2/GPLv3): +// ios/FiliusPad/TopologyEditor/Model/TopologyDocumentation.swift +// Java counterpart: filius.gui.netzwerksicht.GUIDocuItem (RECT = 1, TEXT = 2). +// Rectangles and text boxes drawn over the network. + +import { compareIds, type Id } from '../ids.js'; + +export type DocumentationItemKind = 'text' | 'rectangle'; + +/** Components 0…1, as Swift keeps them. */ +export interface DocumentationColor { + readonly red: number; + readonly green: number; + readonly blue: number; + readonly alpha: number; +} + +export interface Rect { + readonly x: number; + readonly y: number; + readonly width: number; + readonly height: number; +} + +export interface DocumentationItem { + readonly id: Id; + kind: DocumentationItemKind; + frame: Rect; + text: string; + color: DocumentationColor; + fontName: string; + fontSize: number; + isBold: boolean; + order: number; +} + +export const DOCUMENTATION_DEFAULT_TEXT_SIZE = { width: 220, height: 96 } as const; +export const DOCUMENTATION_DEFAULT_RECTANGLE_SIZE = { width: 240, height: 140 } as const; +export const DOCUMENTATION_MINIMUM_SIZE = { width: 32, height: 24 } as const; +/** The editor's coordinate range; keeps Java `int` export and rendering safe. */ +export const DOCUMENTATION_WORLD_BOUNDS: Rect = { x: -10_000, y: -10_000, width: 20_000, height: 20_000 }; + +function clampUnit(value: number): number { + if (!Number.isFinite(value)) return 0; + return Math.min(Math.max(value, 0), 1); +} + +export function documentationColor(red: number, green: number, blue: number, alpha = 1): DocumentationColor { + return { red: clampUnit(red), green: clampUnit(green), blue: clampUnit(blue), alpha: clampUnit(alpha) }; +} + +export const DOCUMENTATION_BLACK = documentationColor(0, 0, 0); +export const DOCUMENTATION_PALE_YELLOW = documentationColor(255 / 255, 255 / 255, 227 / 255, 0.82); + +/** CGRect.standardized: a negative width or height moves the origin instead. */ +function standardized(frame: Rect): Rect { + const x = frame.width < 0 ? frame.x + frame.width : frame.x; + const y = frame.height < 0 ? frame.y + frame.height : frame.y; + return { x, y, width: Math.abs(frame.width), height: Math.abs(frame.height) }; +} + +/** At least the minimum size, at most the world, moved inside the world. */ +export function normalizedFrame(frame: Rect): Rect { + const world = DOCUMENTATION_WORLD_BOUNDS; + const fallback = { x: world.x, y: world.y, ...DOCUMENTATION_MINIMUM_SIZE }; + if (![frame.x, frame.y, frame.width, frame.height].every(Number.isFinite)) return fallback; + const rect = standardized(frame); + const width = Math.min(Math.max(rect.width, DOCUMENTATION_MINIMUM_SIZE.width), world.width); + const height = Math.min(Math.max(rect.height, DOCUMENTATION_MINIMUM_SIZE.height), world.height); + const x = Math.min(Math.max(rect.x, world.x), world.x + world.width - width); + const y = Math.min(Math.max(rect.y, world.y), world.y + world.height - height); + return { x, y, width, height }; +} + +/** Positive size, entirely inside the world. */ +export function isSafeFrame(frame: Rect): boolean { + const world = DOCUMENTATION_WORLD_BOUNDS; + if (![frame.x, frame.y, frame.width, frame.height].every(Number.isFinite)) return false; + if (frame.width <= 0 || frame.height <= 0 || frame.width > world.width || frame.height > world.height) return false; + return ( + frame.x >= world.x && + frame.y >= world.y && + frame.x + frame.width <= world.x + world.width && + frame.y + frame.height <= world.y + world.height + ); +} + +export function normalizedFontSize(value: number): number { + if (!Number.isFinite(value)) return 14; + return Math.min(Math.max(value, 8), 72); +} + +/** A documentation item as Swift's initializer normalizes it. */ +export function documentationItem(fields: { + id: Id; + kind: DocumentationItemKind; + frame: Rect; + text?: string; + color: DocumentationColor; + fontName?: string; + fontSize?: number; + isBold?: boolean; + order: number; +}): DocumentationItem { + const fontName = (fields.fontName ?? 'System').trim(); + return { + id: fields.id, + kind: fields.kind, + frame: normalizedFrame(fields.frame), + text: fields.kind === 'text' ? (fields.text ?? '') : '', + color: fields.color, + fontName: fontName === '' ? 'System' : fontName, + fontSize: normalizedFontSize(fields.fontSize ?? 14), + isBold: fields.isBold ?? false, + order: Math.max(0, fields.order), + }; +} + +/** Rectangles below text, then by order, then by id. */ +export function inDeterministicRenderOrder(items: readonly DocumentationItem[]): DocumentationItem[] { + const layer = (item: DocumentationItem): number => (item.kind === 'rectangle' ? 0 : 1); + return [...items].sort( + (lhs, rhs) => layer(lhs) - layer(rhs) || lhs.order - rhs.order || compareIds(lhs.id, rhs.id), + ); +} + +export function nextDocumentationOrder(items: readonly DocumentationItem[]): number { + return Math.max(-1, ...items.map((item) => item.order)) + 1; +} + +const UINT64 = (1n << 64n) - 1n; +const FNV_PRIME = 0x100000001b3n; + +/** + * Swift's `deterministicDocumentationUUID(seed:)`: two 64-bit FNV-1a hashes + * of the seed's UTF-8 bytes (the second with the length mixed in) as the + * UUID's sixteen bytes, upper case like `uuidString`. + */ +export function deterministicDocumentationUuid(seed: string): Id { + const bytes = new TextEncoder().encode(seed); + const hash = (offset: bigint): bigint => { + let value = offset; + for (const byte of bytes) value = ((value ^ BigInt(byte)) * FNV_PRIME) & UINT64; + return value; + }; + const high = hash(0xcbf29ce484222325n); + const low = hash(0x84222325cbf29ce4n) ^ BigInt(bytes.length); + const hex = high.toString(16).padStart(16, '0') + low.toString(16).padStart(16, '0'); + return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`.toUpperCase(); +} diff --git a/packages/core/src/model/graph.ts b/packages/core/src/model/graph.ts new file mode 100644 index 0000000..61385f2 --- /dev/null +++ b/packages/core/src/model/graph.ts @@ -0,0 +1,11 @@ +// Ported from filius-ipad (GPLv2/GPLv3): +// ios/FiliusPad/TopologyEditor/Model/TopologyGraph.swift +// The nodes and the cables between them. Queries follow with the editor. + +import type { TopologyLink } from './link.js'; +import type { TopologyNode } from './node.js'; + +export interface TopologyGraph { + nodes: TopologyNode[]; + links: TopologyLink[]; +} diff --git a/packages/core/src/model/link.ts b/packages/core/src/model/link.ts new file mode 100644 index 0000000..fc3861f --- /dev/null +++ b/packages/core/src/model/link.ts @@ -0,0 +1,13 @@ +// Ported from filius-ipad (GPLv2/GPLv3): +// ios/FiliusPad/TopologyEditor/Model/TopologyLink.swift +// A cable: from a port of one node to a port of another. + +import type { Id } from '../ids.js'; + +export interface TopologyLink { + readonly id: Id; + readonly sourceNodeId: Id; + readonly sourcePortId: Id; + readonly targetNodeId: Id; + readonly targetPortId: Id; +} diff --git a/packages/core/src/model/node.ts b/packages/core/src/model/node.ts index 57024f6..064152f 100644 --- a/packages/core/src/model/node.ts +++ b/packages/core/src/model/node.ts @@ -100,3 +100,48 @@ export function defaultPortLabels(kind: NodeKind): string[] { return []; } } + +export interface Position { + readonly x: number; + readonly y: number; +} + +export interface TopologyNode { + readonly id: Id; + kind: NodeKind; + displayName: string; + hostLabelPolicy: HostLabelPolicy; + position: Position; + ports: PortMetadata[]; +} + +/** + * A node as Swift's `TopologyNode.init` builds it: only a PC or notebook + * shows its IP or MAC address as its label, and a new node gets the ports of + * its kind. + * + * Unlike Swift, a given name is kept as it is — also empty: Java FILIUS + * files leave routers deliberately unnamed (the Internet examples), and Java + * shows them without a label. Only a node without a name gets the default. + */ +export function topologyNode(fields: { + id: Id; + kind: NodeKind; + displayName?: string; + hostLabelPolicy?: HostLabelPolicy; + position: Position; + ports?: PortMetadata[]; + /** Makes the ids of the default ports; the core has no randomness of its own. */ + newId: () => Id; +}): TopologyNode { + return { + id: fields.id, + kind: fields.kind, + displayName: fields.displayName ?? defaultDisplayName(fields.kind), + hostLabelPolicy: isPcClassEndpoint(fields.kind) ? (fields.hostLabelPolicy ?? 'manual') : 'manual', + position: fields.position, + ports: + fields.ports ?? + defaultPortLabels(fields.kind).map((label) => ({ id: fields.newId(), label, isOccupied: false })), + }; +} diff --git a/packages/fls/package.json b/packages/fls/package.json index 0df7db4..6ddf739 100644 --- a/packages/fls/package.json +++ b/packages/fls/package.json @@ -8,6 +8,7 @@ ".": "./src/index.ts" }, "dependencies": { + "@mdg-filius/core": "0.0.0", "fflate": "^0.8.2", "saxes": "^6.0.0" } diff --git a/packages/fls/src/importProject.ts b/packages/fls/src/importProject.ts new file mode 100644 index 0000000..f3300ce --- /dev/null +++ b/packages/fls/src/importProject.ts @@ -0,0 +1,277 @@ +// From Java's view of a .fls file (topology.ts) to the editor model the +// simulation core runs: nodes with kinds and ports, links between port ids, +// the IP configurations, documentation items. +// +// Ported from filius-ipad (GPLv2/GPLv3): +// Persistence/TopologyProjectStore.swift — importFiliusConfigurationXML, +// finalizeCurrentNodeCandidate, importedPorts, registerRuntimeConfigurations, +// resolveCableCandidates, finalizeCurrentDocumentationCandidate. +// Checked against the Swift import (corpus.swift.json, `state`) on every +// corpus file the Swift reader reads completely. +// +// Departures from Swift, where the input is Java's rather than Swift's own: +// - port counts of switches and routers are Java's (see importedPorts); +// - a node's name is Java's, kept as it is — also empty (Swift would trim it +// and put a default in place of an empty one); +// - an address Java's setter rejected (null) becomes Swift's default, as +// Swift does for an empty one; Swift would keep invalid text verbatim. +// Not here yet: switch and wireless settings, routes, firewall, DHCP, remote +// links and everything else under a node's system software. + +import { + canonicalMacAddress, + deterministicDocumentationUuid, + documentationColor, + documentationItem, + inDeterministicRenderOrder, + interfaceKey, + isSafeFrame, + topologyNode, + DOCUMENTATION_BLACK, + DOCUMENTATION_PALE_YELLOW, + type DeviceConfiguration, + type DocumentationItem, + type HostLabelPolicy, + type Id, + type InterfaceConfiguration, + type InterfaceKey, + type NodeKind, + type PortMetadata, + type TopologyGraph, + type TopologyLink, + type TopologyNode, +} from '@mdg-filius/core'; +import type { FlsDocumentationItem, FlsInterface, FlsNode, FlsNodeClass, FlsTopology } from './topology.js'; + +export interface ImportedProject { + versionLine: string | null; + graph: TopologyGraph; + deviceConfigurations: Map; + interfaceConfigurations: Map; + /** In render order: rectangles below text, then by order. */ + documentationItems: DocumentationItem[]; + /** The topology's warnings, then this step's. */ + warnings: string[]; +} + +export const NODE_KIND_OF_CLASS: Readonly> = { + Rechner: 'pc', + Notebook: 'notebook', + Switch: 'networkSwitch', + Vermittlungsrechner: 'router', + Gateway: 'gateway', + Modem: 'remoteLink', +}; + +/** + * The editor model of a topology. `newId` makes node, port and link ids + * (Swift uses random UUIDs; tests pass a counter). Documentation ids are + * derived from the item, as in Swift. + */ +export function importProject(topology: FlsTopology, newId: () => Id): ImportedProject { + const warnings = [...topology.warnings]; + const deviceConfigurations = new Map(); + const interfaceConfigurations = new Map(); + + const nodes = topology.nodes.map((source) => { + const node = importNode(source, newId, warnings); + registerConfigurations(source, node, deviceConfigurations, interfaceConfigurations); + return node; + }); + + const links: TopologyLink[] = []; + const occupied = new Set(); + topology.links.forEach((link, index) => { + const [source, target] = link.ends.map((end) => { + const node = nodes[end.node]; + const port = node?.ports[end.port]; + return node === undefined || port === undefined ? undefined : { node, port }; + }); + const where = `cable ${index + 1}`; + if (source === undefined || target === undefined) { + warnings.push(`${where}: an end is not a port of the imported node, left out`); + return; + } + if (source.node.id === target.node.id) { + warnings.push(`${where}: connects a node to itself, left out`); + return; + } + if (occupied.has(source.port.id) || occupied.has(target.port.id)) { + warnings.push(`${where}: a port already has a cable, left out`); + return; + } + occupied.add(source.port.id); + occupied.add(target.port.id); + links.push({ + id: newId(), + sourceNodeId: source.node.id, + sourcePortId: source.port.id, + targetNodeId: target.node.id, + targetPortId: target.port.id, + }); + }); + + const documentationItems: DocumentationItem[] = []; + for (const item of topology.documentation) { + const imported = importDocumentationItem(item, documentationItems.length, warnings); + if (imported !== undefined) documentationItems.push(imported); + } + + return { + versionLine: topology.versionLine, + graph: { nodes, links }, + deviceConfigurations, + interfaceConfigurations, + documentationItems: inDeterministicRenderOrder(documentationItems), + warnings, + }; +} + +function hostLabelPolicy(node: FlsNode): HostLabelPolicy { + if (node.useIpAsName && node.useMacAsName) return 'ipAndMAC'; + if (node.useIpAsName) return 'ipAddress'; + if (node.useMacAsName) return 'macAddress'; + return 'manual'; +} + +/** + * Swift's importedPorts: the labels of a kind, the MAC addresses of the + * interfaces. Swift guesses a switch's and a router's port count from the + * references it saw (at least 24, at least one); Java's list is known here + * and counts — a file that sets a shorter list has fewer ports in Java too. + * A Gateway keeps two, since Java's own code needs WAN and LAN; a host and a + * modem have exactly one, as in Swift. + */ +function importedPorts(node: FlsNode, kind: NodeKind, newId: () => Id, warnings: string[]): PortMetadata[] { + const port = (label: string, nic?: FlsInterface): PortMetadata => { + const mac = canonicalMacAddress(nic?.mac); + const id = newId(); + return mac === undefined ? { id, label, isOccupied: false } : { id, label, isOccupied: false, importedMacAddress: mac }; + }; + switch (kind) { + case 'pc': + case 'notebook': + if (node.interfaces.length > 1) { + warnings.push(`node '${node.name ?? ''}': only the first of ${node.interfaces.length} interfaces is kept`); + } + return [port('eth0', node.interfaces[0])]; + case 'networkSwitch': + return Array.from({ length: node.portCount }, (_, index) => port(`sw${index + 1}`)); + case 'router': + return Array.from({ length: node.interfaces.length }, (_, index) => + port(`rt${index + 1}`, node.interfaces[index]), + ); + case 'gateway': + return Array.from({ length: Math.max(2, node.interfaces.length) }, (_, index) => + port(index === 0 ? 'wan0' : index === 1 ? 'lan0' : `gw${index}`, node.interfaces[index]), + ); + case 'remoteLink': + return [port('remote0')]; + case 'unsupported': + return []; + } +} + +function importNode(source: FlsNode, newId: () => Id, warnings: string[]): TopologyNode { + const kind = NODE_KIND_OF_CLASS[source.javaClass]; + const ports = importedPorts(source, kind, newId, warnings); + return topologyNode({ + id: newId(), + kind, + ...(source.name === null ? {} : { displayName: source.name }), + hostLabelPolicy: hostLabelPolicy(source), + position: { x: source.x, y: source.y }, + ports, + newId, + }); +} + +/** Swift's normalizedOrDefault; Java's null (a rejected address) counts as empty. */ +function orDefault(value: string | null, fallback: string): string { + const trimmed = value?.trim() ?? ''; + return trimmed === '' ? fallback : trimmed; +} + +/** Swift's registerRuntimeConfigurations. */ +function registerConfigurations( + source: FlsNode, + node: TopologyNode, + deviceConfigurations: Map, + interfaceConfigurations: Map, +): void { + if (node.kind === 'pc' || node.kind === 'notebook') { + const nic = source.interfaces[0]; + deviceConfigurations.set(node.id, { + ipAddress: orDefault(nic?.ip ?? null, '192.168.0.10'), + subnetMask: orDefault(nic?.mask ?? null, '255.255.255.0'), + defaultGateway: nic?.gateway?.trim() ?? '', + dnsServer: nic?.dns?.trim() ?? '', + }); + return; + } + if (node.kind !== 'router' && node.kind !== 'gateway') return; + node.ports.forEach((port, index) => { + const nic = source.interfaces[index]; + const wan = node.kind === 'gateway' && index === 0; + interfaceConfigurations.set(interfaceKey(node.id, port.id), { + ipAddress: orDefault(nic?.ip ?? null, wan ? '42.0.0.10' : '192.168.0.10'), + subnetMask: orDefault(nic?.mask ?? null, wan ? '255.0.0.0' : '255.255.255.0'), + }); + }); + const wan = source.interfaces[0]; + if (node.kind === 'gateway' && wan !== undefined) { + const wanConfiguration = interfaceConfigurations.get(interfaceKey(node.id, node.ports[0]!.id)); + deviceConfigurations.set(node.id, { + ipAddress: wanConfiguration?.ipAddress ?? '', + subnetMask: wanConfiguration?.subnetMask ?? '', + defaultGateway: wan.gateway?.trim() ?? '', + dnsServer: wan.dns?.trim() ?? '', + }); + } +} + +/** + * Swift's finalizeCurrentDocumentationCandidate: RECT = 1, TEXT = 2; a frame + * inside the editor's world; the id from the item's values and its order. + */ +function importDocumentationItem( + item: FlsDocumentationItem, + order: number, + warnings: string[], +): DocumentationItem | undefined { + if (item.width <= 0 || item.height <= 0) { + warnings.push('documentation item without size, left out'); + return undefined; + } + const kind = item.type === 1 ? 'rectangle' : item.type === 2 ? 'text' : undefined; + if (kind === undefined) { + warnings.push(`documentation item of type ${item.type}, left out (known: RECT = 1, TEXT = 2)`); + return undefined; + } + const frame = { x: item.x, y: item.y, width: item.width, height: item.height }; + if (!isSafeFrame(frame)) { + warnings.push('documentation item outside the editor bounds, left out'); + return undefined; + } + const text = item.text ?? ''; + const seed = `java-doc|${order}|${item.type}|${item.x}|${item.y}|${item.width}|${item.height}|${text}`; + let color; + if (item.color === null) { + color = kind === 'text' ? DOCUMENTATION_BLACK : DOCUMENTATION_PALE_YELLOW; + warnings.push(`documentation item ${order + 1} without a color, given the default`); + } else { + const [red, green, blue, alpha] = item.color; + color = documentationColor(red / 255, green / 255, blue / 255, alpha / 255); + } + return documentationItem({ + id: deterministicDocumentationUuid(seed), + kind, + frame, + text, + color, + fontName: item.font?.name ?? 'Dialog', + fontSize: item.font?.size ?? 12, + isBold: ((item.font?.style ?? 0) & 1) === 1, + order, + }); +} diff --git a/packages/fls/src/index.ts b/packages/fls/src/index.ts index 8e53cd7..21e1f68 100644 --- a/packages/fls/src/index.ts +++ b/packages/fls/src/index.ts @@ -1,5 +1,6 @@ // Public surface of the .fls codec. export * from './archive.js'; +export * from './importProject.js'; export * from './javaIp.js'; export * from './javabeans.js'; export * from './topology.js'; diff --git a/packages/fls/test/importProject.test.ts b/packages/fls/test/importProject.test.ts new file mode 100644 index 0000000..9ea675d --- /dev/null +++ b/packages/fls/test/importProject.test.ts @@ -0,0 +1,339 @@ +// The editor model built from a .fls file must be what the Swift import +// builds (corpus.swift.json, `state`, tools/swift-oracle) — on every corpus +// file Swift reads completely. On the others Swift loses devices (plan §13, +// M2); there Java is the reference, checked in topology.test.ts. + +import { readdirSync, readFileSync, statSync } from 'node:fs'; +import { dirname, join, relative } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { describe, expect, it } from 'vitest'; +import { + defaultDisplayName, + interfaceKey, + NetworkRuntimeEngine, + portSnapshot, + topologySnapshot, + type Id, + type NodeKind, +} from '@mdg-filius/core'; +import { + decodeJavaBeans, + importProject, + readFlsArchive, + readTopology, + type FlsNode, + type FlsTopology, + type ImportedProject, +} from '../src/index.js'; + +const corpusRoot = join(dirname(fileURLToPath(import.meta.url)), '../../../corpus'); +interface SwiftSummary { + skipped?: number; + warnings?: string[]; + state?: unknown; +} +const swiftView = JSON.parse(readFileSync(join(corpusRoot, 'corpus.swift.json'), 'utf8')) as Record; + +function flsFiles(directory: string): string[] { + return readdirSync(directory) + .flatMap((name) => { + const path = join(directory, name); + return statSync(path).isDirectory() ? flsFiles(path) : name.endsWith('.fls') ? [path] : []; + }) + .sort(); +} + +/** Ids a test can read: node-1, node-2, … in the order they are made. */ +function counter(): () => Id { + let next = 0; + return () => `00000000-0000-0000-0000-${String(++next).padStart(12, '0')}`; +} + +function importFile(file: string): ImportedProject { + const values = decodeJavaBeans(readFlsArchive(new Uint8Array(readFileSync(file))).configurationXml); + return importProject(readTopology(values), counter()); +} + +/** The shape describeImportedState (tools/swift-oracle) writes: indices instead of random ids. */ +function asSwiftState(project: ImportedProject) { + const { nodes, links } = project.graph; + const nodeIndex = new Map(nodes.map((node, index) => [node.id, index])); + const portIndex = (nodeId: Id, portId: Id) => nodes[nodeIndex.get(nodeId)!]!.ports.findIndex((port) => port.id === portId); + return { + nodes: nodes.map((node) => ({ + kind: node.kind, + displayName: node.displayName, + hostLabelPolicy: node.hostLabelPolicy, + position: [node.position.x, node.position.y], + ports: node.ports.map((port) => ({ label: port.label, mac: port.importedMacAddress ?? null, occupied: port.isOccupied })), + device: project.deviceConfigurations.get(node.id) ?? null, + interfaces: node.ports.map((port) => project.interfaceConfigurations.get(interfaceKey(node.id, port.id)) ?? null), + })), + links: links.map((link) => [ + nodeIndex.get(link.sourceNodeId), + portIndex(link.sourceNodeId, link.sourcePortId), + nodeIndex.get(link.targetNodeId), + portIndex(link.targetNodeId, link.targetPortId), + ]), + documentation: project.documentationItems.map((item) => ({ + id: item.id, + kind: item.kind, + frame: [item.frame.x, item.frame.y, item.frame.width, item.frame.height], + text: item.text, + color: [item.color.red, item.color.green, item.color.blue, item.color.alpha], + fontName: item.fontName, + fontSize: item.fontSize, + isBold: item.isBold, + order: item.order, + })), + }; +} + +/** Java's name for a device the file leaves unnamed (German FILIUS), where Swift uses its own. */ +const JAVA_DEFAULT_NAMES: Partial> = { + networkSwitch: 'Switch / WLAN', + gateway: 'Heimrouter', +}; + +/** + * Swift's state with the one intended difference applied: a node the file + * leaves unnamed has Java's default name, not Swift's ("Switch / WLAN", not + * "Switch"). A node the file names like Swift's default would fail here, not + * pass unnoticed. + */ +function withJavaDefaultNames(state: unknown): unknown { + const { nodes, ...rest } = state as { nodes: { kind: NodeKind; displayName: string }[] }; + return { + ...rest, + nodes: nodes.map((node) => + node.displayName === defaultDisplayName(node.kind) && JAVA_DEFAULT_NAMES[node.kind] !== undefined + ? { ...node, displayName: JAVA_DEFAULT_NAMES[node.kind] } + : node, + ), + }; +} + +/** + * Where the Swift import is wrong and Java (corpus.java.json) is right, per + * file and node: the corrected fields. + */ +const SWIFT_ERRORS: Record> = { + // useIPAsName is ``, the shared result of a + // button's isEnabled() — true. Swift's reader cannot follow it: it shows + // the label text as a manual name instead of the IP address. + 'java-examples/multicast_server.fls': { + 0: { displayName: 'Rechner', hostLabelPolicy: 'ipAddress' }, + 1: { displayName: 'Notebook', hostLabelPolicy: 'ipAddress' }, + 2: { displayName: 'Notebook', hostLabelPolicy: 'ipAddress' }, + }, +}; + +function withSwiftErrorsCorrected(name: string, state: unknown): unknown { + const corrections = SWIFT_ERRORS[name] ?? {}; + const { nodes, ...rest } = state as { nodes: object[] }; + return { ...rest, nodes: nodes.map((node, index) => ({ ...node, ...corrections[index] })) }; +} + +const complete = (summary: SwiftSummary) => + summary.skipped === 0 && !(summary.warnings ?? []).some((warning) => warning.startsWith('Skipped')); + +describe('corpus: the imported model as Swift builds it', () => { + const files = flsFiles(corpusRoot).filter((file) => complete(swiftView[relative(corpusRoot, file)]!)); + + it('has files to compare', () => { + expect(files.length).toBe(13); + }); + + for (const file of files) { + const name = relative(corpusRoot, file); + it(name, () => { + const project = importFile(file); + + expect(asSwiftState(project)).toEqual(withSwiftErrorsCorrected(name, withJavaDefaultNames(swiftView[name]!.state))); + expect(project.warnings).toEqual([]); + }); + } +}); + +describe('corpus: every file imports completely', () => { + const javaView = JSON.parse(readFileSync(join(corpusRoot, 'corpus.java.json'), 'utf8')) as Record< + string, + { nodes: unknown[]; cables: unknown[]; documentation: unknown[] } + >; + + // Also the files where Swift loses devices: as many devices and cables as + // Java has, and nothing left out. + for (const file of flsFiles(corpusRoot)) { + const name = relative(corpusRoot, file); + it(name, () => { + const project = importFile(file); + + expect(project.graph.nodes).toHaveLength(javaView[name]!.nodes.length); + expect(project.graph.links).toHaveLength(javaView[name]!.cables.length); + expect(project.warnings).toEqual([]); + }); + } +}); + +describe('an imported file runs in the simulation core', () => { + it('pings across the router from the notebook with a gateway, not from the one without', () => { + const project = importFile(join(corpusRoot, 'java-examples/zwei_rechnernetze_komplett.fls')); + const byName = (displayName: string) => project.graph.nodes.find((node) => node.displayName === displayName)!.id; + const engine = new NetworkRuntimeEngine(14); + engine.handle({ + type: 'start', + snapshot: topologySnapshot({ + nodes: project.graph.nodes.map((node) => ({ + id: node.id, + kind: node.kind, + ports: node.ports.map((port) => portSnapshot(port.id, port.label, port.importedMacAddress)), + })), + links: project.graph.links, + deviceConfigurations: project.deviceConfigurations, + interfaceConfigurations: project.interfaceConfigurations, + }), + seed: 14, + initialTimeMilliseconds: 0, + }); + + expect(engine.sendIcmpEcho(byName('Notebook 1.10'), '141.99.2.10').type).toBe('delivered'); + expect(engine.sendIcmpEcho(byName('Notebook 1.11'), '141.99.2.10')).toMatchObject({ type: 'icmpError', kind: 'destinationNetworkUnreachable' }); + expect(engine.sendIcmpEcho(byName('Notebook 1.11'), '141.99.1.10').type).toBe('delivered'); + }); +}); + +// ── Rules the corpus does not exercise ───────────────────────────────────── + +function flsNode(javaClass: FlsNode['javaClass'], fields: Partial = {}): FlsNode { + return { + javaClass, + name: javaClass, + x: 0, + y: 0, + useIpAsName: false, + useMacAsName: false, + interfaces: [], + portCount: 0, + source: { kind: 'object', className: javaClass, id: undefined, args: [], staticField: undefined, + factoryMethod: undefined, properties: new Map(), calls: [], presetElements: new Map(), fromGetter: false }, + ...fields, + }; +} + +function topology(fields: Partial): FlsTopology { + return { versionLine: null, nodes: [], links: [], documentation: [], warnings: [], ...fields }; +} + +const nic = (ip: string | null, mask: string | null = '255.255.255.0') => ({ ip, mask, mac: undefined, gateway: '', dns: '' }); + +describe('importProject rules', () => { + it('labels a gateway wan0, lan0, gw2 and gives a rejected address the default', () => { + const project = importProject( + topology({ nodes: [flsNode('Gateway', { interfaces: [nic(null, null), nic('10.0.0.1'), nic('10.1.0.1')] })] }), + counter(), + ); + const gateway = project.graph.nodes[0]!; + + expect(gateway.ports.map((port) => port.label)).toEqual(['wan0', 'lan0', 'gw2']); + expect(gateway.ports.map((port) => project.interfaceConfigurations.get(interfaceKey(gateway.id, port.id)))).toEqual([ + { ipAddress: '42.0.0.10', subnetMask: '255.0.0.0' }, + { ipAddress: '10.0.0.1', subnetMask: '255.255.255.0' }, + { ipAddress: '10.1.0.1', subnetMask: '255.255.255.0' }, + ]); + expect(project.deviceConfigurations.get(gateway.id)).toEqual({ + ipAddress: '42.0.0.10', + subnetMask: '255.0.0.0', + defaultGateway: '', + dnsServer: '', + }); + }); + + it('keeps an empty name and shows the IP address only on hosts', () => { + const project = importProject( + topology({ + nodes: [ + flsNode('Vermittlungsrechner', { name: '', useIpAsName: true }), + flsNode('Notebook', { useIpAsName: true, useMacAsName: true }), + ], + }), + counter(), + ); + + expect(project.graph.nodes.map((node) => [node.displayName, node.hostLabelPolicy])).toEqual([ + ['', 'manual'], + ['Notebook', 'ipAndMAC'], + ]); + }); + + it("takes a switch's and a router's port count from Java, and gives a rejected router address the default", () => { + const project = importProject( + topology({ + nodes: [flsNode('Switch', { portCount: 3 }), flsNode('Vermittlungsrechner', { interfaces: [nic('10.0.0.1'), nic(null)] })], + }), + counter(), + ); + const [networkSwitch, router] = project.graph.nodes; + + expect(networkSwitch!.ports.map((port) => port.label)).toEqual(['sw1', 'sw2', 'sw3']); + expect(router!.ports.map((port) => project.interfaceConfigurations.get(interfaceKey(router!.id, port.id)))).toEqual([ + { ipAddress: '10.0.0.1', subnetMask: '255.255.255.0' }, + { ipAddress: '192.168.0.10', subnetMask: '255.255.255.0' }, + ]); + }); + + it('reads bold from the font style and alpha from the color', () => { + const project = importProject( + topology({ + documentation: [ + { type: 2, text: 'b', x: 0, y: 0, width: 50, height: 30, color: [0, 0, 0, 51], font: { name: 'Dialog', size: 18, style: 1 } }, + ], + }), + counter(), + ); + + expect(project.documentationItems[0]).toMatchObject({ isBold: true, fontSize: 18, color: { alpha: 0.2 } }); + }); + + it('leaves out a cable to itself and one to a port that already has a cable', () => { + const project = importProject( + topology({ + nodes: [flsNode('Switch', { portCount: 24 }), flsNode('Rechner', { interfaces: [nic('10.0.0.1')] })], + links: [ + { ends: [{ node: 0, port: 0 }, { node: 0, port: 1 }], wireless: false }, + { ends: [{ node: 1, port: 0 }, { node: 0, port: 2 }], wireless: false }, + { ends: [{ node: 0, port: 3 }, { node: 1, port: 0 }], wireless: false }, + ], + }), + counter(), + ); + + expect(project.graph.links).toHaveLength(1); + expect(project.warnings).toEqual([ + 'cable 1: connects a node to itself, left out', + 'cable 3: a port already has a cable, left out', + ]); + }); + + it('leaves out documentation items without size or of an unknown type, and colors the one without color', () => { + const item = { text: 'Hallo', x: 10, y: 20, width: 100, height: 30, font: null }; + const project = importProject( + topology({ + documentation: [ + { ...item, type: 2, color: null }, + { ...item, type: 1, width: 0, color: [1, 2, 3, 255] }, + { ...item, type: 3, color: [1, 2, 3, 255] }, + ], + }), + counter(), + ); + + expect(project.documentationItems.map((doc) => [doc.kind, doc.text, doc.color, doc.fontName, doc.fontSize])).toEqual([ + ['text', 'Hallo', { red: 0, green: 0, blue: 0, alpha: 1 }, 'Dialog', 12], + ]); + expect(project.warnings).toEqual([ + 'documentation item 1 without a color, given the default', + 'documentation item without size, left out', + 'documentation item of type 3, left out (known: RECT = 1, TEXT = 2)', + ]); + }); +}); diff --git a/packages/fls/tsconfig.json b/packages/fls/tsconfig.json index 71c53c2..890fbd1 100644 --- a/packages/fls/tsconfig.json +++ b/packages/fls/tsconfig.json @@ -9,5 +9,10 @@ "include": [ "src", "src/*.json" + ], + "references": [ + { + "path": "../core" + } ] } diff --git a/tools/swift-oracle/README.md b/tools/swift-oracle/README.md index 0be2bee..244076a 100644 --- a/tools/swift-oracle/README.md +++ b/tools/swift-oracle/README.md @@ -18,6 +18,15 @@ npm test # vergleicht mit den geschriebenen *.swift.json * Vergleich: `packages/core/test/oracle.test.ts`. Er meldet das **erste** abweichende Spurereignis mit Nummer. +## Korpus + +`--corpus` importiert jede `.fls` unter `corpus/` und schreibt +`corpus/corpus.swift.json`: je Datei die Zählwerte und Warnungen des Imports +und unter `state` Swifts ganzes importiertes Modell ohne die zufälligen UUIDs +(Geräte, Ports und Kabel als Indizes, IP-Konfiguration, Doku-Elemente mit +ihren abgeleiteten IDs). Daran misst `packages/fls/test/importProject.test.ts` +den Umbau — auf den 13 Dateien, die Swift vollständig liest. + ## Wie es gebaut wird `fetch-upstream.sh` holt `filius-ipad` am festen Stand `3b5ded0` und kopiert diff --git a/tools/swift-oracle/Sources/Oracle/main.swift b/tools/swift-oracle/Sources/Oracle/main.swift index c498b3a..31482a0 100644 --- a/tools/swift-oracle/Sources/Oracle/main.swift +++ b/tools/swift-oracle/Sources/Oracle/main.swift @@ -283,6 +283,7 @@ func readCorpus(root: URL) throws -> JSON { "warnings": imported.report.warnings, "residual": imported.opaqueContent.residualCount, "kinds": kinds, + "state": describeImportedState(state), ] as JSON } catch { result[name] = ["error": String(describing: error)] as JSON @@ -291,6 +292,61 @@ func readCorpus(root: URL) throws -> JSON { return result } +/// The imported model without its random UUIDs: nodes, ports and links by +/// index; the IP configurations the runtime starts from; documentation items +/// with their deterministic ids. +func describeImportedState(_ state: TopologyEditorState) -> JSON { + let nodeIndex = Dictionary(uniqueKeysWithValues: state.graph.nodes.enumerated().map { ($1.id, $0) }) + func portIndex(_ nodeID: UUID, _ portID: UUID) -> Int { + state.graph.node(withID: nodeID)?.ports.firstIndex { $0.id == portID } ?? -1 + } + let nodes: [JSON] = state.graph.nodes.map { node in + let device: Any = state.runtimeDeviceConfigurations[node.id].map { configuration -> JSON in + [ + "ipAddress": configuration.ipAddress, + "subnetMask": configuration.subnetMask, + "defaultGateway": configuration.defaultGateway, + "dnsServer": configuration.dnsServer, + ] + } ?? NSNull() + let interfaces: [Any] = node.ports.map { port in + state.runtimeInterfaceConfigurations[TopologyRuntimeInterfaceKey(nodeID: node.id, portID: port.id)] + .map { ["ipAddress": $0.ipAddress, "subnetMask": $0.subnetMask] as JSON } ?? NSNull() + } + return [ + "kind": node.kind.rawValue, + "displayName": node.displayName, + "hostLabelPolicy": node.hostLabelPolicy.rawValue, + "position": [Double(node.position.x), Double(node.position.y)], + "ports": node.ports.map { port -> JSON in + ["label": port.label, "mac": port.importedMACAddress ?? NSNull(), "occupied": port.isOccupied] + }, + "device": device, + "interfaces": interfaces, + ] + } + let links: [[Int]] = state.graph.links.map { link in + [ + nodeIndex[link.sourceNodeID] ?? -1, portIndex(link.sourceNodeID, link.sourcePortID), + nodeIndex[link.targetNodeID] ?? -1, portIndex(link.targetNodeID, link.targetPortID), + ] + } + let documentation: [JSON] = state.documentationItems.map { item in + [ + "id": item.id.uuidString, + "kind": item.kind.rawValue, + "frame": [item.frame.origin.x, item.frame.origin.y, item.frame.width, item.frame.height].map { Double($0) }, + "text": item.text, + "color": [item.color.red, item.color.green, item.color.blue, item.color.alpha], + "fontName": item.fontName, + "fontSize": Double(item.fontSize), + "isBold": item.isBold, + "order": item.order, + ] + } + return ["nodes": nodes, "links": links, "documentation": documentation] +} + // MARK: - Archive path folding struct PathCase: Decodable { let name: String; let first: String; let second: String }