Files
RouterOS/RouterOSAssistant/Features/Wizard/Steps/Setup/VlanStepView.swift
T
KayandClaude Sonnet 5 9f2ad2c9e9 M4: VLAN-Schritt (separates virtuelles Netz)
Neuer optionaler Schritt im Einrichten-Wizard, standardmäßig
übersprungen (Toggle): legt ein VLAN-Interface auf einem gewählten
Basis-Anschluss an, mit eigenem IP-Bereich und eigenem DHCP-Server —
z.B. für Gäste/IoT. Bewusst ohne Port-Zuweisung (Access/Trunk): das
bräuchte RouterOS Bridge-VLAN-Filtering mit "set"-Operationen auf
bestehende Einträge, die unser bisheriges reines "add"-Befehlsmodell
(identisch für REST+SSH) nicht abdeckt. Wer ein VLAN auf einem
bestimmten Switch-Port braucht, muss den Trunk weiterhin manuell
einrichten. Entscheidung mit Nutzer abgestimmt.

DHCP-Befehlsbau (Adresse+Pool+Server+Netzwerk) aus dem LAN-Schritt in
DhcpServerCommandBuilder extrahiert, da jetzt zweimal identisch
gebraucht (LAN direkt, VLAN pro Eintrag).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HReLXMbmPvtQ23p1iWiJNW
2026-09-11 22:13:31 +02:00

60 lines
2.4 KiB
Swift

import SwiftUI
struct VlanStepView: View {
@ObservedObject var viewModel: SetupViewModel
let availableInterfaces: [NetworkInterface]
var body: some View {
Form {
Section {
Toggle(
"Zusätzliches Netzwerk einrichten (VLAN, optional)",
isOn: Binding(
get: { viewModel.vlanSectionEnabled },
set: { viewModel.setVlanSectionEnabled($0) }
)
)
Text("Ein VLAN ist ein zusätzliches, komplett getrenntes Netzwerk mit eigenem Adressbereich — z.B. für Gäste oder smarte Geräte. Wenn du unsicher bist, ob du das brauchst, überspring diesen Schritt einfach.")
.font(.caption)
.foregroundStyle(.secondary)
}
if viewModel.vlanSectionEnabled {
ForEach($viewModel.vlans) { $vlan in
Section("Netzwerk \"\(vlan.name)\"") {
TextField("Name", text: $vlan.name)
Stepper("VLAN-ID: \(vlan.vlanID)", value: $vlan.vlanID, in: 2...4094)
Picker("Basis-Anschluss", selection: $vlan.parentInterface) {
ForEach(availableInterfaces) { interface in
Text(interface.name).tag(interface.name)
}
}
TextField("Router-Adresse (z.B. 192.168.20.1/24)", text: $vlan.routerAddress)
TextField("Netzwerk (z.B. 192.168.20.0/24)", text: $vlan.networkAddress)
TextField("Automatische Adressvergabe von", text: $vlan.poolRangeStart)
TextField("bis", text: $vlan.poolRangeEnd)
Button("Netzwerk entfernen", role: .destructive) {
viewModel.removeVlan(vlan.id)
}
}
}
Button("Weiteres Netzwerk hinzufügen") {
viewModel.addVlan()
}
}
Section {
HStack {
Button("Zurück") { viewModel.goBack() }
Spacer()
Button("Weiter") { viewModel.goNext() }
}
}
}
.formStyle(.grouped)
.navigationTitle("Zusätzliche Netzwerke (VLAN)")
}
}