The Central Regulatory Domain Agent (CRDA) is a free software project to allow Linux (and possibly other operating systems) comply with radio spectrum regulations around the world by enforcing the regulatory requirements in software. CRDA is also aimed to encourage Linux support from the vendors who were previously afraid to support Linux drivers that would not follow the requirements for radio spectrum use.
The Central Regulatory Domain Agent cooperates with the wireless stack to enforce wireless channel and power regulatory domain restrictions according to the country locale and NIC capabilities.
CRDA is proposed as a method for enforcing regulatory domain restrictions, thereby allowing wireless NIC vendors to produce open source drivers. The thought is that a well supported regulatory mechanism will forestall complaints or prosecution from the FCC. The regulatory mechanism is sufficiently difficult enough to defeat that it is at least on a par with host side binary object obfuscation.
Julie has just purchased an Atheros 9K series card in San Jose, CA where it works perfectly with US 2Ghz channel and power restrictions. As part of her job she must travel to Japan where public spectrum restrictions in the 2Ghz channel space are much tighter. Her wireless stack notices the 802.11d information element in the Access Point beacon and queries the CRDA database for the channel and power set pertaining to the Japanese locale. Her wireless stack then calculates the most restrictive union of CRDA channels and NIC capabilities. Thereafter, only the channels in this union are available for transmitting packets.
CRDA is a user space application (/sbin/crda) that is invoked by kernel user-space events to query regulatory domain settings. One component of the CRDA package is a signed regulatory database, e.g., /usr/lib/crda/regulatory.bin and /usr/lib/crda/key.pub.pem, that is used to satisfy domain queries. The database is signed in order to prevent tampering.
The CRDA infrastructure requires a udev rule to correctly direct user-space events. For example:
/etc/udev/rules.d/regulatory.rules: KERNEL=="regulatory*", ACTION=="change", SUBSYSTEM=="platform", RUN+="/sbin/crda"
No UI changes are anticipated.
CRDA requires a new package.
CRDA requires no user configuration. Manual setting of regulatory domain is through iw or wpa_supplicant.