TP28 ap3: Bring-up in zwei Phasen geteilt (Werks-WLAN traegt Phase 1)
tp28-ap3-bringup.rsc + tp28-ap3-lifeline-abbau.rsc ersetzt durch tp28-ap3-phase1-erreichbar.rsc + tp28-ap3-phase2-cap.rsc. Der Schnitt liegt dort, wo der Zugangsweg wechselt: - Phase 1 laeuft ueber das Werks-WLAN MikroTik-FF169F und fasst das WLAN bewusst NICHT an -- wer dort WLAN-Objekte abraeumt, saegt den Ast ab, auf dem die Sitzung sitzt. Sie macht ap3 auf 10.40.99.13/24 (vlan99) erreichbar. - Phase 2 laeuft ueber vlan99, weil dort das Werks-WLAN stirbt. Sie macht aus dem Standalone-Werksgeraet einen reinen CAP und schaltet vlan-filtering ZULETZT scharf. Grund fuer die Teilung, live gemessen ueber crs326-core ether21: am Werks- cAP-ax steht ether1 in der Interface-Liste WAN. Folge -- Discovery aus (kein MNDP/CDP/LLDP, unsichtbar in /ip neighbor), Input-TCP zu (22/80/8291/8728), aber ICMP erlaubt. Das Geraet PINGT also und wird leicht als "erreichbar" fehlgelesen. Die WAN-Listen-Mitgliedschaft faellt deshalb als erste Zeile. Nebenbefund im Kopf festgehalten: ein DHCP-Lease blieb auf `offered` und ARP auf `failed`, weil der Port in der TAGGED-Liste von VLAN99 stand -- pvid=99 regelt nur den Eingang, die Antwort ging getaggt raus, und das versteht ein Werksgeraet nicht. Merkregel: pvid ist Ingress, tagged/untagged ist Egress. Der Lifeline-Abbau braucht keine eigene Datei mehr: ether2 (PoE-out, haengt nichts) wird in Phase 2 aus der Bridge genommen und abgeschaltet, wie ap1/ap2 es mit ihrem PoE-Port halten. Kein Secret in den Dateien: das admin-Passwort steht als Platzhalter __ADMIN_PW__ und wird zur Laufzeit aus ~/.secrets/ap3-factory.env gezogen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,109 +0,0 @@
|
||||
# =====================================================================================
|
||||
# ap3 — Bring-up als reiner CAP unter dem CAPsMAN-Manager crs326-core.
|
||||
# TP28-Nachtrag, 2026-08-30. Geraet: MikroTik cAP ax (cAPGi-5HaxD2HaxD), Werkszustand.
|
||||
#
|
||||
# WEG: Laptop an ap3 ether2 (cAP ax HAT einen zweiten Port), Datei per scp hoch,
|
||||
# dann `/import file=tp28-ap3-bringup.rsc`. ether1 dabei NOCH NICHT am Netz.
|
||||
# Danach ether1 -> crs326-core ether21 (ist seit 2026-08-30 Trunk).
|
||||
#
|
||||
# 🔴 ether2 bleibt in DIESER Datei als LIFELINE im Bridge (untagged VLAN1), damit die
|
||||
# Sitzung das abschliessende `vlan-filtering=yes` ueberlebt. Der Abbau ist eine
|
||||
# EIGENE Datei (tp28-ap3-lifeline-abbau.rsc) und laeuft ERST, wenn ap3 ueber
|
||||
# 10.40.99.13 erreichbar ist. Zielzustand = wie ap2: ether2 kein Bridge-Port.
|
||||
#
|
||||
# ⚠️ NICHT von routeros/.secrets/ap*-prov-base.rsc abgeleitet — die sind als
|
||||
# historisch/nicht-deploybar markiert und tragen veraltete PSKs. Vorlage ist der
|
||||
# LIVE-Stand von ap2 (2026-08-30 gelesen).
|
||||
#
|
||||
# DELTAS ZU ap1/ap2 (hAP ax2): cAP ax hat nur ZWEI Ethernet-Ports (ether1 PoE-in,
|
||||
# ether2 PoE-out) — es gibt kein ether3/4/5. Der GC-Template-AP-Zweig hat die
|
||||
# hartkodiert; dort kommt `ap.extra_ports` dazu (fuer ap3 = leere Liste).
|
||||
# =====================================================================================
|
||||
|
||||
/system identity set name=ap3
|
||||
|
||||
# --- L3/WAN-Reste weg. Ein Werks-cAP bringt DHCP-Client/Server + NAT mit; beides hat
|
||||
# im BF-Netz nichts verloren (der Core ist DHCP- und NAT-Instanz).
|
||||
/ip dhcp-client remove [find]
|
||||
/ip dhcp-server remove [find]
|
||||
/ip dhcp-server network remove [find]
|
||||
/ip pool remove [find]
|
||||
/ip firewall nat remove [find]
|
||||
/ipv6 dhcp-client remove [find]
|
||||
|
||||
# --- Interface-Lists: ether1 ist Uplink, NICHT WAN.
|
||||
:if ([:len [/interface list find where name=LAN]]=0) do={ /interface list add name=LAN }
|
||||
:if ([:len [/interface list find where name=WAN]]=0) do={ /interface list add name=WAN }
|
||||
/interface list member remove [find where interface=ether1]
|
||||
|
||||
# --- Bridge sicherstellen, VLAN-Filter waehrend des Umbaus AUS.
|
||||
:if ([:len [/interface bridge find where name=bridge]]=0) do={ /interface bridge add name=bridge }
|
||||
/interface bridge set [find name=bridge] vlan-filtering=no
|
||||
# ether2 traegt PoE-out. Nichts haengt dran -> aus, wie ap1/ap2 es mit ihrem PoE-Port halten.
|
||||
/interface ethernet set [find name=ether2] poe-out=off
|
||||
|
||||
# --- Werks-WLAN abraeumen. REIHENFOLGE IST PFLICHT: `configuration` referenziert
|
||||
# security/datapath/channel; wer die Referenzierten zuerst loescht, bekommt einen
|
||||
# Fehler und laesst einen Teil-Zustand zurueck (Lehre aus tp28-ap-wifi-reste-abraeumen.rsc).
|
||||
# `[find !dynamic]` waere hier ein SYNTAXFEHLER — diese Objekte haben gar keine
|
||||
# dynamic-Eigenschaft. Richtig ist schlicht `[find]`.
|
||||
/interface wifi capsman set enabled=no
|
||||
/interface wifi remove [find where !(name=wifi1 || name=wifi2)]
|
||||
/interface wifi configuration remove [find]
|
||||
/interface wifi steering remove [find]
|
||||
/interface wifi security remove [find]
|
||||
/interface wifi datapath remove [find]
|
||||
/interface wifi channel remove [find]
|
||||
# Werks-Inline-Overrides auf den Master-Radios loeschen, sonst gewinnen sie gegen den Manager.
|
||||
/interface wifi set [find name=wifi1] !configuration.ssid !security.authentication-types !security.passphrase !security.ft-over-ds
|
||||
/interface wifi set [find name=wifi2] !configuration.ssid !security.authentication-types !security.passphrase !security.ft-over-ds
|
||||
|
||||
# --- Bridge-Ports idempotent. ether2 = Lifeline (faellt spaeter weg).
|
||||
:if ([:len [/interface bridge port find where interface=ether1]]=0) do={ /interface bridge port add bridge=bridge interface=ether1 }
|
||||
:if ([:len [/interface bridge port find where interface=ether2]]=0) do={ /interface bridge port add bridge=bridge interface=ether2 }
|
||||
:if ([:len [/interface bridge port find where interface=wifi1]]=0) do={ /interface bridge port add bridge=bridge comment=defconf interface=wifi1 }
|
||||
:if ([:len [/interface bridge port find where interface=wifi2]]=0) do={ /interface bridge port add bridge=bridge comment=defconf interface=wifi2 }
|
||||
|
||||
# --- Bridge-VLAN-Tabelle. Muster = ap2 live, plus ether2 in VLAN1 (Lifeline).
|
||||
# IOT (30) nur auf wifi2: die Zone hat bands=["2g"] (ConfigContext ap-common).
|
||||
# MGMT (99) liegt auf der Bridge, NICHT auf den Radios — sonst waere Management
|
||||
# over-the-air.
|
||||
/interface bridge vlan remove [find]
|
||||
/interface bridge vlan add bridge=bridge untagged=bridge,ether1,ether2 vlan-ids=1
|
||||
/interface bridge vlan add bridge=bridge tagged=ether1,wifi1,wifi2 vlan-ids=10
|
||||
/interface bridge vlan add bridge=bridge tagged=ether1,wifi1,wifi2 vlan-ids=20
|
||||
/interface bridge vlan add bridge=bridge tagged=ether1,wifi2 vlan-ids=30
|
||||
/interface bridge vlan add bridge=bridge tagged=ether1,wifi1,wifi2 vlan-ids=40
|
||||
/interface bridge vlan add bridge=bridge tagged=ether1,wifi1,wifi2 vlan-ids=50
|
||||
/interface bridge vlan add bridge=bridge tagged=ether1,wifi1,wifi2 vlan-ids=90
|
||||
/interface bridge vlan add bridge=bridge tagged=ether1,bridge vlan-ids=99
|
||||
|
||||
# --- Mgmt-Layer. IP nach TP32-Konvention (.10-.29 = physische Hosts): ap1 .11, ap2 .12, ap3 .13.
|
||||
:if ([:len [/interface vlan find where name=vlan99]]=0) do={ /interface vlan add name=vlan99 interface=bridge vlan-id=99 }
|
||||
/ip address remove [find where interface=vlan99]
|
||||
/ip address add address=10.40.99.13/24 interface=vlan99
|
||||
:if ([:len [/interface list member find where list=LAN and interface=vlan99]]=0) do={ /interface list member add list=LAN interface=vlan99 }
|
||||
:if ([:len [/interface list member find where list=LAN and interface=bridge]]=0) do={ /interface list member add list=LAN comment=defconf interface=bridge }
|
||||
/ip route remove [find where comment="mgmt default via core"]
|
||||
/ip route add dst-address=0.0.0.0/0 gateway=10.40.99.1 comment="mgmt default via core"
|
||||
/ip dns set allow-remote-requests=yes servers=10.40.99.1
|
||||
# Zeitquelle ist der Core (seit 2026-08-18). Ohne das war ap2 einmal 17 h versetzt und
|
||||
# seine Logs fuer jede geraeteuebergreifende Korrelation wertlos.
|
||||
/system ntp client set enabled=yes
|
||||
/system ntp client servers remove [find]
|
||||
/system ntp client servers add address=10.40.99.1
|
||||
|
||||
# --- CAP-Modus. 🔴🔴 `slaves-datapath` IST NICHT OPTIONAL.
|
||||
# Der Manager schickt `datapath.bridge=bridge` zwar mit, der CAP uebernimmt davon
|
||||
# aber NUR die vlan-id — die Bridge-Mitgliedschaft bleibt lokal. Fehlt das Objekt,
|
||||
# assoziieren Clients auf iot/media/untrusted/guest sauber und bekommen NIE DHCP,
|
||||
# waehrend dirtyvader-main (Master-Radios = statische Bridge-Ports) weiterlaeuft.
|
||||
# Genau so lagen IOT+MEDIA am 2026-08-18 rund 14 Stunden. KEINE vlan-id hier —
|
||||
# die liefert der Manager pro VAP.
|
||||
/interface wifi datapath add name=dp-caps-slaves bridge=bridge comment="TP28-fix: bridge fuer CAPsMAN-Slave-VAPs"
|
||||
/interface wifi cap set enabled=yes discovery-interfaces=vlan99 slaves-datapath=dp-caps-slaves
|
||||
|
||||
# --- ZULETZT: Bridge VLAN-scharf schalten. Vorher waere der Rest der Datei nicht angekommen.
|
||||
/interface bridge set [find name=bridge] vlan-filtering=yes
|
||||
|
||||
:log info "tp28-ap3: bring-up fertig, ip=10.40.99.13 cap=yes slaves-datapath=dp-caps-slaves"
|
||||
@@ -1,10 +0,0 @@
|
||||
# ap3 — Lifeline-Abbau. ERST AUSFUEHREN, wenn ap3 ueber 10.40.99.13 (via ether1 am
|
||||
# core ether21) erreichbar ist und `remote-cap print` am Core `ap3 state=Ok` zeigt.
|
||||
# Vorher gefahren = Aussperrung.
|
||||
#
|
||||
# Zielzustand danach = wie ap2: ether2 ist KEIN Bridge-Port. Damit bleibt VLAN1 leer
|
||||
# (TP19 ist geschlossen) und ap3s Bridge-Port-Liste ist genau ether1+wifi1+wifi2
|
||||
# -> `ap.extra_ports = []` im Nautobot-ConfigContext.
|
||||
/interface bridge vlan set [find where vlan-ids=1] untagged=bridge,ether1
|
||||
/interface bridge port remove [find where interface=ether2]
|
||||
:log info ("tp28-ap3: lifeline ab, bridge-ports=" . [:tostr [:len [/interface bridge port find]]])
|
||||
63
routeros/tp28-ap3-phase1-erreichbar.rsc
Normal file
63
routeros/tp28-ap3-phase1-erreichbar.rsc
Normal file
@@ -0,0 +1,63 @@
|
||||
# =====================================================================================
|
||||
# ap3 (cAP ax) — PHASE 1: erreichbar machen. TP28-Nachtrag, 2026-08-30.
|
||||
#
|
||||
# LAEUFT UEBER DAS WERKS-WLAN `MikroTik-FF169F` und fasst das WLAN bewusst NICHT an.
|
||||
# Wer hier WLAN-Objekte abraeumt, saegt den Ast ab, auf dem die Sitzung sitzt.
|
||||
#
|
||||
# WARUM UEBERHAUPT: am Werks-cAP-ax steht `ether1` in der Interface-Liste `WAN`.
|
||||
# Folge, alles live gemessen am 2026-08-30 ueber `crs326-core ether21`:
|
||||
# - Discovery aus -> kein MNDP/CDP/LLDP, das Geraet ist in `/ip neighbor` unsichtbar
|
||||
# - Input-TCP weg -> 22/80/8291/8728 alle zu, obwohl ICMP durchgeht
|
||||
# - ICMP erlaubt -> es PINGT, was leicht als "erreichbar" fehlgelesen wird
|
||||
# Genau deshalb ist die WAN-Listen-Mitgliedschaft die erste Zeile, die faellt.
|
||||
#
|
||||
# NEBENBEFUND, der eine halbe Stunde gekostet hat: ein DHCP-Lease blieb ewig auf
|
||||
# `offered` und ARP auf `failed`, weil `pvid=99` nur den EINGANG regelt -- der Port
|
||||
# stand in der TAGGED-Liste von VLAN99, die Antwort ging also getaggt raus und ein
|
||||
# Werksgeraet versteht das nicht. Merkregel: pvid ist Ingress, tagged/untagged ist Egress.
|
||||
#
|
||||
# AUFRUF (Passwort NIE als Argument -- weder `sshpass -p` noch in der ssh-Kommandozeile):
|
||||
# set -a; . ~/.secrets/ap3-factory.env; set +a
|
||||
# scp <generierte-datei> admin@192.168.88.1:
|
||||
# sshpass -e ssh admin@192.168.88.1 "/import file=<name>.rsc"
|
||||
#
|
||||
# `__ADMIN_PW__` ist ein PLATZHALTER. Die echte Datei wird zur Laufzeit ins Scratchpad
|
||||
# generiert, hochgeladen und beidseitig geloescht -- der Wert steht nie in diesem Repo.
|
||||
# =====================================================================================
|
||||
|
||||
/system identity set name=ap3
|
||||
|
||||
# --- (1) ether1 raus aus WAN. Das ist der eigentliche Fix. ---
|
||||
:if ([:len [/interface list find where name=LAN]]=0) do={ /interface list add name=LAN }
|
||||
/interface list member remove [find where interface=ether1]
|
||||
|
||||
# --- (2) Werks-DHCP-Client weg. Er kaempft sonst weiter um eine Adresse, die er nicht
|
||||
# braucht -- ap3 bekommt eine statische nach TP32 (.10-.29 = physische Hosts).
|
||||
# ⚠️ Der DHCP-SERVER bleibt: er versorgt genau die WLAN-Sitzung, ueber die das hier
|
||||
# laeuft. Er faellt erst in Phase 2.
|
||||
/ip dhcp-client remove [find]
|
||||
|
||||
# --- (3) ether1 in die Bridge (im Werkszustand ist er WAN-Port, kein Bridge-Port) ---
|
||||
:if ([:len [/interface bridge find where name=bridge]]=0) do={ /interface bridge add name=bridge }
|
||||
:if ([:len [/interface bridge port find where interface=ether1]]=0) do={ /interface bridge port add bridge=bridge interface=ether1 }
|
||||
|
||||
# --- (4) Mgmt auf vlan99.
|
||||
# `vlan-filtering` bleibt bewusst NO: ein /interface vlan auf der Bridge entkapselt
|
||||
# getaggte Frames auch ohne Filter. Das reicht fuer die Erreichbarkeit und vermeidet,
|
||||
# dass hier schon eine halbfertige VLAN-Tabelle scharf geschaltet wird.
|
||||
:if ([:len [/interface vlan find where name=vlan99]]=0) do={ /interface vlan add name=vlan99 interface=bridge vlan-id=99 }
|
||||
/ip address remove [find where interface=vlan99]
|
||||
/ip address add address=10.40.99.13/24 interface=vlan99
|
||||
:if ([:len [/interface list member find where list=LAN and interface=vlan99]]=0) do={ /interface list member add list=LAN interface=vlan99 }
|
||||
/ip route remove [find where comment="mgmt default via core"]
|
||||
/ip route add dst-address=0.0.0.0/0 gateway=10.40.99.1 comment="mgmt default via core"
|
||||
/ip dns set servers=10.40.99.1
|
||||
# Zeitquelle ist der Core (seit 2026-08-18). Ohne das war ap2 einmal 17 h versetzt.
|
||||
/system ntp client set enabled=yes
|
||||
/system ntp client servers remove [find]
|
||||
/system ntp client servers add address=10.40.99.1
|
||||
|
||||
# --- (5) Flotten-Passwort, damit MikroMCP ap3 nach dem Neustart sofort erreicht ---
|
||||
/user set [find name=admin] password="__ADMIN_PW__"
|
||||
|
||||
:log info "tp28-ap3 phase1: 10.40.99.13/24 auf vlan99, ether1 aus WAN, WLAN unberuehrt"
|
||||
71
routeros/tp28-ap3-phase2-cap.rsc
Normal file
71
routeros/tp28-ap3-phase2-cap.rsc
Normal file
@@ -0,0 +1,71 @@
|
||||
# =====================================================================================
|
||||
# ap3 (cAP ax) — PHASE 2: aus dem Standalone-Werksgeraet einen reinen CAP machen.
|
||||
# TP28-Nachtrag, 2026-08-30.
|
||||
#
|
||||
# LAEUFT UEBER vlan99 (10.40.99.13), NICHT ueber das Werks-WLAN -- denn hier stirbt das
|
||||
# Werks-WLAN. Erst ausfuehren, wenn `ping 10.40.99.13` vom Core sauber durchgeht.
|
||||
# =====================================================================================
|
||||
|
||||
# --- (1) Werks-WLAN und Standalone-Reste abraeumen.
|
||||
# 🔴 REIHENFOLGE IST PFLICHT: `configuration` referenziert security/datapath/channel.
|
||||
# Wer die Referenzierten zuerst loescht, bekommt einen Fehler und laesst einen
|
||||
# Teil-Zustand zurueck.
|
||||
# 🔴 `[find !dynamic]` waere hier ein SYNTAXFEHLER -- diese Objekte haben gar keine
|
||||
# `dynamic`-Eigenschaft, die gibt es nur auf /interface wifi selbst. Ein frueherer
|
||||
# Versuch lief deshalb komplett in die on-error-Zweige, aenderte NICHTS und meldete
|
||||
# trotzdem Erfolg (Lehre aus tp28-ap-wifi-reste-abraeumen.rsc, 2026-08-18).
|
||||
/interface wifi capsman set enabled=no
|
||||
/interface wifi remove [find where !(name=wifi1 || name=wifi2)]
|
||||
/interface wifi configuration remove [find]
|
||||
/interface wifi steering remove [find]
|
||||
/interface wifi security remove [find]
|
||||
/interface wifi datapath remove [find]
|
||||
/interface wifi channel remove [find]
|
||||
# Werks-Inline-Overrides auf den Master-Radios loeschen, sonst gewinnen sie gegen den Manager.
|
||||
/interface wifi set [find name=wifi1] !configuration.ssid !security.authentication-types !security.passphrase !security.ft-over-ds
|
||||
/interface wifi set [find name=wifi2] !configuration.ssid !security.authentication-types !security.passphrase !security.ft-over-ds
|
||||
|
||||
# --- (2) L3-Reste des Werks-Routers weg (jetzt gefahrlos: die WLAN-Sitzung ist ohnehin tot) ---
|
||||
/ip dhcp-server remove [find]
|
||||
/ip dhcp-server network remove [find]
|
||||
/ip pool remove [find]
|
||||
/ip firewall nat remove [find]
|
||||
/ipv6 dhcp-client remove [find]
|
||||
/ip address remove [find where interface=bridge]
|
||||
|
||||
# --- (3) Bridge-Ports. cAP ax hat nur ZWEI Ethernet-Ports; ether2 traegt PoE-out und
|
||||
# haengt nichts -> aus, wie ap1/ap2 es mit ihrem PoE-Port halten. ether2 wird
|
||||
# KEIN Bridge-Port (Zielzustand identisch zu ap2) -> ap.extra_ports = [].
|
||||
/interface ethernet set [find name=ether2] poe-out=off
|
||||
/interface bridge port remove [find where interface=ether2]
|
||||
:if ([:len [/interface bridge port find where interface=wifi1]]=0) do={ /interface bridge port add bridge=bridge comment=defconf interface=wifi1 }
|
||||
:if ([:len [/interface bridge port find where interface=wifi2]]=0) do={ /interface bridge port add bridge=bridge comment=defconf interface=wifi2 }
|
||||
|
||||
# --- (4) Bridge-VLAN-Tabelle, Muster = ap2 live (2026-08-30 gelesen).
|
||||
# IOT (30) nur auf wifi2: die Zone hat bands=["2g"] (ConfigContext ap-common).
|
||||
# MGMT (99) liegt auf der Bridge, NICHT auf den Radios -- sonst waere Management
|
||||
# over-the-air.
|
||||
/interface bridge vlan remove [find where !dynamic]
|
||||
/interface bridge vlan add bridge=bridge untagged=bridge,ether1 vlan-ids=1
|
||||
/interface bridge vlan add bridge=bridge tagged=ether1,wifi1,wifi2 vlan-ids=10
|
||||
/interface bridge vlan add bridge=bridge tagged=ether1,wifi1,wifi2 vlan-ids=20
|
||||
/interface bridge vlan add bridge=bridge tagged=ether1,wifi2 vlan-ids=30
|
||||
/interface bridge vlan add bridge=bridge tagged=ether1,wifi1,wifi2 vlan-ids=40
|
||||
/interface bridge vlan add bridge=bridge tagged=ether1,wifi1,wifi2 vlan-ids=50
|
||||
/interface bridge vlan add bridge=bridge tagged=ether1,wifi1,wifi2 vlan-ids=90
|
||||
/interface bridge vlan add bridge=bridge tagged=ether1,bridge vlan-ids=99
|
||||
|
||||
# --- (5) CAP-Modus.
|
||||
# 🔴🔴 `slaves-datapath` IST NICHT OPTIONAL. Der Manager schickt `datapath.bridge=bridge`
|
||||
# zwar mit, der CAP uebernimmt davon aber NUR die vlan-id -- die Bridge-Mitgliedschaft
|
||||
# bleibt lokal. Fehlt das Objekt, assoziieren Clients auf iot/media/untrusted/guest
|
||||
# sauber und bekommen NIE DHCP, waehrend dirtyvader-main (Master-Radios = statische
|
||||
# Bridge-Ports) weiterlaeuft. Genau so lagen IOT+MEDIA am 2026-08-18 rund 14 Stunden.
|
||||
# Das Objekt traegt bewusst KEINE vlan-id: die liefert der Manager pro VAP.
|
||||
/interface wifi datapath add name=dp-caps-slaves bridge=bridge comment="TP28-fix: bridge fuer CAPsMAN-Slave-VAPs"
|
||||
/interface wifi cap set enabled=yes discovery-interfaces=vlan99 slaves-datapath=dp-caps-slaves
|
||||
|
||||
# --- (6) ZULETZT scharf schalten. Vorher waere der Rest der Datei nicht angekommen. ---
|
||||
/interface bridge set [find name=bridge] vlan-filtering=yes
|
||||
|
||||
:log info "tp28-ap3 phase2: CAP aktiv, Manager-Suche auf vlan99, vlan-filtering=yes"
|
||||
Reference in New Issue
Block a user