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
+610 -1
View File
@@ -1209,7 +1209,7 @@
}
],
"flows": {
"useMacAsNameThenOff": "26:0A:1B:EE:FE:4B",
"useMacAsNameThenOff": "5E:C4:F7:30:10:4A",
"useIpAsNameThenOff": "PC-A",
"dhcpClientStopsServer": true,
"dhcpClient": true,
@@ -1674,6 +1674,615 @@
false
]
},
"firewall": {
"newRule": {
"srcIP": "",
"srcMask": "",
"destIP": "",
"destMask": "",
"port": -1,
"protocol": 6,
"action": 0
},
"newRuleShown": [
"1",
"",
"",
"",
"",
"TCP",
"",
"verwerfen"
],
"newFirewall": [
false,
0,
false,
true
],
"cells": [
{
"column": 1,
"input": "10.0.0.0",
"rule": {
"srcIP": "10.0.0.0",
"srcMask": "",
"destIP": "",
"destMask": "",
"port": -1,
"protocol": 6,
"action": 0
},
"valid": true,
"shown": [
"10.0.0.0",
"",
"",
"",
"TCP",
"",
"verwerfen"
]
},
{
"column": 1,
"input": "abc",
"rule": {
"srcIP": "abc",
"srcMask": "",
"destIP": "",
"destMask": "",
"port": -1,
"protocol": 6,
"action": 0
},
"valid": false,
"shown": [
"",
"",
"",
"",
"TCP",
"",
"verwerfen"
]
},
{
"column": 1,
"input": ".0.0.1",
"rule": {
"srcIP": ".0.0.1",
"srcMask": "",
"destIP": "",
"destMask": "",
"port": -1,
"protocol": 6,
"action": 0
},
"valid": true,
"shown": [
".0.0.1",
"",
"",
"",
"TCP",
"",
"verwerfen"
]
},
{
"column": 1,
"input": "999.999.999.999",
"rule": {
"srcIP": "999.999.999.999",
"srcMask": "",
"destIP": "",
"destMask": "",
"port": -1,
"protocol": 6,
"action": 0
},
"valid": true,
"shown": [
"999.999.999.999",
"",
"",
"",
"TCP",
"",
"verwerfen"
]
},
{
"column": 1,
"input": "010.0.0.0",
"rule": {
"srcIP": "010.0.0.0",
"srcMask": "",
"destIP": "",
"destMask": "",
"port": -1,
"protocol": 6,
"action": 0
},
"valid": true,
"shown": [
"010.0.0.0",
"",
"",
"",
"TCP",
"",
"verwerfen"
]
},
{
"column": 1,
"input": " ",
"rule": {
"srcIP": " ",
"srcMask": "",
"destIP": "",
"destMask": "",
"port": -1,
"protocol": 6,
"action": 0
},
"valid": true,
"shown": [
" ",
"",
"",
"",
"TCP",
"",
"verwerfen"
]
},
{
"column": 2,
"input": "255.255.0.0",
"rule": {
"srcIP": "",
"srcMask": "255.255.0.0",
"destIP": "",
"destMask": "",
"port": -1,
"protocol": 6,
"action": 0
},
"valid": true,
"shown": [
"",
"255.255.0.0",
"",
"",
"TCP",
"",
"verwerfen"
]
},
{
"column": 2,
"input": "255.0.255.0",
"rule": {
"srcIP": "",
"srcMask": "255.0.255.0",
"destIP": "",
"destMask": "",
"port": -1,
"protocol": 6,
"action": 0
},
"valid": false,
"shown": [
"",
"",
"",
"",
"TCP",
"",
"verwerfen"
]
},
{
"column": 2,
"input": "0.0.0.0",
"rule": {
"srcIP": "",
"srcMask": "0.0.0.0",
"destIP": "",
"destMask": "",
"port": -1,
"protocol": 6,
"action": 0
},
"valid": false,
"shown": [
"",
"",
"",
"",
"TCP",
"",
"verwerfen"
]
},
{
"column": 2,
"input": "255.255.255.255",
"rule": {
"srcIP": "",
"srcMask": "255.255.255.255",
"destIP": "",
"destMask": "",
"port": -1,
"protocol": 6,
"action": 0
},
"valid": true,
"shown": [
"",
"255.255.255.255",
"",
"",
"TCP",
"",
"verwerfen"
]
},
{
"column": 2,
"input": "0255.255.0.0",
"rule": {
"srcIP": "",
"srcMask": "0255.255.0.0",
"destIP": "",
"destMask": "",
"port": -1,
"protocol": 6,
"action": 0
},
"valid": true,
"shown": [
"",
"0255.255.0.0",
"",
"",
"TCP",
"",
"verwerfen"
]
},
{
"column": 3,
"input": "192.168.0.1",
"rule": {
"srcIP": "",
"srcMask": "",
"destIP": "192.168.0.1",
"destMask": "",
"port": -1,
"protocol": 6,
"action": 0
},
"valid": true,
"shown": [
"",
"",
"192.168.0.1",
"",
"TCP",
"",
"verwerfen"
]
},
{
"column": 3,
"input": "999.999.999.999",
"rule": {
"srcIP": "",
"srcMask": "",
"destIP": "999.999.999.999",
"destMask": "",
"port": -1,
"protocol": 6,
"action": 0
},
"valid": false,
"shown": [
"",
"",
"",
"",
"TCP",
"",
"verwerfen"
]
},
{
"column": 4,
"input": "255.255.255.0",
"rule": {
"srcIP": "",
"srcMask": "",
"destIP": "",
"destMask": "255.255.255.0",
"port": -1,
"protocol": 6,
"action": 0
},
"valid": true,
"shown": [
"",
"",
"",
"255.255.255.0",
"TCP",
"",
"verwerfen"
]
},
{
"column": 6,
"input": "80",
"rule": {
"srcIP": "",
"srcMask": "",
"destIP": "",
"destMask": "",
"port": 80,
"protocol": 6,
"action": 0
},
"valid": true,
"shown": [
"",
"",
"",
"",
"TCP",
"80",
"verwerfen"
]
},
{
"column": 6,
"input": "abc",
"rule": {
"srcIP": "",
"srcMask": "",
"destIP": "",
"destMask": "",
"port": -1,
"protocol": 6,
"action": 0
},
"valid": true,
"shown": [
"",
"",
"",
"",
"TCP",
"",
"verwerfen"
]
},
{
"column": 6,
"input": "0",
"rule": {
"srcIP": "",
"srcMask": "",
"destIP": "",
"destMask": "",
"port": 0,
"protocol": 6,
"action": 0
},
"valid": false,
"shown": [
"",
"",
"",
"",
"TCP",
"",
"verwerfen"
]
},
{
"column": 6,
"input": "080",
"rule": {
"srcIP": "",
"srcMask": "",
"destIP": "",
"destMask": "",
"port": 80,
"protocol": 6,
"action": 0
},
"valid": true,
"shown": [
"",
"",
"",
"",
"TCP",
"80",
"verwerfen"
]
},
{
"column": 6,
"input": "",
"rule": {
"srcIP": "",
"srcMask": "",
"destIP": "",
"destMask": "",
"port": -1,
"protocol": 6,
"action": 0
},
"valid": true,
"shown": [
"",
"",
"",
"",
"TCP",
"",
"verwerfen"
]
},
{
"column": 6,
"input": "65536",
"rule": {
"srcIP": "",
"srcMask": "",
"destIP": "",
"destMask": "",
"port": 65536,
"protocol": 6,
"action": 0
},
"valid": false,
"shown": [
"",
"",
"",
"",
"TCP",
"",
"verwerfen"
]
},
{
"column": 5,
"input": "UDP",
"rule": {
"srcIP": "",
"srcMask": "",
"destIP": "",
"destMask": "",
"port": -1,
"protocol": 17,
"action": 0
},
"valid": true,
"shown": [
"",
"",
"",
"",
"UDP",
"",
"verwerfen"
]
},
{
"column": 5,
"input": "*",
"rule": {
"srcIP": "",
"srcMask": "",
"destIP": "",
"destMask": "",
"port": -1,
"protocol": -1,
"action": 0
},
"valid": true,
"shown": [
"",
"",
"",
"",
"*",
"",
"verwerfen"
]
},
{
"column": 7,
"input": "#0",
"rule": {
"srcIP": "",
"srcMask": "",
"destIP": "",
"destMask": "",
"port": -1,
"protocol": 6,
"action": 1
},
"valid": true,
"shown": [
"",
"",
"",
"",
"TCP",
"",
"akzeptieren"
]
}
],
"moves": [
[
"up",
1,
false,
[
"1.1.1.1",
"2.2.2.2",
"3.3.3.3"
]
],
[
"up",
3,
true,
[
"1.1.1.1",
"3.3.3.3",
"2.2.2.2"
]
],
[
"down",
3,
false,
[
"1.1.1.1",
"3.3.3.3",
"2.2.2.2"
]
],
[
"down",
1,
true,
[
"3.3.3.3",
"1.1.1.1",
"2.2.2.2"
]
],
[
"delete",
2,
null,
[
"3.3.3.3",
"2.2.2.2"
]
]
]
},
"edits": {
"invalidCell": {
"manual": [