| Central Regulatory Domain Agent (CRDA) | |
| ======================================== | |
| This is the Central Regulatory Domain Agent for Linux. It serves one | |
| purpose: tell Linux kernel what to enforce. In essence it is a udev | |
| helper for communication between the kernel and userspace. You only | |
| need to run this manually for debugging purposes. For manual changing | |
| of regulatory domains use iw (iw reg set) or wpa_supplicant (feature | |
| yet to be added). | |
| HOST REQUIREMENTS | |
| =================== | |
| CRDA is provided as a binary file so all the host needs is libc/uclibc. | |
| You will also need udev and at least libnl1. | |
| BUILD REQUIREMENTS | |
| ==================== | |
| The package build requirements currently are: | |
| * python and the m2crypto package (python-m2crypto) | |
| * libgcrypt or libssl (openssl) header files | |
| * nl library and header files (libnl1 and libnl-dev) | |
| available at git://git.kernel.org/pub/scm/libs/netlink/libnl.git | |
| * RSA public key of John Linville, we include this as part of this package | |
| so you do not need to install it. This RSA public key comes | |
| from the wireless-regdb.git tree and we keep it up to date here. | |
| * regulatory database, clone this tree: | |
| git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-regdb.git | |
| and then stuff regulatory.bin (no need to build) provided there in | |
| REG_BIN location specified in this Makefile. This regulatory.bin file | |
| is only required to verify the CRDA built here can read its database file | |
| which has been signed with the RSA private key. | |
| CALLING CRDA -- UDEV | |
| ====================== | |
| Distributions can set up a udev rule to allow the kernel's regulatory | |
| domain change request to be reviewed by CRDA so CRDA can pass an | |
| appropriate regulatory domain. An example regulatory rule is provided | |
| with this package as regulatory.rules | |
| OVERVIEW | |
| ========== | |
| The database is maintained on the wireless-regdb.git tree. This git | |
| tree maintains a binary regulatory database file which is produced | |
| using its own ASCII db.txt into binary form for size efficiency. The | |
| contents of the binary database are then signed using the private key. | |
| CRDA will use regulatory.bin if its signature checks out with the public | |
| key provided. This will prevent us from using corrupted data (in case | |
| of hard drive failure) in the running kernel. This separation between | |
| CRDA and the regulatory database also allows us to provide regulatory | |
| updates on distributions without having to require an update on CRDA. | |
| Note that upon updating the regulatory database it is advised the | |
| user reboots or all the wireless modules get unloaded and reloaded. | |
| Under certain circumstances it may be desirable to have the regulatory | |
| agent accept multiple keys, this can be achieved by stuffing all the keys | |
| desired into pubkeys. Right now we only use John Linville's public key. | |
| REGDB AUTHORS | |
| =============== | |
| Authors of regulatory.bin (John Linville) first need a private key, which can | |
| be generated with something like this: | |
| openssl genrsa -out your.key.priv.pem 2048 | |
| You'll then need to generate the public key and publish it. You | |
| can generate it as follows: | |
| openssl rsa -in your.key.priv.pem -out your.key.pub.pem -pubout -outform PEM | |
| Then with this key you can generate regulatory.bin files like this: | |
| ./utils/db2bin.py regulatory.bin db.txt your.key.priv.pem | |
| MAGIC PATTERN | |
| =============== | |
| Use the following magic(5) pattern to recognise CRDA binary regulatory | |
| database files: | |
| ---- %< ---- | |
| # CRDA Regulatory database file | |
| # http://git.kernel.org/?p=linux/kernel/git/mcgrof/crda.git;a=summary | |
| # (see regdb.h) | |
| 0 belong 0x52474442 CRDA regulatory database file | |
| >4 belong 19 (Version 1) | |
| ---- >% ---- |