Skip to content

Commit 779cb49

Browse files
committed
crda: add regulatory domain stream parser
This adds a stream parser for regulatory domains. This allows developers to build regulatory domains now using the db.txt from a stream, either stdin, or a from an opened file. This also adds a simple db2rd which for now only uses the library but with a bit of effort can also be used as a suitable replacement for the kernel's genregdb.awk. Signed-off-by: Luis R. Rodriguez <mcgrof@do-not-panic.com>
1 parent 231a109 commit 779cb49

File tree

4 files changed

+627
-2
lines changed

4 files changed

+627
-2
lines changed

Makefile

+8-2
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@ PUBKEY_DIR?=pubkeys
2424
RUNTIME_PUBKEY_DIR?=/etc/wireless-regdb/pubkeys
2525

2626
CFLAGS += -Wall -g
27+
LDLIBS += -lm
2728

2829
all: all_noverify verify
2930

30-
all_noverify: crda intersect regdbdump
31+
all_noverify: crda intersect regdbdump db2rd
3132

3233
ifeq ($(USE_OPENSSL),1)
3334
CFLAGS += -DUSE_OPENSSL -DPUBKEY_DIR=\"$(RUNTIME_PUBKEY_DIR)\" `pkg-config --cflags openssl`
@@ -121,6 +122,10 @@ intersect: reglib.o intersect.o
121122
$(NQ) ' LD ' $@
122123
$(Q)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS)
123124

125+
db2rd: reglib.o db2rd.o
126+
$(NQ) ' LD ' $@
127+
$(Q)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS)
128+
124129
verify: $(REG_BIN) regdbdump
125130
$(NQ) ' CHK $(REG_BIN)'
126131
$(Q)./regdbdump $(REG_BIN) >/dev/null
@@ -152,5 +157,6 @@ install: crda crda.8.gz regdbdump.8.gz
152157
$(Q)$(INSTALL) -m 644 -t $(DESTDIR)/$(MANDIR)/man8/ regdbdump.8.gz
153158

154159
clean:
155-
$(Q)rm -f crda regdbdump intersect *.o *~ *.pyc keys-*.c *.gz \
160+
$(Q)rm -f crda regdbdump intersect db2rd \
161+
*.o *~ *.pyc keys-*.c *.gz \
156162
udev/$(UDEV_LEVEL)regulatory.rules udev/regulatory.rules.parsed

db2rd.c

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#include <errno.h>
2+
#include <stdlib.h>
3+
#include <stdio.h>
4+
#include <arpa/inet.h> /* ntohl */
5+
#include <string.h>
6+
7+
#include "nl80211.h"
8+
#include "reglib.h"
9+
10+
int main(int argc, char **argv)
11+
{
12+
struct ieee80211_regdomain *rd = NULL;
13+
FILE *fp;
14+
15+
if (argc != 1) {
16+
fprintf(stderr, "Usage: cat db.txt | %s\n", argv[0]);
17+
return -EINVAL;
18+
}
19+
20+
fp = reglib_create_parse_stream(stdin);
21+
if (!fp)
22+
return -EINVAL;
23+
24+
reglib_for_each_country_stream(fp, rd) {
25+
reglib_print_regdom(rd);
26+
free(rd);
27+
}
28+
29+
fclose(fp);
30+
31+
return 0;
32+
}

0 commit comments

Comments
 (0)