From ef3f868da0d78adf2490a762ff567cf5b636c213 Mon Sep 17 00:00:00 2001 From: Zachary Riedlshah Date: Wed, 5 Jun 2019 22:58:19 +1200 Subject: [PATCH] wireless-regdb: update to 2019.06.03 Fixes build issues on a python3 host (issues with the print statement formatting in the current build). Includes 100-regdb-write-firmware-file-format-version-code-20.patch and other fixes. Closes bugs.openwrt.org/index.php?do=details&task_id=1605. Uses the tarball as requested. Signed-off-by: Zachary Riedlshah --- package/firmware/wireless-regdb/Makefile | 17 +- ...firmware-file-format-version-code-20.patch | 251 ------------------ 2 files changed, 8 insertions(+), 260 deletions(-) delete mode 100644 package/firmware/wireless-regdb/patches/100-regdb-write-firmware-file-format-version-code-20.patch diff --git a/package/firmware/wireless-regdb/Makefile b/package/firmware/wireless-regdb/Makefile index d06da2c708..7fc895ba61 100644 --- a/package/firmware/wireless-regdb/Makefile +++ b/package/firmware/wireless-regdb/Makefile @@ -1,22 +1,21 @@ include $(TOPDIR)/rules.mk PKG_NAME:=wireless-regdb +PKG_VERSION:=2019.06.03 -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://git.kernel.org/pub/scm/linux/kernel/git/sforshee/wireless-regdb.git -PKG_SOURCE_DATE:=2017-10-20 -PKG_SOURCE_VERSION:=4343d359ed5e7404de8803a74df186457b26ab79 -PKG_MIRROR_HASH:=5f5b669f32ae36cb65b1d99efbbbfd42c2983cda32f6448346e3e54ffaba3889 +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz +PKG_SOURCE_URL:=@KERNEL/software/network/wireless-regdb/ +PKG_HASH:=cd917ed86b63ce8d93947979f1f18948f03a4ac0ad89ec25227b36ac00dc54bf PKG_MAINTAINER:=Felix Fietkau include $(INCLUDE_DIR)/package.mk define Package/wireless-regdb - SECTION:=firmware - CATEGORY:=Firmware - URL:=$(patsubst pub/scm,cgit,$(PKG_SOURCE_URL)) - TITLE:=Wireless Regulatory Database + SECTION:=firmware + CATEGORY:=Firmware + URL:=https://git.kernel.org/pub/scm/linux/kernel/git/sforshee/wireless-regdb.git/ + TITLE:=Wireless Regulatory Database endef define Build/Compile diff --git a/package/firmware/wireless-regdb/patches/100-regdb-write-firmware-file-format-version-code-20.patch b/package/firmware/wireless-regdb/patches/100-regdb-write-firmware-file-format-version-code-20.patch deleted file mode 100644 index 0c5c63fc5f..0000000000 --- a/package/firmware/wireless-regdb/patches/100-regdb-write-firmware-file-format-version-code-20.patch +++ /dev/null @@ -1,251 +0,0 @@ -From: Johannes Berg -Date: Mon, 9 Oct 2017 11:50:57 +0200 -Subject: [PATCH] regdb: write firmware file format (version code 20) - -TODO: clean up the Makefile stuff ... - -Signed-off-by: Johannes Berg ---- - create mode 100755 db2fw.py - ---- a/Makefile -+++ b/Makefile -@@ -1,7 +1,5 @@ - # Install prefix - PREFIX ?= /usr --CRDA_PATH ?= $(PREFIX)/lib/crda --CRDA_KEY_PATH ?= $(CRDA_PATH)/pubkeys - - MANDIR ?= $(PREFIX)/share/man/ - -@@ -30,39 +28,47 @@ REGDB_AUTHOR ?= $(shell if [ -f $(DISTRO - fi) - - REGDB_PRIVKEY ?= ~/.wireless-regdb-$(REGDB_AUTHOR).key.priv.pem --REGDB_PUBKEY ?= $(REGDB_AUTHOR).key.pub.pem -- --REGDB_UPSTREAM_PUBKEY ?= sforshee.key.pub.pem -+REGDB_PUBCERT ?= $(REGDB_AUTHOR).x509.pem - - REGDB_CHANGED = $(shell $(SHA1SUM) -c --status sha1sum.txt >/dev/null 2>&1; \ - if [ $$? -ne 0 ]; then \ -- echo maintainer-clean $(REGDB_PUBKEY); \ -+ echo maintainer-clean $(REGDB_PUBCERT); \ - fi) - - .PHONY: all clean mrproper install maintainer-clean install-distro-key - --all: $(REGDB_CHANGED) regulatory.bin sha1sum.txt -+all: $(REGDB_CHANGED) regulatory.db.p7s sha1sum.txt - - clean: - @rm -f *.pyc *.gz - - maintainer-clean: clean -- @rm -f regulatory.bin -+ @rm -f regulatory.db regulatory.db.p7s - - mrproper: clean maintainer-clean -- @echo Removed public key, regulatory.bin and compresed man pages -- @rm -f $(REGDB_PUBKEY) .custom -+ @echo Removed public key, regulatory.db* and compressed man pages -+ @rm -f $(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)..." -+ @openssl req -config regulatory.openssl.conf \ -+ -key $(REGDB_PRIVKEY) -days 36500 -utf8 -nodes -batch \ -+ -x509 -outform PEM -out $(REGDB_PUBCERT) - @echo $(REGDB_PUBKEY) > .custom - - -@@ -97,16 +103,7 @@ install-distro-key: maintainer-clean $(D - # make maintainer-clean - # make - # sudo make install --install: regulatory.bin.5.gz -- install -m 755 -d $(DESTDIR)/$(CRDA_PATH) -- install -m 755 -d $(DESTDIR)/$(CRDA_KEY_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: regulatory.db.5.gz -+ install -m 644 -t $(DESTDIR)/$(CRDA_PATH)/ regulatory.db - install -m 755 -d $(DESTDIR)/$(MANDIR)/man5/ -- install -m 644 -t $(DESTDIR)/$(MANDIR)/man5/ regulatory.bin.5.gz -- --uninstall: -- rm -rf $(DESTDIR)/$(CRDA_PATH)/ -+ install -m 644 -t $(DESTDIR)/$(MANDIR)/man5/ regulatory.db.5.gz ---- a/README -+++ b/README -@@ -18,8 +18,8 @@ python module is used by the web viewer - 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, the `compiler', which --compiles and signs the binary database. -+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 git repository: - ---- /dev/null -+++ b/db2fw.py -@@ -0,0 +1,133 @@ -+#!/usr/bin/env python -+ -+from cStringIO import StringIO -+import struct -+import hashlib -+from dbparse import DBParser -+import sys -+ -+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.itervalues(): -+ for rule in c.permissions: -+ result[rule] = 1 -+ return result.keys() -+ -+def create_collections(countries): -+ result = {} -+ for c in countries.itervalues(): -+ result[(c.permissions, c.dfs_region)] = 1 -+ return result.keys() -+ -+ -+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(file(sys.argv[2])) -+rules = create_rules(countries) -+rules.sort(cmp=lambda x, y: cmp(x.freqband, y.freqband)) -+collections = create_collections(countries) -+collections.sort(cmp=lambda x, y: cmp(x[0][0].freqband, y[0][0].freqband)) -+ -+output = StringIO() -+ -+# struct regdb_file_header -+be32(output, MAGIC) -+be32(output, VERSION) -+ -+country_ptrs = {} -+countrynames = countries.keys() -+countrynames.sort() -+for alpha2 in countrynames: -+ coll = countries[alpha2] -+ output.write(struct.pack('>cc', str(alpha2[0]), str(alpha2[1]))) -+ country_ptrs[alpha2] = PTR(output) -+output.write('\x00' * 4) -+ -+reg_rules = {} -+flags = 0 -+for reg_rule in rules: -+ freq_range, power_rule = reg_rule.freqband, reg_rule.power -+ 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: -+ rule_len += 2 -+ output.write(struct.pack('>BBHIII', rule_len, flags, power_rule.max_eirp * 100, -+ freq_range.start * 1000, freq_range.end * 1000, freq_range.maxbw * 1000, -+ )) -+ if cac_timeout: -+ output.write(struct.pack('>H', cac_timeout)) -+ 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], 'w') -+outfile.write(output.getvalue())