Portál AbcLinuxu, 6. května 2025 07:04
Nástroj iw umožňuje za běhu přepnout regulační doménu.
Definice regulačních domén má dva zdroje. Za prvé jednu tabulku můžete mít zakompilovanou přímo v jádře (CFG80211_INTERNAL_REGDB), za druhé tabulku můžete do jádra nahrát později nástrojem crda. Tabulka z uživatelského prostoru by měla jadernou přepsat. Integrace jde tak daleko, že když jádro údaje pro konkrétní doménu nemá, pošle netlinkem zprávu, tu zachytí udev a spustí crda, který jádru potřebné udaje dodá.
Pokud chcete mít regulační domény definované ještě před inicializací ovladačů rádií, zavádějte modul cfg80211 s parametrem ieee8021_regdom=CZ.
Z názvu modulu vyplývá, že regulační databáze je dostupná jen ovladačům, které používají infrastrukturu cfg80211, například ovladače nad vrstvou mac80211. Prakticky jsou to ty, které lze ovládat nástrojem iw. Dejete si pozor, že ovladače mimo hlavní strom si často vláčí vlastní historickou verzi mac80211, která s cfg80211 nemluví.
Nakonec je ještě třeba dodat, že existuje rozšíření 802.11 (mám dojem, že se schovává pod písmenem d), které umožňuje ápéčkám oznamovat identifikátor regulační domény nebo dokonce přímo frekvenční definici domény klientům. Takže pokud si někdo koupí router z dovozu, může se stát, že začne oznamovat blbosti. Oznamovaný kód lze najít na výpisu scanu nástrojem iw.
Jako úvod do problematiky doporučuji stránku na LinuxWireless.
Ta externí REGDB, není v nějakém binárním formátu, nemusí být podepsaná? Pokud ano, dá se svévolně modifikovat? Ona věc stojí ale jinak: my nepotřebujeme hackovat REGDB. Defaultní REGDB obsahuje pro naši doménu správná data - není důvod záznamy modifikovat.
Horší je, že změna domény za chodu není úplně čistá. Ovladač si při startu usmyslí nějakou výchozí defaultní doménu. V případě ath5k a R52 EEPROMka indikuje, že ovladač má použít svůj default. A ovladač má ve zdrojáku natvrdo zadáno, že v téhle situaci defaultní doména je US. Pokud změníte doménu za jízdy na CZ, tak se prostě nevymění předpis pro US na předpis pro CZ. CDRA z obou domén vyrobí "společnou podmnožinu povoleného pásma". Fakt je, že jsem nezkoumal, jestli náhodou v našem případě tenhle průnik není identický s celou doménou CZ - ale obecně mi to leze krkem.
Má to řešení: v drivers/net/wireless/ath/regd.c je potřeba změnit zmíněný tvrdý default na CTRY_CZECH:
if (reg->country_code == CTRY_DEFAULT && regdmn == CTRY_DEFAULT) { printk(KERN_DEBUG "ath: EEPROM indicates default " "country code should be used\n"); reg->country_code = CTRY_CZECH; }
No a když jsem tohle všecko udělal, tak mi stejně R52 nechce na 5 GHz povolit AP režim. Všimněte si, že takové omezení v REGDB není přítomno (možná není ani kódovatelné? nebo ano?)
Co tam ještě schází? Zamítavý result kód vrací navenek CRDA. Ale mám podezření, že uvnitř za to může callback driveru ath5k, který se ještě navrch zeptá (opět) EEPROMky na kartě (a vrátí výsledek crdě). Tenhle callback je zmíněný v dokumentaci, měl by se jmenovat reg_notifier(). Takže odsud budu čenichat dál, až se k tomu zase dostanu
Ostatně jsem přímo tady na Ábíčku našel jeden konkrétní způsob
Ta externí REGDB, není v nějakém binárním formátu, nemusí být podepsaná? Pokud ano, dá se svévolně modifikovat?
Pokud je crda přeložen s podporou kryptografie, pak přijímá jen podepsanou databázi. Veřejné klíče pro ověření lze doinstalovat vlastní. Postup je popsán na stránce, co jsem odkazoval.
CDRA z obou domén vyrobí "společnou podmnožinu povoleného pásma".
Ano, to je vlastnost. Výrobci zařízení se bojí, že by jinak nedostali od FCC certifikaci.
A ovladač má ve zdrojáku natvrdo zadáno, že v téhle situaci defaultní doména je US.
Z hlediska softwaru to je chyba. Z hlediska výrobce hardwaru to je vlastnost. Výrobce občas umožňuje hodnotu v EEPROM přeprogramovat. Samozřejmě z hlediska uživatele to je opruz. Napiš autorovi ovladače (nebo do mailing listu), co se s tím dá dělat.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.