Etwas entsetzt war ich nach der Installation von Openwrt (Barrier Breaker) auf dem Asus RT-N16. Das WLAN funktionierte mit maximal 54MBit im G-Mode und die Datentransferrate lag bei ca. 3MByte/s, anstatt bei gewohnten 9-10 Mbyte/s im N-Mode. Die im OpenWrt-Wiki vorgeschlagene Lösung mit dem Kernelmodul brcmsmac brachte zwar mehr Geschwindigkeit.  Aber bei ca 6 MByte/s war dann auch Schluss.
Die Lösung war die Installation des originalen Broadcom-Kernelmoduls. Leider müssen auch nach der Installation des Broadcom-Kernelmoduls einige Probleme gelöst werden, wie die korrekte Einstellung der Region oder auch der MAC-Adressenfilter. Davon mal abgesehen, dass das WLAN mit dem originalen Broadcom-Kernelmodul erst gar nicht korrekt startete.

Achtung: Im folgenden hat man die Möglichkeit seinen Router in einen weitestgehend unbrauchbaren Zustand zu versetzen oder zu zerstören. Also wer hier weiterliest und das Vorgeschlagene nachmacht, tut dies in eigener Verantwortung. Ich übernehme keine  Verantwortung!

Ein installiertes OpenWrt (Barrier Breaker) setze ich voraus, ebenso dass Zugriff über eine Netzwerkkabel erfolgt und dass ein Konsolenzugang besteht. Nun geht es los.

 

Zuerst werden erstmal die nicht benötigten Kernelmodule deinstalliert und die benötigten anderen Module installiert.

opkg remove kmod-b43 kmod-b43legacy kmod-brcmsmac
opkg update
opkg install kmod-brcm-wl nas wl wlc

Wir löschen die gesamte WLAN-Konfiguration! Danach starten wir den Router neu.

uci delete wireless
uci commit
reboot

Nach dem Reboot starten wir die WLAN-Erkennung und passen die Konfiguration in diesem Beispiel an. Hier im kombinierten 11ng-Modus mit WPA2-PSK AES Verschlüsselung auf Kanal 1.

wifi detect > /etc/config/wireless
uci commit wireless

uci set wireless.@wifi-iface[0].ssid=DeineSSID
uci set wireless.@wifi-iface[0].key=DeinPasswort
uci set wireless.@wifi-iface[0].encryption=psk2+ccmp

uci set wireless.@wifi-iface[0].wmm=1
uci set wireless.wl0.htmode=HT40+
uci set wireless.wl0.hwmode=11ng
uci set wireless.wl0.channel=1
uci set wireless.wl0.txpower=14
uci set wireless.@wifi-iface[0].short_preamble=0

uci commit wireless

Alles bis hierhin kann auch im Webinterface (luci) eingestellt werden. Nun folgen einige Werte, welche nicht im Webinterface geändert werden können und auch nicht an das Kernelmodul übertragen werden.


Folgendes Skript ist unter /usr/bin/wireless-tune.sh anzulegen. Das Skript schaltet das WLAN in einen in Deutschland vorgeschriebenen Zustand und wickelt die Steuerung des Mac-Filters ab, welcher sich im luci-Webinterface leider für das Broadcom-Kernelmodul nicht wiederfindet.
Bitte achtet auf einen konformen Editior. Ich habe mich hier für die Installation von "nano" entschieden. (opkg update; opkg install nano)

#!/bin/sh
wifi reload

wlc down; wlc country "DE"; wlc 802.11d 1; wlc up

wlc maclist "$(uci get "wireless.@wifi-iface[0].maclist")"
case "$(uci get "wireless.@wifi-iface[0].macfilter")" in
  allow) wlc macfilter 2
  ;;
  deny) wlc macfilter 1
  ;;
  *) wlc macfilter 0
  ;;
esac

exit 0

 

Nun müssen wir das Skript noch mit den Rechten zur Ausführung versehen.

chmod 750 /usr/bin/wireless-tune.sh

 

 Nun ist die Datei /etc/rc.local noch um den Aufruf des Skripts zu ergänzen.

# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.

(sleep 40; /usr/bin/wireless-tune.sh) &

exit 0

 

Dann starten wir mal das WLAN.

uci set wireless.wl0.disabled=0
uci commit wireless
wireless-tune.sh

 

Die Funktion des MAC-Adressfilters wird über die UCI-Konfiguration von "wireless.@wifi-iface[0].macfilter" gesteuert. Mit dem Wert "allow" wird eine Positivliste für den Zugang zum WLAN festgelegt. Mit "deny" wird den aufgelisteten MAC-Adressen der Zugang verweigert. Jeder andere Wert deaktiviert den MAC-Filter. Die MAC-Liste wird unter "wireless.@wifi-iface[0].maclist" verwaltet.

 

Anmerkungen:

  • Die Benutzung vom luci-Webinterface zerstört die so geschaffene Konfiguration, also auch den MAC-Filter und den länderkonformen Betrieb des WLAN. Daher ist ein Aufruf von "wireless-tune.sh" nach Änderungen über das Webinterface nötig.
  • "wlc 802.11d 1" ist in vielen Konfigurationen nicht benutzt, aber meiner Meinung nach zwingend notwendig, da ansonsten die Datentransferrate durch Fehlverhalten des Kernelmoduls einbricht.
  • Das "sleep 40" im Startup-Skript "/etc/rc.local" stellt sicher, dass das WLAN beim Aufruf von "wireless-tune.sh" schon aktiv ist.