feat(editor): F4.5d the firewall in the device sheet

Measured first: SheetRun drives FILIUS' firewall dialog down to its table
editor (Swing's own end of an edit). Java's table writes a cell into the
rule before it checks it, so that the firewall holds "abc", a mask of
255.0.255.0 or port 0 while the table shows the old value, and reads a
port that is no number as all ports. Here nothing the check refuses
reaches the rule.

- doc: the three switches, the default action, rules (new as Java's,
  cells by Java's checks: masks of ones then zeros, the directly connected
  marker as a source only, an empty port for all ports; protocol, action,
  moved up or down, removed)
- editor: the firewall as a page of the router's and home router's sheet,
  with Java's explanations; the general tab named so (Java: "network
  interfaces")

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-03 12:27:10 +00:00
co-authored by Claude Opus 5.5
parent c8edb87210
commit 4e062bb347
15 changed files with 1399 additions and 12 deletions
+26
View File
@@ -1185,3 +1185,29 @@ Gemessen (03.10.2026):
* Portweiterleitung: Der Dialog speichert jede Zeile roh, auch Port „0“,
„abc“, „05353“; die Firmware leitet nur gültige weiter
(`validateData`: `musterProtocol`, `musterPort`, `musterIpAdresse`).
### Firewall (F4.5d)
`SheetRun` bedient auch `JFirewallDialog` eines Vermittlungsrechners
(`firewall`): eine neue Regel, Zellen der Regeltabelle über Swings eigenes
Bearbeitungsende (`stopCellEditing` → `editingStopped` → `closeEditor`),
Verschieben und Löschen mit den Nummern, die Javas Knöpfe übergeben.
Gemessen (03.10.2026):
* Neue Firewall: aus, Standardaktion verwerfen, ICMP nicht filtern, nur
SYN verwerfen an. Neue Regel: alle Felder leer, TCP, alle Ports (−1),
verwerfen.
* `closeEditor` schreibt die Zelle in das Regelobjekt der Firewall, bevor
`validateExistingAttributes` prüft; besteht die Regel nicht, wird nur die
Tabelle nicht aufgefrischt. Die Firewall hält dann „abc“ als Quelle,
„255.0.255.0“ oder „0.0.0.0“ als Maske, „999.999.999.999“ als Ziel, Port 0
oder 65536.
* Masken: `isValidSubnetmask` (Einsen, dann Nullen, mindestens eine Eins).
Quelle und Ziel: `musterIpAdresse` ohne `ipCheck` („.0.0.1“ und
„010.0.0.0“ bleiben, wie getippt); die Marke „999.999.999.999“ gilt nur als
Quelle. Leerzeichen gelten als leer.
* Port: `Integer.valueOf`, was keine Zahl ist („abc“, „“), wird zu „alle
Ports“; „080“ wird 80.
* rauf/runter: Die erste Regel geht nicht höher, die letzte nicht tiefer
(`moveUp`/`moveDown` antworten `false`).