ich würde gerne ein Setup von bestehenden Outdoor FF Routern (UniFi AC-Mesh @gluon 2018.2.x) auf gluon 2020.1.x updaten und sicherstellen, dass diese nach dem Update den Outdoor Mode nutzen.
Soweit ich es verstanden habe, muss nach einem Update der Outdoor Mode noch aktiviert werden, was ich wie folgt getan habe:
uci set gluon.wireless.outdoor='1'
uci commit
gluon-reconfigure
reboot
Nachdem reboot wird von den Freifunk-Knoten das Wifi allerdings weiterhin auf Kanal 44 ausgesendet, trotz aktiviertem outdoor mode. Ist das korrekt? Meine Erwartung wäre gewesen, dass nach dem Neustart ein Wifi Channel zwischen 100 und 140 genutzt wird. Wie aktiviert man den Outdoor Mode und wann werden die outdoor Channels genutzt? Muss der Wechsel erst durch ein DFS Event getriggert werden?
das „preserve_channels“ kannte ich bislang nur als Feature für Sysupgrades, dass die lokalen Settings nicht überschrieben werden beim jeweils folgenden Update.
Wenn sich das ausschließen sollte mit Outdoor-Betrieb („weil DFS so ähnlich ist wie Autoupdater?“), dann wäre das natürlich schade.
preserve_channels sorgt dafür, dass Gluon die gesetzten WiFi channels nicht ändert.
Aktiviere ich nun den Outdoor mode nachdem preserve_channels aktiviert wurde, so ändert Gluon auch nicht den verwendeten 5GHz Kanal. Anders herum ändert Gluon den Outdoor Kanal auch nicht zurück auf einen indoor Kanal wenn preserve_channels nach aktivieren des Outdoor modes aktiviert wurde.
das ist mir leider jetzt auch klar.
das „preserve-wifichannels“ haben wir aktiviert, weil viele für ihre (lanmesh-vernetzten) Indoor-Setups „für mehr airtime“ die Kanäle gewechselt haben und bei einem Autoupdate die nicht verlieren möchten.
Das ist default in der Firmware…
Wenn ich das nicht trennen lässt, dann müssen die wenigen Outdoor-user das „Preserve-Wifichannel“ halt nach dem Autoupdate entfernen (wenn ich die Mechanik richtig verstehe).
Ich verstehe zwar die Logik dahinter nicht, warum diese Kreuzabhängigkeit zwischen „Autoupdater-preserve-Wifichannel“ und „dfs-ignore/no-outdoormode“ gibt. Vielleicht lässt sich das ja entkoppeln indem man da zwei unterschiedliche „preserve_channels“-settings draus macht.
p.s. auf einem unifi-ac-mesh unter Gluon 2020.1.3
uci set gluon-core.@wireless[0].preserve_channels=0
uci set gluon.wireless.outdoor=1
uci commit
gluon-reconfigure
wifi
reboot
(ja, das war vermutlich etwas übertrieben, aber sicher ist sicher)
uci show |grep channels
wireless.radio0.channels='100-140'
aber iwinfo meint immernoch, er wäre auf Kanal 44:
Danke. Du musst den preserve_channels key komplett löschen, damit der neue Kanal eingestellt wird.
(Das hängt übrigens nicht mit dem Outdoor mode zusammen, das ist schon immer so).
Ansonsten hast du eine chanlist, hostapd zieht diese allerdings nur hinzu, wenn ACS durchgeführt werden muss (bspw. bei einem DFS event oder beim initialen aktivieren des interfaces). Dein channel ist allerdings weiterhin auf 44 gestellt (Muss auto sein).
Ich bin mir an dieser Stelle aber auch nicht sicher, wie das bei dir in Taiwan mit den verfügbaren Channels aussieht. GGF. sind die DFS Kanäle dort nicht verfügbar.
Schade, dass sich der nicht unabhängig von 2.4 und 5GHz setzen lässt und nicht „sowohl für autoupdater wie für outdoormode“ bezieht.
Da die Mehrzahl der Leute ihre Router hier drinnen hängen haben aber das „keep-radiochannels“ brauchen, lassen wir das besser drin in der Firmware.
Wie wäre es denn mit einem PR für benötigte Features?
Ich verstehe es nicht, wenn sich überall beschwert wird, aber ein Upstream PR von den Leuten, die Firmware bauen und das damit vermutlich technisch hinbekommen, nicht drin ist. The same procedure as every time…
Du kannst das ganze kombinieren, indem du beim update das preserve_channels flag entfernst, wenn der eingestellte Channel dem in der Site bestimmten Channel übereinstimmt.
Das Flag ist dazu gedacht, den User-Intent zu speichern. Ich sehe das Problem, vor dem du stehst, allerdings ist das Automatische Einstellen des Flags an der stelle Kontraproduktiv.
Was ich allerdings aus dem ganzen mitnehme, ist dass die aktivierung des outdoor-modes im Config mode am besten nicht möglich sein sollte, sofern preserve_channels aktiviert ist.
ich werde die Zeile, die auf „preserve-channels“ triggert in ./gluon-core/luasrc/lib/gluon/upgrade/200-wireless einfach auf irgendwas a la „preserve-channels-outdoor“ patchen. Dann können diejenigen, die es „immernoch“ wollen das entsprechend setzen. ansonsten kommt eben Kanal „auto“
So richtig glücklich werde ich damit nicht mit UnifiACmesh outdoor.
Entweder „plötzlich“ gibt es keine Clients mehr auf 5GHz, die Airtime ist 100% frei und der Noise-Level bei konstant -127/128dBm.
ein paar Tage später… mit Trial and Error und ein paar Workaround-script-Iterationen weiter, etwas mehr Klarheit:
der Hostapd im 2020.1.x-Gluon mag es nicht, ein SigHUP zu bekommen während er gerade DFS-Scanning macht (evtl. mag er es auch zu anderen Zeiten nicht). Ergebnis ist dann ein irgendwie undefinierter Zustand, der sich entweder äußert in
PID im pidfile passt nicht zur PID in der Tasklist
es gibt eine Meldung „DFS-PRE-CAC-EXPIRED“ und nie wieder eine weitere Meldung vom Hostapd
das Radio-Interface ist gemäß „wifi status“ „down“ und status „pending“, trotz vorherigem „wifi up“
Workaround?
Fork vom Offline-SSID-Script, aufruf eines check-Workaround-scripts nach dem „killall -HUP hostapd“, Zeile 174ff
und dann das Checkscript, was
a) mismatching PIDs (main issue) mit einem Wifi-Restart rettet
und
b) longer pending interfaces (script läuft auch in der Cron alle paar Minunten) erkennt und auch dann das wifi restartet.
Falls jemand bessere Vorschläge hat (außer „Muss upstream gefixed werden, also upstream, vom upstream vom upstream“, also entweder in openwert, im Hostapd oder im Linuxkernel)
Was ich mir vorstellen könnte:
nur das betroffene Phy neu starten
den Lock-Zustand anders/besser erkennen
das gerade laufende DFS-Scanning erkennen oder dem Hostapd dafür ein Locking zu verpassen (was in beide Richtungen „wirkt“). Und nein, nicht per „swatch“ (tried, not 100% success) auf dem syslog lauschen. direkt auf dem ubus?
den hostapd irgendwie sinnvoll patchen, dass er den Fehlerzustand selbst erkennt und restartet.