diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 03:24:08 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 03:24:08 +0000 |
commit | 95bfafa9ff6abf9a19f7a85b429d502036be60cf (patch) | |
tree | f49bad15e2d2d770e1200eae1318c29b3de9ef9f | |
parent | Initial commit. (diff) | |
download | wireless-regdb-95bfafa9ff6abf9a19f7a85b429d502036be60cf.tar.xz wireless-regdb-95bfafa9ff6abf9a19f7a85b429d502036be60cf.zip |
Adding upstream version 2022.06.06.upstream/2022.06.06
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | CONTRIBUTING | 49 | ||||
-rw-r--r-- | LICENSE | 16 | ||||
-rw-r--r-- | Makefile | 129 | ||||
-rw-r--r-- | README | 38 | ||||
-rw-r--r-- | db.txt | 1822 | ||||
-rwxr-xr-x | db2bin.py | 147 | ||||
-rwxr-xr-x | db2fw.py | 158 | ||||
-rwxr-xr-x | dbparse.py | 515 | ||||
-rw-r--r-- | debian-example/changelog | 5 | ||||
-rw-r--r-- | debian-example/compat | 1 | ||||
-rw-r--r-- | debian-example/control | 15 | ||||
-rw-r--r-- | debian-example/copyright | 21 | ||||
-rw-r--r-- | debian-example/docs | 1 | ||||
-rwxr-xr-x | debian-example/rules | 10 | ||||
-rwxr-xr-x | gen-pubcert.sh | 18 | ||||
-rw-r--r-- | regulatory.bin | bin | 0 -> 6184 bytes | |||
-rw-r--r-- | regulatory.bin.5 | 49 | ||||
-rw-r--r-- | regulatory.db | bin | 0 -> 4492 bytes | |||
-rw-r--r-- | regulatory.db.5 | 1 | ||||
-rw-r--r-- | regulatory.db.p7s | bin | 0 -> 1182 bytes | |||
-rw-r--r-- | sforshee.key.pub.pem | 9 | ||||
-rw-r--r-- | sforshee.x509.pem | 17 | ||||
-rw-r--r-- | sha1sum.txt | 1 | ||||
-rw-r--r-- | web/Regulatory.py | 166 | ||||
-rw-r--r-- | wireless-regdb.spec | 35 |
26 files changed, 3225 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a59d408 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +key.priv.pem +dbparse.pyc diff --git a/CONTRIBUTING b/CONTRIBUTING new file mode 100644 index 0000000..f288959 --- /dev/null +++ b/CONTRIBUTING @@ -0,0 +1,49 @@ + +This project embraces the Developer Certificate of Origin (DCO) for +contributions. This means you must agree to the following prior to submitting +patches, if you agree with this developer certificate you acknowledge this by +adding a Signed-off-by tag to your patch commit log. Every submitted patch +must have this. + +The source for the DCO: + +http://developercertificate.org/ + +----------------------------------------------------------------------- + +Developer Certificate of Origin +Version 1.1 + +Copyright (C) 2004, 2006 The Linux Foundation and its contributors. +660 York Street, Suite 102, +San Francisco, CA 94110 USA + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + + +Developer's Certificate of Origin 1.1 + +By making a contribution to this project, I certify that: + +(a) The contribution was created in whole or in part by me and I + have the right to submit it under the open source license + indicated in the file; or + +(b) The contribution is based upon previous work that, to the best + of my knowledge, is covered under an appropriate open source + license and I have the right under that license to submit that + work with modifications, whether created in whole or in part + by me, under the same open source license (unless I am + permitted to submit under a different license), as indicated + in the file; or + +(c) The contribution was provided directly to me by some other + person who certified (a), (b) or (c) and I have not modified + it. + +(d) I understand and agree that this project and the contribution + are public and that a record of the contribution (including all + personal information I submit with it, including my sign-off) is + maintained indefinitely and may be redistributed consistent with + this project or the open source license(s) involved. @@ -0,0 +1,16 @@ +Copyright (c) 2008, Luis R. Rodriguez <mcgrof@gmail.com> +Copyright (c) 2008, Johannes Berg <johannes@sipsolutions.net> +Copyright (c) 2008, Michael Green <Michael.Green@Atheros.com> + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..02176ec --- /dev/null +++ b/Makefile @@ -0,0 +1,129 @@ +# Install prefix +PREFIX ?= /usr +CRDA_PATH ?= $(PREFIX)/lib/crda +CRDA_KEY_PATH ?= $(CRDA_PATH)/pubkeys +FIRMWARE_PATH ?= /lib/firmware + +MANDIR ?= $(PREFIX)/share/man/ + +SHA1SUM ?= /usr/bin/sha1sum +LSB_RELEASE ?= /usr/bin/lsb_release +WHOAMI ?= /usr/bin/whoami + +# Distro name: Ubuntu, Debian, Fedora, if not present you get +# "custom-distro", if your distribution does not have the LSB stuff, +# then set this variable when calling make if you don't want "custom-distro" +LSB_ID ?= $(shell if [ -f $(LSB_RELEASE) ]; then \ + $(LSB_RELEASE) -i -s; \ + else \ + echo custom-distro; \ + fi) + +DISTRO_PRIVKEY ?= ~/.wireless-regdb-$(LSB_ID).key.priv.pem +DISTRO_PUBKEY ?= ~/.wireless-regdb-$(LSB_ID).key.priv.pem + +REGDB_AUTHOR ?= $(shell if [ -f $(DISTRO_PRIVKEY) ]; then \ + echo $(LSB_ID) ; \ + elif [ -f $(WHOAMI) ]; then \ + $(WHOAMI); \ + else \ + echo custom-user; \ + fi) + +REGDB_PRIVKEY ?= ~/.wireless-regdb-$(REGDB_AUTHOR).key.priv.pem +REGDB_PUBKEY ?= $(REGDB_AUTHOR).key.pub.pem +REGDB_PUBCERT ?= $(REGDB_AUTHOR).x509.pem + +REGDB_UPSTREAM_PUBKEY ?= sforshee.key.pub.pem + +REGDB_CHANGED = $(shell $(SHA1SUM) -c --status sha1sum.txt >/dev/null 2>&1; \ + if [ $$? -ne 0 ]; then \ + echo maintainer-clean $(REGDB_PUBKEY) $(REGDB_PUBCERT); \ + fi) + +.PHONY: all clean mrproper install maintainer-clean install-distro-key + +all: $(REGDB_CHANGED) regulatory.bin sha1sum.txt regulatory.db.p7s + +clean: + @rm -f *.pyc *.gz + +maintainer-clean: clean + @rm -f regulatory.bin regulatory.db regulatory.db.p7s + +mrproper: clean maintainer-clean + @echo Removed public key, regulatory.bin, regulatory.db* and compressed man pages + @rm -f $(REGDB_PUBKEY) $(REGDB_PUBCERT) .custom + +regulatory.bin: db.txt $(REGDB_PRIVKEY) $(REGDB_PUBKEY) + @echo Generating $@ digitally signed by $(REGDB_AUTHOR)... + ./db2bin.py regulatory.bin db.txt $(REGDB_PRIVKEY) + +regulatory.db: db.txt db2fw.py + @echo "Generating $@" + ./db2fw.py regulatory.db db.txt + +regulatory.db.p7s: regulatory.db $(REGDB_PRIVKEY) $(REGDB_PUBCERT) + @echo "Signing regulatory.db (by $(REGDB_AUTHOR))..." + @openssl smime -sign \ + -signer $(REGDB_PUBCERT) \ + -inkey $(REGDB_PRIVKEY) \ + -in $< -nosmimecap -binary \ + -outform DER -out $@ + +sha1sum.txt: db.txt + sha1sum $< > $@ + +$(REGDB_PUBKEY): $(REGDB_PRIVKEY) + @echo "Generating public key for $(REGDB_AUTHOR)..." + openssl rsa -in $(REGDB_PRIVKEY) -out $(REGDB_PUBKEY) -pubout -outform PEM + +$(REGDB_PUBCERT): $(REGDB_PRIVKEY) + @echo "Generating certificate for $(REGDB_AUTHOR)..." + ./gen-pubcert.sh $(REGDB_PRIVKEY) $(REGDB_PUBCERT) $(REGDB_AUTHOR) + @echo $(REGDB_PUBKEY) > .custom + + +$(REGDB_PRIVKEY): + @echo "Generating private key for $(REGDB_AUTHOR)..." + openssl genrsa -out $(REGDB_PRIVKEY) 2048 + +ifneq ($(shell test -e $(DISTRO_PRIVKEY) && echo yes),yes) +$(DISTRO_PRIVKEY): + @echo "Generating private key for $(LSB_ID) packager..." + openssl genrsa -out $(DISTRO_PRIVKEY) 2048 +endif + +install-distro-key: maintainer-clean $(DISTRO_PRIVKEY) + +%.gz: % + gzip < $< > $@ + +# Users should just do: +# sudo make install +# +# Developers should do: +# make maintainer-clean +# make +# sudo make install +# +# Distributions packagers should do only once: +# make install-distro-key +# This will create a private key for you and install it into +# ~/.wireless-regdb-$(LSB_ID).key.priv.pem +# To make new releaes just do: +# make maintainer-clean +# make +# sudo make install +install: regulatory.bin.5.gz regulatory.db.5.gz + install -m 755 -d $(DESTDIR)/$(CRDA_PATH) + install -m 755 -d $(DESTDIR)/$(CRDA_KEY_PATH) + install -m 755 -d $(DESTDIR)/$(FIRMWARE_PATH) + if [ -f .custom ]; then \ + install -m 644 -t $(DESTDIR)/$(CRDA_KEY_PATH)/ $(shell cat .custom); \ + fi + install -m 644 -t $(DESTDIR)/$(CRDA_KEY_PATH)/ $(REGDB_UPSTREAM_PUBKEY) + install -m 644 -t $(DESTDIR)/$(CRDA_PATH)/ regulatory.bin + install -m 644 -t $(DESTDIR)/$(FIRMWARE_PATH) regulatory.db regulatory.db.p7s + install -m 755 -d $(DESTDIR)/$(MANDIR)/man5/ + install -m 644 -t $(DESTDIR)/$(MANDIR)/man5/ regulatory.bin.5.gz regulatory.db.5.gz @@ -0,0 +1,38 @@ + wireless-regdb +================ +<https://wireless.wiki.kernel.org/en/developers/regulatory/wireless-regdb> + +This repository contains the plain text version of the regulatory +database file I maintain for use with Central Regulatory Database +Agent daemon. Also included is the compiled binary version of this +file signed with my RSA key. This represents a good faith attempt +to capture regulatory information that is correct at the time of its last +modification. This information is provided to you with no warranty +either expressed or implied. + +Also included are the tools used to compile and sign the regulatory.bin +file as well as a MoinMoin macro used for viewing the database. + + + TECHNICAL INFORMATION +======================= + +The regulatory information in `db.txt' is stored in a human-readable +format which can be read using the `dbparse.py' python module. This +python module is used by the web viewer (Regulatory.py) which is +implemented as a MoinMoin macro (and used on http://wireless.kernel.org) +to allow viewing the database for verification. + +The dbparse module is also used by db2bin.py and db2fw.py, the `compilers' +that compile the database to its binary formats. + +For more information, please see the CRDA page: + + https://wireless.wiki.kernel.org/en/developers/regulatory/crda + +and the full description of the Linux regulatory stack: + + https://wireless.wiki.kernel.org/en/developers/regulatory + +John W. Linville +17 November 2008 @@ -0,0 +1,1822 @@ +wmmrule ETSI: + vo_c: cw_min=3, cw_max=7, aifsn=2, cot=2 + vi_c: cw_min=7, cw_max=15, aifsn=2, cot=4 + be_c: cw_min=15, cw_max=1023, aifsn=3, cot=6 + bk_c: cw_min=15, cw_max=1023, aifsn=7, cot=6 + vo_ap: cw_min=3, cw_max=7, aifsn=1, cot=2 + vi_ap: cw_min=7, cw_max=15, aifsn=1, cot=4 + be_ap: cw_min=15, cw_max=63, aifsn=3, cot=6 + bk_ap: cw_min=15, cw_max=1023, aifsn=7, cot=6 + +# This is the world regulatory domain +country 00: + # There is no global intersection for 802.11ah, so just mark the entire + # possible band as NO-IR + (755 - 928 @ 2), (20), NO-IR + (2402 - 2472 @ 40), (20) + # Channel 12 - 13. + (2457 - 2482 @ 20), (20), NO-IR, AUTO-BW + # Channel 14. Only JP enables this and for 802.11b only + (2474 - 2494 @ 20), (20), NO-IR, NO-OFDM + # Channel 36 - 48 + (5170 - 5250 @ 80), (20), NO-IR, AUTO-BW + # Channel 52 - 64 + (5250 - 5330 @ 80), (20), NO-IR, DFS, AUTO-BW + # Channel 100 - 144 + (5490 - 5730 @ 160), (20), NO-IR, DFS + # Channel 149 - 165 + (5735 - 5835 @ 80), (20), NO-IR + # IEEE 802.11ad (60GHz), channels 1..3 + (57240 - 63720 @ 2160), (0) + +# AD as part of CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# Harmonized CEPT countries: https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +country AD: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 60 GHz band channels 1-4, ref: Etsi En 302 567 + (57000 - 66000 @ 2160), (40) + +country AE: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country AF: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +# Source: +# http://pucanguilla.org/Downloads/January2005-Anguilla%20Table%20of%20Allocations.pdf +country AI: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +# AL as part of CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +country AL: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + +country AM: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 20), (18) + (5250 - 5330 @ 20), (18), DFS + +country AN: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +country AR: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country AS: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# AT as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# AT: https://www.rtr.at/en/tk/Spektrum5GHz/1997_bmvit-info-052010en.pdf +# AT: acceptance https://www.ris.bka.gv.at/Dokumente/BgblAuth/BGBLA_2014_II_63/BGBLA_2014_II_63.pdfsig +country AT: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# Source: +# https://www.legislation.gov.au/Details/F2022C00281 +# Both DFS-ETSI and DFS-FCC are acceptable per AS/NZS 4268 Appendix B. +# The EIRP for DFS bands can be increased by 3dB if TPC is implemented. +# In order to allow 80MHz operation between 5650-5730MHz the upper boundary +# of this more restrictive band has been shifted up by 5MHz from 5725MHz. +country AU: DFS-ETSI + (2400 - 2483.5 @ 40), (36) + (5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW + (5250 - 5350 @ 80), (20), NO-OUTDOOR, AUTO-BW, DFS + (5470 - 5600 @ 80), (27), DFS + (5650 - 5730 @ 80), (27), DFS + (5730 - 5850 @ 80), (36) + (5925 - 6425 @ 160), (24), NO-OUTDOOR + (57000 - 66000 @ 2160), (43), NO-OUTDOOR + +country AW: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +country AZ: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (18), AUTO-BW + (5250 - 5330 @ 80), (18), DFS, AUTO-BW + +# BA as part of CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +country BA: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 60 GHz band channels 1-4, ref: Etsi En 302 567 + (57000 - 66000 @ 2160), (40) + +country BB: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (23), AUTO-BW + (5250 - 5330 @ 80), (23), DFS, AUTO-BW + (5735 - 5835 @ 80), (30) + +country BD: DFS-JP + (2402 - 2482 @ 40), (20) + (5735 - 5835 @ 80), (30) + +# BE as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# BE: https://www.ibpt.be/public/files/en/21760/B03-01_2.1_EN.pdf +# BE: https://www.ibpt.be/public/files/en/21761/B03-02_2.1_EN.pdf +# BE: https://www.ibpt.be/public/files/en/21762/B03-03_2.1_EN.pdf +# BE: https://www.ibpt.be/public/files/en/22165/B01-28_3.1_EN.pdf +country BE: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country BF: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# Bulgarian rules as defined by the Communications Regulation Commission in the +# following documents: +# +# Rules for carrying out electronic communications through radio equipment using +# radio spectrum, which does not need to be individually assigned (the Rules): +# http://www.crc.bg/files/_bg/Pravila_09_06_2015.pdf +# +# List of radio equipment that uses harmonized within the European Union bands +# and electronic communications terminal equipment (the List): +# http://www.crc.bg/files/_bg/Spisak_2015.pdf +# +# Note: The transmit power limits in the 5250-5350 MHz and 5470-5725 MHz bands +# can be raised by 3 dBm if TPC is enabled. Refer to BDS EN 301 893 for details. +# +# BG as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# BG: https://crc.bg/files/_en/Electronic_Communications_Revised_EN1.pdf +# BG: acceptance of 2006/771/EC https://crc.bg/files/Pravila_06_12_2018.pdf +# +# Amendment of the rules for free use of radio frequency spectrum +# (Изменение и допълнение на Правилата за свободно използване на радиочестотния спектър) +# https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=168250 +country BG: DFS-ETSI + # Wideband data transmission systems (WDTS) in the 2.4GHz ISM band, ref: + # I.22 of the List, BDS EN 300 328 + (2400 - 2483.5 @ 40), (100 mW) + # 5 GHz Radio Local Area Networks (RLANs), ref: + # II.H01 of the List, BDS EN 301 893 + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + # II.H01 of the List, I.54 from the List, BDS EN 301 893 + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + # I.43 of the List, BDS EN 300 440-2, BDS EN 300 440-1 + (5725 - 5875 @ 80), (25 mW) + # WiFi 6E + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + # II.H03 of the List, BDS EN 302 567-2 + (57000 - 66000 @ 2160), (40) + +country BH: DFS-JP + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 20), (20) + (5250 - 5330 @ 20), (20), DFS + (5735 - 5835 @ 20), (20) + +country BL: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +country BM: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country BN: DFS-JP + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5735 - 5835 @ 80), (20) + +country BO: DFS-JP + (2402 - 2482 @ 40), (20) + (5250 - 5330 @ 80), (30), DFS + (5735 - 5835 @ 80), (30) + +country BR: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country BS: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# Source: +# http://www.bicma.gov.bt/paper/publication/nrrpart4.pdf +country BT: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +country BY: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +country BZ: DFS-JP + (2402 - 2482 @ 40), (30) + (5735 - 5835 @ 80), (30) + +# Sources: +# https://www.ic.gc.ca/eic/site/smt-gst.nsf/vwapj/rss-247-i2-e.pdf/$file/rss-247-i2-e.pdf +# https://www.ic.gc.ca/eic/site/smt-gst.nsf/eng/sf11750.html (6 GHz operation) +country CA: DFS-FCC + (2402 - 2472 @ 40), (30) + (5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW + (5250 - 5350 @ 80), (24), DFS, AUTO-BW + (5470 - 5600 @ 80), (24), DFS + (5650 - 5730 @ 80), (24), DFS + (5735 - 5835 @ 80), (30) + (5925 - 7125 @ 320), (12), NO-OUTDOOR + +# Source: +# http://www.art-rca.org +country CF: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 40), (17) + (5250 - 5330 @ 40), (24), DFS + (5490 - 5730 @ 40), (24), DFS + (5735 - 5835 @ 40), (30) + + +# CH as part of CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# CH: https://www.ofcomnet.ch/api/rir/1010/05 +# CH: https://www.ofcomnet.ch/api/rir/1010/04 +# CH: https://www.ofcomnet.ch/api/rir/1008/12 +# CH: https://www.ofcomnet.ch/#/fatTable +country CH: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country CI: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country CL: DFS-JP + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5735 - 5835 @ 80), (20) + +# Source: +# https://wap.miit.gov.cn/cms_files/filemanager/1226211233/attach/20219/d125301b13454551b698ff5afa49ca28.pdf +# Note: The transmit power for 5150-5350MHz bands can be raised by 3dBm when TPC is implemented +country CN: DFS-FCC + (2400 - 2483.5 @ 40), (20) + (5150 - 5350 @ 80), (20), DFS, AUTO-BW + (5725 - 5850 @ 80), (33) + # 60 GHz band channels 1,4: 28dBm, channels 2,3: 44dBm + # ref: http://www.miit.gov.cn/n11293472/n11505629/n11506593/n11960250/n11960606/n11960700/n12330791.files/n12330790.pdf + (57240 - 59400 @ 2160), (28) + (59400 - 63720 @ 2160), (44) + (63720 - 65880 @ 2160), (28) + +country CO: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country CR: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 20), (17) + (5250 - 5330 @ 20), (24), DFS + (5490 - 5730 @ 20), (24), DFS + (5735 - 5835 @ 20), (30) + +# Source: +# https://www.mincom.gob.cu/es/marco-legal +# - Redes Informáticas +# Resolución 98- 2019 Reglamento de Redes Inalámbricas: +# https://www.mincom.gob.cu/sites/default/files/marcoregulatorio/r_98-19_reglamento_redes_inalambricas.pdf +country CU: DFS-FCC + (2400 - 2483.5 @ 40), (200 mW) + (5150 - 5350 @ 80), (200 mW), NO-IR, NO-OUTDOOR + (5470 - 5725 @ 80), (250 mW), NO-IR + (5725 - 5850 @ 80), (200 mW) + +country CX: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + + +# CY as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# CY: http://www.mcw.gov.cy/mcw/dec/dec.nsf/all/292484CFC7013DD4C2256EBA0023D447/$file/Sxedio%20Radiosyxnothtwn%20ths%20Dhmokratias-3-8-2018-E2.2(English%20Unified%20Unofficial).pdf?openelement +country CY: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# CZ as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# CZ: https://www.ctu.cz/cs/download/vseobecna-opravneni/archiv/vo-r_12-06_2010-09.pdf +# CZ: https://www.ctu.cz/sites/default/files/obsah/ctu/vseobecne-opravneni-c.vo-r/10/12.2017-10/obrazky/vo-r10-122017-10.pdf +country CZ: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# DE as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# +# Allocation for the 2.4 GHz band (Vfg 10 / 2013, Allgemeinzuteilung von +# Frequenzen für die Nutzung in lokalen Netzwerken; Wireless Local Area +# Networks (WLAN-Funkanwendungen). +# https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/Allgemeinzuteilungen/2013_10_WLAN_2,4GHz_pdf.pdf +# +# Allocation for the 5 GHz band (Vfg. 7 / 2010, Allgemeinzuteilung von +# Frequenzen in den Bereichen 5150 MHz - 5350 MHz und 5470 MHz - 5725 MHz für +# Funkanwendungen zur breitbandigen Datenübertragung, WAS/WLAN („Wireless +# Access Systems including Wireless Local Area Networks“). +# https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/Allgemeinzuteilungen/2010_07_WLAN_5GHz_pdf.pdf +# +# The ETSI EN 300 440-1 standard for short range devices in the 5 GHz band has +# been implemented in Germany: +# https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/Allgemeinzuteilungen/2014_69_SRD_pdf.pdf +# +# Allocation for the 60 GHz band (Allgemeinzuteilung von Frequenzen im +# Bereich 57 GHz - 66 GHz für Funkanwendungen für weitbandige +# Datenübertragungssysteme; „Multiple Gigabit WAS/RLAN Systems (MGWS)“). +# https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/Allgemeinzuteilungen/2011_08_MGWS_pdf.pdf +# +# Allocation for the WiFi 6E Band (Allgemeinzuteilung von Frequenzen im +# Bereich 5945 MHz - 6425 MHz für drahtlose Zugangssysteme, +# einschließlich lokaler Funknetze WAS/WLAN („Wireless Access Systems +# including Wireless Local Area Networks“)) +# https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/Allgemeinzuteilungen/MobilfunkDectWlanCBFunk/vfg552021WLAN6GHz.pdf +country DE: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # WiFi 6E + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# DK as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# DK: https://ens.dk/sites/ens.dk/files/Tele/frekvensplan_0.pdf +# 5GHz: https://erhvervsstyrelsen.dk/sites/default/files/007_interface-datanet_5-6_ghz.pdf.pdf +# 60GHz: https://erhvervsstyrelsen.dk/sites/default/files/radiograenseflader-63.pdf +country DK: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# Source: +# http://www.ntrcdom.org/index.php?option=com_content&view=category&layout=blog&id=10&Itemid=55 +country DM: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (23), DFS, AUTO-BW + (5735 - 5835 @ 80), (30) + +country DO: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (23), DFS, AUTO-BW + (5735 - 5835 @ 80), (30) + +country DZ: DFS-JP + (2402 - 2482 @ 40), (20) + (5170.000 - 5250.000 @ 80.000), (23.00), AUTO-BW + (5250.000 - 5330.000 @ 80.000), (23.00), DFS, AUTO-BW + (5490.000 - 5670.000 @ 160.000), (23.00), DFS + +# Source: +# https://www.arcotel.gob.ec/wp-content/uploads/2018/04/NORMA-ESPECTRO-DE-USO-LIBRE-Y-ESPECTRO-PARA-USO-DETERMINADO-EN-BANDAS-LIBRES.pdf +country EC: DFS-FCC + (2400 - 2483.5 @ 40), (1000 mW) + (5150 - 5250 @ 80), (50 mW), AUTO-BW, DFS + (5250 - 5350 @ 80), (125 mW), AUTO-BW, DFS + (5470 - 5725 @ 160), (125 mW), DFS + (5725 - 5850 @ 80), (1000 mW) + +# EE as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# EE: https://www.ttja.ee/et/ettevottele-organisatsioonile/sideteenused/raadioseadmed/wifi-seade +# EE: https://www.itu.int/ITU-D/study_groups/SGP_1998-2002/JGRES09/pdf/estonia.pdf +country EE: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# https://www.tra.gov.eg/en/industry/importing-of-equipment/Pages/Regulations-for-use-of-Wireless-Networks-Devices.aspx +country EG: DFS-ETSI + (2402 - 2483.5 @ 40), (20) + (5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + +# ES as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# ES: https://avancedigital.mineco.gob.es/espectro/Paginas/cnaf.aspx +country ES: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # WiFi 6E + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country ET: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +# FI as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +country FI: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country FM: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# FR as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# FR: https://www.anfr.fr/fileadmin/mediatheque/documents/tnrbf/TNRBF_2021-12-14.pdf +country FR: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # WiFi 6E low power indoor + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-6 (ETSI EN 302 567 v2.2.1) + (57000 - 71000 @ 2160), (40) + +# GB as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# GB: https://www.ofcom.org.uk/__data/assets/pdf_file/0019/136009/Ofcom-Information-Sheet-5-GHz-RLANs.pdf +# GB: https://www.ofcom.org.uk/__data/assets/pdf_file/0028/84970/ir-2030.pdf +# GB: https://www.ofcom.org.uk/__data/assets/pdf_file/0013/126121/Statement_Implementing-Ofcoms-decision-on-the-57-71GHz-band.pdf +country GB: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5730 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5850 @ 80), (200 mW), NO-OUTDOOR + (5925 - 6425 @ 160), (250 mW), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-6 + (57000 - 71000 @ 2160), (40) + +country GD: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country GE: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (18), AUTO-BW + (5250 - 5330 @ 80), (18), DFS, AUTO-BW + # 60 GHz band channels 1-4, ref: Etsi En 302 567 + (57000 - 66000 @ 2160), (40) + +country GF: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +country GH: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country GL: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +country GP: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +# GR as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# GR: https://www.eett.gr/opencms/export/sites/default/EETT_EN/Electronic_Communications/Radio_Communications/TelecommunicationEquipment/Radio_equipment_interface_requirement_2012.pdf +# GR: https://www.eett.gr/opencms/export/sites/default/EETT_EN/Electronic_Communications/Radio_Communications/TelecommunicationEquipment/Radio_equipment_interface_requirement_107.pdf +country GR: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country GT: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (23), DFS, AUTO-BW + (5735 - 5835 @ 80), (30) + +country GU: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 20), (17) + (5250 - 5330 @ 20), (24), DFS + (5490 - 5730 @ 20), (24), DFS + (5735 - 5835 @ 20), (30) + +country GY: + (2402 - 2482 @ 40), (30) + (5735 - 5835 @ 80), (30) + +country HK: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5710 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country HN: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country HR: DFS-ETSI +# HR as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# HR: http://tablice.hakom.hr:8080/vis?lang=en +# 6E: https://www.hakom.hr/UserDocsImages/op%C4%87e%20dozvole%20prosinac%202009.g/Opca_dozvola_236.pdf + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (200 mW), DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # WiFi 6E + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country HT: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# HU as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# HU: http://stir.nmhh.hu/?oldal=dokumentumGeneralo&root_rendeletelem_id=3&hatalyos=1 +# HU: http://english.nmhh.hu/cikk/297/Eljarasi_tajekoztato_a_24_GHzes_es_az_5_GHzes_savban_mukodo_berendezesek_engedelyezeserol +# HU: http://nmhh.hu/dokumentum/319/kis_hatotavolsagu_eszkozok_srdk.pdf +country HU: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country ID: DFS-JP + # ref: https://jdih.kominfo.go.id/produk_hukum/view/id/676/t/peraturan+menteri+komunikasi+dan+informatika+nomor+1+tahun+2019+tanggal+24+april+2019 + (2400 - 2483.5 @ 40), (500 mW), NO-OUTDOOR + (5150 - 5350 @ 80), (200 mW), NO-OUTDOOR + (5725 - 5825 @ 80), (200 mW), NO-OUTDOOR + +# IE as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# IE: https://www.comreg.ie/publication-download/interface-requirements-for-radio-services-in-ireland +# IE: https://www.comreg.ie/publication-download/permitted-short-range-devices-ireland +country IE: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# IL: Wireless Telegraph Regulations (type approval) (2021) +# IL: published on 29 March 2021 in KOVETS HATAKANOT No. 9301. +# IL: https://www.gov.il/he/departments/legalInfo/telegraph_law +# IL: official document (pdf): https://rfa.justice.gov.il/SearchPredefinedApi/Documents/IdngyMn~ojdQSrkxuAqfZqiM8c1foi3TSZQhp7OMszo= +# IL: also available as unofficial word doc: https://www.nevo.co.il/Handlers/LawOpenDoc.ashx?id=199708 +country IL: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW + (5250 - 5350 @ 80), (200 mW), NO-OUTDOOR, DFS, AUTO-BW + # Table B List of conditions, row 63, indoor short range device without TPC (ETSI EN 301 893) + (5470 - 5725 @ 160), (500 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + # Table B List of conditions, row 68, wireless device using 802.11a/n/ac protocol + (5725 - 5875 @ 80), (200 mW), AUTO-BW + +country IN: + (2402 - 2482 @ 40), (20) + (5150 - 5250 @ 80), (30) + (5250 - 5350 @ 80), (24) + (5470 - 5725 @ 160), (24) + (5725 - 5875 @ 80), (30) + +country IR: DFS-JP + (2402 - 2482 @ 40), (20) + (5735 - 5835 @ 80), (30) + +# IS as part of CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# IS: https://www.pfs.is/library/Skrar/Tidnir-og-taekni/MHZ_21022019.pdf +country IS: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# IT as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +country IT: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country JM: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country JO: DFS-JP + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (23) + (5735 - 5835 @ 80), (23) + +country JP: DFS-JP + (2402 - 2482 @ 40), (20) + (2474 - 2494 @ 20), (20), NO-OFDM + (4910 - 4990 @ 40), (23) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (23), DFS + # 60 GHz band channels 2-4 at 10mW, + # ref: http://www.arib.or.jp/english/html/overview/doc/1-STD-T74v1_1.pdf + (57000 - 66000 @ 2160), (10 mW) + +country KE: DFS-JP + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (23) + (5490 - 5570 @ 80), (30), DFS + (5735 - 5775 @ 40), (23) + +country KH: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +# Source +# http://ntrc.kn/?page_id=7 +country KN: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (30), DFS + (5735 - 5815 @ 80), (30) + +country KP: DFS-JP + (2402 - 2482 @ 20), (20) + (5170 - 5250 @ 20), (20) + (5250 - 5330 @ 20), (20), DFS + (5490 - 5630 @ 20), (30), DFS + (5735 - 5815 @ 20), (30) + +# Source: +# https://www.law.go.kr/LSW//admRulLsInfoP.do?chrClsCd=&admRulSeq=2100000205195 +# https://www.law.go.kr/LSW//admRulLsInfoP.do?chrClsCd=&admRulSeq=2100000205187 +# https://www.law.go.kr/LSW//admRulLsInfoP.do?chrClsCd=&admRulSeq=2100000206568 +country KR: DFS-JP + (2400 - 2483.5 @ 40), (23) + (5150 - 5230 @ 40), (23), AUTO-BW + # max. PSD 2.5 mW/MHz in 5230-5250 MHz frequency range + (5230 - 5250 @ 20), (17), AUTO-BW + (5250 - 5350 @ 80), (20), DFS, AUTO-BW + (5470 - 5725 @ 160), (20), DFS + (5725 - 5850 @ 80), (23) + # 6 GHz band + (5925 - 7125 @ 160), (15), NO-OUTDOOR + # 60 GHz band channels 1-4 + (57000 - 66000 @ 2160), (43) + +country KW: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + +country KY: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# Source: +# http://adilet.zan.kz/rus/docs/V1500010730 +# http://adilet.zan.kz/rus/docs/V1500010375 +country KZ: DFS-ETSI + (2400 - 2483.5 @ 40), (20) + (5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW + (5250 - 5350 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW + (5470 - 5725 @ 160), (20), NO-OUTDOOR, DFS + (5725 - 5850 @ 80), (20), NO-OUTDOOR + (57000 - 66000 @ 2160), (40) + +country LB: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# Source: +# http://www.ntrc.org.lc/operational_structures.htm +country LC: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (30), DFS + (5735 - 5815 @ 80), (30) + +# LI as part of CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# LI: https://www.ofcomnet.ch/api/rir/1010/05 +# LI: https://www.ofcomnet.ch/api/rir/1010/04 +# LI: https://www.ofcomnet.ch/api/rir/1008/12 +# LI: https://www.ofcomnet.ch/#/fatTable +country LI: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country LK: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 20), (17) + (5250 - 5330 @ 20), (24), DFS + (5490 - 5730 @ 20), (24), DFS + (5735 - 5835 @ 20), (30) + +# Source: +# http://lca.org.ls/images/documents/lesotho_national_frequency_allocation_plan.pdf +country LS: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +# LT as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# LT: https://www.rrt.lt/en/radio-spectrum/frequency-management/ or direct link: +# LT: https://www.e-tar.lt/portal/lt/legalAct/6e718fd037a011e69101aaab2992cbcd/dGRioCBBHb +country LT: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# LU as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# LU: https://assets.ilr.lu/frequences/Documents/ILRLU-1723895916-183.pdf#search=en%20300%20440 +country LU: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# LV as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# LV: http://likumi.lv/doc.php?id=198903 +country LV: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country MA: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + +# MC as part of CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +country MC: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + +# Source: +# http://www.cnfr.md/index.php?pag=sec&id=117&l=en +# MD as part of CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +country MD: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + +# Source: +# http://www.cept.org/files/1050/Tools%20and%20Services/EFIS%20-%20ECO%20Frequency%20Information%20System/National%20frequency%20tables/Montenegro%20NAFT%20-%202010.pdf +# ME as part of CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +country ME: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + +country MF: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +country MH: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# MK as part of CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +country MK: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 60 GHz band channels 1-4, ref: Etsi En 302 567 + (57000 - 66000 @ 2160), (40) + +country MN: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country MO: DFS-FCC + (2402 - 2482 @ 40), (23) + (5170 - 5250 @ 80), (23), AUTO-BW + (5250 - 5330 @ 80), (23), DFS, AUTO-BW + (5490 - 5730 @ 160), (30), DFS + (5735 - 5835 @ 80), (30) + +country MP: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country MQ: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +# Source: +# http://www.are.mr/pdfs/telec_freq_TNAbf_2010.pdf +country MR: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +# MT as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# MT: https://www.mca.org.mt/sites/default/files/NFP_edition%206-1.pdf +country MT: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country MU: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# Source: +# http://www.cam.gov.mv/docs/tech_standards/TAM-TS-100-2004-WLAN.pdf +country MV: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), AUTO-BW + (5250 - 5350 @ 80), (100 mW), DFS, AUTO-BW + (5725 - 5850 @ 80), (100 mW) + +country MW: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +country MX: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country MY: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5650 @ 160), (24), DFS + (5735 - 5835 @ 80), (24) + +country NG: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5250 - 5330 @ 80), (30), DFS + (5735 - 5835 @ 80), (30) + +country NI: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# NL as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# NL: http://wetten.overheid.nl/BWBR0036378/2015-03-05 +# Updated 14 december 2021 to allow the lower part of the 6GHz spectrum for WiFi 6E +# mobile short distance equipment, broadband transmission equipment, license free, from day after publication +# NL announcement: https://zoek.officielebekendmakingen.nl/stcrt-2021-49492.pdf +# NL law: https://wetten.overheid.nl/BWBR0036378/2021-12-15 +country NL: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # WiFi 6E + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# NO as part of CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# NO: https://eng.nkom.no/technical/temporary-licenses/mobile-videolink/wireless-cameras-mobile-video-links/_attachment/9947 +# NO: http://www.lovdata.no/dokument/SF/forskrift/2012-01-19-77 +# In addition to EU NO can use 5725–5795 MHz and 5815–5850 bands with limit of 4 W EIRP (with DFS and TPC) +country NO: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # WiFi 6E + (5945 - 6425 @ 160), (200 mW), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 71000 @ 2160), (40) + +country NP: DFS-JP + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5735 - 5835 @ 80), (20) + +country NZ: DFS-ETSI + (2402 - 2482 @ 40), (30) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country OM: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +# Source: +# http://www.asep.gob.pa/images/telecomunicaciones/Anexos/PNAF-dic2015.pdf +country PA: DFS-FCC + (2400 - 2483.5 @ 40), (36) + (5150 - 5250 @ 80), (36), AUTO-BW + (5250 - 5350 @ 80), (30), AUTO-BW + (5470 - 5725 @ 160), (30) + (5725 - 5850 @ 80), (36) + (57000 - 64000 @ 2160), (43) + +country PE: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country PF: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +country PG: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country PH: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country PK: DFS-JP + # https://fab.gov.pk/type-approval/ + # https://pta.gov.pk/media/Pakistan_Table_of_Frequency_Allocations.pdf + (2402 - 2482 @ 40), (20) + (5725 - 5875 @ 80), (30) + +# PL as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +country PL: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country PM: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +country PR: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# PT as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# PT: https://www.anacom.pt/render.jsp?categoryId=336334 +country PT: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country PW: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country PY: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country QA: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW), NO-OUTDOOR + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW + (5250 - 5350 @ 80), (200 mW), NO-OUTDOOR, DFS, AUTO-BW + (5470 - 5725 @ 160), (100 mW), NO-OUTDOOR, DFS + (5725 - 5875 @ 80), (100 mW), NO-OUTDOOR, DFS + (57000 - 66000 @ 2160), (40), NO-OUTDOOR + +country RE: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +# RO as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# RO: http://www.ancom.org.ro/en/uploads/links_files/ordin_262_2006.pdf +country RO: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# Source: +# http://www.ratel.rs/upload/documents/Plan_namene/Plan_namene-sl_glasnik.pdf +# RS as part of CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +country RS: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 60 GHz band channels 1-4, ref: Etsi En 302 567 + (57000 - 66000 @ 2160), (40) + +country RU: + (2400 - 2483.5 @ 40), (20) + (5150 - 5350 @ 160), (20), NO-OUTDOOR + (5650 - 5850 @ 160), (20), NO-OUTDOOR + # 60 GHz band channels 1-4, ref: Changes to NLA 124_Order №129_22042015.pdf + (57000 - 66000 @ 2160), (40), NO-OUTDOOR + +country RW: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country SA: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +# SE as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# SE: https://pts.se/globalassets/startpage/dokument/legala-dokument/foreskrifter/radio/beslutade_ptsfs-2018-3-undantagsforeskrifter.pdf +country SE: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# https://www.imda.gov.sg/-/media/Imda/Files/Regulation-Licensing-and-Consultations/ICT-Standards/Telecommunication-Standards/Radio-Comms/IMDATSSRD.pdf +# IMDA TS SRD, Issue 1 Revision 1, April 2019, subsequently "IMDA TS SRD" +# 2400 - 2483.5 MHz: IMDA TS SRD, Table 1 (25); ANSI C63.10-2013 and FCC Part 15 Section 15.247 or EN 300 328 +# 5150 - 5350 MHz: IMDA TS SRD, Table 1 (29); FCC Part 15 Section 15.407 (1) 5.15-5.25 GHz (2) 5.25-5.35 GHz; EN 301 893 +# 5470 - 5725 MHz: IMDA TS SRD, Table 1 (30); FCC Part 15 Section 15.407 (2) 5.47-5.725 GHz; EN 301 893 +# 5725 - 5850 MHz: IMDA TS SRD, Table 1 (27); FCC Part 15 Section 15.247; FCC Part 15 Section 15.407 (3) 5.725-5.85 GHz +# 57000 - 66000 MHz: IMDA TS SRD, Table 1 (31); ETSI EN 302 567 +# Note: 27dBm for 5470-5725MHz bands is 3dBm reduction per FCC Part 15 Section 15.407 (2) 5.47-5.725 GHz; EN 301 893 as referenced by IMDA TS SRD +# AU and BG regulatory domains use the same interpretation of cited FCC and ETSI standards +# Note: The transmit power for 5250-5350MHz bands can be raised by 3dBm when TPC is implemented: IMDA TS SRD Table 1 (29) +# Note: The transmit power for 5470-5725MHz bands can be raised by 3dBm when TPC is implemented: IMDA TS SRD Table 1 (30) + +country SG: DFS-FCC + (2400 - 2483.5 @ 40), (23) + (5150 - 5250 @ 80), (23), AUTO-BW + (5250 - 5350 @ 80), (20), DFS, AUTO-BW + (5470 - 5725 @ 160), (27), DFS + (5725 - 5850 @ 80), (30) + (57000 - 66000 @ 2160), (40) + +# SI as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# SI: https://www.akos-rs.si/bwa +country SI: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# SK as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893) +# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440) +# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213 +# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611 +# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN +# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf +# SK: https://www.teleoff.gov.sk/data/files/25911.pdf +# SK: https://www.teleoff.gov.sk/data/files/41072.pdf +# SK: https://www.teleoff.gov.sk/data/files/49125_vpr-01_2018-rusi-vpr-10_2014a21_2012-nespecifik-srd_021018.pdf +country SK: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 160), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# Source: +# Regulation N° 2004-005 ART/DG/DRC/D.Rég +country SN: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country SR: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +country SV: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 20), (17) + (5250 - 5330 @ 20), (23), DFS + (5735 - 5835 @ 20), (30) + +country SY: + (2402 - 2482 @ 40), (20) + +# Source: +# http://www.telecommission.tc/Spectrum-plan20110324-101210.html +country TC: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (24), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (24), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5730 @ 160), (24), DFS, wmmrule=ETSI + (5735 - 5835 @ 80), (30) + +country TD: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +country TG: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 40), (20) + (5250 - 5330 @ 40), (20), DFS + (5490 - 5710 @ 40), (27), DFS + +country TH: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country TN: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + +# Source: +# By-Law on Short Range Radio Devices (SRD) Oct 2015 +# https://www.btk.gov.tr/File/?path=ROOT%2f1%2fDocuments%2fOrdinance%2fBY%2DLAW%20ON%20SHORT%20RANGE%20DEVICES.pdf +# Article 8 +country TR: DFS-ETSI + (2400 - 2483.5 @ 40), (20) + (5170 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW + (5250 - 5330 @ 80), (20), DFS, NO-OUTDOOR, AUTO-BW + (5470 - 5725 @ 160), (27), DFS + # 60 GHz band channels 1-4, ref: Etsi En 302 567 + (57000 - 66000 @ 2160), (40) + +country TT: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# Source: +# Table of Frequency Allocations of Republic of China (Taiwan) / Feb 2017: +# https://www.motc.gov.tw/websitedowndoc?file=post/201702221012200.doc& \ +# filedisplay=Table%2Bof%2Bradio%2Bfrequency%2Ballocation.doc +# LP0002 Low-power Radio-frequency Devices Technical Regulations / 23 Aug 2016: +# http://www.ncc.gov.tw/english/show_file.aspx?table_name=news&file_sn=681 +country TW: DFS-FCC + # 2.4g band, LP0002 section 3.10.1 + (2400 - 2483.5 @ 40), (30) + # 5g U-NII band, LP0002 section 4.7 + # 5.15 ~ 5.25 GHz: 30 dBm for master mode, 23 dBm for clients + (5150 - 5250 @ 80), (23), AUTO-BW + (5250 - 5350 @ 80), (23), DFS, AUTO-BW + # This range ends at 5725 MHz, but channel 144 extends to 5730 MHz. + # Since 5725 ~ 5730 MHz belongs to the next range which has looser + # requirements, we can extend the range by 5 MHz to make the kernel + # happy and be able to use channel 144. + (5470 - 5730 @ 160), (23), DFS + (5725 - 5850 @ 80), (30) + # 60g band, LP0002 section 3.13.1.1 (3)(C), EIRP=40dBm(43dBm peak) + (57000 - 66000 @ 2160), (40) + +country TZ: + (2402 - 2482 @ 40), (20) + (5735 - 5835 @ 80), (30) + +# Source: https://zakon.rada.gov.ua/laws/show/z0201-15#n48 +# Although it is allowed to use up to 250 mW for some 5 GHz frequency ranges, +# all of them are limited to 100 mW for IEEE 802.11n and IEEE 802.11ac. +# 2.4 GHz band channels can be used outdoors when some requirements are met. +# 5 GHz band channels must be used only indoors in some cases. They are neither +# permitted nor denied outdoors in others. +country UA: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW), NO-OUTDOOR + (5150 - 5250 @ 80), (100 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), DFS, NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (100 mW), DFS, NO-OUTDOOR, wmmrule=ETSI + (5725 - 5850 @ 80), (100 mW), NO-OUTDOOR + # 60 GHz band channels 1-4, ref: Etsi En 302 567 + (57000 - 66000 @ 2160), (40 mW), NO-OUTDOOR + +country UG: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# https://www.ecfr.gov/cgi-bin/text-idx?SID=eed706a2c49fd9271106c3228b0615f3&mc=true&node=pt47.1.15&rgn=div5 +# Title 47 Part 15 - Radio Frequency Devices, April 2, 2020 +# Channels 12 and 13 are not forbidden, but are not normally used with full +# power in order to avoid any potential interference in the adjacent restricted +# frequency band, 2,483.5–2,500 MHz which is subject to strict emission limits +# set out in 47 CFR § 15.205. TODO: reenable and specify a safe TX power here. +country US: DFS-FCC + # S1G Channel 1-3 + (902 - 904 @ 2), (30) + # S1G Channel 5-35 + (904 - 920 @ 16), (30) + # S1G Channel 37-51 + (920 - 928 @ 8), (30) + (2400 - 2472 @ 40), (30) + # 5.15 ~ 5.25 GHz: 30 dBm for master mode, 23 dBm for clients + (5150 - 5250 @ 80), (23), AUTO-BW + (5250 - 5350 @ 80), (24), DFS, AUTO-BW + # This range ends at 5725 MHz, but channel 144 extends to 5730 MHz. + # Since 5725 ~ 5730 MHz belongs to the next range which has looser + # requirements, we can extend the range by 5 MHz to make the kernel + # happy and be able to use channel 144. + (5470 - 5730 @ 160), (24), DFS + (5730 - 5850 @ 80), (30), AUTO-BW + # https://www.federalregister.gov/documents/2021/05/03/2021-08802/use-of-the-5850-5925-ghz-band + # max. 33 dBm AP @ 20MHz, 36 dBm AP @ 40Mhz+, 6 dB less for clients + (5850 - 5895 @ 40), (27), NO-OUTDOOR, AUTO-BW, NO-IR + # 6g band + # https://www.federalregister.gov/documents/2020/05/26/2020-11236/unlicensed-use-of-the-6ghz-band + (5925 - 7125 @ 320), (12), NO-OUTDOOR, NO-IR + # 60g band + # reference: section IV-D https://docs.fcc.gov/public/attachments/FCC-16-89A1.pdf + # channels 1-6 EIRP=40dBm(43dBm peak) + (57240 - 71000 @ 2160), (40) + +country UY: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (23), AUTO-BW + (5250 - 5330 @ 80), (23), DFS, AUTO-BW + (5735 - 5835 @ 80), (30) + +# Source: +# http://cemc.uz/article/1976/ +country UZ: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + +# Source: +# http://www.ntrc.vc/regulations/Jun_2006_Spectrum_Managment_Regulations.pdf +country VC: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +# Source: +# Official Gazette (Gaceta Oficial) concerning Unlicensed transmitter use +# (10 June 2013) +# http://www.conatel.gob.ve/ +country VE: DFS-FCC + (2402 - 2482 @ 40), (30) + (5170 - 5250 @ 80), (23), AUTO-BW + (5250 - 5330 @ 80), (23), DFS, AUTO-BW + (5735 - 5835 @ 80), (30) + +country VI: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country VN: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17) + (5250 - 5330 @ 80), (24), DFS + (5490 - 5730 @ 80), (24), DFS + (5735 - 5835 @ 80), (30) + +# Source: +# http://www.trr.vu/attachments/category/130/GURL_for_Short-range_Radiocommunication_Devices2.pdf +country VU: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country WF: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +country WS: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 40), (20) + (5250 - 5330 @ 40), (20), DFS + (5490 - 5710 @ 40), (27), DFS + +country YE: + (2402 - 2482 @ 40), (20) + +country YT: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +country ZA: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (30) + +country ZW: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + diff --git a/db2bin.py b/db2bin.py new file mode 100755 index 0000000..29ae313 --- /dev/null +++ b/db2bin.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python + +from io import BytesIO, open +import struct +import hashlib +from dbparse import DBParser +import sys + +MAGIC = 0x52474442 +VERSION = 19 + +if len(sys.argv) < 3: + print('Usage: %s output-file input-file [key-file]' % sys.argv[0]) + sys.exit(2) + +def create_rules(countries): + result = {} + for c in countries.values(): + for rule in c.permissions: + result[rule] = 1 + return list(result) + +def create_collections(countries): + result = {} + for c in countries.values(): + result[c.permissions] = 1 + return list(result) + + +def be32(output, val): + output.write(struct.pack('>I', val)) + +class PTR(object): + def __init__(self, output): + self._output = output + self._pos = output.tell() + be32(output, 0xFFFFFFFF) + + def set(self, val=None): + if val is None: + val = self._output.tell() + self._offset = val + pos = self._output.tell() + self._output.seek(self._pos) + be32(self._output, val) + self._output.seek(pos) + + def get(self): + return self._offset + +p = DBParser() +countries = p.parse(open(sys.argv[2], 'r', encoding='utf-8')) + +countrynames = list(countries) +countrynames.sort() + +power = [] +bands = [] +for alpha2 in countrynames: + for perm in countries[alpha2].permissions: + if not perm.freqband in bands: + bands.append(perm.freqband) + if not perm.power in power: + power.append(perm.power) +rules = create_rules(countries) +rules.sort() +collections = create_collections(countries) +collections.sort() + +output = BytesIO() + +# struct regdb_file_header +be32(output, MAGIC) +be32(output, VERSION) +reg_country_ptr = PTR(output) +# add number of countries +be32(output, len(countries)) +siglen = PTR(output) + +power_rules = {} +for pr in power: + power_rules[pr] = output.tell() + pr = [int(v * 100.0) for v in (pr.max_ant_gain, pr.max_eirp)] + # struct regdb_file_power_rule + output.write(struct.pack('>II', *pr)) + +freq_ranges = {} +for fr in bands: + freq_ranges[fr] = output.tell() + fr = [int(f * 1000.0) for f in (fr.start, fr.end, fr.maxbw)] + # struct regdb_file_freq_range + output.write(struct.pack('>III', *fr)) + + +reg_rules = {} +for reg_rule in rules: + freq_range, power_rule = reg_rule.freqband, reg_rule.power + reg_rules[reg_rule] = output.tell() + # struct regdb_file_reg_rule + output.write(struct.pack('>III', freq_ranges[freq_range], power_rules[power_rule], + reg_rule.flags)) + + +reg_rules_collections = {} + +for coll in collections: + reg_rules_collections[coll] = output.tell() + # struct regdb_file_reg_rules_collection + coll = list(coll) + be32(output, len(coll)) + coll.sort() + for regrule in coll: + be32(output, reg_rules[regrule]) + +# update country pointer now! +reg_country_ptr.set() + +for alpha2 in countrynames: + coll = countries[alpha2] + # struct regdb_file_reg_country + output.write(struct.pack('>2sxBI', alpha2, coll.dfs_region, reg_rules_collections[coll.permissions])) + + +if len(sys.argv) > 3: + # Load RSA only now so people can use this script + # without having those libraries installed to verify + # their SQL changes + from M2Crypto import RSA + + # determine signature length + key = RSA.load_key(sys.argv[3]) + hash = hashlib.sha1() + hash.update(output.getvalue()) + sig = key.sign(hash.digest()) + # write it to file + siglen.set(len(sig)) + # sign again + hash = hashlib.sha1() + hash.update(output.getvalue()) + sig = key.sign(hash.digest()) + + output.write(sig) +else: + siglen.set(0) + +outfile = open(sys.argv[1], 'wb') +outfile.write(output.getvalue()) diff --git a/db2fw.py b/db2fw.py new file mode 100755 index 0000000..3affd5a --- /dev/null +++ b/db2fw.py @@ -0,0 +1,158 @@ +#!/usr/bin/env python + +from io import BytesIO, open +import struct +import hashlib +from dbparse import DBParser +import sys +from math import log + +MAGIC = 0x52474442 +VERSION = 20 + +if len(sys.argv) < 3: + print('Usage: %s output-file input-file' % sys.argv[0]) + sys.exit(2) + +def create_rules(countries): + result = {} + for c in countries.values(): + for rule in c.permissions: + result[rule] = 1 + return list(result) + +def create_collections(countries): + result = {} + for c in countries.values(): + result[(c.permissions, c.dfs_region)] = 1 + return list(result) + +def create_wmms(countries): + result = {} + for c in countries.values(): + for rule in c.permissions: + if rule.wmmrule is not None: + result[rule.wmmrule] = 1 + return list(result) + +def be32(output, val): + output.write(struct.pack('>I', val)) +def be16(output, val): + output.write(struct.pack('>H', val)) + +class PTR(object): + def __init__(self, output): + self._output = output + self._pos = output.tell() + be16(output, 0) + self._written = False + + def set(self, val=None): + if val is None: + val = self._output.tell() + assert val & 3 == 0 + self._offset = val + pos = self._output.tell() + self._output.seek(self._pos) + be16(self._output, val >> 2) + self._output.seek(pos) + self._written = True + + def get(self): + return self._offset + + @property + def written(self): + return self._written + +p = DBParser() +countries = p.parse(open(sys.argv[2], 'r', encoding='utf-8')) +rules = create_rules(countries) +rules.sort() +collections = create_collections(countries) +collections.sort() +wmms = create_wmms(countries) +wmms.sort() + +output = BytesIO() + +# struct regdb_file_header +be32(output, MAGIC) +be32(output, VERSION) + +country_ptrs = {} +countrynames = list(countries) +countrynames.sort() +for alpha2 in countrynames: + coll = countries[alpha2] + output.write(struct.pack('>2s', alpha2)) + country_ptrs[alpha2] = PTR(output) +output.write(b'\x00' * 4) + +wmmdb = {} +for w in wmms: + assert output.tell() & 3 == 0 + wmmdb[w] = output.tell() >> 2 + for r in w._as_tuple(): + ecw = int(log(r[0] + 1, 2)) << 4 | int(log(r[1] + 1, 2)) + ac = (ecw, r[2],r[3]) + output.write(struct.pack('>BBH', *ac)) + +reg_rules = {} +flags = 0 +for reg_rule in rules: + freq_range, power_rule, wmm_rule = reg_rule.freqband, reg_rule.power, reg_rule.wmmrule + reg_rules[reg_rule] = output.tell() + assert power_rule.max_ant_gain == 0 + flags = 0 + # convert to new rule flags + assert reg_rule.flags & ~0x899 == 0 + if reg_rule.flags & 1<<0: + flags |= 1<<0 + if reg_rule.flags & 1<<3: + flags |= 1<<1 + if reg_rule.flags & 1<<4: + flags |= 1<<2 + if reg_rule.flags & 1<<7: + flags |= 1<<3 + if reg_rule.flags & 1<<11: + flags |= 1<<4 + rule_len = 16 + cac_timeout = 0 # TODO + if not (flags & 1<<2): + cac_timeout = 0 + if cac_timeout or wmm_rule: + rule_len += 2 + if wmm_rule is not None: + rule_len += 2 + output.write(struct.pack('>BBHIII', rule_len, flags, int(power_rule.max_eirp * 100), + int(freq_range.start * 1000), int(freq_range.end * 1000), int(freq_range.maxbw * 1000), + )) + if rule_len > 16: + output.write(struct.pack('>H', cac_timeout)) + + if rule_len > 18: + be16(output, wmmdb[wmm_rule]) + + while rule_len % 4: + output.write('\0') + rule_len += 1 + +for coll in collections: + for alpha2 in countrynames: + if (countries[alpha2].permissions, countries[alpha2].dfs_region) == coll: + assert not country_ptrs[alpha2].written + country_ptrs[alpha2].set() + slen = 3 + output.write(struct.pack('>BBBx', slen, len(list(coll[0])), coll[1])) + coll = list(coll[0]) + for regrule in coll: + be16(output, reg_rules[regrule] >> 2) + if len(coll) % 2: + be16(output, 0) + +for alpha2 in countrynames: + assert country_ptrs[alpha2].written + +outfile = open(sys.argv[1], 'wb') +outfile.write(output.getvalue()) diff --git a/dbparse.py b/dbparse.py new file mode 100755 index 0000000..5f7e082 --- /dev/null +++ b/dbparse.py @@ -0,0 +1,515 @@ +#!/usr/bin/env python + +from functools import total_ordering +import sys, math +from math import ceil, log +from collections import defaultdict, OrderedDict + +# must match <linux/nl80211.h> enum nl80211_reg_rule_flags + +flag_definitions = { + 'NO-OFDM': 1<<0, + 'NO-CCK': 1<<1, + 'NO-INDOOR': 1<<2, + 'NO-OUTDOOR': 1<<3, + 'DFS': 1<<4, + 'PTP-ONLY': 1<<5, + 'PTMP-ONLY': 1<<6, + 'NO-IR': 1<<7, + # hole at bit 8 + # hole at bit 9. FIXME: Where is NO-HT40 defined? + 'NO-HT40': 1<<10, + 'AUTO-BW': 1<<11, +} + +dfs_regions = { + 'DFS-FCC': 1, + 'DFS-ETSI': 2, + 'DFS-JP': 3, +} + +@total_ordering + +class WmmRule(object): + + def __init__(self, vo_c, vi_c, be_c, bk_c, vo_ap, vi_ap, be_ap, bk_ap): + self.vo_c = vo_c + self.vi_c = vi_c + self.be_c = be_c + self.bk_c = bk_c + self.vo_ap = vo_ap + self.vi_ap = vi_ap + self.be_ap = be_ap + self.bk_ap = bk_ap + + def _as_tuple(self): + return (self.vo_c, self.vi_c, self.be_c, self.bk_c, + self.vo_ap, self.vi_ap, self.be_ap, self.bk_ap) + + def __eq__(self, other): + if other is None: + return False + return (self._as_tuple() == other._as_tuple()) + + def __ne__(self, other): + return not (self == other) + + def __lt__(self, other): + if other is None: + return False + return (self._as_tuple() < other._as_tuple()) + + def __hash__(self): + return hash(self._as_tuple()) + +class FreqBand(object): + def __init__(self, start, end, bw, comments=None): + self.start = start + self.end = end + self.maxbw = bw + self.comments = comments or [] + + def _as_tuple(self): + return (self.start, self.end, self.maxbw) + + def __eq__(self, other): + return (self._as_tuple() == other._as_tuple()) + + def __ne__(self, other): + return not (self == other) + + def __lt__(self, other): + return (self._as_tuple() < other._as_tuple()) + + def __hash__(self): + return hash(self._as_tuple()) + + def __str__(self): + return '<FreqBand %.3f - %.3f @ %.3f>' % ( + self.start, self.end, self.maxbw) + +@total_ordering +class PowerRestriction(object): + def __init__(self, max_ant_gain, max_eirp, comments = None): + self.max_ant_gain = max_ant_gain + self.max_eirp = max_eirp + self.comments = comments or [] + + def _as_tuple(self): + return (self.max_ant_gain, self.max_eirp) + + def __eq__(self, other): + return (self._as_tuple() == other._as_tuple()) + + def __ne__(self, other): + return not (self == other) + + def __lt__(self, other): + return (self._as_tuple() < other._as_tuple()) + + def __hash__(self): + return hash(self._as_tuple()) + + def __str__(self): + return '<PowerRestriction ...>' + +class DFSRegionError(Exception): + def __init__(self, dfs_region): + self.dfs_region = dfs_region + +class FlagError(Exception): + def __init__(self, flag): + self.flag = flag + +@total_ordering +class Permission(object): + def __init__(self, freqband, power, flags, wmmrule): + assert isinstance(freqband, FreqBand) + assert isinstance(power, PowerRestriction) + assert isinstance(wmmrule, WmmRule) or wmmrule is None + self.freqband = freqband + self.power = power + self.wmmrule = wmmrule + self.flags = 0 + for flag in flags: + if not flag in flag_definitions: + raise FlagError(flag) + self.flags |= flag_definitions[flag] + self.textflags = flags + + def _as_tuple(self): + return (self.freqband, self.power, self.flags, self.wmmrule) + + def __eq__(self, other): + return (self._as_tuple() == other._as_tuple()) + + def __ne__(self, other): + return not (self == other) + + def __lt__(self, other): + return (self._as_tuple() < other._as_tuple()) + + def __hash__(self): + return hash(self._as_tuple()) + + def __str__(self): + return str(self.freqband) + str(self.power) + str(self.wmmrule) + +class Country(object): + def __init__(self, dfs_region, permissions=None, comments=None): + self._permissions = permissions or [] + self.comments = comments or [] + self.dfs_region = 0 + + if dfs_region: + if not dfs_region in dfs_regions: + raise DFSRegionError(dfs_region) + self.dfs_region = dfs_regions[dfs_region] + + def add(self, perm): + assert isinstance(perm, Permission) + self._permissions.append(perm) + self._permissions.sort() + + def __contains__(self, perm): + assert isinstance(perm, Permission) + return perm in self._permissions + + def __str__(self): + r = ['(%s, %s)' % (str(b), str(p)) for b, p in self._permissions] + return '<Country (%s)>' % (', '.join(r)) + + def _get_permissions_tuple(self): + return tuple(self._permissions) + permissions = property(_get_permissions_tuple) + +class SyntaxError(Exception): + pass + +class DBParser(object): + def __init__(self, warn=None): + self._warn_callout = warn or sys.stderr.write + + def _syntax_error(self, txt=None): + txt = txt and ' (%s)' % txt or '' + raise SyntaxError("Syntax error in line %d%s" % (self._lineno, txt)) + + def _warn(self, txt): + self._warn_callout("Warning (line %d): %s\n" % (self._lineno, txt)) + + def _parse_band_def(self, bname, banddef, dupwarn=True): + try: + freqs, bw = banddef.split('@') + bw = float(bw) + except ValueError: + bw = 20.0 + + try: + start, end = freqs.split('-') + start = float(start) + end = float(end) + # The kernel will reject these, so might as well reject this + # upon building it. + if start <= 0: + self._syntax_error("Invalid start freq (%d)" % start) + if end <= 0: + self._syntax_error("Invalid end freq (%d)" % end) + if start > end: + self._syntax_error("Inverted freq range (%d - %d)" % (start, end)) + if start == end: + self._syntax_error("Start and end freqs are equal (%d)" % start) + except ValueError: + self._syntax_error("band must have frequency range") + + b = FreqBand(start, end, bw, comments=self._comments) + self._comments = [] + self._banddup[bname] = bname + if b in self._bandrev: + if dupwarn: + self._warn('Duplicate band definition ("%s" and "%s")' % ( + bname, self._bandrev[b])) + self._banddup[bname] = self._bandrev[b] + self._bands[bname] = b + self._bandrev[b] = bname + self._bandline[bname] = self._lineno + + def _parse_band(self, line): + try: + bname, line = line.split(':', 1) + if not bname: + self._syntax_error("'band' keyword must be followed by name") + except ValueError: + self._syntax_error("band name must be followed by colon") + + if bname in flag_definitions: + self._syntax_error("Invalid band name") + + self._parse_band_def(bname, line) + + def _parse_power(self, line): + try: + pname, line = line.split(':', 1) + if not pname: + self._syntax_error("'power' keyword must be followed by name") + except ValueError: + self._syntax_error("power name must be followed by colon") + + if pname in flag_definitions: + self._syntax_error("Invalid power name") + + self._parse_power_def(pname, line) + + def _parse_power_def(self, pname, line, dupwarn=True): + try: + max_eirp = line + if max_eirp == 'N/A': + max_eirp = '0' + max_ant_gain = float(0) + def conv_pwr(pwr): + if pwr.endswith('mW'): + pwr = float(pwr[:-2]) + return 10.0 * math.log10(pwr) + else: + return float(pwr) + max_eirp = conv_pwr(max_eirp) + except ValueError: + self._syntax_error("invalid power data") + + p = PowerRestriction(max_ant_gain, max_eirp, + comments=self._comments) + self._comments = [] + self._powerdup[pname] = pname + if p in self._powerrev: + if dupwarn: + self._warn('Duplicate power definition ("%s" and "%s")' % ( + pname, self._powerrev[p])) + self._powerdup[pname] = self._powerrev[p] + self._power[pname] = p + self._powerrev[p] = pname + self._powerline[pname] = self._lineno + + def _parse_wmmrule(self, line): + regions = line[:-1].strip() + if not regions: + self._syntax_error("'wmmrule' keyword must be followed by region") + + regions = regions.split(',') + + self._current_regions = {} + for region in regions: + if region in self._wmm_rules: + self._warn("region %s was added already to wmm rules" % region) + self._current_regions[region] = 1 + self._comments = [] + + def _validate_input(self, cw_min, cw_max, aifsn, cot): + if cw_min < 1: + self._syntax_error("Invalid cw_min value (%d)" % cw_min) + if cw_max < 1: + self._syntax_error("Invalid cw_max value (%d)" % cw_max) + if cw_min > cw_max: + self._syntax_error("Inverted contention window (%d - %d)" % + (cw_min, cw_max)) + if not (bin(cw_min + 1).count('1') == 1 and cw_min < 2**15): + self._syntax_error("Invalid cw_min value should be power of 2 - 1 (%d)" + % cw_min) + if not (bin(cw_max + 1).count('1') == 1 and cw_max < 2**15): + self._syntax_error("Invalid cw_max value should be power of 2 - 1 (%d)" + % cw_max) + if aifsn < 1: + self._syntax_error("Invalid aifsn value (%d)" % aifsn) + if cot < 0: + self._syntax_error("Invalid cot value (%d)" % cot) + + + def _validate_size(self, var, bytcnt): + return bytcnt < ceil(len(bin(var)[2:]) / 8.0) + + def _parse_wmmrule_item(self, line): + bytcnt = (2.0, 2.0, 1.0, 2.0) + try: + ac, cval = line.split(':') + if not ac: + self._syntax_error("wmm item must have ac prefix") + except ValueError: + self._syntax_error("access category must be followed by colon") + p = tuple([int(v.split('=', 1)[1]) for v in cval.split(',')]) + self._validate_input(*p) + for v, b in zip(p, bytcnt): + if self._validate_size(v, b): + self._syntax_error("unexpected input size expect %d got %d" + % (b, v)) + + for r in self._current_regions: + self._wmm_rules[r][ac] = p + + def _parse_country(self, line): + try: + cname, cvals= line.split(':', 1) + dfs_region = cvals.strip() + if not cname: + self._syntax_error("'country' keyword must be followed by name") + except ValueError: + self._syntax_error("country name must be followed by colon") + + cnames = cname.split(',') + + self._current_countries = {} + for cname in cnames: + if len(cname) != 2: + self._warn("country '%s' not alpha2" % cname) + cname = cname.encode('ascii') + if not cname in self._countries: + self._countries[cname] = Country(dfs_region, comments=self._comments) + self._current_countries[cname] = self._countries[cname] + self._comments = [] + + def _parse_country_item(self, line): + if line[0] == '(': + try: + band, line = line[1:].split('),', 1) + bname = 'UNNAMED %d' % self._lineno + self._parse_band_def(bname, band, dupwarn=False) + except: + self._syntax_error("Badly parenthesised band definition") + else: + try: + bname, line = line.split(',', 1) + if not bname: + self._syntax_error("country definition must have band") + if not line: + self._syntax_error("country definition must have power") + except ValueError: + self._syntax_error("country definition must have band and power") + + if line[0] == '(': + items = line.split('),', 1) + if len(items) == 1: + pname = items[0] + line = '' + if not pname[-1] == ')': + self._syntax_error("Badly parenthesised power definition") + pname = pname[:-1] + flags = [] + else: + pname = items[0] + flags = items[1].split(',') + power = pname[1:] + pname = 'UNNAMED %d' % self._lineno + self._parse_power_def(pname, power, dupwarn=False) + else: + line = line.split(',') + pname = line[0] + flags = line[1:] + w = None + if flags and 'wmmrule' in flags[-1]: + try: + region = flags.pop().split('=', 1)[1] + if region not in self._wmm_rules.keys(): + self._syntax_error("No wmm rule for %s" % region) + except IndexError: + self._syntax_error("flags is empty list or no region was found") + w = WmmRule(*self._wmm_rules[region].values()) + + if not bname in self._bands: + self._syntax_error("band does not exist") + if not pname in self._power: + self._syntax_error("power does not exist") + self._bands_used[bname] = True + self._power_used[pname] = True + # de-duplicate so binary database is more compact + bname = self._banddup[bname] + pname = self._powerdup[pname] + b = self._bands[bname] + p = self._power[pname] + try: + perm = Permission(b, p, flags, w) + except FlagError as e: + self._syntax_error("Invalid flag '%s'" % e.flag) + for cname, c in self._current_countries.items(): + if perm in c: + self._warn('Rule "%s, %s" added to "%s" twice' % ( + bname, pname, cname)) + else: + c.add(perm) + + def parse(self, f): + self._current_countries = None + self._current_regions = None + self._bands = {} + self._power = {} + self._countries = {} + self._bands_used = {} + self._power_used = {} + self._bandrev = {} + self._powerrev = {} + self._banddup = {} + self._powerdup = {} + self._bandline = {} + self._powerline = {} + self._wmm_rules = defaultdict(lambda: OrderedDict()) + + self._comments = [] + + self._lineno = 0 + for line in f: + self._lineno += 1 + line = line.strip() + if line[0:1] == '#': + self._comments.append(line[1:].strip()) + line = line.replace(' ', '').replace('\t', '') + if not line: + self._current_regions = None + self._comments = [] + line = line.split('#')[0] + if not line: + continue + if line[0:4] == 'band': + self._parse_band(line[4:]) + self._current_countries = None + self._current_regions = None + self._comments = [] + elif line[0:5] == 'power': + self._parse_power(line[5:]) + self._current_countries = None + self._current_regions = None + self._comments = [] + elif line[0:7] == 'country': + self._parse_country(line[7:]) + self._comments = [] + self._current_regions = None + elif self._current_countries is not None: + self._current_regions = None + self._parse_country_item(line) + self._comments = [] + elif line[0:7] == 'wmmrule': + self._parse_wmmrule(line[7:]) + self._current_countries = None + self._comments = [] + elif self._current_regions is not None: + self._parse_wmmrule_item(line) + self._current_countries = None + self._comments = [] + else: + self._syntax_error("Expected band, power or country definition") + + countries = self._countries + bands = {} + for k, v in self._bands.items(): + if k in self._bands_used: + bands[self._banddup[k]] = v + continue + # we de-duplicated, but don't warn again about the dupes + if self._banddup[k] == k: + self._lineno = self._bandline[k] + self._warn('Unused band definition "%s"' % k) + power = {} + for k, v in self._power.items(): + if k in self._power_used: + power[self._powerdup[k]] = v + continue + # we de-duplicated, but don't warn again about the dupes + if self._powerdup[k] == k: + self._lineno = self._powerline[k] + self._warn('Unused power definition "%s"' % k) + return countries diff --git a/debian-example/changelog b/debian-example/changelog new file mode 100644 index 0000000..7bbce5c --- /dev/null +++ b/debian-example/changelog @@ -0,0 +1,5 @@ +wireless-regdb (2009.01.15-1) unstable; urgency=low + + * Initial release + + -- Luis R. Rodriguez <mcgrof@gmail.com> Thu, 22 Jan 2009 16:00:00 +0100 diff --git a/debian-example/compat b/debian-example/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/debian-example/compat @@ -0,0 +1 @@ +5 diff --git a/debian-example/control b/debian-example/control new file mode 100644 index 0000000..e6e7161 --- /dev/null +++ b/debian-example/control @@ -0,0 +1,15 @@ +Source: wireless-regdb +Section: admin +Priority: optional +Maintainer: Luis R. Rodriguez <mcgrof@gmail.com> +Build-Depends: cdbs, debhelper (>= 5), python +Standards-Version: 3.7.3 + +Package: wireless-regdb +Architecture: all +Depends: +Suggests: crda +Description: The Linux wireless regulatory database + This package contains the wireless regulatory database used by all + cfg80211 based Linux wireless drivers. The wireless database being + used is maintained by Seth Forshee. diff --git a/debian-example/copyright b/debian-example/copyright new file mode 100644 index 0000000..c01f1a0 --- /dev/null +++ b/debian-example/copyright @@ -0,0 +1,21 @@ +This package was debianized by Luis Rodriguez <mcgrof@gmail.com> on +Thu, 22 Jan 2009 16:00:00 +0100. + +The wireless-regdb packages was downloaded from <http://wireless.kernel.org/download/wireless-regdb/> + +Copyright (c) 2008, Luis R. Rodriguez <mcgrof@gmail.com> +Copyright (c) 2008, Johannes Berg <johannes@sipsolutions.net> +Copyright (c) 2008, Michael Green <Michael.Green@Atheros.com> + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + diff --git a/debian-example/docs b/debian-example/docs new file mode 100644 index 0000000..e845566 --- /dev/null +++ b/debian-example/docs @@ -0,0 +1 @@ +README diff --git a/debian-example/rules b/debian-example/rules new file mode 100755 index 0000000..34a08a5 --- /dev/null +++ b/debian-example/rules @@ -0,0 +1,10 @@ +#!/usr/bin/make -f + +include /usr/share/cdbs/1/rules/debhelper.mk + +PREFIX = /usr +CRDA_LIB ?= $(PREFIX)/lib/crda + +install/wireless-regdb:: + install -o 0 -g 0 -m 755 -d debian/$(cdbs_curpkg)/$(CRDA_LIB) + install -o 0 -g 0 -m 644 regulatory.bin debian/$(cdbs_curpkg)/$(CRDA_LIB)/regulatory.bin diff --git a/gen-pubcert.sh b/gen-pubcert.sh new file mode 100755 index 0000000..a7e8538 --- /dev/null +++ b/gen-pubcert.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +if [[ $# -ne 3 ]]; then + echo "Usage: $0 priv-key out-file common-name" + exit 1 +fi + +openssl req -new -key "$1" -days 36500 -utf8 -nodes -batch \ + -x509 -outform PEM -out "$2" \ + -config <(cat <<-EOF + [ req ] + distinguished_name = req_distinguished_name + string_mask = utf8only + prompt = no + [ req_distinguished_name ] + commonName = $3 + EOF + ) diff --git a/regulatory.bin b/regulatory.bin Binary files differnew file mode 100644 index 0000000..aab7904 --- /dev/null +++ b/regulatory.bin diff --git a/regulatory.bin.5 b/regulatory.bin.5 new file mode 100644 index 0000000..b1862cd --- /dev/null +++ b/regulatory.bin.5 @@ -0,0 +1,49 @@ +.TH regulatory.bin 5 "21 December 2017" "regulatory.bin" "Linux" +.SH NAME +regulatory.bin, regulatory.db \- The Linux wireless regulatory database + +.ad l +.in +8 +.ti -8 + +.SS +.SH Description +.B regulatory.bin +and +.B regulatory.db +are the files used by the Linux wireless subsystem to keep its regulatory +database information. +.PP +.B regulatory.bin +is read by +.B crda +upon the Linux kernel's request for regulatory information for a specific +ISO / IEC 3166 alpha2 country code. +.PP +.B regulatory.db +is a newer, extensible database format which (since Linux 4.15) is read +by the kernel directly as a firmware file. + +The regulatory database is kept in a small binary format for size and code +efficiency. The +.B regulatory.bin +file can be parsed and read in human format by using the +.B regdbdump +command. The regulatory database files should be updated upon regulatory +changes or corrections. + +.SH Upkeeping +The regulatory database is maintained by the community as such +you are encouraged to send any corrections or updates to the +linux-wireless and wireless-regdb mailing lists: +.B linux-wireless@vger.kernel.org +and +.B wireless-regdb@lists.infradead.org + +.SH SEE ALSO +.BR regdbdump (8) +.BR crda (8) +.BR iw (8) + +.BR http://wireless.kernel.org/en/developers/Regulatory/ + diff --git a/regulatory.db b/regulatory.db Binary files differnew file mode 100644 index 0000000..1c1131b --- /dev/null +++ b/regulatory.db diff --git a/regulatory.db.5 b/regulatory.db.5 new file mode 100644 index 0000000..6c8aae3 --- /dev/null +++ b/regulatory.db.5 @@ -0,0 +1 @@ +.so man5/regulatory.bin.5.gz diff --git a/regulatory.db.p7s b/regulatory.db.p7s Binary files differnew file mode 100644 index 0000000..01a1c66 --- /dev/null +++ b/regulatory.db.p7s diff --git a/sforshee.key.pub.pem b/sforshee.key.pub.pem new file mode 100644 index 0000000..73d580e --- /dev/null +++ b/sforshee.key.pub.pem @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtUDjnCiEOQPyOddmLEE4 +Fax+pYNxJX6QfGjdbz/Z11k4n3xqUsIDKi1+ZvQesxJwIFvUlzI9cYs7GwgXFGth +xFeLlhYc/STVCwn5aBGE+8pRDNFFGdoQRIrZ/nap/WAtGAsolbIt6oiYuNFWIfBT +H/ECb+lGm5NfKJAPrDb6aCNxV1b2zNPffSrZG3NF67onhe96f6XLgMcwNtJT7uys +Hucx8TainGPGZVt/JXVooerTfgBcml7YIBgydwcpEmYeNnPnlwRBN7Gxciv0oSkg +fJZ5CyvQ2N7IbD+T+8XueFIRFRt69uJomef7RhaE48eh5uDSRtXhxF+gZvTaxP+V +HQIDAQAB +-----END PUBLIC KEY----- diff --git a/sforshee.x509.pem b/sforshee.x509.pem new file mode 100644 index 0000000..ebd0160 --- /dev/null +++ b/sforshee.x509.pem @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE----- +MIICpDCCAYwCCQCyjd9HrvnOpzANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAhz +Zm9yc2hlZTAgFw0xNzEwMDYxOTQwMzVaGA8yMTE3MDkxMjE5NDAzNVowEzERMA8G +A1UEAwwIc2ZvcnNoZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1 +QOOcKIQ5A/I512YsQTgVrH6lg3ElfpB8aN1vP9nXWTiffGpSwgMqLX5m9B6zEnAg +W9SXMj1xizsbCBcUa2HEV4uWFhz9JNULCfloEYT7ylEM0UUZ2hBEitn+dqn9YC0Y +CyiVsi3qiJi40VYh8FMf8QJv6Uabk18okA+sNvpoI3FXVvbM0999Ktkbc0XruieF +73p/pcuAxzA20lPu7Kwe5zHxNqKcY8ZlW38ldWih6tN+AFyaXtggGDJ3BykSZh42 +c+eXBEE3sbFyK/ShKSB8lnkLK9DY3shsP5P7xe54UhEVG3r24miZ5/tGFoTjx6Hm +4NJG1eHEX6Bm9NrE/5UdAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAIcD2vKCwt2v +fEQvhtNfTJNIuf4HF7sh9yUjTqoiDBa5c66dRnx12cNJV0e/M7eX7PVAdcBGIvCg +XZx5E6H/uKMve44GP8i25Goo8jRcIz8ywOatD6zPVXRHc9MBhbcLIlYkfZ8JqQ6G +njdbnG0C2YzIUGriWfMWBuqyQrVY/rrRgVca77I4iFj2qsQui1on5KXopMpnXKxy +Z8NvE8MtNXnXiuf11CEwStX2o9l5VvIPEPd90FGTL0f4fUsKhFUSCn1OOx8rL/wo +s2k04YCAu+KvudYw8R1UhyOZn1EDTEV9AmVzq/3PlMwNOmD9PBQvFjOpIR/LULGP +A+6gZqkWeRQ= +-----END CERTIFICATE----- diff --git a/sha1sum.txt b/sha1sum.txt new file mode 100644 index 0000000..7865603 --- /dev/null +++ b/sha1sum.txt @@ -0,0 +1 @@ +7ed3866486ee6b403a9a6af1ac267dbd5ddda06a db.txt diff --git a/web/Regulatory.py b/web/Regulatory.py new file mode 100644 index 0000000..f675921 --- /dev/null +++ b/web/Regulatory.py @@ -0,0 +1,166 @@ +# -*- coding: iso-8859-1 -*- +""" + Regulatory Database + + @copyright: 2008 Johannes Berg + @license: ISC, see LICENSE for details. +""" + +import codecs, math +from dbparse import DBParser, flag_definitions + +Dependencies = ["time"] + +def _country(macro, countries, code): + result = [] + + f = macro.formatter + + result.extend([ + f.heading(1, 1), + f.text('Regulatory definition for %s' % _get_iso_code(code)), + f.heading(0, 1), + ]) + + try: + country = countries[code] + except: + result.append(f.text('No information available')) + return ''.join(result) + + + if country.comments: + result.extend([ + f.preformatted(1), + f.text('\n'.join(country.comments)), + f.preformatted(0), + ]) + + result.append(f.table(1)) + result.extend([ + f.table_row(1), + f.table_cell(1), f.strong(1), + f.text('Band [MHz]'), + f.strong(0), f.table_cell(0), + f.table_cell(1), f.strong(1), + f.text('Max BW [MHz]'), + f.strong(0), f.table_cell(0), + f.table_cell(1), f.strong(1), + f.text('Flags'), + f.strong(0), f.table_cell(0), + f.table_cell(1), f.strong(1), + f.text('Max antenna gain [dBi]'), + f.strong(0), f.table_cell(0), + f.table_cell(1), f.strong(1), + f.text('Max EIRP [dBm'), + f.hardspace, + f.text('(mW)]'), + f.strong(0), f.table_cell(0), + f.table_row(0), + ]) + + for perm in country.permissions: + def str_or_na(val, dBm=False): + if val and not dBm: + return '%.2f' % val + elif val: + return '%.2f (%.2f)' % (val, math.pow(10, val/10.0)) + return 'N/A' + result.extend([ + f.table_row(1), + f.table_cell(1), + f.text('%.3f - %.3f' % (perm.freqband.start, perm.freqband.end)), + f.table_cell(0), + f.table_cell(1), + f.text('%.3f' % (perm.freqband.maxbw,)), + f.table_cell(0), + f.table_cell(1), + f.text(', '.join(perm.textflags)), + f.table_cell(0), + f.table_cell(1), + f.text(str_or_na(perm.power.max_ant_gain)), + f.table_cell(0), + f.table_cell(1), + f.text(str_or_na(perm.power.max_eirp, dBm=True)), + f.table_cell(0), + f.table_row(0), + ]) + + result.append(f.table(0)) + + result.append(f.linebreak(0)) + result.append(f.linebreak(0)) + result.append(macro.request.page.link_to(macro.request, 'return to country list')) + return ''.join(result) + +_iso_list = {} + +def _get_iso_code(code): + if not _iso_list: + for line in codecs.open('/usr/share/iso-codes/iso_3166.tab', encoding='utf-8'): + line = line.strip() + c, name = line.split('\t') + _iso_list[c] = name + return _iso_list.get(code, 'Unknown (%s)' % code) + +def macro_Regulatory(macro): + _ = macro.request.getText + request = macro.request + f = macro.formatter + + country = request.form.get('alpha2', [None])[0] + + dbpath = '/tmp/db.txt' + if hasattr(request.cfg, 'regdb_path'): + dbpath = request.cfg.regdb_path + + result = [] + + if request.form.get('raw', [None])[0]: + result.append(f.code_area(1, 'db-raw', show=1, start=1, step=1)) + for line in open(dbpath): + result.extend([ + f.code_line(1), + f.text(line.rstrip()), + f.code_line(0), + ]) + result.append(f.code_area(0, 'db-raw')) + result.append(macro.request.page.link_to(macro.request, 'return to country list')) + return ''.join(result) + + warnings = [] + countries = DBParser(warn=lambda x: warnings.append(x)).parse(open(dbpath)) + + if country: + return _country(macro, countries, country) + + countries = countries.keys() + countries = [(_get_iso_code(code), code) for code in countries] + countries.sort() + + result.extend([ + f.heading(1, 1), + f.text('Countries'), + f.heading(0, 1), + ]) + + result.append(f.bullet_list(1)) + for name, code in countries: + result.extend([ + f.listitem(1), + request.page.link_to(request, name, querystr={'alpha2': code}), + f.listitem(0), + ]) + result.append(f.bullet_list(0)) + + if warnings: + result.append(f.heading(1, 2)) + result.append(f.text("Warnings")) + result.append(f.heading(0, 2)) + result.append(f.preformatted(1)) + result.extend(warnings) + result.append(f.preformatted(0)) + + result.append(request.page.link_to(request, 'view raw database', querystr={'raw': 1})) + + return ''.join(result) diff --git a/wireless-regdb.spec b/wireless-regdb.spec new file mode 100644 index 0000000..bb648ca --- /dev/null +++ b/wireless-regdb.spec @@ -0,0 +1,35 @@ +Summary: Linux wireless regulatory database +Name: wireless-regdb +Version: 2009.01.15 +Release: 1 +License: ISC +Group: System Enviroment/Base +Source: http://wireless.kernel.org/download/wireless-regdb/wireless-regdb-2009-01-15.tar.bz2 +URL: http://wireless.kernel.org/en/developers/Regulatory/ +Packager: Luis R. Rodriguez <mcgrof@gmail.com> +BuildRoot : /var/tmp/%{name}-buildroot +Requires: python +BuildArch: noarch + +%define crda_lib /usr/lib/crda + +%description +This package contains the wireless regulatory database used by all +cfg80211 based Linux wireless drivers. The wireless database being +used is maintained by Seth Forshee. +http://wireless.kernel.org/en/developers/Regulatory/ + +%prep +%setup -n %name-2009-01-15 +%build +%install +install -m 755 -d %buildroot/%crda_lib +install -m 644 regulatory.bin %buildroot/%{crda_lib}/regulatory.bin +%files +%crda_lib/regulatory.bin +%doc README LICENSE + +%changelog +* Fri Jan 23 2009 - mcgrof@gmail.com +- Started wireless-regdb package + |