WLAN-Regulatory

Aus Chaostreff Chemnitz

Kaum hat man das neue WLAN-Gerät ausgepackt und eingeschalten, stellt man fest: "Da fehlen ja so ca. 200 WLAN-Kanäle!?" - "Da kann ich mich ja gar nicht mit den WLANs verbinden, die hier alle so herumgeistern..."

Aber es gibt Abhilfe: Man muss nur ein Land gründen, in dem die gewünschten Kanäle freigegeben sind. Das geht ganz einfach:

Regulatory-Database muss bearbeitet werden und digital signiert:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-regdb.git
sudo apt-get install python-m2crypto
make

Nun nur noch den Eintrag ergänzen:

vim db.txt

Beispiel:

        # This is from www.bundesnetzagentur.de
country 01:
        (1 - 9999 @ 40), (3, 60)

Ja, es muss leider mit 1 losgehen, sonst gibt es eine Fehlermeldung und

make

nicht vergessen.

Die entstehende regulatory.bin muss nun noch nach /usr/lib/crda im Router kopiert werden.

Wer sich den Aufwand nicht machen will, der kann eine fertige regulatory.bin auf dem Router herunterladen:

cd /usr/lib/crda/
rm regulatory.bin
wget http://datatomb.de/mirror/stuff/regulatory.bin
reboot

So, nun geht etwas mehr, es ist aber noch nicht alles freigeschaltet. Wir haben jetzt Alles freigeschaltet, was durch CRDA auf Anwendungsebene beschränkt ist. Es bestehen aber noch die Beschränkungen des WLAN-Treibers. Die jeweilige Einstellung muss von beiden Ebenen erlaubt sein. Deshalb muss jetzt OpenWrt mit anderen Einstellungen neu kompiliert werden:

make menuconfig

...und jetzt [1] -> Kernel modules -> Wireless Drivers -> kmod-ath -> Configuration -> Force Atheros drivers to respect user's regdomain settings

make

neu

http://wireless.kernel.org/en/developers/Regulatory/CRDA?highlight=%28crda%29#CONFIG_CFG80211_INTERNAL_REGDB

CONFIG_CFG80211_INTERNAL_REGDB ist in den kernel-configs gesetzt.

ATH_USER_REGD nicht setzen.

Wichtig: in db.text nicht nur world 00 ändern und iw reg set 00 machen, sondern auch den Eintrag US ändern, wenn EEPROM auf US steht:

[ 11.050000] ath: EEPROM regdomain: 0x0

[ 11.050000] ath: EEPROM indicates default country code should be used

[ 11.050000] ath: doing EEPROM country->regdmn map search

[ 11.050000] ath: country maps to regdmn code: 0x3a

[ 11.050000] ath: Country alpha2 being used: US

[ 11.050000] ath: Regpair used: 0x3a

Dateien die zu bearbeiten sind:

  • build_dir/linux-ar71xx_generic/compat-wireless-2012-09-07/net/wireless/db.txt
  • build_dir/linux-ar71xx_generic/compat-wireless-2012-09-07/net/wireless/reg.c
  • build_dir/linux-ar71xx_generic/compat-wireless-2012-09-07/drivers/net/wireless/ath/ath9k/init.c
  • build_dir/linux-ar71xx_generic/compat-wireless-2012-09-07/drivers/net/wireless/ath/ath9k/hw.h
  • build_dir/linux-ar71xx_generic/compat-wireless-2012-09-07/drivers/net/wireless/ath/regd.c
  • build_dir/linux-ar71xx_generic/linux-3.3.8/drivers/net/wireless/ath/regd.c
  • build_dir/linux-ar71xx_generic/linux-3.3.8/net/wireless/reg.c
  • build_dir/linux-ar71xx_generic/linux-3.3.8/drivers/net/wireless/ath/ath9k/init.c

Wird ein ungültiges Land angegeben (z. B. EU), dann wird World 00 genutzt. Es kommt keine Fehlermeldung.

Links