forked from kay/RouterOS
Neuer "Einrichten"-Tab führt durch Internet-Anschluss (DHCP/statisch/ PPPoE) und Heimnetzwerk+DHCP-Server, zeigt vor dem Anwenden eine Klartext-Übersicht (optional mit den exakten RouterOS-Befehlen) und erstellt automatisch eine Sicherung, bevor Änderungen geschrieben werden. Änderungen laufen über beide Transporte: CLI-Zeile für SSH, JSON-POST für REST — beide aus einem gemeinsamen RouterOSCommand gebaut. RouterOS-CLI-Syntax ist Standard und langjährig stabil, aber nicht gegen ein echtes Gerät verifiziert; deshalb die Detailanzeige im Übersichtsschritt vor dem Anwenden. ConnectionService ist jetzt der einzige App-weite Zustand (ersetzt SessionStore) und wird explizit an alle drei Tabs durchgereicht. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HReLXMbmPvtQ23p1iWiJNW
61 lines
2.5 KiB
Swift
61 lines
2.5 KiB
Swift
import Foundation
|
||
|
||
struct LanDhcpConfig: Equatable {
|
||
var interfaceName: String = "bridge"
|
||
var networkAddress: String = "192.168.88.0/24"
|
||
var routerAddress: String = "192.168.88.1/24"
|
||
var poolRangeStart: String = "192.168.88.10"
|
||
var poolRangeEnd: String = "192.168.88.254"
|
||
var leaseTimeHours: Int = 24
|
||
var dnsServers: String = "192.168.88.1"
|
||
|
||
private var routerIP: String {
|
||
routerAddress.components(separatedBy: "/").first ?? routerAddress
|
||
}
|
||
|
||
/// 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] {
|
||
let poolName = "dhcp_pool_\(interfaceName)"
|
||
let serverName = "dhcp_\(interfaceName)"
|
||
|
||
return [
|
||
RouterOSCommand(
|
||
cliPath: "/ip address add",
|
||
restPath: "ip/address",
|
||
arguments: ["address": routerAddress, "interface": interfaceName],
|
||
summary: "IP-Adresse \(routerAddress) auf \(interfaceName) setzen"
|
||
),
|
||
RouterOSCommand(
|
||
cliPath: "/ip pool add",
|
||
restPath: "ip/pool",
|
||
arguments: ["name": poolName, "ranges": "\(poolRangeStart)-\(poolRangeEnd)"],
|
||
summary: "Adressbereich \(poolRangeStart)–\(poolRangeEnd) für Geräte im Netzwerk anlegen"
|
||
),
|
||
RouterOSCommand(
|
||
cliPath: "/ip dhcp-server add",
|
||
restPath: "ip/dhcp-server",
|
||
arguments: [
|
||
"name": serverName,
|
||
"interface": interfaceName,
|
||
"address-pool": poolName,
|
||
"lease-time": "\(leaseTimeHours)h",
|
||
"disabled": "no"
|
||
],
|
||
summary: "DHCP-Server auf \(interfaceName) aktivieren (vergibt automatisch IP-Adressen)"
|
||
),
|
||
RouterOSCommand(
|
||
cliPath: "/ip dhcp-server network add",
|
||
restPath: "ip/dhcp-server/network",
|
||
arguments: [
|
||
"address": networkAddress,
|
||
"gateway": routerIP,
|
||
"dns-server": dnsServers
|
||
],
|
||
summary: "DHCP-Netzwerk \(networkAddress) mit Gateway \(routerIP) und DNS \(dnsServers) konfigurieren"
|
||
)
|
||
]
|
||
}
|
||
}
|