├── .gitignore ├── CONTRIBUTING ├── LICENSE ├── Makefile ├── README ├── db.txt ├── db2bin.py ├── dbparse.py ├── debian-example ├── changelog ├── compat ├── control ├── copyright ├── docs └── rules ├── regulatory.bin ├── regulatory.bin.5 ├── sforshee.key.pub.pem ├── sha1sum.txt ├── web └── Regulatory.py └── wireless-regdb.spec /.gitignore: -------------------------------------------------------------------------------- 1 | key.priv.pem 2 | dbparse.pyc 3 | -------------------------------------------------------------------------------- /CONTRIBUTING: -------------------------------------------------------------------------------- 1 | 2 | This project embraces the Developer Certificate of Origin (DCO) for 3 | contributions. This means you must agree to the following prior to submitting 4 | patches, if you agree with this developer certificate you acknowledge this by 5 | adding a Signed-off-by tag to your patch commit log. Every submitted patch 6 | must have this. 7 | 8 | The source for the DCO: 9 | 10 | http://developercertificate.org/ 11 | 12 | ----------------------------------------------------------------------- 13 | 14 | Developer Certificate of Origin 15 | Version 1.1 16 | 17 | Copyright (C) 2004, 2006 The Linux Foundation and its contributors. 18 | 660 York Street, Suite 102, 19 | San Francisco, CA 94110 USA 20 | 21 | Everyone is permitted to copy and distribute verbatim copies of this 22 | license document, but changing it is not allowed. 23 | 24 | 25 | Developer's Certificate of Origin 1.1 26 | 27 | By making a contribution to this project, I certify that: 28 | 29 | (a) The contribution was created in whole or in part by me and I 30 | have the right to submit it under the open source license 31 | indicated in the file; or 32 | 33 | (b) The contribution is based upon previous work that, to the best 34 | of my knowledge, is covered under an appropriate open source 35 | license and I have the right under that license to submit that 36 | work with modifications, whether created in whole or in part 37 | by me, under the same open source license (unless I am 38 | permitted to submit under a different license), as indicated 39 | in the file; or 40 | 41 | (c) The contribution was provided directly to me by some other 42 | person who certified (a), (b) or (c) and I have not modified 43 | it. 44 | 45 | (d) I understand and agree that this project and the contribution 46 | are public and that a record of the contribution (including all 47 | personal information I submit with it, including my sign-off) is 48 | maintained indefinitely and may be redistributed consistent with 49 | this project or the open source license(s) involved. 50 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2008, Luis R. Rodriguez 2 | Copyright (c) 2008, Johannes Berg 3 | Copyright (c) 2008, Michael Green 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted, provided that the above 7 | copyright notice and this permission notice appear in all copies. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 | 17 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Install prefix 2 | PREFIX ?= /usr 3 | CRDA_PATH ?= $(PREFIX)/lib/crda 4 | CRDA_KEY_PATH ?= $(CRDA_PATH)/pubkeys 5 | 6 | MANDIR ?= $(PREFIX)/share/man/ 7 | 8 | SHA1SUM ?= /usr/bin/sha1sum 9 | LSB_RELEASE ?= /usr/bin/lsb_release 10 | WHOAMI ?= /usr/bin/whoami 11 | 12 | # Distro name: Ubuntu, Debian, Fedora, if not present you get 13 | # "custom-distro", if your distribution does not have the LSB stuff, 14 | # then set this variable when calling make if you don't want "custom-distro" 15 | LSB_ID ?= $(shell if [ -f $(LSB_RELEASE) ]; then \ 16 | $(LSB_RELEASE) -i -s; \ 17 | else \ 18 | echo custom-distro; \ 19 | fi) 20 | 21 | DISTRO_PRIVKEY ?= ~/.wireless-regdb-$(LSB_ID).key.priv.pem 22 | DISTRO_PUBKEY ?= ~/.wireless-regdb-$(LSB_ID).key.priv.pem 23 | 24 | REGDB_AUTHOR ?= $(shell if [ -f $(DISTRO_PRIVKEY) ]; then \ 25 | echo $(LSB_ID) ; \ 26 | elif [ -f $(WHOAMI) ]; then \ 27 | $(WHOAMI); \ 28 | else \ 29 | echo custom-user; \ 30 | fi) 31 | 32 | REGDB_PRIVKEY ?= ~/.wireless-regdb-$(REGDB_AUTHOR).key.priv.pem 33 | REGDB_PUBKEY ?= $(REGDB_AUTHOR).key.pub.pem 34 | 35 | REGDB_UPSTREAM_PUBKEY ?= sforshee.key.pub.pem 36 | 37 | REGDB_CHANGED = $(shell $(SHA1SUM) -c --status sha1sum.txt >/dev/null 2>&1; \ 38 | if [ $$? -ne 0 ]; then \ 39 | echo maintainer-clean $(REGDB_PUBKEY); \ 40 | fi) 41 | 42 | .PHONY: all clean mrproper install maintainer-clean install-distro-key 43 | 44 | all: $(REGDB_CHANGED) regulatory.bin sha1sum.txt 45 | 46 | clean: 47 | @rm -f *.pyc *.gz 48 | 49 | maintainer-clean: clean 50 | @rm -f regulatory.bin 51 | 52 | mrproper: clean maintainer-clean 53 | @echo Removed public key, regulatory.bin and compresed man pages 54 | @rm -f $(REGDB_PUBKEY) .custom 55 | 56 | regulatory.bin: db.txt $(REGDB_PRIVKEY) $(REGDB_PUBKEY) 57 | @echo Generating $@ digitally signed by $(REGDB_AUTHOR)... 58 | ./db2bin.py regulatory.bin db.txt $(REGDB_PRIVKEY) 59 | 60 | sha1sum.txt: db.txt 61 | sha1sum $< > $@ 62 | 63 | $(REGDB_PUBKEY): $(REGDB_PRIVKEY) 64 | @echo "Generating public key for $(REGDB_AUTHOR)..." 65 | openssl rsa -in $(REGDB_PRIVKEY) -out $(REGDB_PUBKEY) -pubout -outform PEM 66 | @echo $(REGDB_PUBKEY) > .custom 67 | 68 | 69 | $(REGDB_PRIVKEY): 70 | @echo "Generating private key for $(REGDB_AUTHOR)..." 71 | openssl genrsa -out $(REGDB_PRIVKEY) 2048 72 | 73 | ifneq ($(shell test -e $(DISTRO_PRIVKEY) && echo yes),yes) 74 | $(DISTRO_PRIVKEY): 75 | @echo "Generating private key for $(LSB_ID) packager..." 76 | openssl genrsa -out $(DISTRO_PRIVKEY) 2048 77 | endif 78 | 79 | install-distro-key: maintainer-clean $(DISTRO_PRIVKEY) 80 | 81 | %.gz: % 82 | gzip < $< > $@ 83 | 84 | # Users should just do: 85 | # sudo make install 86 | # 87 | # Developers should do: 88 | # make maintainer-clean 89 | # make 90 | # sudo make install 91 | # 92 | # Distributions packagers should do only once: 93 | # make install-distro-key 94 | # This will create a private key for you and install it into 95 | # ~/.wireless-regdb-$(LSB_ID).key.priv.pem 96 | # To make new releaes just do: 97 | # make maintainer-clean 98 | # make 99 | # sudo make install 100 | install: regulatory.bin.5.gz 101 | install -m 755 -d $(DESTDIR)/$(CRDA_PATH) 102 | install -m 755 -d $(DESTDIR)/$(CRDA_KEY_PATH) 103 | if [ -f .custom ]; then \ 104 | install -m 644 -t $(DESTDIR)/$(CRDA_KEY_PATH)/ $(shell cat .custom); \ 105 | fi 106 | install -m 644 -t $(DESTDIR)/$(CRDA_KEY_PATH)/ $(REGDB_UPSTREAM_PUBKEY) 107 | install -m 644 -t $(DESTDIR)/$(CRDA_PATH)/ regulatory.bin 108 | install -m 755 -d $(DESTDIR)/$(MANDIR)/man5/ 109 | install -m 644 -t $(DESTDIR)/$(MANDIR)/man5/ regulatory.bin.5.gz 110 | 111 | uninstall: 112 | rm -rf $(DESTDIR)/$(CRDA_PATH)/ 113 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | This repository contains the plain text version of the regulatory 2 | database file I maintain for use with Central Regulatory Database 3 | Agent daemon. Also included is the compiled binary version of this 4 | file signed with my RSA key. This represents a good faith attempt 5 | to capture regulatory information that is correct at the time of its last 6 | modification. This information is provided to you with no warranty 7 | either expressed or implied. 8 | 9 | Also included are the tools used to compile and sign the regulatory.bin 10 | file as well as a MoinMoin macro used for viewing the database. 11 | 12 | TECHNICAL INFORMATION 13 | ======================= 14 | 15 | The regulatory information in `db.txt' is stored in a human-readable 16 | format which can be read using the `dbparse.py' python module. This 17 | python module is used by the web viewer (Regulatory.py) which is 18 | implemented as a MoinMoin macro (and used on http://wireless.kernel.org) 19 | to allow viewing the database for verification. 20 | 21 | The dbparse module is also used by db2bin.py, the `compiler', which 22 | compiles and signs the binary database. 23 | 24 | For more information, please see the CRDA git repository: 25 | 26 | git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/crda.git 27 | 28 | John W. Linville 29 | 17 November 2008 30 | -------------------------------------------------------------------------------- /db.txt: -------------------------------------------------------------------------------- 1 | # This is the world regulatory domain 2 | country 00: 3 | (2402 - 2472 @ 40), (20) 4 | # Channel 12 - 13. 5 | (2457 - 2482 @ 20), (20), NO-IR, AUTO-BW 6 | # Channel 14. Only JP enables this and for 802.11b only 7 | (2474 - 2494 @ 20), (20), NO-IR, NO-OFDM 8 | # Channel 36 - 48 9 | (5170 - 5250 @ 80), (20), NO-IR, AUTO-BW 10 | # Channel 52 - 64 11 | (5250 - 5330 @ 80), (20), NO-IR, DFS, AUTO-BW 12 | # Channel 100 - 144 13 | (5490 - 5730 @ 160), (20), NO-IR, DFS 14 | # Channel 149 - 165 15 | (5735 - 5835 @ 80), (20), NO-IR 16 | # IEEE 802.11ad (60GHz), channels 1..3 17 | (57240 - 63720 @ 2160), (0) 18 | 19 | 20 | country AD: 21 | (2402 - 2482 @ 40), (20) 22 | (5170 - 5250 @ 80), (20) 23 | (5250 - 5330 @ 80), (20), DFS 24 | (5490 - 5710 @ 80), (27), DFS 25 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 26 | (57000 - 66000 @ 2160), (40) 27 | 28 | country AE: DFS-FCC 29 | (2402 - 2482 @ 40), (20) 30 | (5170 - 5250 @ 80), (17), AUTO-BW 31 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 32 | (5490 - 5730 @ 160), (24), DFS 33 | (5735 - 5835 @ 80), (30) 34 | 35 | country AF: DFS-ETSI 36 | (2402 - 2482 @ 40), (20) 37 | (5170 - 5250 @ 80), (20), AUTO-BW 38 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 39 | (5490 - 5710 @ 160), (27), DFS 40 | 41 | # Source: 42 | # http://pucanguilla.org/Downloads/January2005-Anguilla%20Table%20of%20Allocations.pdf 43 | country AI: DFS-ETSI 44 | (2402 - 2482 @ 40), (20) 45 | (5170 - 5250 @ 80), (20), AUTO-BW 46 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 47 | (5490 - 5710 @ 160), (27), DFS 48 | 49 | country AL: DFS-ETSI 50 | (2402 - 2482 @ 40), (20) 51 | (5170 - 5250 @ 80), (20.00), AUTO-BW 52 | (5250 - 5330 @ 80), (20.00), DFS, AUTO-BW 53 | (5490 - 5710 @ 160), (27.00), DFS 54 | 55 | country AM: DFS-ETSI 56 | (2402 - 2482 @ 40), (20) 57 | (5170 - 5250 @ 20), (18) 58 | (5250 - 5330 @ 20), (18), DFS 59 | 60 | country AN: DFS-ETSI 61 | (2402 - 2482 @ 40), (20) 62 | (5170 - 5250 @ 80), (20), AUTO-BW 63 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 64 | (5490 - 5710 @ 160), (27), DFS 65 | 66 | country AR: DFS-FCC 67 | (2402 - 2482 @ 40), (20) 68 | (5170 - 5250 @ 80), (17), AUTO-BW 69 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 70 | (5490 - 5730 @ 160), (24), DFS 71 | (5735 - 5835 @ 80), (30) 72 | 73 | country AS: DFS-FCC 74 | (2402 - 2472 @ 40), (30) 75 | (5170 - 5250 @ 80), (24), AUTO-BW 76 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 77 | (5490 - 5730 @ 160), (24), DFS 78 | (5735 - 5835 @ 80), (30) 79 | 80 | country AT: DFS-ETSI 81 | (2402 - 2482 @ 40), (20) 82 | (5170 - 5250 @ 80), (20), AUTO-BW 83 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 84 | (5490 - 5710 @ 160), (27), DFS 85 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 86 | (57000 - 66000 @ 2160), (40) 87 | 88 | country AU: DFS-ETSI 89 | (2402 - 2482 @ 40), (20) 90 | (5170 - 5250 @ 80), (17), AUTO-BW 91 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 92 | (5490 - 5710 @ 160), (24), DFS 93 | (5735 - 5835 @ 80), (30) 94 | 95 | country AW: DFS-ETSI 96 | (2402 - 2482 @ 40), (20) 97 | (5170 - 5250 @ 80), (20), AUTO-BW 98 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 99 | (5490 - 5710 @ 160), (27), DFS 100 | 101 | country AZ: DFS-ETSI 102 | (2402 - 2482 @ 40), (20) 103 | (5170 - 5250 @ 80), (18), AUTO-BW 104 | (5250 - 5330 @ 80), (18), DFS, AUTO-BW 105 | 106 | country BA: DFS-ETSI 107 | (2402 - 2482 @ 40), (20) 108 | (5170 - 5250 @ 80), (20), AUTO-BW 109 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 110 | (5490 - 5710 @ 160), (27), DFS 111 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 112 | (57000 - 66000 @ 2160), (40) 113 | 114 | country BB: DFS-FCC 115 | (2402 - 2482 @ 40), (20) 116 | (5170 - 5250 @ 80), (23), AUTO-BW 117 | (5250 - 5330 @ 80), (23), DFS, AUTO-BW 118 | (5735 - 5835 @ 80), (30) 119 | 120 | country BD: DFS-JP 121 | (2402 - 2482 @ 40), (20) 122 | (5735 - 5835 @ 80), (30) 123 | 124 | country BE: DFS-ETSI 125 | (2402 - 2482 @ 40), (20) 126 | (5170 - 5250 @ 80), (20), AUTO-BW 127 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 128 | (5490 - 5710 @ 160), (27), DFS 129 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 130 | (57000 - 66000 @ 2160), (40) 131 | 132 | country BF: DFS-FCC 133 | (2402 - 2482 @ 40), (20) 134 | (5170 - 5250 @ 80), (17), AUTO-BW 135 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 136 | (5490 - 5730 @ 160), (24), DFS 137 | (5735 - 5835 @ 80), (30) 138 | 139 | # Bulgarian rules as defined by the Communications Regulation Commission in the 140 | # following documents: 141 | # 142 | # Rules for carrying out electronic communications through radio equipment using 143 | # radio spectrum, which does not need to be individually assigned (the Rules): 144 | # http://www.crc.bg/files/_bg/Pravila_09_06_2015.pdf 145 | # 146 | # List of radio equipment that uses harmonized within the European Union bands 147 | # and electronic communications terminal equipment (the List): 148 | # http://www.crc.bg/files/_bg/Spisak_2015.pdf 149 | # 150 | # Note: The transmit power limits in the 5250-5350 MHz and 5470-5725 MHz bands 151 | # can be raised by 3 dBm if TPC is enabled. Refer to BDS EN 301 893 for details. 152 | country BG: DFS-ETSI 153 | # Wideband data transmission systems (WDTS) in the 2.4GHz ISM band, ref: 154 | # I.22 of the List, BDS EN 300 328 155 | (2402 - 2482 @ 40), (20) 156 | # 5 GHz Radio Local Area Networks (RLANs), ref: 157 | # II.H01 of the List, BDS EN 301 893 158 | (5170 - 5250 @ 80), (23), AUTO-BW 159 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 160 | # II.H01 of the List, I.54 from the List, BDS EN 301 893 161 | (5490 - 5710 @ 160), (27), DFS 162 | # Short range devices (SRDs) in the 5725-5875 MHz frequency range, ref: 163 | # I.43 of the List, BDS EN 300 440-2, BDS EN 300 440-1 164 | (5725 - 5875 @ 80), (14) 165 | # 60 GHz Multiple-Gigabit RLAN Systems, ref: 166 | # II.H03 of the List, BDS EN 302 567-2 167 | (57000 - 66000 @ 2160), (40), NO-OUTDOOR 168 | 169 | country BH: DFS-JP 170 | (2402 - 2482 @ 40), (20) 171 | (5170 - 5250 @ 20), (20) 172 | (5250 - 5330 @ 20), (20), DFS 173 | (5735 - 5835 @ 20), (20) 174 | 175 | country BL: DFS-ETSI 176 | (2402 - 2482 @ 40), (20) 177 | (5170 - 5250 @ 80), (20), AUTO-BW 178 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 179 | (5490 - 5710 @ 160), (27), DFS 180 | 181 | country BM: DFS-FCC 182 | (2402 - 2472 @ 40), (30) 183 | (5170 - 5250 @ 80), (24), AUTO-BW 184 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 185 | (5490 - 5730 @ 160), (24), DFS 186 | (5735 - 5835 @ 80), (30) 187 | 188 | country BN: DFS-JP 189 | (2402 - 2482 @ 40), (20) 190 | (5170 - 5250 @ 80), (20), AUTO-BW 191 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 192 | (5735 - 5835 @ 80), (20) 193 | 194 | country BO: DFS-JP 195 | (2402 - 2482 @ 40), (20) 196 | (5250 - 5330 @ 80), (30), DFS 197 | (5735 - 5835 @ 80), (30) 198 | 199 | country BR: DFS-FCC 200 | (2402 - 2482 @ 40), (20) 201 | (5170 - 5250 @ 80), (17), AUTO-BW 202 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 203 | (5490 - 5730 @ 160), (24), DFS 204 | (5735 - 5835 @ 80), (30) 205 | 206 | country BS: DFS-FCC 207 | (2402 - 2482 @ 40), (20) 208 | (5170 - 5250 @ 80), (24), AUTO-BW 209 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 210 | (5490 - 5730 @ 160), (24), DFS 211 | (5735 - 5835 @ 80), (30) 212 | 213 | # Source: 214 | # http://www.bicma.gov.bt/paper/publication/nrrpart4.pdf 215 | country BT: DFS-ETSI 216 | (2402 - 2482 @ 40), (20) 217 | (5170 - 5250 @ 80), (20), AUTO-BW 218 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 219 | (5490 - 5710 @ 160), (27), DFS 220 | 221 | country BY: DFS-ETSI 222 | (2402 - 2482 @ 40), (20) 223 | (5170 - 5250 @ 80), (20), AUTO-BW 224 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 225 | (5490 - 5710 @ 160), (27), DFS 226 | 227 | country BZ: DFS-JP 228 | (2402 - 2482 @ 40), (30) 229 | (5735 - 5835 @ 80), (30) 230 | 231 | country CA: DFS-FCC 232 | (2402 - 2472 @ 40), (30) 233 | (5170 - 5250 @ 80), (17), AUTO-BW 234 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 235 | (5490 - 5600 @ 80), (24), DFS 236 | (5650 - 5730 @ 80), (24), DFS 237 | (5735 - 5835 @ 80), (30) 238 | 239 | # Source: 240 | # http://www.art-rca.org 241 | country CF: DFS-FCC 242 | (2402 - 2482 @ 40), (20) 243 | (5170 - 5250 @ 40), (17) 244 | (5250 - 5330 @ 40), (24), DFS 245 | (5490 - 5730 @ 40), (24), DFS 246 | (5735 - 5835 @ 40), (30) 247 | 248 | country CH: DFS-ETSI 249 | (2402 - 2482 @ 40), (20) 250 | (5170 - 5250 @ 80), (20), AUTO-BW 251 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 252 | (5490 - 5710 @ 160), (27), DFS 253 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 254 | (57000 - 66000 @ 2160), (40) 255 | 256 | country CI: DFS-FCC 257 | (2402 - 2482 @ 40), (20) 258 | (5170 - 5250 @ 80), (17), AUTO-BW 259 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 260 | (5490 - 5730 @ 160), (24), DFS 261 | (5735 - 5835 @ 80), (30) 262 | 263 | country CL: DFS-JP 264 | (2402 - 2482 @ 40), (20) 265 | (5170 - 5250 @ 80), (20), AUTO-BW 266 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 267 | (5735 - 5835 @ 80), (20) 268 | 269 | country CN: DFS-FCC 270 | (2402 - 2482 @ 40), (20) 271 | (5170 - 5250 @ 80), (23), AUTO-BW 272 | (5250 - 5330 @ 80), (23), DFS, AUTO-BW 273 | (5735 - 5835 @ 80), (30) 274 | # 60 GHz band channels 1,4: 28dBm, channels 2,3: 44dBm 275 | # ref: http://www.miit.gov.cn/n11293472/n11505629/n11506593/n11960250/n11960606/n11960700/n12330791.files/n12330790.pdf 276 | (57240 - 59400 @ 2160), (28) 277 | (59400 - 63720 @ 2160), (44) 278 | (63720 - 65880 @ 2160), (28) 279 | 280 | country CO: DFS-FCC 281 | (2402 - 2482 @ 40), (20) 282 | (5170 - 5250 @ 80), (17), AUTO-BW 283 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 284 | (5490 - 5730 @ 160), (24), DFS 285 | (5735 - 5835 @ 80), (30) 286 | 287 | country CR: DFS-FCC 288 | (2402 - 2482 @ 40), (20) 289 | (5170 - 5250 @ 20), (17) 290 | (5250 - 5330 @ 20), (24), DFS 291 | (5490 - 5730 @ 20), (24), DFS 292 | (5735 - 5835 @ 20), (30) 293 | 294 | # http://www.mincom.gob.cu/?q=marcoregulatorio 295 | # - Redes Informáticas 296 | # Resolución 127, 2011 - Reglamento Banda 2,4 GHz. 297 | country CU: DFS-FCC 298 | (2400 - 2483.5 @ 40), (200 mW) 299 | 300 | country CX: DFS-FCC 301 | (2402 - 2482 @ 40), (20) 302 | (5170 - 5250 @ 80), (24), AUTO-BW 303 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 304 | (5490 - 5730 @ 160), (24), DFS 305 | (5735 - 5835 @ 80), (30) 306 | 307 | country CY: DFS-ETSI 308 | (2402 - 2482 @ 40), (20) 309 | (5170 - 5250 @ 80), (20), AUTO-BW 310 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 311 | (5490 - 5710 @ 160), (27), DFS 312 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 313 | (57000 - 66000 @ 2160), (40) 314 | 315 | # Data from http://www.ctu.eu/164/download/VOR/VOR-12-08-2005-34.pdf 316 | # and http://www.ctu.eu/164/download/VOR/VOR-12-05-2007-6-AN.pdf 317 | # Power at 5250 - 5350 MHz and 5470 - 5725 MHz can be doubled if TPC is 318 | # implemented. 319 | country CZ: DFS-ETSI 320 | (2400 - 2483.5 @ 40), (100 mW) 321 | (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW 322 | (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW 323 | (5470 - 5725 @ 160), (500 mW), DFS 324 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 325 | (57000 - 66000 @ 2160), (40) 326 | 327 | # Allocation for the 2.4 GHz band (Vfg 10 / 2013, Allgemeinzuteilung von 328 | # Frequenzen für die Nutzung in lokalen Netzwerken; Wireless Local Area 329 | # Networks (WLAN-Funkanwendungen). 330 | # https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/Allgemeinzuteilungen/2013_10_WLAN_2,4GHz_pdf.pdf 331 | # 332 | # Allocation for the 5 GHz band (Vfg. 7 / 2010, Allgemeinzuteilung von 333 | # Frequenzen in den Bereichen 5150 MHz - 5350 MHz und 5470 MHz - 5725 MHz für 334 | # Funkanwendungen zur breitbandigen Datenübertragung, WAS/WLAN („Wireless 335 | # Access Systems including Wireless Local Area Networks“). 336 | # https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/Allgemeinzuteilungen/2010_07_WLAN_5GHz_pdf.pdf 337 | # The values for the 5 GHz have been reduced by a factor of 2 (3db) for non TPC 338 | # devices (in other words: devices with TPC can use twice the tx power of this 339 | # table). Note that the docs do not require TPC for 5150--5250; the reduction 340 | # to 100mW thus is not strictly required -- however the conservative 100mW 341 | # limit is used here as the non-interference with radar and satellite 342 | # apps relies on the attenuation by the building walls only in the 343 | # absence of DFS; the neighbour countries have 100mW limit here as well. 344 | # 345 | # The ETSI EN 300 440-1 standard for short range devices in the 5 GHz band has 346 | # been implemented in Germany: 347 | # https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/Allgemeinzuteilungen/2014_69_SRD_pdf.pdf 348 | # 349 | # Allocation for the 60 GHz band (Allgemeinzuteilung von Frequenzen im 350 | # Bereich 57 GHz - 66 GHz für Funkanwendungen für weitbandige 351 | # Datenübertragungssysteme; „Multiple Gigabit WAS/RLAN Systems (MGWS)“). 352 | # https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/Allgemeinzuteilungen/2011_08_MGWS_pdf.pdf 353 | 354 | country DE: DFS-ETSI 355 | (2400 - 2483.5 @ 40), (100 mW) 356 | (5150 - 5250 @ 80), (100 mW), NO-OUTDOOR, AUTO-BW 357 | (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW 358 | (5470 - 5725 @ 160), (500 mW), DFS 359 | # short range devices (ETSI EN 300 440-1) 360 | (5725 - 5875 @ 80), (25 mW) 361 | # 60 GHz band channels 1-4 (ETSI EN 302 567) 362 | (57000 - 66000 @ 2160), (40) 363 | 364 | country DK: DFS-ETSI 365 | (2402 - 2482 @ 40), (20) 366 | (5170 - 5250 @ 80), (20), AUTO-BW 367 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 368 | (5490 - 5710 @ 160), (27), DFS 369 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 370 | (57000 - 66000 @ 2160), (40) 371 | 372 | # Source: 373 | # http://www.ntrcdom.org/index.php?option=com_content&view=category&layout=blog&id=10&Itemid=55 374 | country DM: DFS-FCC 375 | (2402 - 2472 @ 40), (30) 376 | (5170 - 5250 @ 80), (17), AUTO-BW 377 | (5250 - 5330 @ 80), (23), DFS, AUTO-BW 378 | (5735 - 5835 @ 80), (30) 379 | 380 | country DO: DFS-FCC 381 | (2402 - 2472 @ 40), (30) 382 | (5170 - 5250 @ 80), (17), AUTO-BW 383 | (5250 - 5330 @ 80), (23), DFS, AUTO-BW 384 | (5735 - 5835 @ 80), (30) 385 | 386 | country DZ: DFS-JP 387 | (2402 - 2482 @ 40), (20) 388 | (5170.000 - 5250.000 @ 80.000), (23.00), AUTO-BW 389 | (5250.000 - 5330.000 @ 80.000), (23.00), DFS, AUTO-BW 390 | (5490.000 - 5670.000 @ 160.000), (23.00), DFS 391 | 392 | country EC: DFS-FCC 393 | (2402 - 2482 @ 40), (20) 394 | (5170 - 5250 @ 20), (17) 395 | (5250 - 5330 @ 20), (24), DFS 396 | (5490 - 5730 @ 20), (24), DFS 397 | (5735 - 5835 @ 20), (30) 398 | 399 | country EE: DFS-ETSI 400 | (2402 - 2482 @ 40), (20) 401 | (5170 - 5250 @ 80), (20), AUTO-BW 402 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 403 | (5490 - 5710 @ 160), (27), DFS 404 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 405 | (57000 - 66000 @ 2160), (40) 406 | 407 | country EG: DFS-ETSI 408 | (2402 - 2482 @ 40), (20) 409 | (5170 - 5250 @ 40), (20) 410 | (5250 - 5330 @ 40), (20), DFS 411 | 412 | # Orden IET/787/2013, de 25 de abril, por la que se aprueba 413 | # el cuadro nacional de atribución de frecuencias. 414 | # http://www.boe.es/diario_boe/txt.php?id=BOE-A-2013-4845 415 | # 416 | # more info at "Cuadro nacional de atribución de frecuencias (CNAF)": 417 | # http://www.minetur.gob.es/telecomunicaciones/espectro/paginas/cnaf.aspx 418 | 419 | country ES: DFS-ETSI 420 | (2400 - 2483.5 @ 40), (100 mW) 421 | (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW 422 | (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW 423 | (5470 - 5725 @ 160), (500 mW), DFS 424 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 425 | (57000 - 66000 @ 2160), (40) 426 | 427 | country ET: DFS-ETSI 428 | (2402 - 2482 @ 40), (20) 429 | (5170 - 5250 @ 80), (20), AUTO-BW 430 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 431 | (5490 - 5710 @ 160), (27), DFS 432 | 433 | country FI: DFS-ETSI 434 | (2400 - 2483.5 @ 40), (20) 435 | (5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW 436 | (5250 - 5350 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW 437 | (5470 - 5725 @ 160), (27), DFS 438 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 439 | (57000 - 66000 @ 2160), (40) 440 | 441 | country FM: DFS-FCC 442 | (2402 - 2472 @ 40), (30) 443 | (5170 - 5250 @ 80), (24), AUTO-BW 444 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 445 | (5490 - 5730 @ 160), (24), DFS 446 | (5735 - 5835 @ 80), (30) 447 | 448 | country FR: DFS-ETSI 449 | (2402 - 2482 @ 40), (20) 450 | (5170 - 5250 @ 80), (20), AUTO-BW 451 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 452 | (5490 - 5710 @ 160), (27), DFS 453 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 454 | (57000 - 66000 @ 2160), (40) 455 | 456 | country GB: DFS-ETSI 457 | (2402 - 2482 @ 40), (20) 458 | (5170 - 5250 @ 80), (20), AUTO-BW 459 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 460 | (5490 - 5710 @ 160), (27), DFS 461 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 462 | (57000 - 66000 @ 2160), (40) 463 | 464 | country GD: DFS-FCC 465 | (2402 - 2472 @ 40), (30) 466 | (5170 - 5250 @ 80), (17), AUTO-BW 467 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 468 | (5490 - 5730 @ 160), (24), DFS 469 | (5735 - 5835 @ 80), (30) 470 | 471 | country GE: DFS-ETSI 472 | (2402 - 2482 @ 40), (20) 473 | (5170 - 5250 @ 80), (18), AUTO-BW 474 | (5250 - 5330 @ 80), (18), DFS, AUTO-BW 475 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 476 | (57000 - 66000 @ 2160), (40) 477 | 478 | country GF: DFS-ETSI 479 | (2402 - 2482 @ 40), (20) 480 | (5170 - 5250 @ 80), (20), AUTO-BW 481 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 482 | (5490 - 5710 @ 160), (27), DFS 483 | 484 | country GH: DFS-FCC 485 | (2402 - 2482 @ 40), (20) 486 | (5170 - 5250 @ 80), (17), AUTO-BW 487 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 488 | (5490 - 5730 @ 160), (24), DFS 489 | (5735 - 5835 @ 80), (30) 490 | 491 | country GL: DFS-ETSI 492 | (2402 - 2482 @ 40), (20) 493 | (5170 - 5250 @ 80), (20), AUTO-BW 494 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 495 | (5490 - 5710 @ 160), (27), DFS 496 | 497 | country GP: DFS-ETSI 498 | (2402 - 2482 @ 40), (20) 499 | (5170 - 5250 @ 80), (20), AUTO-BW 500 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 501 | (5490 - 5710 @ 160), (27), DFS 502 | 503 | country GR: DFS-ETSI 504 | (2402 - 2482 @ 40), (20) 505 | (5170 - 5250 @ 80), (20), AUTO-BW 506 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 507 | (5490 - 5710 @ 160), (27), DFS 508 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 509 | (57000 - 66000 @ 2160), (40) 510 | 511 | country GT: DFS-FCC 512 | (2402 - 2472 @ 40), (30) 513 | (5170 - 5250 @ 80), (17), AUTO-BW 514 | (5250 - 5330 @ 80), (23), DFS, AUTO-BW 515 | (5735 - 5835 @ 80), (30) 516 | 517 | country GU: DFS-FCC 518 | (2402 - 2472 @ 40), (30) 519 | (5170 - 5250 @ 20), (17) 520 | (5250 - 5330 @ 20), (24), DFS 521 | (5490 - 5730 @ 20), (24), DFS 522 | (5735 - 5835 @ 20), (30) 523 | 524 | country GY: 525 | (2402 - 2482 @ 40), (30) 526 | (5735 - 5835 @ 80), (30) 527 | 528 | country HK: DFS-ETSI 529 | (2402 - 2482 @ 40), (20) 530 | (5170 - 5250 @ 80), (17), AUTO-BW 531 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 532 | (5490 - 5710 @ 160), (24), DFS 533 | (5735 - 5835 @ 80), (30) 534 | 535 | country HN: DFS-FCC 536 | (2402 - 2482 @ 40), (20) 537 | (5170 - 5250 @ 80), (17), AUTO-BW 538 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 539 | (5490 - 5730 @ 160), (24), DFS 540 | (5735 - 5835 @ 80), (30) 541 | 542 | country HR: DFS-ETSI 543 | (2400 - 2483.5 @ 40), (20) 544 | (5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW 545 | (5250 - 5350 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW 546 | (5470 - 5725 @ 160), (27), DFS 547 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 548 | (57000 - 66000 @ 2160), (40) 549 | 550 | country HT: DFS-FCC 551 | (2402 - 2472 @ 40), (30) 552 | (5170 - 5250 @ 80), (24), AUTO-BW 553 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 554 | (5490 - 5730 @ 160), (24), DFS 555 | (5735 - 5835 @ 80), (30) 556 | 557 | country HU: DFS-ETSI 558 | (2402 - 2482 @ 40), (20) 559 | (5170 - 5250 @ 80), (20), AUTO-BW 560 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 561 | (5490 - 5710 @ 160), (27), DFS 562 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 563 | (57000 - 66000 @ 2160), (40) 564 | 565 | country ID: DFS-JP 566 | # ref: http://www.postel.go.id/content/ID/regulasi/standardisasi/kepdir/bwa%205,8%20ghz.pdf 567 | (2402 - 2482 @ 20), (20) 568 | (5735 - 5815 @ 20), (23) 569 | 570 | country IE: DFS-ETSI 571 | (2402 - 2482 @ 40), (20) 572 | (5170 - 5250 @ 80), (20), AUTO-BW 573 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 574 | (5490 - 5710 @ 160), (27), DFS 575 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 576 | (57000 - 66000 @ 2160), (40) 577 | 578 | country IL: DFS-ETSI 579 | (2402 - 2482 @ 40), (20) 580 | (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW 581 | (5250 - 5350 @ 80), (200 mW), NO-OUTDOOR, DFS, AUTO-BW 582 | 583 | country IN: DFS-JP 584 | (2402 - 2482 @ 40), (20) 585 | (5170 - 5250 @ 80), (20), AUTO-BW 586 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 587 | (5735 - 5835 @ 80), (20) 588 | 589 | country IR: DFS-JP 590 | (2402 - 2482 @ 40), (20) 591 | (5735 - 5835 @ 80), (30) 592 | 593 | country IS: DFS-ETSI 594 | (2402 - 2482 @ 40), (20) 595 | (5170 - 5250 @ 80), (20), AUTO-BW 596 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 597 | (5490 - 5710 @ 160), (27), DFS 598 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 599 | (57000 - 66000 @ 2160), (40) 600 | 601 | country IT: DFS-ETSI 602 | (2402 - 2482 @ 40), (20) 603 | (5170 - 5250 @ 80), (20), AUTO-BW 604 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 605 | (5490 - 5710 @ 160), (27), DFS 606 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 607 | (57000 - 66000 @ 2160), (40) 608 | 609 | country JM: DFS-FCC 610 | (2402 - 2482 @ 40), (20) 611 | (5170 - 5250 @ 80), (17), AUTO-BW 612 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 613 | (5490 - 5730 @ 160), (24), DFS 614 | (5735 - 5835 @ 80), (30) 615 | 616 | country JO: DFS-JP 617 | (2402 - 2482 @ 40), (20) 618 | (5170 - 5250 @ 80), (23) 619 | (5735 - 5835 @ 80), (23) 620 | 621 | country JP: DFS-JP 622 | (2402 - 2482 @ 40), (20) 623 | (2474 - 2494 @ 20), (20), NO-OFDM 624 | (4910 - 4990 @ 40), (23) 625 | (5030 - 5090 @ 40), (23) 626 | (5170 - 5250 @ 80), (20), AUTO-BW 627 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 628 | (5490 - 5710 @ 160), (23), DFS 629 | # 60 GHz band channels 2-4 at 10mW, 630 | # ref: http://www.arib.or.jp/english/html/overview/doc/1-STD-T74v1_1.pdf 631 | (59000 - 66000 @ 2160), (10 mW) 632 | 633 | country KE: DFS-JP 634 | (2402 - 2482 @ 40), (20) 635 | (5170 - 5250 @ 80), (23) 636 | (5490 - 5570 @ 80), (30), DFS 637 | (5735 - 5775 @ 40), (23) 638 | 639 | country KH: DFS-ETSI 640 | (2402 - 2482 @ 40), (20) 641 | (5170 - 5250 @ 80), (20), AUTO-BW 642 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 643 | (5490 - 5710 @ 160), (27), DFS 644 | 645 | # Source 646 | # http://ntrc.kn/?page_id=7 647 | country KN: DFS-ETSI 648 | (2402 - 2482 @ 40), (20) 649 | (5170 - 5250 @ 80), (20), AUTO-BW 650 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 651 | (5490 - 5710 @ 160), (30), DFS 652 | (5735 - 5815 @ 80), (30) 653 | 654 | country KP: DFS-JP 655 | (2402 - 2482 @ 20), (20) 656 | (5170 - 5250 @ 20), (20) 657 | (5250 - 5330 @ 20), (20), DFS 658 | (5490 - 5630 @ 20), (30), DFS 659 | (5735 - 5815 @ 20), (30) 660 | 661 | country KR: DFS-JP 662 | (2402 - 2482 @ 40), (20) 663 | (5170 - 5250 @ 80), (20), AUTO-BW 664 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 665 | (5490 - 5710 @ 160), (30), DFS 666 | (5735 - 5835 @ 80), (30) 667 | 668 | country KW: DFS-ETSI 669 | (2402 - 2482 @ 40), (20) 670 | (5170 - 5250 @ 80), (20), AUTO-BW 671 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 672 | 673 | country KY: DFS-FCC 674 | (2402 - 2482 @ 40), (20) 675 | (5170 - 5250 @ 80), (24), AUTO-BW 676 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 677 | (5490 - 5730 @ 160), (24), DFS 678 | (5735 - 5835 @ 80), (30) 679 | 680 | country KZ: 681 | (2402 - 2482 @ 40), (20) 682 | 683 | country LB: DFS-FCC 684 | (2402 - 2482 @ 40), (20) 685 | (5170 - 5250 @ 80), (17), AUTO-BW 686 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 687 | (5490 - 5730 @ 160), (24), DFS 688 | (5735 - 5835 @ 80), (30) 689 | 690 | # Source: 691 | # http://www.ntrc.org.lc/operational_structures.htm 692 | country LC: DFS-ETSI 693 | (2402 - 2482 @ 40), (20) 694 | (5170 - 5250 @ 80), (20), AUTO-BW 695 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 696 | (5490 - 5710 @ 160), (30), DFS 697 | (5735 - 5815 @ 80), (30) 698 | 699 | country LI: DFS-ETSI 700 | (2402 - 2482 @ 40), (20) 701 | (5170 - 5250 @ 80), (20), AUTO-BW 702 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 703 | (5490 - 5710 @ 160), (27), DFS 704 | 705 | country LK: DFS-FCC 706 | (2402 - 2482 @ 40), (20) 707 | (5170 - 5250 @ 20), (17) 708 | (5250 - 5330 @ 20), (24), DFS 709 | (5490 - 5730 @ 20), (24), DFS 710 | (5735 - 5835 @ 20), (30) 711 | 712 | # Source: 713 | # http://lca.org.ls/images/documents/lesotho_national_frequency_allocation_plan.pdf 714 | country LS: DFS-ETSI 715 | (2402 - 2482 @ 40), (20) 716 | (5170 - 5250 @ 80), (20), AUTO-BW 717 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 718 | (5490 - 5710 @ 160), (27), DFS 719 | 720 | country LT: DFS-ETSI 721 | (2402 - 2482 @ 40), (20) 722 | (5170 - 5250 @ 80), (20), AUTO-BW 723 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 724 | (5490 - 5710 @ 160), (27), DFS 725 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 726 | (57000 - 66000 @ 2160), (40) 727 | 728 | country LU: DFS-ETSI 729 | (2402 - 2482 @ 40), (20) 730 | (5170 - 5250 @ 80), (20), AUTO-BW 731 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 732 | (5490 - 5710 @ 160), (27), DFS 733 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 734 | (57000 - 66000 @ 2160), (40) 735 | 736 | country LV: DFS-ETSI 737 | (2402 - 2482 @ 40), (20) 738 | (5170 - 5250 @ 80), (20), AUTO-BW 739 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 740 | (5490 - 5710 @ 160), (27), DFS 741 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 742 | (57000 - 66000 @ 2160), (40) 743 | 744 | country MA: DFS-ETSI 745 | (2402 - 2482 @ 40), (20) 746 | (5170 - 5250 @ 80), (20), AUTO-BW 747 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 748 | 749 | country MC: DFS-ETSI 750 | (2402 - 2482 @ 40), (20) 751 | (5170 - 5250 @ 80), (20), AUTO-BW 752 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 753 | (5490 - 5710 @ 160), (27), DFS 754 | 755 | # Source: 756 | # http://www.cnfr.md/index.php?pag=sec&id=117&l=en 757 | country MD: DFS-ETSI 758 | (2402 - 2482 @ 40), (20) 759 | (5170 - 5250 @ 80), (20), AUTO-BW 760 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 761 | (5490 - 5710 @ 160), (27), DFS 762 | 763 | # Source: 764 | # http://www.cept.org/files/1050/Tools%20and%20Services/EFIS%20-%20ECO%20Frequency%20Information%20System/National%20frequency%20tables/Montenegro%20NAFT%20-%202010.pdf 765 | country ME: DFS-ETSI 766 | (2402 - 2482 @ 40), (20) 767 | (5170 - 5250 @ 80), (20), AUTO-BW 768 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 769 | (5490 - 5710 @ 160), (27), DFS 770 | 771 | country MF: DFS-ETSI 772 | (2402 - 2482 @ 40), (20) 773 | (5170 - 5250 @ 80), (20), AUTO-BW 774 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 775 | (5490 - 5710 @ 160), (27), DFS 776 | 777 | country MH: DFS-FCC 778 | (2402 - 2472 @ 40), (30) 779 | (5170 - 5250 @ 80), (24), AUTO-BW 780 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 781 | (5490 - 5730 @ 160), (24), DFS 782 | (5735 - 5835 @ 80), (30) 783 | 784 | country MK: DFS-ETSI 785 | (2402 - 2482 @ 40), (20) 786 | (5170 - 5250 @ 80), (20), AUTO-BW 787 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 788 | (5490 - 5710 @ 160), (27), DFS 789 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 790 | (57000 - 66000 @ 2160), (40) 791 | 792 | country MN: DFS-FCC 793 | (2402 - 2482 @ 40), (20) 794 | (5170 - 5250 @ 80), (24), AUTO-BW 795 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 796 | (5490 - 5730 @ 160), (24), DFS 797 | (5735 - 5835 @ 80), (30) 798 | 799 | country MO: DFS-FCC 800 | (2402 - 2482 @ 40), (23) 801 | (5170 - 5250 @ 80), (23), AUTO-BW 802 | (5250 - 5330 @ 80), (23), DFS, AUTO-BW 803 | (5490 - 5730 @ 160), (30), DFS 804 | (5735 - 5835 @ 80), (30) 805 | 806 | country MP: DFS-FCC 807 | (2402 - 2472 @ 40), (30) 808 | (5170 - 5250 @ 80), (24), AUTO-BW 809 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 810 | (5490 - 5730 @ 160), (24), DFS 811 | (5735 - 5835 @ 80), (30) 812 | 813 | country MQ: DFS-ETSI 814 | (2402 - 2482 @ 40), (20) 815 | (5170 - 5250 @ 80), (20), AUTO-BW 816 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 817 | (5490 - 5710 @ 160), (27), DFS 818 | 819 | # Source: 820 | # http://www.are.mr/pdfs/telec_freq_TNAbf_2010.pdf 821 | country MR: DFS-ETSI 822 | (2402 - 2482 @ 40), (20) 823 | (5170 - 5250 @ 80), (20), AUTO-BW 824 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 825 | (5490 - 5710 @ 160), (27), DFS 826 | 827 | country MT: DFS-ETSI 828 | (2402 - 2482 @ 40), (20) 829 | (5170 - 5250 @ 80), (20), AUTO-BW 830 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 831 | (5490 - 5710 @ 160), (27), DFS 832 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 833 | (57000 - 66000 @ 2160), (40) 834 | 835 | country MU: DFS-FCC 836 | (2402 - 2482 @ 40), (20) 837 | (5170 - 5250 @ 80), (24), AUTO-BW 838 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 839 | (5490 - 5730 @ 160), (24), DFS 840 | (5735 - 5835 @ 80), (30) 841 | 842 | # Source: 843 | # http://www.cam.gov.mv/docs/tech_standards/TAM-TS-100-2004-WLAN.pdf 844 | country MV: DFS-ETSI 845 | (2400 - 2483.5 @ 40), (100 mW) 846 | (5150 - 5250 @ 80), (200 mW), AUTO-BW 847 | (5250 - 5350 @ 80), (100 mW), DFS, AUTO-BW 848 | (5725 - 5850 @ 80), (100 mW) 849 | 850 | country MW: DFS-ETSI 851 | (2402 - 2482 @ 40), (20) 852 | (5170 - 5250 @ 80), (20), AUTO-BW 853 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 854 | (5490 - 5710 @ 160), (27), DFS 855 | 856 | country MX: DFS-FCC 857 | (2402 - 2482 @ 40), (20) 858 | (5170 - 5250 @ 80), (17), AUTO-BW 859 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 860 | (5490 - 5730 @ 160), (24), DFS 861 | (5735 - 5835 @ 80), (30) 862 | 863 | country MY: DFS-FCC 864 | (2402 - 2482 @ 40), (20) 865 | (5170 - 5250 @ 80), (24), AUTO-BW 866 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 867 | (5490 - 5650 @ 160), (24), DFS 868 | (5735 - 5835 @ 80), (24) 869 | 870 | country NG: DFS-ETSI 871 | (2402 - 2482 @ 40), (20) 872 | (5250 - 5330 @ 80), (30), DFS 873 | (5735 - 5835 @ 80), (30) 874 | 875 | country NI: DFS-FCC 876 | (2402 - 2472 @ 40), (30) 877 | (5170 - 5250 @ 80), (24), AUTO-BW 878 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 879 | (5490 - 5730 @ 160), (24), DFS 880 | (5735 - 5835 @ 80), (30) 881 | 882 | # Regulation on the use of frequency space without a license and 883 | # without notification 2015 884 | # 885 | # http://wetten.overheid.nl/BWBR0036378/2015-03-05 886 | 887 | country NL: DFS-ETSI 888 | (2402 - 2482 @ 40), (20) 889 | (5170 - 5250 @ 80), (20), NO-OUTDOOR, AUTO-BW 890 | (5250 - 5330 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW 891 | (5490 - 5710 @ 160), (27), DFS 892 | # short range devices (ETSI EN 300 440-1) 893 | (5725 - 5875 @ 80), (25 mW) 894 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 895 | (57000 - 66000 @ 2160), (40) 896 | 897 | # Data from http://www.lovdata.no/dokument/SF/forskrift/2012-01-19-77 898 | # Power at 5250 - 5350 MHz, 5470 - 5725 MHz and 5815 – 5850 MHz can 899 | # be doubled if TPC is implemented. 900 | # Up to 2W (or 4W with TPC) is allowed in the 5725 – 5795 MHz band 901 | # which has been merged with 5470 - 5725 MHz to allow wide channels 902 | country NO: DFS-ETSI 903 | (2400 - 2483.5 @ 40), (100 mW) 904 | (5150 - 5250 @ 80), (200 mW), AUTO-BW 905 | (5250 - 5350 @ 80), (100 mW), DFS, AUTO-BW 906 | (5470 - 5795 @ 160), (500 mW), DFS 907 | (5815 - 5850 @ 35), (2000 mW), DFS 908 | (17100 - 17300 @ 200), (100 mW) 909 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 910 | (57000 - 66000 @ 2160), (40) 911 | 912 | country NP: DFS-JP 913 | (2402 - 2482 @ 40), (20) 914 | (5170 - 5250 @ 80), (20), AUTO-BW 915 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 916 | (5735 - 5835 @ 80), (20) 917 | 918 | country NZ: DFS-ETSI 919 | (2402 - 2482 @ 40), (30) 920 | (5170 - 5250 @ 80), (17), AUTO-BW 921 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 922 | (5490 - 5730 @ 160), (24), DFS 923 | (5735 - 5835 @ 80), (30) 924 | 925 | country OM: DFS-ETSI 926 | (2402 - 2482 @ 40), (20) 927 | (5170 - 5250 @ 80), (20), AUTO-BW 928 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 929 | (5490 - 5710 @ 160), (27), DFS 930 | 931 | country PA: DFS-FCC 932 | (2402 - 2472 @ 40), (30) 933 | (5170 - 5250 @ 80), (17), AUTO-BW 934 | (5250 - 5330 @ 80), (23), DFS, AUTO-BW 935 | (5735 - 5835 @ 80), (30) 936 | 937 | country PE: DFS-FCC 938 | (2402 - 2482 @ 40), (20) 939 | (5170 - 5250 @ 80), (17), AUTO-BW 940 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 941 | (5490 - 5730 @ 160), (24), DFS 942 | (5735 - 5835 @ 80), (30) 943 | 944 | country PF: DFS-ETSI 945 | (2402 - 2482 @ 40), (20) 946 | (5170 - 5250 @ 80), (20), AUTO-BW 947 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 948 | (5490 - 5710 @ 160), (27), DFS 949 | 950 | country PG: DFS-FCC 951 | (2402 - 2482 @ 40), (20) 952 | (5170 - 5250 @ 80), (17), AUTO-BW 953 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 954 | (5490 - 5730 @ 160), (24), DFS 955 | (5735 - 5835 @ 80), (30) 956 | 957 | country PH: DFS-FCC 958 | (2402 - 2482 @ 40), (20) 959 | (5170 - 5250 @ 80), (17), AUTO-BW 960 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 961 | (5490 - 5730 @ 160), (24), DFS 962 | (5735 - 5835 @ 80), (30) 963 | 964 | country PK: DFS-JP 965 | (2402 - 2482 @ 40), (20) 966 | (5735 - 5835 @ 80), (30) 967 | 968 | country PL: DFS-ETSI 969 | (2402 - 2482 @ 40), (20) 970 | (5170 - 5250 @ 80), (20), AUTO-BW 971 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 972 | (5490 - 5710 @ 160), (27), DFS 973 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 974 | (57000 - 66000 @ 2160), (40) 975 | 976 | country PM: DFS-ETSI 977 | (2402 - 2482 @ 40), (20) 978 | (5170 - 5250 @ 80), (20), AUTO-BW 979 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 980 | (5490 - 5710 @ 160), (27), DFS 981 | 982 | country PR: DFS-FCC 983 | (2402 - 2472 @ 40), (30) 984 | (5170 - 5250 @ 80), (17), AUTO-BW 985 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 986 | (5490 - 5730 @ 160), (24), DFS 987 | (5735 - 5835 @ 80), (30) 988 | 989 | country PT: DFS-ETSI 990 | (2402 - 2482 @ 40), (20) 991 | (5170 - 5250 @ 80), (20), AUTO-BW 992 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 993 | (5490 - 5710 @ 160), (27), DFS 994 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 995 | (57000 - 66000 @ 2160), (40) 996 | 997 | country PW: DFS-FCC 998 | (2402 - 2472 @ 40), (30) 999 | (5170 - 5250 @ 80), (24), AUTO-BW 1000 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 1001 | (5490 - 5730 @ 160), (24), DFS 1002 | (5735 - 5835 @ 80), (30) 1003 | 1004 | country PY: DFS-FCC 1005 | (2402 - 2482 @ 40), (20) 1006 | (5170 - 5250 @ 80), (24), AUTO-BW 1007 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 1008 | (5490 - 5730 @ 160), (24), DFS 1009 | (5735 - 5835 @ 80), (30) 1010 | 1011 | country QA: DFS-JP 1012 | (2402 - 2482 @ 40), (20) 1013 | (5735 - 5835 @ 80), (30) 1014 | 1015 | country RE: DFS-ETSI 1016 | (2402 - 2482 @ 40), (20) 1017 | (5170 - 5250 @ 80), (20), AUTO-BW 1018 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 1019 | (5490 - 5710 @ 160), (27), DFS 1020 | 1021 | country RO: DFS-ETSI 1022 | (2402 - 2482 @ 40), (20) 1023 | (5170 - 5250 @ 80), (20), AUTO-BW 1024 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 1025 | (5490 - 5710 @ 160), (27), DFS 1026 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 1027 | (57000 - 66000 @ 2160), (40) 1028 | 1029 | 1030 | # Source: 1031 | # http://www.ratel.rs/upload/documents/Plan_namene/Plan_namene-sl_glasnik.pdf 1032 | country RS: DFS-ETSI 1033 | (2400 - 2483.5 @ 40), (100 mW) 1034 | (5150 - 5350 @ 40), (200 mW), NO-OUTDOOR 1035 | (5470 - 5725 @ 20), (1000 mW), DFS 1036 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 1037 | (57000 - 66000 @ 2160), (40) 1038 | 1039 | country RU: DFS-ETSI 1040 | (2402 - 2482 @ 40), (20) 1041 | (5170 - 5250 @ 80), (20), AUTO-BW 1042 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 1043 | (5650 - 5730 @ 80), (30), DFS 1044 | (5735 - 5835 @ 80), (30) 1045 | # 60 GHz band channels 1-4, ref: Changes to NLA 124_Order №129_22042015.pdf 1046 | (57000 - 66000 @ 2160), (40) 1047 | 1048 | country RW: DFS-FCC 1049 | (2402 - 2482 @ 40), (20) 1050 | (5170 - 5250 @ 80), (17), AUTO-BW 1051 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 1052 | (5490 - 5730 @ 160), (24), DFS 1053 | (5735 - 5835 @ 80), (30) 1054 | 1055 | country SA: DFS-ETSI 1056 | (2402 - 2482 @ 40), (20) 1057 | (5170 - 5250 @ 80), (20), AUTO-BW 1058 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 1059 | (5490 - 5710 @ 160), (27), DFS 1060 | 1061 | country SE: DFS-ETSI 1062 | (2402 - 2482 @ 40), (20) 1063 | (5170 - 5250 @ 80), (20), AUTO-BW 1064 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 1065 | (5490 - 5710 @ 160), (27), DFS 1066 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 1067 | (57000 - 66000 @ 2160), (40) 1068 | 1069 | country SG: DFS-FCC 1070 | (2402 - 2482 @ 40), (20) 1071 | (5170 - 5250 @ 80), (17), AUTO-BW 1072 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 1073 | (5490 - 5730 @ 160), (24), DFS 1074 | (5735 - 5835 @ 80), (30) 1075 | 1076 | country SI: DFS-ETSI 1077 | (2402 - 2482 @ 40), (20) 1078 | (5170 - 5250 @ 80), (20), AUTO-BW 1079 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 1080 | (5490 - 5710 @ 160), (27), DFS 1081 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 1082 | (57000 - 66000 @ 2160), (40) 1083 | 1084 | country SK: DFS-ETSI 1085 | (2402 - 2482 @ 40), (20) 1086 | (5170 - 5250 @ 80), (20), AUTO-BW 1087 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 1088 | (5490 - 5710 @ 160), (27), DFS 1089 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 1090 | (57000 - 66000 @ 2160), (40) 1091 | 1092 | # Source: 1093 | # Regulation N° 2004-005 ART/DG/DRC/D.Rég 1094 | country SN: DFS-FCC 1095 | (2402 - 2482 @ 40), (20) 1096 | (5170 - 5250 @ 80), (17), AUTO-BW 1097 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 1098 | (5490 - 5730 @ 160), (24), DFS 1099 | (5735 - 5835 @ 80), (30) 1100 | 1101 | country SR: DFS-ETSI 1102 | (2402 - 2482 @ 40), (20) 1103 | (5170 - 5250 @ 80), (20), AUTO-BW 1104 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 1105 | (5490 - 5710 @ 160), (27), DFS 1106 | 1107 | country SV: DFS-FCC 1108 | (2402 - 2482 @ 40), (20) 1109 | (5170 - 5250 @ 20), (17) 1110 | (5250 - 5330 @ 20), (23), DFS 1111 | (5735 - 5835 @ 20), (30) 1112 | 1113 | country SY: 1114 | (2402 - 2482 @ 40), (20) 1115 | 1116 | # Source: 1117 | # http://www.telecommission.tc/Spectrum-plan20110324-101210.html 1118 | country TC: DFS-FCC 1119 | (2402 - 2482 @ 40), (20) 1120 | (5170 - 5250 @ 80), (24), AUTO-BW 1121 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 1122 | (5490 - 5730 @ 160), (24), DFS 1123 | (5735 - 5835 @ 80), (30) 1124 | 1125 | country TD: DFS-ETSI 1126 | (2402 - 2482 @ 40), (20) 1127 | (5170 - 5250 @ 80), (20), AUTO-BW 1128 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 1129 | (5490 - 5710 @ 160), (27), DFS 1130 | 1131 | country TG: DFS-ETSI 1132 | (2402 - 2482 @ 40), (20) 1133 | (5170 - 5250 @ 40), (20) 1134 | (5250 - 5330 @ 40), (20), DFS 1135 | (5490 - 5710 @ 40), (27), DFS 1136 | 1137 | country TH: DFS-FCC 1138 | (2402 - 2482 @ 40), (20) 1139 | (5170 - 5250 @ 80), (17), AUTO-BW 1140 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 1141 | (5490 - 5730 @ 160), (24), DFS 1142 | (5735 - 5835 @ 80), (30) 1143 | 1144 | country TN: DFS-ETSI 1145 | (2402 - 2482 @ 40), (20) 1146 | (5170 - 5250 @ 80), (20), AUTO-BW 1147 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 1148 | 1149 | country TR: DFS-ETSI 1150 | (2402 - 2482 @ 40), (20) 1151 | (5170 - 5250 @ 80), (20), AUTO-BW 1152 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 1153 | (5490 - 5710 @ 160), (27), DFS 1154 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 1155 | (57000 - 66000 @ 2160), (40) 1156 | 1157 | country TT: DFS-FCC 1158 | (2402 - 2482 @ 40), (20) 1159 | (5170 - 5250 @ 80), (17), AUTO-BW 1160 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 1161 | (5490 - 5730 @ 160), (24), DFS 1162 | (5735 - 5835 @ 80), (30) 1163 | 1164 | # Source: 1165 | # Table of Frequency Allocations of Republic of China (Taiwan) / Nov 2014: 1166 | # http://www.motc.gov.tw/websitedowndoc?file=post/201411171137330.doc& \ 1167 | # filedisplay=Table+of+radio+frequency+allocation.doc 1168 | # LP0002 Low-power Radio-frequency Devices Technical Regulations / 28 Jun 2011: 1169 | # http://www.ncc.gov.tw/english/show_file.aspx?table_name=news&file_sn=681 1170 | # (section 3.10.1, 4.7) 1171 | country TW: DFS-FCC 1172 | (2400 - 2483.5 @ 40), (30) 1173 | # Follow US 5.15 ~ 5.25 GHz: 30 dBm for master mode, 23 dBm for clients 1174 | (5150 - 5250 @ 80), (23), AUTO-BW 1175 | (5250 - 5350 @ 80), (23), DFS, AUTO-BW 1176 | (5470 - 5725 @ 160), (23), DFS 1177 | (5725 - 5850 @ 80), (30) 1178 | 1179 | country TZ: 1180 | (2402 - 2482 @ 40), (20) 1181 | (5735 - 5835 @ 80), (30) 1182 | 1183 | # Source: 1184 | # #914 / 06 Sep 2007: http://www.ucrf.gov.ua/uk/doc/nkrz/1196068874 1185 | # #1174 / 23 Oct 2008: http://www.nkrz.gov.ua/uk/activities/ruling/1225269361 1186 | # (appendix 8) 1187 | # Listed 5GHz range is a lowest common denominator for all related 1188 | # rules in the referenced laws. Such a range is used because of 1189 | # disputable definitions there. 1190 | country UA: DFS-ETSI 1191 | (2400 - 2483.5 @ 40), (20), NO-OUTDOOR 1192 | (5150 - 5250 @ 80), (20), NO-OUTDOOR, AUTO-BW 1193 | (5250 - 5350 @ 80), (20), DFS, NO-OUTDOOR, AUTO-BW 1194 | (5490 - 5670 @ 160), (20), DFS 1195 | (5735 - 5835 @ 80), (20) 1196 | # 60 GHz band channels 1-4, ref: Etsi En 302 567 1197 | (57000 - 66000 @ 2160), (40) 1198 | 1199 | country UG: DFS-FCC 1200 | (2402 - 2482 @ 40), (20) 1201 | (5170 - 5250 @ 80), (24), AUTO-BW 1202 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 1203 | (5490 - 5730 @ 160), (24), DFS 1204 | (5735 - 5835 @ 80), (30) 1205 | 1206 | country US: DFS-FCC 1207 | (2402 - 2472 @ 40), (30) 1208 | # 5.15 ~ 5.25 GHz: 30 dBm for master mode, 23 dBm for clients 1209 | (5170 - 5250 @ 80), (23), AUTO-BW 1210 | (5250 - 5330 @ 80), (23), DFS, AUTO-BW 1211 | (5490 - 5730 @ 160), (23), DFS 1212 | (5735 - 5835 @ 80), (30) 1213 | # 60g band 1214 | # reference: http://cfr.regstoday.com/47cfr15.aspx#47_CFR_15p255 1215 | # channels 1,2,3, EIRP=40dBm(43dBm peak) 1216 | (57240 - 63720 @ 2160), (40) 1217 | 1218 | country UY: DFS-FCC 1219 | (2402 - 2482 @ 40), (20) 1220 | (5170 - 5250 @ 80), (23), AUTO-BW 1221 | (5250 - 5330 @ 80), (23), DFS, AUTO-BW 1222 | (5735 - 5835 @ 80), (30) 1223 | 1224 | # Source: 1225 | # http://cemc.uz/article/1976/ 1226 | country UZ: DFS-ETSI 1227 | (2402 - 2482 @ 40), (20) 1228 | (5170 - 5250 @ 80), (20), AUTO-BW 1229 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 1230 | 1231 | # Source: 1232 | # http://www.ntrc.vc/regulations/Jun_2006_Spectrum_Managment_Regulations.pdf 1233 | country VC: DFS-ETSI 1234 | (2402 - 2482 @ 40), (20) 1235 | (5170 - 5250 @ 80), (20), AUTO-BW 1236 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 1237 | (5490 - 5710 @ 160), (27), DFS 1238 | 1239 | # Source: 1240 | # Official Gazette (Gaceta Oficial) concerning Unlicensed transmitter use 1241 | # (10 June 2013) 1242 | # http://www.conatel.gob.ve/ 1243 | country VE: DFS-FCC 1244 | (2402 - 2482 @ 40), (30) 1245 | (5170 - 5250 @ 80), (23), AUTO-BW 1246 | (5250 - 5330 @ 80), (23), DFS, AUTO-BW 1247 | (5735 - 5835 @ 80), (30) 1248 | 1249 | country VI: DFS-FCC 1250 | (2402 - 2472 @ 40), (30) 1251 | (5170 - 5250 @ 80), (24), AUTO-BW 1252 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 1253 | (5490 - 5730 @ 160), (24), DFS 1254 | (5735 - 5835 @ 80), (30) 1255 | 1256 | country VN: DFS-FCC 1257 | (2402 - 2482 @ 40), (20) 1258 | (5170 - 5250 @ 80), (17) 1259 | (5250 - 5330 @ 80), (24), DFS 1260 | (5490 - 5730 @ 80), (24), DFS 1261 | (5735 - 5835 @ 80), (30) 1262 | 1263 | # Source: 1264 | # http://www.trr.vu/attachments/category/130/GURL_for_Short-range_Radiocommunication_Devices2.pdf 1265 | country VU: DFS-FCC 1266 | (2402 - 2482 @ 40), (20) 1267 | (5170 - 5250 @ 80), (17), AUTO-BW 1268 | (5250 - 5330 @ 80), (24), DFS, AUTO-BW 1269 | (5490 - 5730 @ 160), (24), DFS 1270 | (5735 - 5835 @ 80), (30) 1271 | 1272 | country WF: DFS-ETSI 1273 | (2402 - 2482 @ 40), (20) 1274 | (5170 - 5250 @ 80), (20), AUTO-BW 1275 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 1276 | (5490 - 5710 @ 160), (27), DFS 1277 | 1278 | country WS: DFS-ETSI 1279 | (2402 - 2482 @ 40), (20) 1280 | (5170 - 5250 @ 40), (20) 1281 | (5250 - 5330 @ 40), (20), DFS 1282 | (5490 - 5710 @ 40), (27), DFS 1283 | 1284 | country YE: 1285 | (2402 - 2482 @ 40), (20) 1286 | 1287 | country YT: DFS-ETSI 1288 | (2402 - 2482 @ 40), (20) 1289 | (5170 - 5250 @ 80), (20), AUTO-BW 1290 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 1291 | (5490 - 5710 @ 160), (27), DFS 1292 | 1293 | country ZA: DFS-ETSI 1294 | (2402 - 2482 @ 40), (20) 1295 | (5170 - 5250 @ 80), (20), AUTO-BW 1296 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 1297 | (5490 - 5710 @ 160), (30) 1298 | 1299 | country ZW: DFS-ETSI 1300 | (2402 - 2482 @ 40), (20) 1301 | (5170 - 5250 @ 80), (20), AUTO-BW 1302 | (5250 - 5330 @ 80), (20), DFS, AUTO-BW 1303 | (5490 - 5710 @ 160), (27), DFS 1304 | 1305 | -------------------------------------------------------------------------------- /db2bin.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | from cStringIO import StringIO 4 | import struct 5 | import hashlib 6 | from dbparse import DBParser 7 | import sys 8 | 9 | MAGIC = 0x52474442 10 | VERSION = 19 11 | 12 | if len(sys.argv) < 3: 13 | print 'Usage: %s output-file input-file [key-file]' % sys.argv[0] 14 | sys.exit(2) 15 | 16 | def create_rules(countries): 17 | result = {} 18 | for c in countries.itervalues(): 19 | for rule in c.permissions: 20 | result[rule] = 1 21 | return result.keys() 22 | 23 | def create_collections(countries): 24 | result = {} 25 | for c in countries.itervalues(): 26 | result[c.permissions] = 1 27 | return result.keys() 28 | 29 | 30 | def be32(output, val): 31 | output.write(struct.pack('>I', val)) 32 | 33 | class PTR(object): 34 | def __init__(self, output): 35 | self._output = output 36 | self._pos = output.tell() 37 | be32(output, 0xFFFFFFFF) 38 | 39 | def set(self, val=None): 40 | if val is None: 41 | val = self._output.tell() 42 | self._offset = val 43 | pos = self._output.tell() 44 | self._output.seek(self._pos) 45 | be32(self._output, val) 46 | self._output.seek(pos) 47 | 48 | def get(self): 49 | return self._offset 50 | 51 | p = DBParser() 52 | countries = p.parse(file(sys.argv[2])) 53 | power = [] 54 | bands = [] 55 | for c in countries.itervalues(): 56 | for perm in c.permissions: 57 | if not perm.freqband in bands: 58 | bands.append(perm.freqband) 59 | if not perm.power in power: 60 | power.append(perm.power) 61 | rules = create_rules(countries) 62 | rules.sort(cmp=lambda x, y: cmp(x.freqband, y.freqband)) 63 | collections = create_collections(countries) 64 | collections.sort(cmp=lambda x, y: cmp(x[0].freqband, y[0].freqband)) 65 | 66 | output = StringIO() 67 | 68 | # struct regdb_file_header 69 | be32(output, MAGIC) 70 | be32(output, VERSION) 71 | reg_country_ptr = PTR(output) 72 | # add number of countries 73 | be32(output, len(countries)) 74 | siglen = PTR(output) 75 | 76 | power_rules = {} 77 | for pr in power: 78 | power_rules[pr] = output.tell() 79 | pr = [int(v * 100.0) for v in (pr.max_ant_gain, pr.max_eirp)] 80 | # struct regdb_file_power_rule 81 | output.write(struct.pack('>II', *pr)) 82 | 83 | freq_ranges = {} 84 | for fr in bands: 85 | freq_ranges[fr] = output.tell() 86 | fr = [int(f * 1000.0) for f in (fr.start, fr.end, fr.maxbw)] 87 | # struct regdb_file_freq_range 88 | output.write(struct.pack('>III', *fr)) 89 | 90 | 91 | reg_rules = {} 92 | for reg_rule in rules: 93 | freq_range, power_rule = reg_rule.freqband, reg_rule.power 94 | reg_rules[reg_rule] = output.tell() 95 | # struct regdb_file_reg_rule 96 | output.write(struct.pack('>III', freq_ranges[freq_range], power_rules[power_rule], 97 | reg_rule.flags)) 98 | 99 | 100 | reg_rules_collections = {} 101 | 102 | for coll in collections: 103 | reg_rules_collections[coll] = output.tell() 104 | # struct regdb_file_reg_rules_collection 105 | coll = list(coll) 106 | be32(output, len(coll)) 107 | coll.sort(cmp=lambda x, y: cmp(x.freqband, y.freqband)) 108 | for regrule in coll: 109 | be32(output, reg_rules[regrule]) 110 | 111 | # update country pointer now! 112 | reg_country_ptr.set() 113 | 114 | countrynames = countries.keys() 115 | countrynames.sort() 116 | for alpha2 in countrynames: 117 | coll = countries[alpha2] 118 | # struct regdb_file_reg_country 119 | output.write(struct.pack('>ccxBI', str(alpha2[0]), str(alpha2[1]), coll.dfs_region, reg_rules_collections[coll.permissions])) 120 | 121 | 122 | if len(sys.argv) > 3: 123 | # Load RSA only now so people can use this script 124 | # without having those libraries installed to verify 125 | # their SQL changes 126 | from M2Crypto import RSA 127 | 128 | # determine signature length 129 | key = RSA.load_key(sys.argv[3]) 130 | hash = hashlib.sha1() 131 | hash.update(output.getvalue()) 132 | sig = key.sign(hash.digest()) 133 | # write it to file 134 | siglen.set(len(sig)) 135 | # sign again 136 | hash = hashlib.sha1() 137 | hash.update(output.getvalue()) 138 | sig = key.sign(hash.digest()) 139 | 140 | output.write(sig) 141 | else: 142 | siglen.set(0) 143 | 144 | outfile = open(sys.argv[1], 'w') 145 | outfile.write(output.getvalue()) 146 | -------------------------------------------------------------------------------- /dbparse.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import sys, math 4 | 5 | # must match enum nl80211_reg_rule_flags 6 | 7 | flag_definitions = { 8 | 'NO-OFDM': 1<<0, 9 | 'NO-CCK': 1<<1, 10 | 'NO-INDOOR': 1<<2, 11 | 'NO-OUTDOOR': 1<<3, 12 | 'DFS': 1<<4, 13 | 'PTP-ONLY': 1<<5, 14 | 'PTMP-ONLY': 1<<6, 15 | 'NO-IR': 1<<7, 16 | # hole at bit 8 17 | # hole at bit 9. FIXME: Where is NO-HT40 defined? 18 | 'NO-HT40': 1<<10, 19 | 'AUTO-BW': 1<<11, 20 | } 21 | 22 | dfs_regions = { 23 | 'DFS-FCC': 1, 24 | 'DFS-ETSI': 2, 25 | 'DFS-JP': 3, 26 | } 27 | 28 | class FreqBand(object): 29 | def __init__(self, start, end, bw, comments=None): 30 | self.start = start 31 | self.end = end 32 | self.maxbw = bw 33 | self.comments = comments or [] 34 | 35 | def __cmp__(self, other): 36 | s = self 37 | o = other 38 | if not isinstance(o, FreqBand): 39 | return False 40 | return cmp((s.start, s.end, s.maxbw), (o.start, o.end, o.maxbw)) 41 | 42 | def __hash__(self): 43 | s = self 44 | return hash((s.start, s.end, s.maxbw)) 45 | 46 | def __str__(self): 47 | return '' % ( 48 | self.start, self.end, self.maxbw) 49 | 50 | class PowerRestriction(object): 51 | def __init__(self, max_ant_gain, max_eirp, comments = None): 52 | self.max_ant_gain = max_ant_gain 53 | self.max_eirp = max_eirp 54 | self.comments = comments or [] 55 | 56 | def __cmp__(self, other): 57 | s = self 58 | o = other 59 | if not isinstance(o, PowerRestriction): 60 | return False 61 | return cmp((s.max_ant_gain, s.max_eirp), 62 | (o.max_ant_gain, o.max_eirp)) 63 | 64 | def __str__(self): 65 | return '' 66 | 67 | def __hash__(self): 68 | s = self 69 | return hash((s.max_ant_gain, s.max_eirp)) 70 | 71 | class DFSRegionError(Exception): 72 | def __init__(self, dfs_region): 73 | self.dfs_region = dfs_region 74 | 75 | class FlagError(Exception): 76 | def __init__(self, flag): 77 | self.flag = flag 78 | 79 | class Permission(object): 80 | def __init__(self, freqband, power, flags): 81 | assert isinstance(freqband, FreqBand) 82 | assert isinstance(power, PowerRestriction) 83 | self.freqband = freqband 84 | self.power = power 85 | self.flags = 0 86 | for flag in flags: 87 | if not flag in flag_definitions: 88 | raise FlagError(flag) 89 | self.flags |= flag_definitions[flag] 90 | self.textflags = flags 91 | 92 | def _as_tuple(self): 93 | return (self.freqband, self.power, self.flags) 94 | 95 | def __cmp__(self, other): 96 | if not isinstance(other, Permission): 97 | return False 98 | return cmp(self._as_tuple(), other._as_tuple()) 99 | 100 | def __hash__(self): 101 | return hash(self._as_tuple()) 102 | 103 | class Country(object): 104 | def __init__(self, dfs_region, permissions=None, comments=None): 105 | self._permissions = permissions or [] 106 | self.comments = comments or [] 107 | self.dfs_region = 0 108 | 109 | if dfs_region: 110 | if not dfs_region in dfs_regions: 111 | raise DFSRegionError(dfs_region) 112 | self.dfs_region = dfs_regions[dfs_region] 113 | 114 | def add(self, perm): 115 | assert isinstance(perm, Permission) 116 | self._permissions.append(perm) 117 | self._permissions.sort() 118 | 119 | def __contains__(self, perm): 120 | assert isinstance(perm, Permission) 121 | return perm in self._permissions 122 | 123 | def __str__(self): 124 | r = ['(%s, %s)' % (str(b), str(p)) for b, p in self._permissions] 125 | return '' % (', '.join(r)) 126 | 127 | def _get_permissions_tuple(self): 128 | return tuple(self._permissions) 129 | permissions = property(_get_permissions_tuple) 130 | 131 | class SyntaxError(Exception): 132 | pass 133 | 134 | class DBParser(object): 135 | def __init__(self, warn=None): 136 | self._warn_callout = warn or sys.stderr.write 137 | 138 | def _syntax_error(self, txt=None): 139 | txt = txt and ' (%s)' % txt or '' 140 | raise SyntaxError("Syntax error in line %d%s" % (self._lineno, txt)) 141 | 142 | def _warn(self, txt): 143 | self._warn_callout("Warning (line %d): %s\n" % (self._lineno, txt)) 144 | 145 | def _parse_band_def(self, bname, banddef, dupwarn=True): 146 | try: 147 | freqs, bw = banddef.split('@') 148 | bw = float(bw) 149 | except ValueError: 150 | bw = 20.0 151 | 152 | try: 153 | start, end = freqs.split('-') 154 | start = float(start) 155 | end = float(end) 156 | # The kernel will reject these, so might as well reject this 157 | # upon building it. 158 | if start <= 0: 159 | self._syntax_error("Invalid start freq (%d)" % start) 160 | if end <= 0: 161 | self._syntax_error("Invalid end freq (%d)" % end) 162 | if start > end: 163 | self._syntax_error("Inverted freq range (%d - %d)" % (start, end)) 164 | if start == end: 165 | self._syntax_error("Start and end freqs are equal (%d)" % start) 166 | except ValueError: 167 | self._syntax_error("band must have frequency range") 168 | 169 | b = FreqBand(start, end, bw, comments=self._comments) 170 | self._comments = [] 171 | self._banddup[bname] = bname 172 | if b in self._bandrev: 173 | if dupwarn: 174 | self._warn('Duplicate band definition ("%s" and "%s")' % ( 175 | bname, self._bandrev[b])) 176 | self._banddup[bname] = self._bandrev[b] 177 | self._bands[bname] = b 178 | self._bandrev[b] = bname 179 | self._bandline[bname] = self._lineno 180 | 181 | def _parse_band(self, line): 182 | try: 183 | bname, line = line.split(':', 1) 184 | if not bname: 185 | self._syntax_error("'band' keyword must be followed by name") 186 | except ValueError: 187 | self._syntax_error("band name must be followed by colon") 188 | 189 | if bname in flag_definitions: 190 | self._syntax_error("Invalid band name") 191 | 192 | self._parse_band_def(bname, line) 193 | 194 | def _parse_power(self, line): 195 | try: 196 | pname, line = line.split(':', 1) 197 | if not pname: 198 | self._syntax_error("'power' keyword must be followed by name") 199 | except ValueError: 200 | self._syntax_error("power name must be followed by colon") 201 | 202 | if pname in flag_definitions: 203 | self._syntax_error("Invalid power name") 204 | 205 | self._parse_power_def(pname, line) 206 | 207 | def _parse_power_def(self, pname, line, dupwarn=True): 208 | try: 209 | max_eirp = line 210 | if max_eirp == 'N/A': 211 | max_eirp = '0' 212 | max_ant_gain = float(0) 213 | def conv_pwr(pwr): 214 | if pwr.endswith('mW'): 215 | pwr = float(pwr[:-2]) 216 | return 10.0 * math.log10(pwr) 217 | else: 218 | return float(pwr) 219 | max_eirp = conv_pwr(max_eirp) 220 | except ValueError: 221 | self._syntax_error("invalid power data") 222 | 223 | p = PowerRestriction(max_ant_gain, max_eirp, 224 | comments=self._comments) 225 | self._comments = [] 226 | self._powerdup[pname] = pname 227 | if p in self._powerrev: 228 | if dupwarn: 229 | self._warn('Duplicate power definition ("%s" and "%s")' % ( 230 | pname, self._powerrev[p])) 231 | self._powerdup[pname] = self._powerrev[p] 232 | self._power[pname] = p 233 | self._powerrev[p] = pname 234 | self._powerline[pname] = self._lineno 235 | 236 | def _parse_country(self, line): 237 | try: 238 | cname, cvals= line.split(':', 1) 239 | dfs_region = cvals.strip() 240 | if not cname: 241 | self._syntax_error("'country' keyword must be followed by name") 242 | except ValueError: 243 | self._syntax_error("country name must be followed by colon") 244 | 245 | cnames = cname.split(',') 246 | 247 | self._current_countries = {} 248 | for cname in cnames: 249 | if len(cname) != 2: 250 | self._warn("country '%s' not alpha2" % cname) 251 | if not cname in self._countries: 252 | self._countries[cname] = Country(dfs_region, comments=self._comments) 253 | self._current_countries[cname] = self._countries[cname] 254 | self._comments = [] 255 | 256 | def _parse_country_item(self, line): 257 | if line[0] == '(': 258 | try: 259 | band, line = line[1:].split('),', 1) 260 | bname = 'UNNAMED %d' % self._lineno 261 | self._parse_band_def(bname, band, dupwarn=False) 262 | except: 263 | self._syntax_error("Badly parenthesised band definition") 264 | else: 265 | try: 266 | bname, line = line.split(',', 1) 267 | if not bname: 268 | self._syntax_error("country definition must have band") 269 | if not line: 270 | self._syntax_error("country definition must have power") 271 | except ValueError: 272 | self._syntax_error("country definition must have band and power") 273 | 274 | if line[0] == '(': 275 | items = line.split('),', 1) 276 | if len(items) == 1: 277 | pname = items[0] 278 | line = '' 279 | if not pname[-1] == ')': 280 | self._syntax_error("Badly parenthesised power definition") 281 | pname = pname[:-1] 282 | flags = [] 283 | else: 284 | pname = items[0] 285 | flags = items[1].split(',') 286 | power = pname[1:] 287 | pname = 'UNNAMED %d' % self._lineno 288 | self._parse_power_def(pname, power, dupwarn=False) 289 | else: 290 | line = line.split(',') 291 | pname = line[0] 292 | flags = line[1:] 293 | 294 | if not bname in self._bands: 295 | self._syntax_error("band does not exist") 296 | if not pname in self._power: 297 | self._syntax_error("power does not exist") 298 | self._bands_used[bname] = True 299 | self._power_used[pname] = True 300 | # de-duplicate so binary database is more compact 301 | bname = self._banddup[bname] 302 | pname = self._powerdup[pname] 303 | b = self._bands[bname] 304 | p = self._power[pname] 305 | try: 306 | perm = Permission(b, p, flags) 307 | except FlagError, e: 308 | self._syntax_error("Invalid flag '%s'" % e.flag) 309 | for cname, c in self._current_countries.iteritems(): 310 | if perm in c: 311 | self._warn('Rule "%s, %s" added to "%s" twice' % ( 312 | bname, pname, cname)) 313 | else: 314 | c.add(perm) 315 | 316 | def parse(self, f): 317 | self._current_countries = None 318 | self._bands = {} 319 | self._power = {} 320 | self._countries = {} 321 | self._bands_used = {} 322 | self._power_used = {} 323 | self._bandrev = {} 324 | self._powerrev = {} 325 | self._banddup = {} 326 | self._powerdup = {} 327 | self._bandline = {} 328 | self._powerline = {} 329 | 330 | self._comments = [] 331 | 332 | self._lineno = 0 333 | for line in f: 334 | self._lineno += 1 335 | line = line.strip() 336 | if line[0:1] == '#': 337 | self._comments.append(line[1:].strip()) 338 | line = line.replace(' ', '').replace('\t', '') 339 | if not line: 340 | self._comments = [] 341 | line = line.split('#')[0] 342 | if not line: 343 | continue 344 | if line[0:4] == 'band': 345 | self._parse_band(line[4:]) 346 | self._current_countries = None 347 | self._comments = [] 348 | elif line[0:5] == 'power': 349 | self._parse_power(line[5:]) 350 | self._current_countries = None 351 | self._comments = [] 352 | elif line[0:7] == 'country': 353 | self._parse_country(line[7:]) 354 | self._comments = [] 355 | elif self._current_countries is not None: 356 | self._parse_country_item(line) 357 | self._comments = [] 358 | else: 359 | self._syntax_error("Expected band, power or country definition") 360 | 361 | countries = self._countries 362 | bands = {} 363 | for k, v in self._bands.iteritems(): 364 | if k in self._bands_used: 365 | bands[self._banddup[k]] = v 366 | continue 367 | # we de-duplicated, but don't warn again about the dupes 368 | if self._banddup[k] == k: 369 | self._lineno = self._bandline[k] 370 | self._warn('Unused band definition "%s"' % k) 371 | power = {} 372 | for k, v in self._power.iteritems(): 373 | if k in self._power_used: 374 | power[self._powerdup[k]] = v 375 | continue 376 | # we de-duplicated, but don't warn again about the dupes 377 | if self._powerdup[k] == k: 378 | self._lineno = self._powerline[k] 379 | self._warn('Unused power definition "%s"' % k) 380 | return countries 381 | -------------------------------------------------------------------------------- /debian-example/changelog: -------------------------------------------------------------------------------- 1 | wireless-regdb (2009.01.15-1) unstable; urgency=low 2 | 3 | * Initial release 4 | 5 | -- Luis R. Rodriguez Thu, 22 Jan 2009 16:00:00 +0100 6 | -------------------------------------------------------------------------------- /debian-example/compat: -------------------------------------------------------------------------------- 1 | 5 2 | -------------------------------------------------------------------------------- /debian-example/control: -------------------------------------------------------------------------------- 1 | Source: wireless-regdb 2 | Section: admin 3 | Priority: optional 4 | Maintainer: Luis R. Rodriguez 5 | Build-Depends: cdbs, debhelper (>= 5), python 6 | Standards-Version: 3.7.3 7 | 8 | Package: wireless-regdb 9 | Architecture: all 10 | Depends: 11 | Suggests: crda 12 | Description: The Linux wireless regulatory database 13 | This package contains the wireless regulatory database used by all 14 | cfg80211 based Linux wireless drivers. The wireless database being 15 | used is maintained by Seth Forshee. 16 | -------------------------------------------------------------------------------- /debian-example/copyright: -------------------------------------------------------------------------------- 1 | This package was debianized by Luis Rodriguez on 2 | Thu, 22 Jan 2009 16:00:00 +0100. 3 | 4 | The wireless-regdb packages was downloaded from 5 | 6 | Copyright (c) 2008, Luis R. Rodriguez 7 | Copyright (c) 2008, Johannes Berg 8 | Copyright (c) 2008, Michael Green 9 | 10 | Permission to use, copy, modify, and/or distribute this software for any 11 | purpose with or without fee is hereby granted, provided that the above 12 | copyright notice and this permission notice appear in all copies. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 15 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 16 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 17 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 18 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 19 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 20 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 21 | 22 | -------------------------------------------------------------------------------- /debian-example/docs: -------------------------------------------------------------------------------- 1 | README 2 | -------------------------------------------------------------------------------- /debian-example/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | 3 | include /usr/share/cdbs/1/rules/debhelper.mk 4 | 5 | PREFIX = /usr 6 | CRDA_LIB ?= $(PREFIX)/lib/crda 7 | 8 | install/wireless-regdb:: 9 | install -o 0 -g 0 -m 755 -d debian/$(cdbs_curpkg)/$(CRDA_LIB) 10 | install -o 0 -g 0 -m 644 regulatory.bin debian/$(cdbs_curpkg)/$(CRDA_LIB)/regulatory.bin 11 | -------------------------------------------------------------------------------- /regulatory.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Distrotech/wireless-regdb/58617bb78e05ce9e85f2af2b8e2a352914acdd73/regulatory.bin -------------------------------------------------------------------------------- /regulatory.bin.5: -------------------------------------------------------------------------------- 1 | .TH regulatory.bin 5 "23 January 2009" "regulatory.bin" "Linux" 2 | .SH NAME 3 | regulatory.bin \- The Linux wireless regulatory database 4 | 5 | .ad l 6 | .in +8 7 | .ti -8 8 | 9 | .SS 10 | .SH Description 11 | .B regulatory.bin 12 | is the file used by the Linux wireless subsystem to keep its regulatory 13 | database information. It is read by 14 | .B crda 15 | upon the Linux kernel's request for regulatory information for a specific 16 | ISO / IEC 3166 alpha2 country code. The regulatory database is kept in 17 | a small binary format for size and code efficiency. The 18 | .B regulatory.bin 19 | file can be parsed and read in human format by using the 20 | .B regdbdump 21 | command. The 22 | .B regulatory.bin 23 | file should be updated upon regulatory changes or corrections. 24 | 25 | .SH Upkeeping 26 | The regulatory database is maintained by the community as such 27 | you are encouraged to send any corrections or updates to the 28 | linux-wireless mailing list: 29 | .B linux-wireless@vger.kernel.org 30 | 31 | .SH SEE ALSO 32 | .BR regdbdump (8) 33 | .BR crda (8) 34 | .BR iw (8) 35 | 36 | .BR http://wireless.kernel.org/en/developers/Regulatory/ 37 | 38 | -------------------------------------------------------------------------------- /sforshee.key.pub.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtUDjnCiEOQPyOddmLEE4 3 | Fax+pYNxJX6QfGjdbz/Z11k4n3xqUsIDKi1+ZvQesxJwIFvUlzI9cYs7GwgXFGth 4 | xFeLlhYc/STVCwn5aBGE+8pRDNFFGdoQRIrZ/nap/WAtGAsolbIt6oiYuNFWIfBT 5 | H/ECb+lGm5NfKJAPrDb6aCNxV1b2zNPffSrZG3NF67onhe96f6XLgMcwNtJT7uys 6 | Hucx8TainGPGZVt/JXVooerTfgBcml7YIBgydwcpEmYeNnPnlwRBN7Gxciv0oSkg 7 | fJZ5CyvQ2N7IbD+T+8XueFIRFRt69uJomef7RhaE48eh5uDSRtXhxF+gZvTaxP+V 8 | HQIDAQAB 9 | -----END PUBLIC KEY----- 10 | -------------------------------------------------------------------------------- /sha1sum.txt: -------------------------------------------------------------------------------- 1 | f08e5e2debf6850caefa182eab94b42b3989d27a db.txt 2 | -------------------------------------------------------------------------------- /web/Regulatory.py: -------------------------------------------------------------------------------- 1 | # -*- coding: iso-8859-1 -*- 2 | """ 3 | Regulatory Database 4 | 5 | @copyright: 2008 Johannes Berg 6 | @license: ISC, see LICENSE for details. 7 | """ 8 | 9 | import codecs, math 10 | from dbparse import DBParser, flag_definitions 11 | 12 | Dependencies = ["time"] 13 | 14 | def _country(macro, countries, code): 15 | result = [] 16 | 17 | f = macro.formatter 18 | 19 | result.extend([ 20 | f.heading(1, 1), 21 | f.text('Regulatory definition for %s' % _get_iso_code(code)), 22 | f.heading(0, 1), 23 | ]) 24 | 25 | try: 26 | country = countries[code] 27 | except: 28 | result.append(f.text('No information available')) 29 | return ''.join(result) 30 | 31 | 32 | if country.comments: 33 | result.extend([ 34 | f.preformatted(1), 35 | f.text('\n'.join(country.comments)), 36 | f.preformatted(0), 37 | ]) 38 | 39 | result.append(f.table(1)) 40 | result.extend([ 41 | f.table_row(1), 42 | f.table_cell(1), f.strong(1), 43 | f.text('Band [MHz]'), 44 | f.strong(0), f.table_cell(0), 45 | f.table_cell(1), f.strong(1), 46 | f.text('Max BW [MHz]'), 47 | f.strong(0), f.table_cell(0), 48 | f.table_cell(1), f.strong(1), 49 | f.text('Flags'), 50 | f.strong(0), f.table_cell(0), 51 | f.table_cell(1), f.strong(1), 52 | f.text('Max antenna gain [dBi]'), 53 | f.strong(0), f.table_cell(0), 54 | f.table_cell(1), f.strong(1), 55 | f.text('Max EIRP [dBm'), 56 | f.hardspace, 57 | f.text('(mW)]'), 58 | f.strong(0), f.table_cell(0), 59 | f.table_row(0), 60 | ]) 61 | 62 | for perm in country.permissions: 63 | def str_or_na(val, dBm=False): 64 | if val and not dBm: 65 | return '%.2f' % val 66 | elif val: 67 | return '%.2f (%.2f)' % (val, math.pow(10, val/10.0)) 68 | return 'N/A' 69 | result.extend([ 70 | f.table_row(1), 71 | f.table_cell(1), 72 | f.text('%.3f - %.3f' % (perm.freqband.start, perm.freqband.end)), 73 | f.table_cell(0), 74 | f.table_cell(1), 75 | f.text('%.3f' % (perm.freqband.maxbw,)), 76 | f.table_cell(0), 77 | f.table_cell(1), 78 | f.text(', '.join(perm.textflags)), 79 | f.table_cell(0), 80 | f.table_cell(1), 81 | f.text(str_or_na(perm.power.max_ant_gain)), 82 | f.table_cell(0), 83 | f.table_cell(1), 84 | f.text(str_or_na(perm.power.max_eirp, dBm=True)), 85 | f.table_cell(0), 86 | f.table_row(0), 87 | ]) 88 | 89 | result.append(f.table(0)) 90 | 91 | result.append(f.linebreak(0)) 92 | result.append(f.linebreak(0)) 93 | result.append(macro.request.page.link_to(macro.request, 'return to country list')) 94 | return ''.join(result) 95 | 96 | _iso_list = {} 97 | 98 | def _get_iso_code(code): 99 | if not _iso_list: 100 | for line in codecs.open('/usr/share/iso-codes/iso_3166.tab', encoding='utf-8'): 101 | line = line.strip() 102 | c, name = line.split('\t') 103 | _iso_list[c] = name 104 | return _iso_list.get(code, 'Unknown (%s)' % code) 105 | 106 | def macro_Regulatory(macro): 107 | _ = macro.request.getText 108 | request = macro.request 109 | f = macro.formatter 110 | 111 | country = request.form.get('alpha2', [None])[0] 112 | 113 | dbpath = '/tmp/db.txt' 114 | if hasattr(request.cfg, 'regdb_path'): 115 | dbpath = request.cfg.regdb_path 116 | 117 | result = [] 118 | 119 | if request.form.get('raw', [None])[0]: 120 | result.append(f.code_area(1, 'db-raw', show=1, start=1, step=1)) 121 | for line in open(dbpath): 122 | result.extend([ 123 | f.code_line(1), 124 | f.text(line.rstrip()), 125 | f.code_line(0), 126 | ]) 127 | result.append(f.code_area(0, 'db-raw')) 128 | result.append(macro.request.page.link_to(macro.request, 'return to country list')) 129 | return ''.join(result) 130 | 131 | warnings = [] 132 | countries = DBParser(warn=lambda x: warnings.append(x)).parse(open(dbpath)) 133 | 134 | if country: 135 | return _country(macro, countries, country) 136 | 137 | countries = countries.keys() 138 | countries = [(_get_iso_code(code), code) for code in countries] 139 | countries.sort() 140 | 141 | result.extend([ 142 | f.heading(1, 1), 143 | f.text('Countries'), 144 | f.heading(0, 1), 145 | ]) 146 | 147 | result.append(f.bullet_list(1)) 148 | for name, code in countries: 149 | result.extend([ 150 | f.listitem(1), 151 | request.page.link_to(request, name, querystr={'alpha2': code}), 152 | f.listitem(0), 153 | ]) 154 | result.append(f.bullet_list(0)) 155 | 156 | if warnings: 157 | result.append(f.heading(1, 2)) 158 | result.append(f.text("Warnings")) 159 | result.append(f.heading(0, 2)) 160 | result.append(f.preformatted(1)) 161 | result.extend(warnings) 162 | result.append(f.preformatted(0)) 163 | 164 | result.append(request.page.link_to(request, 'view raw database', querystr={'raw': 1})) 165 | 166 | return ''.join(result) 167 | -------------------------------------------------------------------------------- /wireless-regdb.spec: -------------------------------------------------------------------------------- 1 | Summary: Linux wireless regulatory database 2 | Name: wireless-regdb 3 | Version: 2009.01.15 4 | Release: 1 5 | License: ISC 6 | Group: System Enviroment/Base 7 | Source: http://wireless.kernel.org/download/wireless-regdb/wireless-regdb-2009-01-15.tar.bz2 8 | URL: http://wireless.kernel.org/en/developers/Regulatory/ 9 | Packager: Luis R. Rodriguez 10 | BuildRoot : /var/tmp/%{name}-buildroot 11 | Requires: python 12 | BuildArch: noarch 13 | 14 | %define crda_lib /usr/lib/crda 15 | 16 | %description 17 | This package contains the wireless regulatory database used by all 18 | cfg80211 based Linux wireless drivers. The wireless database being 19 | used is maintained by Seth Forshee. 20 | http://wireless.kernel.org/en/developers/Regulatory/ 21 | 22 | %prep 23 | %setup -n %name-2009-01-15 24 | %build 25 | %install 26 | install -m 755 -d %buildroot/%crda_lib 27 | install -m 644 regulatory.bin %buildroot/%{crda_lib}/regulatory.bin 28 | %files 29 | %crda_lib/regulatory.bin 30 | %doc README LICENSE 31 | 32 | %changelog 33 | * Fri Jan 23 2009 - mcgrof@gmail.com 34 | - Started wireless-regdb package 35 | 36 | --------------------------------------------------------------------------------