- WAN-Schritt: fehlenden "Zurück"-Button ergänzt (beide Modi) - "Abbrechen"/"Jetzt sichern" prominent gemacht (wie "Neu scannen") - LAN-/VLAN-Schritt: Adressfelder starten leer, nur Format-Beispiel im Feld sichtbar statt vorbelegter Werte. VlanStepView bekam dafür eine Validierungssperre auf "Weiter" (fehlte bisher, war ok solange Defaults immer gültig waren). Zwei Tests entsprechend angepasst. - SSH-Host-Key-Trust aus M24 hatte sich entgegen der Live-Bestätigung nie tatsächlich persistiert (defaults read zeigte leeren Schlüssel, Ursache ungeklärt) — betraf BackupServices dedizierte SSH-Verbindung beim ersten Experte-Tab-Schreibversuch pro Sitzung. Erneut über den bestehenden Trust-Dialog bestätigt, diesmal per defaults read verifiziert statt nur der UI-Bestätigung vertraut. Alles live bestätigt. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
38 lines
1.7 KiB
Swift
38 lines
1.7 KiB
Swift
import Foundation
|
|
|
|
struct LanDhcpConfig: Identifiable, Equatable {
|
|
var id = UUID()
|
|
var interfaceName: String = "bridge"
|
|
/// Empty on purpose (Nutzerwunsch: "die auszufüllenden Felder leer lassen, nur Beispiele
|
|
/// zeigen ... so sieht man das Schema dahinter") — each TextField's label (e.g.
|
|
/// "Router-Adresse (z.B. 192.168.88.1/24)") doubles as its placeholder while empty, so a
|
|
/// pre-filled value would hide the format example instead of showing it. `interfaceName`
|
|
/// above and `leaseTimeHours` below stay as real defaults — a Picker selection and a
|
|
/// Stepper, neither has a "type an example" UI to hide.
|
|
var networkAddress: String = ""
|
|
var routerAddress: String = ""
|
|
var poolRangeStart: String = ""
|
|
var poolRangeEnd: String = ""
|
|
var leaseTimeHours: Int = 24
|
|
var dnsServers: String = ""
|
|
/// Blocks forward traffic to/from every other configured LAN/VLAN network — see
|
|
/// `FirewallConfig.NetworkSegment`. Internet access (WAN NAT) is unaffected.
|
|
var isolated: Bool = false
|
|
|
|
/// RouterOS commands for this LAN/DHCP setup. Standard, long-stable RouterOS CLI syntax —
|
|
/// not yet verified against a live device; the Review-step shows every command before
|
|
/// it runs so this can be caught before anything is applied.
|
|
func buildCommands() -> [RouterOSCommand] {
|
|
DhcpServerCommandBuilder.buildCommands(
|
|
interfaceName: interfaceName,
|
|
routerAddress: routerAddress,
|
|
networkAddress: networkAddress,
|
|
poolRangeStart: poolRangeStart,
|
|
poolRangeEnd: poolRangeEnd,
|
|
leaseTimeHours: leaseTimeHours,
|
|
dnsServers: dnsServers,
|
|
context: "auf \(interfaceName)"
|
|
)
|
|
}
|
|
}
|