PERFORCE change 138534 for review
Sam Leffler
sam at FreeBSD.org
Tue Mar 25 19:00:15 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=138534
Change 138534 by sam at sam_ebb on 2008/03/25 19:00:13
checkpoint work to move regdomain tables out of ifconfig;
works but the final plan is to create a lib80211 that
contains the parser plus other useful bits from ifconfig
Affected files ...
.. //depot/projects/vap/etc/Makefile#4 edit
.. //depot/projects/vap/etc/regdomain.xml#1 add
.. //depot/projects/vap/sbin/ifconfig/Makefile#7 edit
.. //depot/projects/vap/sbin/ifconfig/ifieee80211.c#15 edit
.. //depot/projects/vap/sbin/ifconfig/regdomain.c#1 add
.. //depot/projects/vap/sbin/ifconfig/regdomain.h#1 add
Differences ...
==== //depot/projects/vap/etc/Makefile#4 (text+ko) ====
@@ -17,7 +17,7 @@
portsnap.conf pf.os phones profile protocols \
rc rc.bsdextended rc.firewall rc.firewall6 rc.initdiskless \
rc.sendmail rc.shutdown \
- rc.subr remote rpc services shells \
+ rc.subr regdomain.xml remote rpc services shells \
snmpd.config sysctl.conf syslog.conf \
etc.${MACHINE_ARCH}/ttys \
${.CURDIR}/../gnu/usr.bin/man/manpath/manpath.config \
==== //depot/projects/vap/sbin/ifconfig/Makefile#7 (text+ko) ====
@@ -23,7 +23,10 @@
SRCS+= ifmac.c # MAC support
SRCS+= ifmedia.c # SIOC[GS]IFMEDIA support
SRCS+= ifvlan.c # SIOC[GS]ETVLAN support
-SRCS+= ifieee80211.c # SIOC[GS]IEEE80211 support
+
+SRCS+= ifieee80211.c regdomain.c # SIOC[GS]IEEE80211 support
+DPADD+= ${LIBBSDXML} ${LIBSBUF}
+LDADD+= -lbsdxml -lsbuf
SRCS+= ifcarp.c # SIOC[GS]VH support
SRCS+= ifgroup.c # ...
@@ -34,8 +37,8 @@
.if ${MK_IPX_SUPPORT} != "no" && !defined(RELEASE_CRUNCH)
SRCS+= af_ipx.c # IPX support
-DPADD= ${LIBIPX}
-LDADD= -lipx
+DPADD+= ${LIBIPX}
+LDADD+= -lipx
.endif
MAN= ifconfig.8
==== //depot/projects/vap/sbin/ifconfig/ifieee80211.c#15 (text+ko) ====
@@ -78,7 +78,6 @@
#include <net/route.h>
#include <net80211/ieee80211_ioctl.h>
-#include <net80211/ieee80211_regdomain.h>
#include <ctype.h>
#include <err.h>
@@ -93,10 +92,16 @@
#include <stddef.h> /* NB: for offsetof */
#include "ifconfig.h"
+#include "regdomain.h"
#ifndef IEEE80211_FIXED_RATE_NONE
#define IEEE80211_FIXED_RATE_NONE 0xff
#endif
+
+#define REQ_ECM 0x01000000 /* enable if ECM set */
+#define REQ_OUTDOOR 0x02000000 /* enable for outdoor operation */
+#define REQ_FLAGS 0xff000000 /* private flags, don't pass to os */
+
/* XXX need these publicly defined or similar */
#ifndef IEEE80211_NODE_AUTH
#define IEEE80211_NODE_AUTH 0x0001 /* authorized for data */
@@ -117,45 +122,6 @@
static void LINE_BREAK(void);
static void LINE_CHECK(const char *fmt, ...);
-#define REQ_ECM 0x01000000 /* enable if ECM set */
-#define REQ_OUTDOOR 0x02000000 /* enable for outdoor operation */
-#define REQ_FLAGS 0xff000000 /* private flags, don't pass to os */
-
-struct freqband {
- uint16_t freqStart; /* starting frequency (MHz) */
- uint16_t freqEnd; /* ending frequency (MHz) */
- uint8_t chanWidth; /* channel width (MHz) */
- uint8_t chanSep; /* channel sepaaration (MHz) */
- uint32_t flags; /* common operational constraints */
-};
-struct netband {
- const struct freqband *b; /* channel list description */
- uint8_t maxPower; /* regulatory cap on tx power (dBm) */
- uint8_t maxPowerDFS; /* regulatory cap w/ DFS (dBm) */
- uint32_t flags; /* net80211 channel flags */
-};
-
-#define MAXFBANDS 10 /* XXX could define per netband */
-
-struct regdomain {
- enum RegdomainCode sku; /* regdomain code/SKU */
- const char *name; /* printable name */
- enum ISOCountryCode cc; /* country code for 1-1/default map */
-
- struct netband bands_11b[MAXFBANDS]; /* 11b operation */
- struct netband bands_11g[MAXFBANDS]; /* 11g operation */
- struct netband bands_11a[MAXFBANDS]; /* 11a operation */
- struct netband bands_11ng[MAXFBANDS]; /* 11ng operation */
- struct netband bands_11na[MAXFBANDS]; /* 11na operation */
-};
-
-struct countrycode {
- enum ISOCountryCode code;
- const struct regdomain *rd;
- const char* isoname;
- const char* name;
-};
-
static const char *modename[] = {
"auto", "11a", "11b", "11g", "fh", "turboA", "turboG",
"sturbo", "11na", "11ng"
@@ -173,10 +139,6 @@
int allchans, int verbose);
static void regdomain_makechannels(struct ieee80211_regdomain_req *,
const struct ieee80211_devcaps_req *);
-static const struct regdomain *regdomain_lookupbyrd(enum RegdomainCode sku);
-static const struct regdomain *regdomain_lookupbyname(const char *name);
-static const struct countrycode *countrycode_lookupbycc(enum ISOCountryCode);
-static const struct countrycode *countrycode_lookupbyname(const char *);
static struct ieee80211req_chaninfo chaninfo;
static struct ieee80211_regdomain regdomain;
@@ -216,6 +178,18 @@
gethtconf(s);
}
+static struct regdata *
+getregdata(void)
+{
+ static struct regdata *rdp = NULL;
+ if (rdp == NULL) {
+ rdp = lib80211_alloc_regdata();
+ if (rdp == NULL)
+ exit(-1);
+ }
+ return rdp;
+}
+
/*
* Given the channel at index i with attributes from,
* check if there is a channel with attributes to in
@@ -444,16 +418,17 @@
struct ieee80211_regdomain_req req;
struct ieee80211_regdomain *rd = arg;
struct ieee80211_devcaps_req dc;
+ struct regdata *rdp = getregdata();
if (rd->country != 0) {
- const struct countrycode *cc;
+ const struct country *cc;
/*
* Check current country seting to make sure it's
* compatible with the new regdomain. If not, then
* override it with any default country for this
* SKU. If we cannot arrange a match, then abort.
*/
- cc = countrycode_lookupbycc(rd->country);
+ cc = lib80211_country_findbycc(rdp, rd->country);
if (cc == NULL)
errx(1, "unknown ISO country code %d", rd->country);
if (cc->rd->sku != rd->regdomain) {
@@ -471,12 +446,12 @@
* constructing the channel list by deferring to the
* regdomain to construct the channel list.
*/
- rp = regdomain_lookupbyrd(rd->regdomain);
+ rp = lib80211_regdomain_findbysku(rdp, rd->regdomain);
if (rp == NULL)
errx(1, "country %s (%s) is not usable with "
"regdomain %d", cc->isoname, cc->name,
rd->regdomain);
- else if (rp->cc != 0 && rp->cc != cc->code)
+ else if (rp->cc != 0 && rp->cc != cc)
errx(1, "country %s (%s) is not usable with "
"regdomain %s", cc->isoname, cc->name,
rp->name);
@@ -1715,385 +1690,6 @@
set80211(s, IEEE80211_IOC_DOTD, d, 0, NULL);
}
-/* NB: keep sorted by starting frequency, legacy before HT */
-const struct freqband F1_5120_5240 = { 5120, 5240, 20, 20, IEEE80211_CHAN_A };
-const struct freqband H4_5120_5240 = { 5120, 5240, 40, 20, IEEE80211_CHAN_A };
-const struct freqband F1_5180_5240 = { 5180, 5240, 20, 20, IEEE80211_CHAN_A };
-const struct freqband H4_5180_5240 = { 5180, 5240, 40, 20, IEEE80211_CHAN_A };
-const struct freqband F1_5200_5240 = { 5200, 5240, 20, 20, IEEE80211_CHAN_A };
-const struct freqband H4_5200_5240 = { 5200, 5240, 40, 20, IEEE80211_CHAN_A };
-const struct freqband F1_5260_5320 = { 5260, 5320, 20, 20, IEEE80211_CHAN_A };
-const struct freqband H4_5260_5320 = { 5260, 5320, 40, 20, IEEE80211_CHAN_A };
-const struct freqband F1_5260_5700 = { 5260, 5700, 20, 20, IEEE80211_CHAN_A };
-const struct freqband F1_5280_5320 = { 5280, 5320, 20, 20, IEEE80211_CHAN_A };
-const struct freqband H4_5280_5320 = { 5280, 5320, 40, 20, IEEE80211_CHAN_A };
-const struct freqband F1_5500_5620 = { 5500, 5620, 20, 20, IEEE80211_CHAN_A };
-const struct freqband H4_5500_5620 = { 5500, 5620, 40, 20, IEEE80211_CHAN_A };
-const struct freqband H4_5500_5680 = { 5500, 5680, 40, 20, IEEE80211_CHAN_A };
-const struct freqband F1_5500_5700 = { 5500, 5700, 20, 20, IEEE80211_CHAN_A };
-const struct freqband H4_5725_5825 = { 5725, 5825, 40, 20, IEEE80211_CHAN_A };
-const struct freqband F1_5745_5805 = { 5745, 5805, 20, 20, IEEE80211_CHAN_A };
-const struct freqband H4_5745_5805 = { 5745, 5805, 40, 20, IEEE80211_CHAN_A };
-const struct freqband H4_5745_5825 = { 5745, 5825, 40, 20, IEEE80211_CHAN_A };
-const struct freqband F1_5825_5825 = { 5825, 5825, 20, 20, IEEE80211_CHAN_A };
-const struct freqband H4_5825_5825 = { 5825, 5825, 40, 20, IEEE80211_CHAN_A };
-
-const struct freqband F1_2312_2372 = { 2312, 2372, 20, 5 };
-const struct freqband F1_2412_2462 = { 2412, 2462, 20, 5 };
-const struct freqband H4_2412_2462 = { 2412, 2462, 40, 5 };
-const struct freqband F1_2412_2472 = { 2412, 2472, 20, 5 };
-const struct freqband H4_2412_2472 = { 2412, 2472, 40, 5 };
-const struct freqband F1_2467_2472 = { 2467, 2472, 20, 5 };
-const struct freqband H4_2467_2472 = { 2467, 2472, 40, 5 };
-const struct freqband F1_2484_2484 = { 2484, 2484, 20, 5 };
-const struct freqband F1_2512_2732 = { 2512, 2732, 20, 5 };
-
-const static struct regdomain rd_debug = {
- .sku = SKU_DEBUG, .name = "DEBUG",
-};
-
-const static struct regdomain rd_fcc = {
- .sku = SKU_FCC, .name = "FCC", .cc = CTRY_UNITED_STATES,
- .bands_11b = {
- { &F1_2412_2462, 30, 30, IEEE80211_CHAN_B },
- },
- .bands_11g = {
- { &F1_2412_2462, 30, 30, IEEE80211_CHAN_G },
- },
- .bands_11a = {
- { &F1_5180_5240, 17, 17 },
- { &F1_5745_5805, 23, 23 },
- { &F1_5825_5825, 23, 23, IEEE80211_CHAN_PASSIVE },
- },
- .bands_11ng = {
- { &F1_2412_2462, 30, 30, IEEE80211_CHAN_G | IEEE80211_CHAN_HT20 },
- { &F1_2412_2462, 30, 30, IEEE80211_CHAN_G | IEEE80211_CHAN_HT40 },
- },
- .bands_11na = {
- { &F1_5180_5240, 17, 17, IEEE80211_CHAN_HT20 },
- { &H4_5180_5240, 17, 17, IEEE80211_CHAN_HT40 },
- { &F1_5745_5805, 23, 23, IEEE80211_CHAN_HT20 },
- { &H4_5745_5805, 23, 23, IEEE80211_CHAN_HT40 },
- },
-};
-
-const static struct regdomain rd_fcc3 = {
- .sku = SKU_FCC3, .name = "FCC3",
- .bands_11b = {
- { &F1_2412_2462, 30, 30, IEEE80211_CHAN_B },
- },
- .bands_11g = {
- { &F1_2412_2462, 30, 30, IEEE80211_CHAN_G },
- },
- .bands_11a = {
- { &F1_5180_5240, 17, 17 },
- { &F1_5745_5805, 23, 23, IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- { &F1_5825_5825, 23, 23, IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- },
- .bands_11ng = {
- { &F1_2412_2462, 30, 30, IEEE80211_CHAN_G | IEEE80211_CHAN_HT20 },
- { &F1_2412_2462, 30, 30, IEEE80211_CHAN_G | IEEE80211_CHAN_HT40 },
- },
- .bands_11na = {
- { &F1_5180_5240, 17, 17, IEEE80211_CHAN_HT20 },
- { &H4_5180_5240, 17, 17, IEEE80211_CHAN_HT40 },
- { &F1_5745_5805, 23, 23, IEEE80211_CHAN_HT20 },
- { &H4_5745_5805, 23, 23, IEEE80211_CHAN_HT40 |
- IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- },
-};
-
-const static struct regdomain rd_japan = {
- .sku = SKU_JAPAN, .name = "JAPAN", .cc = CTRY_JAPAN,
- .bands_11b = {
- { &F1_2412_2472, 23, 23, IEEE80211_CHAN_B },
- { &F1_2484_2484, 23, 23, IEEE80211_CHAN_B },
- },
- .bands_11g = {
- { &F1_2412_2472, 23, 23, IEEE80211_CHAN_G },
- },
- .bands_11a = {
- { &F1_5180_5240, 23, 23 },
- { &F1_5260_5320, 23, 23, IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- },
- .bands_11ng = {
- { &F1_2412_2472, 23, 23, IEEE80211_CHAN_G | IEEE80211_CHAN_HT20 },
- { &H4_2412_2472, 23, 23, IEEE80211_CHAN_G | IEEE80211_CHAN_HT40 },
- },
- .bands_11na = {
- { &F1_5180_5240, 23, 23, IEEE80211_CHAN_HT20 },
- { &H4_5180_5240, 23, 23, IEEE80211_CHAN_HT40 },
- { &F1_5260_5320, 23, 23, IEEE80211_CHAN_HT20 |
- IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- { &H4_5260_5320, 23, 23, IEEE80211_CHAN_HT40 |
- IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- },
-};
-
-const static struct regdomain rd_etsi = {
- .sku = SKU_ETSI, .name = "ETSI",
- .bands_11b = {
- { &F1_2412_2472, 30, 30, IEEE80211_CHAN_B },
- },
- .bands_11g = {
- { &F1_2412_2472, 30, 30, IEEE80211_CHAN_G },
- },
- .bands_11a = {
- { &F1_5180_5240, 17, 17 },
- { &F1_5260_5320, 24, 24, IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- { &F1_5500_5700, 23, 23, IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- },
- .bands_11ng = {
- { &F1_2412_2472, 30, 30, IEEE80211_CHAN_G | IEEE80211_CHAN_HT20 },
- { &H4_2412_2462, 30, 30, IEEE80211_CHAN_G | IEEE80211_CHAN_HT40 },
- },
- .bands_11na = {
- { &F1_5180_5240, 17, 17, IEEE80211_CHAN_HT20 },
- { &H4_5180_5240, 17, 17, IEEE80211_CHAN_HT40 },
- { &F1_5260_5320, 24, 24, IEEE80211_CHAN_HT20 |
- IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- { &H4_5260_5320, 24, 24, IEEE80211_CHAN_HT40 |
- IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- { &F1_5500_5700, 23, 23, IEEE80211_CHAN_HT20 |
- IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- { &H4_5500_5680, 23, 23, IEEE80211_CHAN_HT40 |
- IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- },
-};
-
-const static struct regdomain rd_etsi2 = { /* ETSI w/o HT40 in 5GHz */
- .sku = SKU_ETSI2, .name = "ETSI2",
- .bands_11b = {
- { &F1_2412_2472, 30, 30, IEEE80211_CHAN_B },
- },
- .bands_11g = {
- { &F1_2412_2472, 30, 30, IEEE80211_CHAN_G },
- },
- .bands_11a = {
- { &F1_5120_5240, 17, 17 },
- { &F1_5260_5320, 24, 24, IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- { &F1_5500_5700, 23, 23, IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- },
- .bands_11ng = {
- { &F1_2412_2472, 30, 30, IEEE80211_CHAN_G | IEEE80211_CHAN_HT20 },
- },
- .bands_11na = {
- { &F1_5120_5240, 17, 17, IEEE80211_CHAN_HT20 },
- { &F1_5260_5320, 24, 24, IEEE80211_CHAN_HT20 |
- IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- { &F1_5500_5700, 23, 23, IEEE80211_CHAN_HT20 |
- IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- },
-};
-
-const static struct regdomain rd_etsi3 = { /* ETSI - channel 36 */
- .sku = SKU_ETSI3, .name = "ETSI3", .cc = CTRY_ROMANIA,
- .bands_11b = {
- { &F1_2412_2472, 30, 30, IEEE80211_CHAN_B },
- },
- .bands_11g = {
- { &F1_2412_2472, 30, 30, IEEE80211_CHAN_G },
- },
- .bands_11a = {
- { &F1_5200_5240, 17, 17 },
- { &F1_5280_5320, 24, 24, IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- { &F1_5500_5700, 23, 23, IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- },
- .bands_11ng = {
- { &F1_2412_2472, 30, 30, IEEE80211_CHAN_G | IEEE80211_CHAN_HT20 },
- { &H4_2412_2462, 30, 30, IEEE80211_CHAN_G | IEEE80211_CHAN_HT40 },
- },
- .bands_11na = {
- { &F1_5200_5240, 17, 17, IEEE80211_CHAN_HT20 },
- { &H4_5200_5240, 17, 17, IEEE80211_CHAN_HT40 },
- { &F1_5280_5320, 24, 24, IEEE80211_CHAN_HT20 |
- IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- { &H4_5280_5320, 24, 24, IEEE80211_CHAN_HT40 |
- IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- { &F1_5500_5700, 23, 23, IEEE80211_CHAN_HT20 |
- IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- { &H4_5500_5680, 23, 23, IEEE80211_CHAN_HT40 |
- IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- },
-};
-
-const static struct regdomain rd_apac = {
- .sku = SKU_APAC, .name = "APAC",
- .bands_11b = {
- { &F1_2412_2472, 30, 30, IEEE80211_CHAN_B },
- },
- .bands_11g = {
- { &F1_2412_2472, 30, 30, IEEE80211_CHAN_G },
- },
- .bands_11a = {
- { &F1_5180_5240, 17, 17 },
- { &F1_5260_5320, 23, 23, IEEE80211_CHAN_PASSIVE },
- { &F1_5745_5805, 23, 23 },
- { &F1_5825_5825, 23, 23 },
- },
- .bands_11ng = {
- { &F1_2412_2472, 30, 30, IEEE80211_CHAN_G | IEEE80211_CHAN_HT20 },
- { &H4_2412_2462, 30, 30, IEEE80211_CHAN_G | IEEE80211_CHAN_HT40 },
- },
- .bands_11na = {
- { &F1_5180_5240, 17, 17, IEEE80211_CHAN_HT20 },
- { &H4_5180_5240, 17, 17, IEEE80211_CHAN_HT40 },
- { &F1_5260_5320, 23, 23, IEEE80211_CHAN_HT20 | IEEE80211_CHAN_PASSIVE },
- { &H4_5260_5320, 23, 23, IEEE80211_CHAN_HT40 | IEEE80211_CHAN_PASSIVE },
- { &F1_5745_5805, 23, 23, IEEE80211_CHAN_HT20 },
- { &H4_5745_5805, 23, 23, IEEE80211_CHAN_HT40 },
- },
-};
-
-const static struct regdomain rd_apac2 = { /* APAC w/ DFS on Mid-band */
- .sku = SKU_APAC2, .name = "APAC2",
- .bands_11b = {
- { &F1_2412_2462, 30, 30, IEEE80211_CHAN_B },
- },
- .bands_11g = {
- { &F1_2412_2462, 30, 30, IEEE80211_CHAN_G },
- },
- .bands_11a = {
- { &F1_5120_5240, 17, 17 },
- { &F1_5260_5320, 23, 23, IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- { &F1_5745_5805, 23, 23 },
- { &F1_5825_5825, 23, 23 },
- },
- .bands_11ng = {
- { &F1_2412_2462, 30, 30, IEEE80211_CHAN_G | IEEE80211_CHAN_HT20 },
- { &H4_2412_2462, 30, 30, IEEE80211_CHAN_G | IEEE80211_CHAN_HT40 },
- },
- .bands_11na = {
- { &F1_5120_5240, 17, 17, IEEE80211_CHAN_HT20 },
- { &H4_5120_5240, 17, 17, IEEE80211_CHAN_HT40 },
- { &F1_5260_5320, 23, 23, IEEE80211_CHAN_HT20 |
- IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- { &H4_5260_5320, 23, 23, IEEE80211_CHAN_HT40 |
- IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- { &F1_5745_5805, 23, 23, IEEE80211_CHAN_HT20 },
- { &H4_5745_5805, 23, 23, IEEE80211_CHAN_HT40 },
- },
-};
-
-const static struct regdomain rd_apac3 = { /* APAC w/o ISM band */
- .sku = SKU_APAC3, .name = "APAC3",
- .bands_11b = {
- { &F1_2412_2462, 30, 30, IEEE80211_CHAN_B },
- },
- .bands_11g = {
- { &F1_2412_2462, 30, 30, IEEE80211_CHAN_G },
- },
- .bands_11a = {
- { &F1_5180_5240, 17, 17 },
- { &F1_5260_5320, 23, 23, IEEE80211_CHAN_PASSIVE | IEEE80211_CHAN_DFS },
- { &F1_5745_5805, 23, 23 },
- },
- .bands_11ng = {
- { &F1_2412_2472, 30, 30, IEEE80211_CHAN_G | IEEE80211_CHAN_HT20 },
- { &H4_2412_2462, 30, 30, IEEE80211_CHAN_G | IEEE80211_CHAN_HT40 },
- },
- .bands_11na = {
- { &F1_5180_5240, 17, 17, IEEE80211_CHAN_HT20 },
- { &H4_5180_5240, 17, 17, IEEE80211_CHAN_HT40 },
- { &F1_5260_5320, 23, 23, IEEE80211_CHAN_HT20 | IEEE80211_CHAN_PASSIVE },
- { &H4_5260_5320, 23, 23, IEEE80211_CHAN_HT40 | IEEE80211_CHAN_PASSIVE },
- { &F1_5745_5805, 23, 23, IEEE80211_CHAN_HT20 },
- { &H4_5745_5805, 23, 23, IEEE80211_CHAN_HT40 },
- },
-};
-
-const static struct regdomain rd_korea = {
- .sku = SKU_KOREA, .name = "KOREA", .cc = CTRY_KOREA_ROC,
- .bands_11b = {
- { &F1_2412_2462, 30, 30, IEEE80211_CHAN_B },
- { &F1_2467_2472, 30, 30, IEEE80211_CHAN_B | IEEE80211_CHAN_PASSIVE },
- },
- .bands_11g = {
- { &F1_2412_2462, 30, 30, IEEE80211_CHAN_G },
- { &F1_2467_2472, 30, 30, IEEE80211_CHAN_G | IEEE80211_CHAN_PASSIVE },
- },
- .bands_11a = {
- { &F1_5180_5240, 17, 17, IEEE80211_CHAN_PASSIVE },
- { &F1_5260_5320, 23, 23, IEEE80211_CHAN_PASSIVE },
- { &F1_5500_5620, 23, 23, IEEE80211_CHAN_PASSIVE },
- { &F1_5745_5805, 23, 23, IEEE80211_CHAN_PASSIVE },
- },
- .bands_11ng = {
- { &F1_2412_2462, 30, 30,
- IEEE80211_CHAN_G | IEEE80211_CHAN_HT20 },
- { &F1_2467_2472, 30, 30,
- IEEE80211_CHAN_G | IEEE80211_CHAN_HT20 | IEEE80211_CHAN_PASSIVE },
- },
- .bands_11na = {
- { &F1_5180_5240, 17, 17, IEEE80211_CHAN_HT20 | IEEE80211_CHAN_PASSIVE },
- { &F1_5260_5320, 23, 23, IEEE80211_CHAN_HT20 | IEEE80211_CHAN_PASSIVE },
- { &F1_5500_5620, 23, 23, IEEE80211_CHAN_HT20 | IEEE80211_CHAN_PASSIVE },
- { &F1_5745_5805, 23, 23, IEEE80211_CHAN_HT20 | IEEE80211_CHAN_PASSIVE },
- },
-};
-
-const static struct regdomain rd_row = {
- .sku = SKU_ROW, .name = "ROW",
- .bands_11b = {
- { &F1_2412_2462, 30, 30, IEEE80211_CHAN_B },
- },
- .bands_11g = {
- { &F1_2412_2462, 30, 30, IEEE80211_CHAN_G },
- },
- .bands_11a = {
- { &F1_5745_5805, 23, 23, IEEE80211_CHAN_PASSIVE },
- },
- .bands_11ng = {
- { &F1_2412_2462, 30, 30,
- IEEE80211_CHAN_G | IEEE80211_CHAN_HT20 },
- { &H4_2412_2462, 30, 30,
- IEEE80211_CHAN_G | IEEE80211_CHAN_HT40 },
- },
- .bands_11na = {
- { &F1_5745_5805, 23, 23, IEEE80211_CHAN_HT20 | IEEE80211_CHAN_PASSIVE },
- { &H4_5745_5805, 23, 23, IEEE80211_CHAN_HT40 | IEEE80211_CHAN_PASSIVE },
- },
-};
-
-const static struct regdomain rd_none = {
- .sku = SKU_NONE, .name = "NONE",
- .bands_11b = {
- { &F1_2412_2462, 30, 30, IEEE80211_CHAN_B },
- { &F1_2467_2472, 30, 30, IEEE80211_CHAN_B | IEEE80211_CHAN_PASSIVE },
- },
- .bands_11g = {
- { &F1_2412_2462, 30, 30, IEEE80211_CHAN_G },
- { &F1_2467_2472, 30, 30, IEEE80211_CHAN_G | IEEE80211_CHAN_PASSIVE },
- },
- .bands_11a = {
- { &F1_5120_5240, 17, 17, IEEE80211_CHAN_PASSIVE },
- { &F1_5260_5320, 24, 24, IEEE80211_CHAN_PASSIVE },
- { &F1_5500_5700, 24, 24, IEEE80211_CHAN_PASSIVE },
- { &F1_5745_5805, 23, 23, IEEE80211_CHAN_PASSIVE },
- { &F1_5825_5825, 23, 23, IEEE80211_CHAN_PASSIVE },
- },
- .bands_11ng = {
- { &F1_2412_2462, 30, 30, IEEE80211_CHAN_G | IEEE80211_CHAN_HT20 },
- { &H4_2412_2462, 30, 30, IEEE80211_CHAN_G | IEEE80211_CHAN_HT40 },
- { &F1_2467_2472, 30, 30,
- IEEE80211_CHAN_G | IEEE80211_CHAN_HT20 | IEEE80211_CHAN_PASSIVE },
- { &H4_2467_2472, 30, 30,
- IEEE80211_CHAN_G | IEEE80211_CHAN_HT40 | IEEE80211_CHAN_PASSIVE },
- },
- .bands_11na = {
- { &F1_5120_5240, 17, 17, IEEE80211_CHAN_HT20 | IEEE80211_CHAN_PASSIVE },
- { &H4_5120_5240, 17, 17, IEEE80211_CHAN_HT40 | IEEE80211_CHAN_PASSIVE },
- { &F1_5260_5320, 24, 24, IEEE80211_CHAN_HT20 | IEEE80211_CHAN_PASSIVE },
- { &H4_5260_5320, 24, 24, IEEE80211_CHAN_HT40 | IEEE80211_CHAN_PASSIVE },
- { &F1_5500_5700, 24, 24, IEEE80211_CHAN_HT20 | IEEE80211_CHAN_PASSIVE },
- { &H4_5500_5680, 24, 24, IEEE80211_CHAN_HT40 | IEEE80211_CHAN_PASSIVE },
- { &F1_5745_5805, 23, 23, IEEE80211_CHAN_HT20 | IEEE80211_CHAN_PASSIVE },
- { &H4_5745_5805, 23, 23, IEEE80211_CHAN_HT40 | IEEE80211_CHAN_PASSIVE },
- { &F1_5825_5825, 23, 23, IEEE80211_CHAN_HT20 | IEEE80211_CHAN_PASSIVE },
- { &H4_5825_5825, 23, 23, IEEE80211_CHAN_HT40 | IEEE80211_CHAN_PASSIVE },
- },
-};
-
static int
regdomain_sort(const void *a, const void *b)
{
@@ -2126,23 +1722,22 @@
static void
regdomain_addchans(struct ieee80211req_chaninfo *ci,
- const struct netband *nb,
+ const netband_head *bands,
const struct ieee80211_regdomain *reg,
uint32_t chanFlags,
const struct ieee80211req_chaninfo *avail)
{
+ const struct netband *nb;
const struct freqband *b;
struct ieee80211_channel *c, *prev;
- int i, freq, channelSep;
+ int freq, channelSep;
channelSep = (chanFlags & IEEE80211_CHAN_2GHZ) ? 0 : 40;
- for (i = 0; i < MAXFBANDS; nb++, i++) {
+ LIST_FOREACH(nb, bands, next) {
+ b = nb->band;
if (verbose)
- printf("%s: [%d] chanFlags 0x%x b %p\n",
- __func__, i, chanFlags, nb->b);
- if (nb->b == NULL)
- break;
- b = nb->b;
+ printf("%s: chanFlags 0x%x b %p\n",
+ __func__, chanFlags, b);
prev = NULL;
for (freq = b->freqStart; freq <= b->freqEnd; freq += b->chanSep) {
uint32_t flags = nb->flags | b->flags;
@@ -2219,10 +1814,12 @@
}
static void
-regdomain_makechannels(struct ieee80211_regdomain_req *req,
+regdomain_makechannels(
+ struct ieee80211_regdomain_req *req,
const struct ieee80211_devcaps_req *dc)
{
- const struct countrycode *cc;
+ struct regdata *rdp = getregdata();
+ const struct country *cc;
const struct ieee80211_regdomain *reg = &req->rd;
struct ieee80211req_chaninfo *ci = &req->chaninfo;
const struct regdomain *rd;
@@ -2236,255 +1833,89 @@
* belong to at least one regdomain.
*/
if (reg->regdomain == 0) {
- cc = countrycode_lookupbycc(reg->country);
+ cc = lib80211_country_findbycc(rdp, reg->country);
if (cc == NULL)
errx(1, "internal error, country %d not found",
reg->country);
rd = cc->rd;
} else
- rd = regdomain_lookupbyrd(reg->regdomain);
+ rd = lib80211_regdomain_findbysku(rdp, reg->regdomain);
if (rd == NULL)
errx(1, "internal error, regdomain %d not found",
reg->regdomain);
if (rd->sku != SKU_DEBUG) {
memset(ci, 0, sizeof(*ci));
- regdomain_addchans(ci, rd->bands_11b, reg,
- IEEE80211_CHAN_B, &dc->dc_chaninfo);
- regdomain_addchans(ci, rd->bands_11g, reg,
- IEEE80211_CHAN_G, &dc->dc_chaninfo);
- regdomain_addchans(ci, rd->bands_11a, reg,
- IEEE80211_CHAN_A, &dc->dc_chaninfo);
- regdomain_addchans(ci, rd->bands_11na, reg,
- IEEE80211_CHAN_A | IEEE80211_CHAN_HT20, &dc->dc_chaninfo);
- regdomain_addchans(ci, rd->bands_11na, reg,
- IEEE80211_CHAN_A | IEEE80211_CHAN_HT40U, &dc->dc_chaninfo);
- regdomain_addchans(ci, rd->bands_11na, reg,
- IEEE80211_CHAN_A | IEEE80211_CHAN_HT40D, &dc->dc_chaninfo);
- regdomain_addchans(ci, rd->bands_11ng, reg,
- IEEE80211_CHAN_G | IEEE80211_CHAN_HT20, &dc->dc_chaninfo);
- regdomain_addchans(ci, rd->bands_11ng, reg,
- IEEE80211_CHAN_G | IEEE80211_CHAN_HT40U, &dc->dc_chaninfo);
- regdomain_addchans(ci, rd->bands_11ng, reg,
- IEEE80211_CHAN_G | IEEE80211_CHAN_HT40D, &dc->dc_chaninfo);
+ if (!LIST_EMPTY(&rd->bands_11b))
+ regdomain_addchans(ci, &rd->bands_11b, reg,
+ IEEE80211_CHAN_B, &dc->dc_chaninfo);
+ if (!LIST_EMPTY(&rd->bands_11g))
+ regdomain_addchans(ci, &rd->bands_11g, reg,
+ IEEE80211_CHAN_G, &dc->dc_chaninfo);
+ if (!LIST_EMPTY(&rd->bands_11a))
+ regdomain_addchans(ci, &rd->bands_11a, reg,
+ IEEE80211_CHAN_A, &dc->dc_chaninfo);
+ if (!LIST_EMPTY(&rd->bands_11na)) {
+ regdomain_addchans(ci, &rd->bands_11na, reg,
+ IEEE80211_CHAN_A | IEEE80211_CHAN_HT20,
+ &dc->dc_chaninfo);
+ regdomain_addchans(ci, &rd->bands_11na, reg,
+ IEEE80211_CHAN_A | IEEE80211_CHAN_HT40U,
+ &dc->dc_chaninfo);
+ regdomain_addchans(ci, &rd->bands_11na, reg,
+ IEEE80211_CHAN_A | IEEE80211_CHAN_HT40D,
+ &dc->dc_chaninfo);
+ }
+ if (!LIST_EMPTY(&rd->bands_11ng)) {
+ regdomain_addchans(ci, &rd->bands_11ng, reg,
+ IEEE80211_CHAN_G | IEEE80211_CHAN_HT20,
+ &dc->dc_chaninfo);
+ regdomain_addchans(ci, &rd->bands_11ng, reg,
+ IEEE80211_CHAN_G | IEEE80211_CHAN_HT40U,
+ &dc->dc_chaninfo);
+ regdomain_addchans(ci, &rd->bands_11ng, reg,
+ IEEE80211_CHAN_G | IEEE80211_CHAN_HT40D,
+ &dc->dc_chaninfo);
+ }
qsort(ci->ic_chans, ci->ic_nchans, sizeof(ci->ic_chans[0]),
regdomain_sort);
} else
*ci = dc->dc_chaninfo;
}
-static const struct regdomain *regdomain_info[] = {
- &rd_fcc,
- &rd_fcc3,
- &rd_japan,
- &rd_etsi,
- &rd_etsi2,
- &rd_etsi3,
- &rd_apac,
- &rd_apac2,
- &rd_apac3,
- &rd_korea,
- &rd_row,
- &rd_none,
- &rd_debug,
-};
-
-#define N(a) (sizeof(a) / sizeof(a[0]))
-
-static const struct regdomain *
-regdomain_lookupbyrd(enum RegdomainCode sku)
-{
- int i;
-
- for (i = 0; i < N(regdomain_info); i++) {
- if (regdomain_info[i]->sku == sku)
- return regdomain_info[i];
- }
- return NULL;
-}
-
-static const struct regdomain *
-regdomain_lookupbyname(const char *name)
-{
- int i;
-
- for (i = 0; i < N(regdomain_info); i++) {
- if (strcasecmp(regdomain_info[i]->name, name) == 0)
- return regdomain_info[i];
- }
- return NULL;
-}
-
-/*
- * Country Code Table.
- */
-static const struct countrycode country_info[] = {
- { CTRY_ALBANIA, &rd_none, "AL", "Albania" },
- { CTRY_ALGERIA, &rd_none, "DZ", "Algeria" },
- { CTRY_ARGENTINA, &rd_none, "AR", "Argentina" },
- { CTRY_ARMENIA, &rd_etsi, "AM", "Armenia" },
- { CTRY_AUSTRALIA, &rd_row, "AU", "Australia" },
- { CTRY_AUSTRIA, &rd_etsi2, "AT", "Austria", },
- { CTRY_AZERBAIJAN, &rd_etsi, "AZ", "Azerbaijan" },
- { CTRY_BAHRAIN, &rd_none, "BH", "Bahrain" },
- { CTRY_BANGLADESH, &rd_row, "BD", "Bangladesh" },
- { CTRY_BELARUS, &rd_none, "BY", "Belarus" },
- { CTRY_BELGIUM, &rd_etsi, "BE", "Belgium" },
- { CTRY_BELIZE, &rd_none, "BZ", "Belize" },
- { CTRY_BOLIVIA, &rd_none, "BO", "Bolivia" },
- { CTRY_BRAZIL, &rd_fcc, "BR", "Brazil" },
- { CTRY_BRUNEI_DARUSSALAM, &rd_apac, "BN", "Brunei" },
- { CTRY_BULGARIA, &rd_etsi, "BG", "Bulgaria" },
- { CTRY_CANADA, &rd_fcc, "CA", "Canada" },
- { CTRY_CHILE, &rd_row, "CL", "Chile" },
- { CTRY_CHINA, &rd_row, "CN", "China" },
- { CTRY_COLOMBIA, &rd_fcc, "CO", "Colombia" },
- { CTRY_COSTA_RICA, &rd_none, "CR", "Costa Rica" },
- { CTRY_CROATIA, &rd_etsi, "HR", "Croatia" },
- { CTRY_CYPRUS, &rd_etsi, "CY", "Cyprus" },
- { CTRY_CZECH, &rd_etsi, "CZ", "Czech Republic" },
- { CTRY_DENMARK, &rd_etsi, "DK", "Denmark" },
- { CTRY_DOMINICAN_REPUBLIC, &rd_none, "DO", "Dominican Republic" },
- { CTRY_ECUADOR, &rd_none, "EC", "Ecuador" },
- { CTRY_EGYPT, &rd_none, "EG", "Egypt" },
- { CTRY_EL_SALVADOR, &rd_none, "SV", "El Salvador" },
- { CTRY_ESTONIA, &rd_etsi, "EE", "Estonia" },
- { CTRY_FINLAND, &rd_etsi, "FI", "Finland" },
- { CTRY_FRANCE, &rd_etsi, "FR", "France" },
- { CTRY_FRANCE2, &rd_etsi, "F2", "France2" },
- { CTRY_GEORGIA, &rd_etsi, "GE", "Georgia" },
- { CTRY_GERMANY, &rd_etsi, "DE", "Germany" },
- { CTRY_GREECE, &rd_etsi, "GR", "Greece" },
- { CTRY_GUATEMALA, &rd_none, "GT", "Guatemala" },
- { CTRY_HONDURAS, &rd_none, "HN", "Honduras" },
- { CTRY_HONG_KONG, &rd_apac, "HK", "Hong Kong" },
- { CTRY_HUNGARY, &rd_etsi, "HU", "Hungary" },
- { CTRY_ICELAND, &rd_etsi, "IS", "Iceland" },
- { CTRY_INDIA, &rd_apac, "IN", "India" },
- { CTRY_INDONESIA, &rd_none, "ID", "Indonesia" },
- { CTRY_IRAN, &rd_none, "IR", "Iran" },
- { CTRY_IRELAND, &rd_etsi, "IE", "Ireland" },
- { CTRY_ISRAEL, &rd_none, "IL", "Israel" },
- { CTRY_ITALY, &rd_etsi, "IT", "Italy" },
- { CTRY_JAMAICA, &rd_none, "JM", "Jamaica" },
- { CTRY_JAPAN, &rd_japan, "JP", "Japan" },
- { CTRY_JAPAN1, &rd_japan, "J1", "Japan1" },
- { CTRY_JAPAN2, &rd_japan, "J2", "Japan2" },
- { CTRY_JAPAN3, &rd_japan, "J3", "Japan3" },
- { CTRY_JAPAN4, &rd_japan, "J4", "Japan4" },
- { CTRY_JAPAN5, &rd_japan, "J5", "Japan5" },
- { CTRY_JORDAN, &rd_none, "JO", "Jordan" },
- { CTRY_KAZAKHSTAN, &rd_none, "KZ", "Kazakhstan" },
- { CTRY_KOREA_NORTH, &rd_korea, "KP", "North Korea" },
- { CTRY_KOREA_ROC, &rd_korea, "KR", "Korea Republic" },
- { CTRY_KOREA_ROC2, &rd_none, "K2", "Korea Republic2" },
- { CTRY_KUWAIT, &rd_none, "KW", "Kuwait" },
- { CTRY_LATVIA, &rd_etsi2, "LV", "Latvia" },
- { CTRY_LEBANON, &rd_none, "LB", "Lebanon" },
- { CTRY_LIECHTENSTEIN, &rd_etsi, "LI", "Liechtenstein" },
- { CTRY_LITHUANIA, &rd_etsi, "LT", "Lithuania" },
- { CTRY_LUXEMBOURG, &rd_etsi, "LU", "Luxemborg" },
- { CTRY_MACAU, &rd_none, "MO", "Macau" },
- { CTRY_MACEDONIA, &rd_none, "MK", "Macedonia" },
- { CTRY_MALAYSIA, &rd_apac3, "MY", "Malaysia" },
- { CTRY_MALTA, &rd_etsi, "MT", "Malta" },
- { CTRY_MEXICO, &rd_fcc, "MX", "Mexico" },
- { CTRY_MONACO, &rd_none, "MC", "Monaco" },
- { CTRY_MOROCCO, &rd_etsi, "MA", "Morocco" },
- { CTRY_NEPAL, &rd_row, "NP", "Nepal" },
- { CTRY_NETHERLANDS, &rd_etsi, "NL", "Netherlands" },
- { CTRY_NEW_ZEALAND, &rd_apac, "NZ", "New Zealand" },
- { CTRY_NORWAY, &rd_etsi, "NO", "Norway" },
- { CTRY_OMAN, &rd_none, "OM", "Oman" },
- { CTRY_PAKISTAN, &rd_row, "PK", "Pakistan" },
- { CTRY_PANAMA, &rd_none, "PA", "Panama" },
- { CTRY_PERU, &rd_none, "PE", "Peru" },
- { CTRY_PHILIPPINES, &rd_apac2, "PH", "Phillipines" },
- { CTRY_POLAND, &rd_etsi, "PL", "Poland" },
- { CTRY_PORTUGAL, &rd_etsi, "PT", "Portugal" },
- { CTRY_PUERTO_RICO, &rd_fcc, "PR", "Puerto Rico" },
- { CTRY_QATAR, &rd_none, "QA", "Quatar" },
- { CTRY_ROMANIA, &rd_etsi, "RO", "Romania" },
- { CTRY_RUSSIA, &rd_none, "RU", "Rusia" },
- { CTRY_SAUDI_ARABIA, &rd_none, "SA", "Saudi Arabia" },
- { CTRY_SINGAPORE, &rd_apac2, "SG", "Singapore" },
- { CTRY_SLOVAKIA, &rd_etsi2, "SK", "Slovak Republic" },
- { CTRY_SLOVENIA, &rd_etsi, "SI", "Slovenia" },
- { CTRY_SOUTH_AFRICA, &rd_none, "ZA", "South Africa" },
- { CTRY_SPAIN, &rd_etsi2, "ES", "Spain" },
- { CTRY_SRILANKA, &rd_apac2, "LK", "Sri Lanka" },
- { CTRY_SWEDEN, &rd_etsi, "SE", "Sweden" },
- { CTRY_SWITZERLAND, &rd_etsi, "CH", "Switzerland" },
- { CTRY_SYRIA, &rd_none, "SY", "Syria" },
- { CTRY_TAIWAN, &rd_row, "TW", "Taiwan" },
- { CTRY_THAILAND, &rd_none, "TH", "Thailand" },
- { CTRY_TRINIDAD_Y_TOBAGO, &rd_none, "TT", "Trinidiad & Tobago" },
- { CTRY_TUNISIA, &rd_none, "TN", "Tunisia" },
- { CTRY_TURKEY, &rd_etsi, "TR", "Turkey" },
- { CTRY_UKRAINE, &rd_none, "UA", "Ukraine" },
- { CTRY_UAE, &rd_none, "AE", "United Arab Emirates" },
- { CTRY_UNITED_KINGDOM, &rd_etsi, "GB", "United Kingdom" },
- { CTRY_UNITED_STATES, &rd_fcc, "US", "United States" },
- { CTRY_URUGUAY, &rd_none, "UY", "Uruguay" },
- { CTRY_UZBEKISTAN, &rd_none, "UZ", "Uzbekistan" },
- { CTRY_VENEZUELA, &rd_fcc, "VE", "Venezuela" },
- { CTRY_VIET_NAM, &rd_apac2, "VN", "Viet Nam" },
- { CTRY_YEMEN, &rd_none, "YE", "Yemen" },
- { CTRY_ZIMBABWE, &rd_none, "ZW", "Zimbabwe" }
-};
-
-static const struct countrycode *
-countrycode_lookupbycc(enum ISOCountryCode cc)
-{
- int i;
-
- for (i = 0; i < N(country_info); i++) {
- if (country_info[i].code == cc)
- return &country_info[i];
- }
- return NULL;
-}
-
-static const struct countrycode *
-countrycode_lookupbyname(const char *name)
-{
- int i, len;
-
- len = strlen(name);
- for (i = 0; i < N(country_info); i++) {
- if (strcasecmp(country_info[i].isoname, name) == 0 ||
- strncasecmp(country_info[i].name, name, len) == 0)
- return &country_info[i];
- }
- return NULL;
-}
-
static void
list_countries(void)
{
+ struct regdata *rdp = getregdata();
+ const struct country *cp;
+ const struct regdomain *dp;
int i;
+ i = 0;
printf("\nCountry codes:\n");
- for (i = 0; i < N(country_info); i++)
- printf("%2s %-15.15s%s", country_info[i].isoname,
- country_info[i].name, ((i+1)%4) == 0 ? "\n" : " ");
+ LIST_FOREACH(cp, &rdp->countries, next) {
+ printf("%2s %-15.15s%s", cp->isoname,
+ cp->name, ((i+1)%4) == 0 ? "\n" : " ");
+ i++;
+ }
+ i = 0;
printf("\nRegulatory domains:\n");
- for (i = 0; i < N(regdomain_info); i++) {
- printf("%-15s%s", regdomain_info[i]->name,
- ((i+1)%5) == 0 ? "\n" : "");
+ LIST_FOREACH(dp, &rdp->domains, next) {
+ printf("%-15.15s%s", dp->name, ((i+1)%4) == 0 ? "\n" : " ");
+ i++;
}
printf("\n");
}
-#undef N
static void
defaultcountry(const struct regdomain *rd)
{
- const struct countrycode *cc;
+ struct regdata *rdp = getregdata();
+ const struct country *cc;
- cc = countrycode_lookupbycc(rd->cc);
+ cc = lib80211_country_findbycc(rdp, rd->cc->code);
if (cc == NULL)
errx(1, "internal error, ISO country code %d not "
- "defined for regdomain %s", rd->cc, rd->name);
+ "defined for regdomain %s", rd->cc->code, rd->name);
regdomain.country = cc->code;
regdomain.isocc[0] = cc->isoname[0];
regdomain.isocc[1] = cc->isoname[1];
@@ -2493,17 +1924,18 @@
static
DECL_CMD_FUNC(set80211regdomain, val, d)
{
+ struct regdata *rdp = getregdata();
const struct regdomain *rd;
- rd = regdomain_lookupbyname(val);
+ rd = lib80211_regdomain_findbyname(rdp, val);
if (rd == NULL) {
- rd = regdomain_lookupbyrd(atoi(val));
+ rd = lib80211_regdomain_findbysku(rdp, atoi(val));
if (rd == NULL)
errx(1, "unknown regdomain %s", val);
}
getregdomain(s);
regdomain.regdomain = rd->sku;
- if (regdomain.country == 0 && rd->cc != 0) {
+ if (regdomain.country == 0 && rd->cc != NULL) {
/*
* No country code setup and there's a default
* one for this regdomain fill it in.
@@ -2516,11 +1948,12 @@
static
DECL_CMD_FUNC(set80211country, val, d)
{
- const struct countrycode *cc;
+ struct regdata *rdp = getregdata();
+ const struct country *cc;
- cc = countrycode_lookupbyname(val);
+ cc = lib80211_country_findbyname(rdp, val);
if (cc == NULL) {
- cc = countrycode_lookupbycc(atoi(val));
+ cc = lib80211_country_findbycc(rdp, atoi(val));
if (cc == NULL)
errx(1, "unknown ISO country code %s", val);
}
@@ -3874,15 +3307,15 @@
if ((reg->regdomain != 0 &&
reg->regdomain != reg->country) || verb) {
const struct regdomain *rd =
- regdomain_lookupbyrd(reg->regdomain);
+ lib80211_regdomain_findbysku(getregdata(), reg->regdomain);
if (rd == NULL)
LINE_CHECK("regdomain %d", reg->regdomain);
else
LINE_CHECK("regdomain %s", rd->name);
}
if (reg->country != 0 || verb) {
- const struct countrycode *cc =
- countrycode_lookupbycc(reg->country);
+ const struct country *cc =
+ lib80211_country_findbycc(getregdata(), reg->country);
if (cc == NULL)
LINE_CHECK("country %d", reg->country);
else
More information about the p4-projects
mailing list