- addGroupModal, addCredentialModal, addOptionModal (DHCP), addSwitchModal,
deviceModal (Gerät anlegen), userModal (Benutzer anlegen) — bisher
unterschiedliche/keine explizite Breite, jetzt einheitlich 1000px für
ein konsistentes Erscheinungsbild. Bearbeiten-/Zuweisen-Modals bleiben
bei ihrer bisherigen (kleineren) Breite, da dort keine so breite
Rechtetabelle wie bei Neue Gruppe eingebettet ist.
- Live verifiziert: Modal-Breite tatsächlich 1000px (vorher lieferte ein
vergessener Flask-Neustart fälschlich 900px trotz bereits geänderter
Vorlage — Erinnerung: Template-Änderungen brauchen ohne
TEMPLATES_AUTO_RELOAD einen Neustart, anders als CSS/JS).
- Gruppen-Rechtetabelle bei 1440px (typische Breite dieser App) identisch
zum Neue-Gruppe-Modal nebeneinander, ohne Umbruch.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Neue Helfer _list_network_interfaces() (echte Interfaces aus
/sys/class/net) und _detect_interface_network() (IPv4/Prefix per
"ip addr show", Gateway per "ip route show default") — Subnet/
Netzmaske/Router werden dadurch bei jeder Anzeige/Generierung live vom
System gelesen statt manuell gepflegt zu werden.
- dhcp_subnet/dhcp_netmask als manuelle Settings entfernt; Interface ist
jetzt ein Dropdown mit den tatsächlich vorhandenen Interfaces statt
Freitext, serverseitig zusätzlich gegen die echte Liste validiert.
- _dhcp_reservation_candidates()/_render_kea_config() nehmen jetzt das
erkannte Netz (ipaddress.IPv4Network) bzw. net_info entgegen statt
Subnet/Netzmaske aus der Konfiguration zu lesen; Router kommt vom
erkannten Gateway (Fallback: erster DNS-Eintrag, wie zuvor).
- UI zeigt das erkannte Netz (IP/Prefix, Subnet, Gateway) read-only an;
Schreiben/Vorschau werden blockiert bzw. liefern eine leere
Reservierungsliste, wenn die Erkennung fehlschlägt, statt eine mit
Sicherheit falsche Konfiguration zu erzeugen.
- Live getestet: Erkennung liefert korrekt das tatsächliche WSL-NAT-Netz
(172.25.64.0/20) samt Gateway; generierte Config besteht kea-dhcp4 -t;
ein Testgerät mit IP im erkannten Netz erscheint korrekt als
Reservierung, Geräte außerhalb werden weiterhin sauber übersprungen.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Backend-Wechsel von isc-dhcp-server (seit 2022 EOL) auf Kea DHCP
(kea-dhcp4-server) — aktiv weiterentwickelt, bildet "globaler Wert, pro
Client überschreibbar" nativ über Kea-Reservation-Option-Data ab.
- Neue Tabellen dhcp_option_defs/dhcp_option_values: eigene/herstellerspezifische
Options mit Code/Name/Typ/Beschreibung, Wert global sowie optional pro
Client (device_mac="" für global, siehe Kommentar zur SQLite-NULL-
UNIQUE-Falle). UI dafür: Optionen-Tabelle + "Neue Option"-Modal +
Pro-Client-Overrides-Modal je Reservierung.
- Kea-JSON-Generator (_render_kea_config): option-def für jede eigene
Option, globale Werte im Top-Level option-data, Client-Overrides im
option-data der jeweiligen Reservierung.
- Reservierungen werden jetzt zusätzlich auf Zugehörigkeit zum
konfigurierten Subnet gefiltert (_dhcp_reservation_candidates) — beim
Live-Test gegen echtes Kea gefunden: Kea lehnt Reservierungen außerhalb
ihres Subnets als Konfigurationsfehler ab, das muss also schon bei der
Generierung berücksichtigt werden statt erst beim Laden zu crashen.
- Neue, einzeln bestätigte Aktionen: "kea-dhcp4-server installieren"
(apt-get), "Aktivieren & (neu) starten" sowie "Stoppen"
(systemctl) — bewusst getrennt von "Konfiguration speichern"/"In
Datei schreiben".
- Live gegen eine echte, frisch installierte Kea-3.0.3-Instanz verifiziert:
Installation erfolgreich, generierte Config besteht "kea-dhcp4 -t",
Dienst übernimmt sie beim Neustart fehlerfrei (DHCP4_CONFIG_COMPLETE),
globaler Options-Wert und Client-Override erscheinen korrekt getrennt.
Danach wieder gestoppt; Paket bleibt installiert.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Neue Unterseite unter Einstellungen (eigenes Rechtepaar
settings_dhcp.view/settings_dhcp.edit, in PERMISSIONS/NAV_ITEMS/
_nav_key_visible integriert, Kill-Switch über settings_group.view
greift wie bei den anderen Einstellungen-Unterpunkten).
- Rein lesende Installations-/Status-Erkennung (shutil.which("dhcpd"),
systemctl is-active isc-dhcp-server) — die App installiert/startet nie
selbst einen DHCP-Dienst, sondern zeigt bei fehlender Installation den
passenden manuellen Befehl an.
- Konfigurierbare Netzwerkparameter (Interface/Subnet/Netzmaske/Range/
DNS/Domain/Lease-Zeiten/Ausgabepfad), gespeichert als dhcp_*-Schlüssel
in der bestehenden settings-Tabelle.
- Reservierungen werden aus aktiven Geräten mit gültiger MAC+IP generiert
(Hostname aus Gerätename abgeleitet, Kollisionen automatisch
durchnummeriert, Geräte ohne MAC/IP werden übersprungen).
- "In Datei schreiben" (nur mit settings_dhcp.edit) schreibt eine
separate Include-Datei statt der aktiven dhcpd.conf; kein automatischer
Dienst-Reload/-Restart durch die App.
- Live getestet: Status-Erkennung, Config speichern, Reservierungs-
Generierung inkl. Namenskollisionen, Datei-Schreiben in sicheren
Testpfad, View-only-Gating (Formular ausgeblendet, POST blockiert),
Kill-Switch über settings_group.view.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>