Lines Matching +full:mode +full:- +full:flag

1 /*-
72 const void *id, *ref, *mode;
76 if (++mt->level == MAXLEVEL) {
80 mt->sbuf[mt->level] = sbuf_new_auto();
81 id = ref = mode = NULL;
87 } else if (iseq(attr[i], "mode")) {
88 mode = attr[i+1];
90 printf("%*.*s[%s = %s]\n", mt->level + 1,
91 mt->level + 1, "", attr[i], attr[i+1]);
93 if (iseq(name, "rd") && mt->rd == NULL) {
94 if (mt->country == NULL) {
95 mt->rd = calloc(1, sizeof(struct regdomain));
96 mt->rd->name = strdup(id);
97 mt->nident++;
98 LIST_INSERT_HEAD(&mt->rdp->domains, mt->rd, next);
100 mt->country->rd = (void *)strdup(ref);
103 if (iseq(name, "defcc") && mt->rd != NULL) {
104 mt->rd->cc = (void *)strdup(ref);
107 if (iseq(name, "netband") && mt->curband == NULL && mt->rd != NULL) {
108 if (mode == NULL) {
109 warnx("no mode for netband at line %ld",
110 XML_GetCurrentLineNumber(mt->parser));
113 if (iseq(mode, "11b"))
114 mt->curband = &mt->rd->bands_11b;
115 else if (iseq(mode, "11g"))
116 mt->curband = &mt->rd->bands_11g;
117 else if (iseq(mode, "11a"))
118 mt->curband = &mt->rd->bands_11a;
119 else if (iseq(mode, "11ng"))
120 mt->curband = &mt->rd->bands_11ng;
121 else if (iseq(mode, "11na"))
122 mt->curband = &mt->rd->bands_11na;
123 else if (iseq(mode, "11ac"))
124 mt->curband = &mt->rd->bands_11ac;
125 else if (iseq(mode, "11acg"))
126 mt->curband = &mt->rd->bands_11acg;
128 warnx("unknown mode \"%s\" at line %ld",
129 __DECONST(char *, mode),
130 XML_GetCurrentLineNumber(mt->parser));
133 if (iseq(name, "band") && mt->netband == NULL) {
134 if (mt->curband == NULL) {
136 XML_GetCurrentLineNumber(mt->parser));
139 mt->netband = calloc(1, sizeof(struct netband));
140 LIST_INSERT_HEAD(mt->curband, mt->netband, next);
143 if (iseq(name, "freqband") && mt->freqband == NULL && mt->netband != NULL) {
145 if (mt->netband->band != NULL) {
147 XML_GetCurrentLineNumber(mt->parser));
150 mt->netband->band = (void *)strdup(ref);
154 if (iseq(name, "country") && mt->country == NULL) {
155 mt->country = calloc(1, sizeof(struct country));
156 mt->country->isoname = strdup(id);
157 mt->country->code = NO_COUNTRY;
158 mt->nident++;
159 LIST_INSERT_HEAD(&mt->rdp->countries, mt->country, next);
163 if (iseq(name, "freqband") && mt->freqband == NULL) {
164 mt->freqband = calloc(1, sizeof(struct freqband));
165 mt->freqband->id = strdup(id);
166 mt->nident++;
167 LIST_INSERT_HEAD(&mt->rdp->freqbands, mt->freqband, next);
182 #define FLAG(x) { #x, sizeof(#x)-1, x }
183 FLAG(IEEE80211_CHAN_A),
184 FLAG(IEEE80211_CHAN_B),
185 FLAG(IEEE80211_CHAN_G),
186 FLAG(IEEE80211_CHAN_HT20),
187 FLAG(IEEE80211_CHAN_HT40),
188 FLAG(IEEE80211_CHAN_VHT20),
189 FLAG(IEEE80211_CHAN_VHT40),
190 FLAG(IEEE80211_CHAN_VHT80),
191 FLAG(IEEE80211_CHAN_VHT160),
196 FLAG(IEEE80211_CHAN_ST),
197 FLAG(IEEE80211_CHAN_TURBO),
198 FLAG(IEEE80211_CHAN_PASSIVE),
199 FLAG(IEEE80211_CHAN_DFS),
200 FLAG(IEEE80211_CHAN_CCK),
201 FLAG(IEEE80211_CHAN_OFDM),
202 FLAG(IEEE80211_CHAN_2GHZ),
203 FLAG(IEEE80211_CHAN_5GHZ),
204 FLAG(IEEE80211_CHAN_DYN),
205 FLAG(IEEE80211_CHAN_GFSK),
206 FLAG(IEEE80211_CHAN_GSM),
207 FLAG(IEEE80211_CHAN_STURBO),
208 FLAG(IEEE80211_CHAN_HALF),
209 FLAG(IEEE80211_CHAN_QUARTER),
210 FLAG(IEEE80211_CHAN_HT40U),
211 FLAG(IEEE80211_CHAN_HT40D),
212 FLAG(IEEE80211_CHAN_4MSXMIT),
213 FLAG(IEEE80211_CHAN_NOADHOC),
214 FLAG(IEEE80211_CHAN_NOHOSTAP),
215 FLAG(IEEE80211_CHAN_11D),
216 FLAG(IEEE80211_CHAN_FHSS),
217 FLAG(IEEE80211_CHAN_PUREG),
218 FLAG(IEEE80211_CHAN_108A),
219 FLAG(IEEE80211_CHAN_108G),
220 #undef FLAG
230 warnx("unknown flag \"%.*s\" at line %ld ignored",
231 len, p, XML_GetCurrentLineNumber(mt->parser));
245 sbuf_finish(mt->sbuf[mt->level]);
246 p = sbuf_data(mt->sbuf[mt->level]);
247 len = sbuf_len(mt->sbuf[mt->level]);
250 if (iseq(name, "freqstart") && mt->freqband != NULL) {
251 mt->freqband->freqStart = strtoul(p, NULL, 0);
254 if (iseq(name, "freqend") && mt->freqband != NULL) {
255 mt->freqband->freqEnd = strtoul(p, NULL, 0);
258 if (iseq(name, "chanwidth") && mt->freqband != NULL) {
259 mt->freqband->chanWidth = strtoul(p, NULL, 0);
262 if (iseq(name, "chansep") && mt->freqband != NULL) {
263 mt->freqband->chanSep = strtoul(p, NULL, 0);
267 if (mt->freqband != NULL)
268 mt->freqband->flags |= decode_flag(mt, p, len);
269 else if (mt->netband != NULL)
270 mt->netband->flags |= decode_flag(mt, p, len);
273 XML_GetCurrentLineNumber(mt->parser));
279 if (iseq(name, "name") && mt->rd != NULL) {
280 mt->rd->name = strdup(p);
283 if (iseq(name, "sku") && mt->rd != NULL) {
284 mt->rd->sku = strtoul(p, NULL, 0);
287 if (iseq(name, "netband") && mt->rd != NULL) {
288 mt->curband = NULL;
293 if (iseq(name, "freqband") && mt->netband != NULL) {
297 if (iseq(name, "maxpower") && mt->netband != NULL) {
298 mt->netband->maxPower = strtoul(p, NULL, 0);
301 if (iseq(name, "maxpowerdfs") && mt->netband != NULL) {
302 mt->netband->maxPowerDFS = strtoul(p, NULL, 0);
305 if (iseq(name, "maxantgain") && mt->netband != NULL) {
306 mt->netband->maxAntGain = strtoul(p, NULL, 0);
311 if (iseq(name, "isocc") && mt->country != NULL) {
312 mt->country->code = strtoul(p, NULL, 0);
315 if (iseq(name, "name") && mt->country != NULL) {
316 mt->country->name = strdup(p);
322 name, p, XML_GetCurrentLineNumber(mt->parser));
326 if (iseq(name, "freqband") && mt->freqband != NULL) {
329 mt->freqband = NULL;
333 if (iseq(name, "rd") && mt->rd != NULL) {
334 mt->rd = NULL;
338 if (iseq(name, "band") && mt->netband != NULL) {
339 if (mt->netband->band == NULL) {
341 XML_GetCurrentLineNumber(mt->parser));
343 if (mt->netband->maxPower == 0) {
345 XML_GetCurrentLineNumber(mt->parser));
348 if (mt->netband->maxPowerDFS == 0)
349 mt->netband->maxPowerDFS = mt->netband->maxPower;
350 mt->netband = NULL;
354 if (iseq(name, "netband") && mt->netband != NULL) {
355 mt->curband = NULL;
359 if (iseq(name, "country") && mt->country != NULL) {
361 if ((int) mt->country->code == NO_COUNTRY) {
363 XML_GetCurrentLineNumber(mt->parser));
365 if (mt->country->name == NULL) {
367 XML_GetCurrentLineNumber(mt->parser));
369 if (mt->country->rd == NULL) {
371 XML_GetCurrentLineNumber(mt->parser));
373 mt->country = NULL;
377 sbuf_delete(mt->sbuf[mt->level]);
378 mt->sbuf[mt->level--] = NULL;
391 e = s + len-1;
397 sbuf_bcat(mt->sbuf[mt->level], b, e-b+1);
405 for (ip = rdp->ident; ip->id != NULL; ip++)
406 if ((int) ip->type == type && strcasecmp(ip->id, id) == 0)
407 return ip->p;
430 mt->rdp = rdp;
431 mt->parser = XML_ParserCreate(NULL);
432 XML_SetUserData(mt->parser, mt);
433 XML_SetElementHandler(mt->parser, start_element, end_element);
434 XML_SetCharacterDataHandler(mt->parser, char_data);
435 if (XML_Parse(mt->parser, p, len, 1) != XML_STATUS_OK) {
437 XML_ErrorString(XML_GetErrorCode(mt->parser)),
438 XML_GetCurrentLineNumber(mt->parser));
439 return -1;
441 XML_ParserFree(mt->parser);
444 rdp->ident = calloc(mt->nident + 1, sizeof(struct ident));
445 if (rdp->ident == NULL)
451 LIST_FOREACH(dp, &rdp->domains, next) {
452 rdp->ident[i].id = dp->name;
453 rdp->ident[i].p = dp;
454 rdp->ident[i].type = DOMAIN;
457 LIST_FOREACH(fp, &rdp->freqbands, next) {
458 rdp->ident[i].id = fp->id;
459 rdp->ident[i].p = fp;
460 rdp->ident[i].type = FREQBAND;
463 LIST_FOREACH(cp, &rdp->countries, next) {
464 rdp->ident[i].id = cp->isoname;
465 rdp->ident[i].p = cp;
466 rdp->ident[i].type = COUNTRY;
471 LIST_FOREACH(dp, &rdp->domains, next) {
472 if (dp->cc != NULL) {
473 id = dp->cc;
474 dp->cc = findid(rdp, id, COUNTRY);
475 if (dp->cc == NULL) {
482 LIST_FOREACH(nb, &dp->bands_11b, next) {
483 id = findid(rdp, nb->band, FREQBAND);
486 __DECONST(char *, nb->band));
489 nb->band = id;
491 LIST_FOREACH(nb, &dp->bands_11g, next) {
492 id = findid(rdp, nb->band, FREQBAND);
495 __DECONST(char *, nb->band));
498 nb->band = id;
500 LIST_FOREACH(nb, &dp->bands_11a, next) {
501 id = findid(rdp, nb->band, FREQBAND);
504 __DECONST(char *, nb->band));
507 nb->band = id;
509 LIST_FOREACH(nb, &dp->bands_11ng, next) {
510 id = findid(rdp, nb->band, FREQBAND);
513 __DECONST(char *, nb->band));
516 nb->band = id;
518 LIST_FOREACH(nb, &dp->bands_11na, next) {
519 id = findid(rdp, nb->band, FREQBAND);
522 __DECONST(char *, nb->band));
525 nb->band = id;
527 LIST_FOREACH(nb, &dp->bands_11ac, next) {
528 id = findid(rdp, nb->band, FREQBAND);
531 __DECONST(char *, nb->band));
534 nb->band = id;
536 LIST_FOREACH(nb, &dp->bands_11acg, next) {
537 id = findid(rdp, nb->band, FREQBAND);
540 __DECONST(char *, nb->band));
543 nb->band = id;
546 LIST_FOREACH(cp, &rdp->countries, next) {
547 id = cp->rd;
548 cp->rd = findid(rdp, id, DOMAIN);
549 if (cp->rd == NULL) {
581 free(rdp->ident);
582 rdp->ident = NULL;
584 struct regdomain *dp = LIST_FIRST(&rdp->domains);
588 cleanup_bands(&dp->bands_11b);
589 cleanup_bands(&dp->bands_11g);
590 cleanup_bands(&dp->bands_11a);
591 cleanup_bands(&dp->bands_11ng);
592 cleanup_bands(&dp->bands_11na);
593 cleanup_bands(&dp->bands_11ac);
594 cleanup_bands(&dp->bands_11acg);
595 if (dp->name != NULL)
596 free(__DECONST(char *, dp->name));
599 struct country *cp = LIST_FIRST(&rdp->countries);
603 if (cp->name != NULL)
604 free(__DECONST(char *, cp->name));
608 struct freqband *fp = LIST_FIRST(&rdp->freqbands);
681 LIST_FOREACH(dp, &rdp->domains, next) {
682 if (dp->sku == sku)
696 LIST_FOREACH(dp, &rdp->domains, next) {
697 if (strcasecmp(dp->name, name) == 0)
711 LIST_FOREACH(cp, &rdp->countries, next) {
712 if (cp->code == cc)
728 LIST_FOREACH(cp, &rdp->countries, next) {
729 if (strcasecmp(cp->isoname, name) == 0)
732 LIST_FOREACH(cp, &rdp->countries, next) {
733 if (strncasecmp(cp->name, name, len) == 0)