| 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) |
| ---- >% ---- |