Lines Matching +full:ignore +full:- +full:power +full:- +full:on +full:- +full:sel
1 /*-
2 * SPDX-License-Identifier: BSD-3-Clause
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 /*-
54 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
110 #define IEEE80211_NODE_PWR_MGT 0x000010 /* power save mode enabled */
118 #define IEEE80211_NODE_MIMO_PS 0x001000 /* MIMO power save enabled */
131 /* XXX should also figure out where to put these for k/u-space sharing. */
257 errx(-1, "missing or corrupted regdomain database");
272 const struct ieee80211_channel *fc = &chaninfo->ic_chans[i];
275 if ((fc->ic_flags & from) != from)
278 if (i+1 < chaninfo->ic_nchans &&
279 chaninfo->ic_chans[i+1].ic_freq == fc->ic_freq &&
280 (chaninfo->ic_chans[i+1].ic_flags & to) == to)
283 for (j = 0; j < chaninfo->ic_nchans; j++) {
284 const struct ieee80211_channel *tc = &chaninfo->ic_chans[j];
286 tc->ic_freq == fc->ic_freq && (tc->ic_flags & to) == to)
297 * attributes requires we upgrade, e.g. from 11b -> 11g. This
298 * gets complicated when the channel is specified on the same
314 * is an unfortunate side-effect of the way ifconfig is
323 int chanmode = global_ifmr != NULL ? IFM_MODE(global_ifmr->ifm_current) : IFM_AUTO;
326 /* NB: we abitrarily pick HT40+ over HT40- */
357 for (i = 0; i < chaninfo->ic_nchans; i++) {
358 const struct ieee80211_channel *c = &chaninfo->ic_chans[i];
360 if (c->ic_freq == freq && (c->ic_flags & flags) == flags) {
363 c = &chaninfo->ic_chans[promote(i)];
377 for (i = 0; i < chaninfo->ic_nchans; i++) {
378 const struct ieee80211_channel *c = &chaninfo->ic_chans[i];
380 if (c->ic_ieee == ieee && (c->ic_flags & flags) == flags) {
383 c = &chaninfo->ic_chans[promote(i)];
401 err(-1, "cannot figure out current channel");
504 if (rd->country != NO_COUNTRY) {
512 cc = lib80211_country_findbycc(rdp, rd->country);
514 errx(1, "unknown ISO country code %d", rd->country);
515 if (cc->rd->sku != rd->regdomain) {
530 rp = lib80211_regdomain_findbysku(rdp, rd->regdomain);
533 "regdomain %d", cc->isoname, cc->name,
534 rd->regdomain);
535 else if (rp->cc != NULL && rp->cc != cc)
537 "regdomain %s", cc->isoname, cc->name,
538 rp->name);
550 dc->dc_chaninfo.ic_nchans = MAXCHAN;
554 printf("drivercaps: 0x%x\n", dc->dc_drivercaps);
555 printf("cryptocaps: 0x%x\n", dc->dc_cryptocaps);
556 printf("htcaps : 0x%x\n", dc->dc_htcaps);
557 printf("vhtcaps : 0x%x\n", dc->dc_vhtcaps);
559 memcpy(chaninfo, &dc->dc_chaninfo,
560 IEEE80211_CHANINFO_SPACE(&dc->dc_chaninfo));
561 print_channels(s, &dc->dc_chaninfo, 1/*allchans*/, 1/*verbose*/);
565 req = malloc(IEEE80211_REGDOMAIN_SIZE(dc->dc_chaninfo.ic_nchans));
568 req->rd = *rd;
570 if (ctx->args->verbose) {
577 chaninfo = malloc(IEEE80211_CHANINFO_SPACE(&req->chaninfo));
580 memcpy(chaninfo, &req->chaninfo,
581 IEEE80211_CHANINFO_SPACE(&req->chaninfo));
582 print_channels(ctx, &req->chaninfo, 1/*allchans*/, 1/*verbose*/);
584 if (req->chaninfo.ic_nchans == 0)
603 return (strncmp(arg, "-", 1) == 0 ||
617 ssid = atoi(val)-1;
659 * freq/xx channel width (5,10,20,40,40+,40-)
714 errx(-1, "%s: Invalid channel attribute %c\n",
747 else if (ep != NULL && *ep == '-')
751 errx(-1, "%s: Invalid channel width\n", val);
761 * HT cw attributes depending on channel use. To give
779 * HT40+ or HT40- (if both the map routines choose).
819 chan->ic_freq = IEEE80211_CHAN_ANY;
887 } else if (strcasecmp(val, "on") == 0) {
893 } else if (strcasecmp(val, "psp-cam") == 0) {
926 } else if (strcasecmp(val, "on") == 0) {
946 return (strcmp(arg, "-") == 0 || strncasecmp(arg, "undef", 5) == 0);
955 set80211(ctx, IEEE80211_IOC_WEPTXKEY, atoi(val)-1, 0, NULL);
966 key = atoi(val)-1;
992 txkey = val[0]-'0'-1;
1069 errx(-1, "invalid tx power (must be .5 dBm units)");
1142 switch (sscanf(cp, "%u-%u", &first, &last)) {
1145 errx(-1, "channel %u out of range, max %u",
1151 errx(-1, "channel %u out of range, max %u",
1154 errx(-1, "channel %u out of range, max %u",
1157 errx(-1, "void channel range, %u > %u",
1192 errx(1, "malformed link-level address");
1319 errx(1, "malformed link-level address");
1351 errx(1, "malformed link-level address");
1380 errx(1, "malformed link-level address");
1534 case 'h': /* 1/2-width channels */
1537 case 'q': /* 1/4-width channels */
1545 errx(-1, "%s: Invalid mode attribute %c\n",
1629 errx(-1, "invalid rssi (must be .5 dBm units)");
1633 flags = getcurchan(ctx)->ic_flags;
1648 errx(-1, "invalid %s rate (must be .5 Mb/s units)", tag);
1661 flags = getcurchan(ctx)->ic_flags;
1677 flags = getcurchan(ctx)->ic_flags;
1693 flags = getcurchan(ctx)->ic_flags;
1709 flags = getcurchan(ctx)->ic_flags;
1718 flags = getcurchan(ctx)->ic_flags;
1734 flags = getcurchan(ctx)->ic_flags;
1790 errx(-1, "cannot set AMPDU setting");
1792 d = -d;
1805 errx(-1, "cannot set STBC setting");
1807 d = -d;
1820 errx(-1, "cannot set LDPC setting");
1822 d = -d;
1858 errx(-1, "invalid A-MPDU limit %s", val);
1897 errx(-1, "invalid A-MPDU density %s", val);
1908 err(-1, "cannot get AMSDU setting");
1910 d = -d;
1982 errx(-1, "cannot set VHT setting");
1984 d = -d;
2065 return ca->ic_freq == cb->ic_freq ?
2066 (int)(ca->ic_flags & CHAN_ALL) - (int)(cb->ic_flags & CHAN_ALL) :
2067 ca->ic_freq - cb->ic_freq;
2080 if (c->ic_freq == freq &&
2081 (c->ic_flags & IEEE80211_CHAN_ALLTURBO) == flags)
2092 if ((c->ic_flags & flags) == flags)
2110 if (chanlookup(avail->ic_chans, avail->ic_nchans, freq, flags) != NULL)
2124 * supports fractional channels on this band. This is a hack
2126 * by per-band attributes though (we are effectively calculating
2131 if (chanlookup(avail->ic_chans, avail->ic_nchans, freq,
2135 return chanfind(avail->ic_chans, avail->ic_nchans,
2139 return chanfind(avail->ic_chans, avail->ic_nchans,
2157 const int verbose = ctx->args->verbose;
2159 hi_adj = (chanFlags & IEEE80211_CHAN_HT40U) ? -20 : 0;
2164 b = nb->band;
2168 printb(" bandFlags", nb->flags | b->flags,
2174 for (freq = b->freqStart + lo_adj;
2175 freq <= b->freqEnd + hi_adj; freq += b->chanSep) {
2179 * for HT40 which is enabled generically (i.e. +/-
2183 flags = nb->flags | b->flags;
2186 * VHT first - HT is a subset.
2232 * called to add HT20, HT40+, and HT40- chan's
2255 * Check if device can operate on this frequency.
2266 if ((flags & REQ_ECM) && !reg->ecm) {
2271 if ((flags & REQ_INDOOR) && reg->location == 'O') {
2277 if ((flags & REQ_OUTDOOR) && reg->location == 'I') {
2284 prev != NULL && (freq - prev->ic_freq) < channelSep) {
2288 freq - prev->ic_freq, channelSep);
2291 if (ci->ic_nchans == IEEE80211_CHAN_MAX) {
2297 c = &ci->ic_chans[ci->ic_nchans++];
2299 c->ic_freq = freq;
2300 c->ic_flags = flags;
2301 if (c->ic_flags & IEEE80211_CHAN_DFS)
2302 c->ic_maxregpower = nb->maxPowerDFS;
2304 c->ic_maxregpower = nb->maxPower;
2307 ci->ic_nchans-1, c->ic_freq);
2308 printb("flags", c->ic_flags, IEEE80211_CHAN_BITS);
2309 printf(" power %u\n", c->ic_maxregpower);
2325 const struct ieee80211_regdomain *reg = &req->rd;
2326 struct ieee80211req_chaninfo *ci = &req->chaninfo;
2333 * If no regdomain is specified then we fallback on the country
2337 if (reg->regdomain == 0) {
2338 cc = lib80211_country_findbycc(rdp, reg->country);
2341 reg->country);
2342 rd = cc->rd;
2344 rd = lib80211_regdomain_findbysku(rdp, reg->regdomain);
2347 reg->regdomain);
2348 if (rd->sku != SKU_DEBUG) {
2356 ci->ic_nchans = 0;
2357 if (!LIST_EMPTY(&rd->bands_11b))
2358 regdomain_addchans(ctx, ci, &rd->bands_11b, reg,
2359 IEEE80211_CHAN_B, &dc->dc_chaninfo);
2360 if (!LIST_EMPTY(&rd->bands_11g))
2361 regdomain_addchans(ctx, ci, &rd->bands_11g, reg,
2362 IEEE80211_CHAN_G, &dc->dc_chaninfo);
2363 if (!LIST_EMPTY(&rd->bands_11a))
2364 regdomain_addchans(ctx, ci, &rd->bands_11a, reg,
2365 IEEE80211_CHAN_A, &dc->dc_chaninfo);
2366 if (!LIST_EMPTY(&rd->bands_11na) && dc->dc_htcaps != 0) {
2367 regdomain_addchans(ctx, ci, &rd->bands_11na, reg,
2369 &dc->dc_chaninfo);
2370 if (dc->dc_htcaps & IEEE80211_HTCAP_CHWIDTH40) {
2371 regdomain_addchans(ctx, ci, &rd->bands_11na, reg,
2373 &dc->dc_chaninfo);
2374 regdomain_addchans(ctx, ci, &rd->bands_11na, reg,
2376 &dc->dc_chaninfo);
2379 if (!LIST_EMPTY(&rd->bands_11ac) && dc->dc_vhtcaps != 0) {
2380 regdomain_addchans(ctx, ci, &rd->bands_11ac, reg,
2383 &dc->dc_chaninfo);
2386 if (dc->dc_htcaps & IEEE80211_HTCAP_CHWIDTH40) {
2387 regdomain_addchans(ctx, ci, &rd->bands_11ac, reg,
2390 &dc->dc_chaninfo);
2391 regdomain_addchans(ctx, ci, &rd->bands_11ac, reg,
2394 &dc->dc_chaninfo);
2399 regdomain_addchans(ctx, ci, &rd->bands_11ac, reg,
2402 &dc->dc_chaninfo);
2403 regdomain_addchans(ctx, ci, &rd->bands_11ac, reg,
2406 &dc->dc_chaninfo);
2411 dc->dc_vhtcaps)) {
2412 regdomain_addchans(ctx, ci, &rd->bands_11ac, reg,
2415 &dc->dc_chaninfo);
2416 regdomain_addchans(ctx, ci, &rd->bands_11ac, reg,
2419 &dc->dc_chaninfo);
2424 dc->dc_vhtcaps)) {
2425 regdomain_addchans(ctx, ci, &rd->bands_11ac, reg,
2428 &dc->dc_chaninfo);
2429 regdomain_addchans(ctx, ci, &rd->bands_11ac, reg,
2432 &dc->dc_chaninfo);
2436 if (!LIST_EMPTY(&rd->bands_11ng) && dc->dc_htcaps != 0) {
2437 regdomain_addchans(ctx, ci, &rd->bands_11ng, reg,
2439 &dc->dc_chaninfo);
2440 if (dc->dc_htcaps & IEEE80211_HTCAP_CHWIDTH40) {
2441 regdomain_addchans(ctx, ci, &rd->bands_11ng, reg,
2443 &dc->dc_chaninfo);
2444 regdomain_addchans(ctx, ci, &rd->bands_11ng, reg,
2446 &dc->dc_chaninfo);
2449 qsort(ci->ic_chans, ci->ic_nchans, sizeof(ci->ic_chans[0]),
2452 memcpy(ci, &dc->dc_chaninfo,
2453 IEEE80211_CHANINFO_SPACE(&dc->dc_chaninfo));
2466 LIST_FOREACH(cp, &rdp->countries, next) {
2467 printf("%2s %-15.15s%s", cp->isoname,
2468 cp->name, ((i+1)%4) == 0 ? "\n" : " ");
2473 LIST_FOREACH(dp, &rdp->domains, next) {
2474 printf("%-15.15s%s", dp->name, ((i+1)%4) == 0 ? "\n" : " ");
2486 cc = lib80211_country_findbycc(rdp, rd->cc->code);
2489 "defined for regdomain %s", rd->cc->code, rd->name);
2490 regdomain.country = cc->code;
2491 regdomain.isocc[0] = cc->isoname[0];
2492 regdomain.isocc[1] = cc->isoname[1];
2512 regdomain.regdomain = rd->sku;
2513 if (regdomain.country == 0 && rd->cc != NULL) {
2540 regdomain.regdomain = cc->rd->sku;
2541 regdomain.country = cc->code;
2542 regdomain.isocc[0] = cc->isoname[0];
2543 regdomain.isocc[1] = cc->isoname[1];
2580 col = 8; /* 8-col tab */
2591 n = vsnprintf(buf+1, sizeof(buf)-1, fmt, ap);
2606 int i, maxrate = -1;
2706 if (ctx->args->verbose) {
2707 maxlen -= strlen(tag)+2;
2709 maxlen--;
2711 for (; ielen > 0; ie++, ielen--) {
2712 if (maxlen-- <= 0)
2717 printf("-");
2748 if (!ctx->args->verbose)
2750 printf("<qosinfo 0x%x", wme->param_qosInfo);
2754 &wme->params_acParams[i];
2757 _IEEE80211_MASKSHIFT(ac->acp_aci_aifsn, WME_PARAM_ACM) ?
2759 _IEEE80211_MASKSHIFT(ac->acp_aci_aifsn, WME_PARAM_AIFSN),
2760 _IEEE80211_MASKSHIFT(ac->acp_logcwminmax,
2762 _IEEE80211_MASKSHIFT(ac->acp_logcwminmax,
2764 LE_READ_2(&ac->acp_txop));
2773 if (ctx->args->verbose) {
2777 wme->wme_version, wme->wme_info);
2785 if (ctx->args->verbose) {
2797 vhtcap_info = LE_READ_4(&vhtcap->vht_cap_info);
2800 LE_READ_2(&vhtcap->supp_mcs.rx_mcs_map));
2802 LE_READ_2(&vhtcap->supp_mcs.rx_highest) & 0x1fff);
2804 LE_READ_2(&vhtcap->supp_mcs.tx_mcs_map));
2806 LE_READ_2(&vhtcap->supp_mcs.tx_highest) & 0x1fff);
2816 if (ctx->args->verbose) {
2828 vhtinfo->chan_width,
2829 vhtinfo->center_freq_seq0_idx,
2830 vhtinfo->center_freq_seq1_idx,
2831 LE_READ_2(&vhtinfo->basic_mcs_set));
2845 if (ctx->args->verbose) {
2852 n = (vhtpwr->tx_info &
2856 n = ielen - 3;
2857 printf("<tx_info 0x%02x pwr:[", vhtpwr->tx_info);
2872 if (ctx->args->verbose) {
2879 LE_READ_2(&htcap->hc_cap), htcap->hc_param);
2883 if (isset(htcap->hc_mcsset, i)) {
2885 if (isclr(htcap->hc_mcsset, j))
2887 j--;
2891 printf("%s%u-%u", sep, i, j);
2892 i += j-i;
2896 LE_READ_2(&htcap->hc_extcap),
2897 LE_READ_4(&htcap->hc_txbf),
2898 htcap->hc_antenna);
2906 if (ctx->args->verbose) {
2912 printf("<ctl %u, %x,%x,%x,%x", htinfo->hi_ctrlchannel,
2913 htinfo->hi_byte1, htinfo->hi_byte2, htinfo->hi_byte3,
2914 LE_READ_2(&htinfo->hi_byte45));
2918 if (isset(htinfo->hi_basicmcsset, i)) {
2920 if (isclr(htinfo->hi_basicmcsset, j))
2922 j--;
2926 printf("%s%u-%u", sep, i, j);
2927 i += j-i;
2939 if (ctx->args->verbose) {
2944 if (ath->ath_capability & ATHEROS_CAP_TURBO_PRIME)
2946 if (ath->ath_capability & ATHEROS_CAP_COMPRESSION)
2948 if (ath->ath_capability & ATHEROS_CAP_FAST_FRAME)
2950 if (ath->ath_capability & ATHEROS_CAP_XR)
2952 if (ath->ath_capability & ATHEROS_CAP_AR)
2954 if (ath->ath_capability & ATHEROS_CAP_BURST)
2956 if (ath->ath_capability & ATHEROS_CAP_WME)
2958 if (ath->ath_capability & ATHEROS_CAP_BOOST)
2960 printf("0x%x>", LE_READ_2(ath->ath_defkeyix));
2970 if (ctx->args->verbose) {
2974 if (mconf->conf_pselid == IEEE80211_MESHCONF_PATH_HWMP)
2979 if (mconf->conf_pmetid == IEEE80211_MESHCONF_METRIC_AIRTIME)
2984 if (mconf->conf_ccid == IEEE80211_MESHCONF_CC_DISABLED)
2989 if (mconf->conf_syncid == IEEE80211_MESHCONF_SYNC_NEIGHOFF)
2994 if (mconf->conf_authid == IEEE80211_MESHCONF_AUTH_DISABLED)
2998 printf(" FORM:0x%x CAPS:0x%x>", mconf->conf_form,
2999 mconf->conf_cap);
3007 if (ctx->args->verbose) {
3011 LE_READ_2(&bssload->sta_count),
3012 bssload->chan_load,
3013 bssload->aac);
3021 if (ctx->args->verbose) {
3026 printf("<class %u, chan:[", ap->i_class);
3037 wpa_cipher(const u_int8_t *sel)
3040 u_int32_t w = LE_READ_4(sel);
3052 return "AES-CCMP";
3059 wpa_keymgmt(const u_int8_t *sel)
3062 u_int32_t w = LE_READ_4(sel);
3066 return "8021X-UNSPEC";
3068 return "8021X-PSK";
3082 if (ctx->args->verbose) {
3086 ie += 6, len -= 4; /* NB: len is payload only */
3089 ie += 2, len -= 2;
3092 ie += 4, len -= 4;
3096 ie += 2, len -= 2;
3098 for (; n > 0; n--) {
3100 ie += 4, len -= 4;
3106 ie += 2, len -= 2;
3108 for (; n > 0; n--) {
3110 ie += 4, len -= 4;
3121 rsn_cipher(const u_int8_t *sel)
3124 u_int32_t w = LE_READ_4(sel);
3136 return "AES-CCMP";
3138 return "AES-OCB";
3145 rsn_keymgmt(const u_int8_t *sel)
3148 u_int32_t w = LE_READ_4(sel);
3152 return "8021X-UNSPEC";
3154 return "8021X-PSK";
3166 if (ctx->args->verbose) {
3170 ie += 2, ielen -= 2;
3173 ie += 2, ielen -= 2;
3176 ie += 4, ielen -= 4;
3180 ie += 2, ielen -= 2;
3182 for (; n > 0; n--) {
3184 ie += 4, ielen -= 4;
3190 ie += 2, ielen -= 2;
3192 for (; n > 0; n--) {
3194 ie += 4, ielen -= 4;
3216 if (ctx->args->verbose) {
3219 "U", /* User-specified */
3220 "M", /* Machine-specified */
3223 "R" /* Registrar-specified */
3228 ie +=6, len -= 4; /* NB: len is payload only */
3245 ie += 4, len -= 4;
3263 for (n = 15; n >= 0; n--) {
3369 for (n = 7; n >= 0; n--) {
3401 printf(" sel:%s", *ie ? "T" : "F");
3407 printf(" uuid-e:");
3408 for (n = 0; n < (tlv_len - 1); n++)
3409 printf("%02x-", ie[n]);
3434 ie += tlv_len, len -= tlv_len;
3444 if (ctx->args->verbose && ielen >= sizeof(struct ieee80211_tdma_param)) {
3450 tdma->tdma_version, tdma->tdma_slot, tdma->tdma_slotcnt,
3451 LE_READ_2(&tdma->tdma_slotlen), tdma->tdma_bintval,
3452 tdma->tdma_inuse[0]);
3482 bufsize -= 2;
3486 bufsize -= 2;
3489 memcpy(&buf[2+2*i-3], "...", 3);
3493 memcpy(&buf[maxlen-3], "...", 3);
3529 printf("%s<%c%c%c", tag, cie->cc[0], cie->cc[1], cie->cc[2]);
3530 nbands = (cie->len - 3) / sizeof(cie->band[0]);
3532 schan = cie->band[i].schan;
3533 nchan = cie->band[i].nchan;
3535 printf(" %u-%u,%u", schan, schan + nchan-1,
3536 cie->band[i].maxtxpwr);
3538 printf(" %u,%u", schan, cie->band[i].maxtxpwr);
3622 const int verbose = ctx->args->verbose;
3701 ielen -= 2+vp[1];
3713 if (mi->ch[i].rssi[0] != 0) {
3723 /* XXX TODO: ignore EVM; secondary channels for now */
3725 mi->ch[0].rssi[0] / 2.0,
3726 mi->ch[1].rssi[0] / 2.0,
3727 mi->ch[2].rssi[0] / 2.0,
3728 mi->ch[3].rssi[0] / 2.0,
3729 mi->ch[0].noise[0],
3730 mi->ch[1].noise[0],
3731 mi->ch[2].noise[0],
3732 mi->ch[3].noise[0]);
3761 printf("%-*.*s %-17.17s %4s %4s %-7s %3s %4s\n"
3776 vp = cp + sr->isr_ie_off;
3777 if (sr->isr_meshid_len) {
3778 idp = vp + sr->isr_ssid_len;
3779 idlen = sr->isr_meshid_len;
3782 idlen = sr->isr_ssid_len;
3784 printf("%-*.*s %s %3d %3dM %4d:%-4d %4d %-4.4s"
3788 , ether_ntoa((const struct ether_addr *) sr->isr_bssid)
3789 , ieee80211_mhz2ieee(sr->isr_freq, sr->isr_flags)
3790 , getmaxrate(sr->isr_rates, sr->isr_nrates)
3791 , (sr->isr_rssi/2)+sr->isr_noise, sr->isr_noise
3792 , sr->isr_intval
3793 , getcaps(sr->isr_capinfo)
3795 printies(ctx, vp + sr->isr_ssid_len + sr->isr_meshid_len,
3796 sr->isr_ie_len, 24);
3797 printbssidname((const struct ether_addr *)sr->isr_bssid);
3799 cp += sr->isr_len, len -= sr->isr_len;
3816 strlcpy(ireq.i_name, ctx->ifname, sizeof(ireq.i_name));
3830 * NB: only root can trigger a scan so ignore errors. Also ignore
3845 if (rtm->rtm_version != RTM_VERSION)
3848 } while (rtm->rtm_type != RTM_IEEE80211 ||
3849 ifan->ifan_what != RTM_IEEE80211_SCAN);
3868 if ((si->isi_state & IEEE80211_NODE_QOS) == 0)
3869 return si->isi_txseqs[0];
3873 if (si->isi_txseqs[i] > txseq)
3874 txseq = si->isi_txseqs[i];
3883 if ((si->isi_state & IEEE80211_NODE_QOS) == 0)
3884 return si->isi_rxseqs[0];
3888 if (si->isi_rxseqs[i] > rxseq)
3889 rxseq = si->isi_rxseqs[i];
3921 printf("%-17.17s %4s %5s %5s %7s %4s %4s %4s %6s %6s\n"
3934 printf("%-17.17s %4s %4s %4s %4s %4s %6s %6s %4s %-12s\n"
3951 if (si->isi_len < sizeof(*si))
3956 si->isi_macaddr)
3957 , ieee80211_mhz2ieee(si->isi_freq,
3958 si->isi_flags)
3959 , si->isi_localid
3960 , si->isi_peerid
3961 , mesh_linkstate_string(si->isi_peerstate)
3962 , si->isi_txmbps/2
3963 , si->isi_rssi/2.
3964 , si->isi_inact
3969 printf("%s %4u %4d %3dM %4.1f %4d %6d %6d %-4.4s %-12.12s"
3971 si->isi_macaddr)
3972 , IEEE80211_AID(si->isi_associd)
3973 , ieee80211_mhz2ieee(si->isi_freq,
3974 si->isi_flags)
3975 , si->isi_txmbps/2
3976 , si->isi_rssi/2.
3977 , si->isi_inact
3980 , getcaps(si->isi_capinfo)
3981 , getflags(si->isi_state)
3983 printies(ctx, cp + si->isi_ie_off, si->isi_ie_len, 24);
3984 printmimo(&si->isi_mimo);
3986 cp += si->isi_len, len -= si->isi_len;
3995 [1] = "OPEN-TX",
3996 [2] = "OPEN-RX",
3997 [3] = "CONF-RX",
4036 strlcat(buf, " vht/80-", bsize);
4043 strlcat(buf, " vht/40-", bsize);
4051 strlcat(buf, " ht/40-", bsize);
4069 printf("Channel %3u : %u%c%c%c%c%c MHz%-14.14s",
4070 ieee80211_mhz2ieee(c->ic_freq, c->ic_flags), c->ic_freq,
4078 printf("Channel %3u : %u%c MHz%-14.14s",
4079 ieee80211_mhz2ieee(c->ic_freq, c->ic_flags), c->ic_freq,
4132 achans->ic_nchans = 0;
4139 for (i = 0; i < chans->ic_nchans; i++) {
4140 c = &chans->ic_chans[i];
4141 if (!isset(active.ic_channels, c->ic_ieee))
4149 if (isset(reported, c->ic_ieee) && !verb) {
4151 achans->ic_chans[achans->ic_nchans-1] = *c;
4153 achans->ic_chans[achans->ic_nchans++] = *c;
4154 setbit(reported, c->ic_ieee);
4158 for (i = 0; i < chans->ic_nchans; i++) {
4159 c = &chans->ic_chans[i];
4161 if (isset(reported, c->ic_ieee) && !verb) {
4164 &achans->ic_chans[achans->ic_nchans-1];
4168 achans->ic_chans[achans->ic_nchans++] = *c;
4169 setbit(reported, c->ic_ieee);
4173 half = achans->ic_nchans / 2;
4174 if (achans->ic_nchans % 2)
4177 for (i = 0; i < achans->ic_nchans / 2; i++) {
4178 print_chaninfo(&achans->ic_chans[i], verb);
4179 print_chaninfo(&achans->ic_chans[half+i], verb);
4182 if (achans->ic_nchans % 2) {
4183 print_chaninfo(&achans->ic_chans[i], verb);
4193 print_channels(ctx, chaninfo, allchans, ctx->args->verbose);
4200 c->ic_ieee, c->ic_freq,
4201 c->ic_maxpower/2., c->ic_maxregpower);
4209 c->ic_minpower/2., c->ic_maxpower/2., c->ic_maxregpower);
4210 /* indicate where regulatory cap limits power use */
4211 if (c->ic_maxpower > 2*c->ic_maxregpower)
4227 achans->ic_nchans = 0;
4229 for (i = 0; i < chaninfo->ic_nchans; i++) {
4230 c = &chaninfo->ic_chans[i];
4232 if (isset(reported, c->ic_ieee) && !ctx->args->verbose) {
4234 assert(achans->ic_nchans > 0);
4235 prev = &achans->ic_chans[achans->ic_nchans-1];
4236 /* display highest power on channel */
4237 if (c->ic_maxpower > prev->ic_maxpower)
4240 achans->ic_chans[achans->ic_nchans++] = *c;
4241 setbit(reported, c->ic_ieee);
4244 if (!ctx->args->verbose) {
4245 half = achans->ic_nchans / 2;
4246 if (achans->ic_nchans % 2)
4249 for (i = 0; i < achans->ic_nchans / 2; i++) {
4250 print_txpow(&achans->ic_chans[i]);
4251 print_txpow(&achans->ic_chans[half+i]);
4254 if (achans->ic_nchans % 2) {
4255 print_txpow(&achans->ic_chans[i]);
4259 for (i = 0; i < achans->ic_nchans; i++) {
4260 print_txpow_verbose(&achans->ic_chans[i]);
4276 const int verbose = ctx->args->verbose;
4284 dc->dc_chaninfo.ic_nchans = verbose ? MAXCHAN : 1;
4286 printb("drivercaps", dc->dc_drivercaps, IEEE80211_C_BITS);
4287 if (dc->dc_cryptocaps != 0 || verbose) {
4289 printb("cryptocaps", dc->dc_cryptocaps, IEEE80211_CRYPTO_BITS);
4291 if (dc->dc_htcaps != 0 || verbose) {
4293 printb("htcaps", dc->dc_htcaps, IEEE80211_HTCAP_BITS);
4295 if (dc->dc_vhtcaps != 0 || verbose) {
4297 printb("vhtcaps", dc->dc_vhtcaps, IEEE80211_VHTCAP_BITS);
4302 chaninfo = &dc->dc_chaninfo; /* XXX */
4303 print_channels(ctx, &dc->dc_chaninfo, 1/*allchans*/, verbose);
4313 strlcpy(ireq.i_name, ctx->ifname, sizeof(ireq.i_name));
4320 return -1;
4334 if (get80211wme(ctx, IEEE80211_IOC_WME_CWMIN, ac, &val) != -1)
4336 if (get80211wme(ctx, IEEE80211_IOC_WME_CWMAX, ac, &val) != -1)
4338 if (get80211wme(ctx, IEEE80211_IOC_WME_AIFS, ac, &val) != -1)
4340 if (get80211wme(ctx, IEEE80211_IOC_WME_TXOPLIMIT, ac, &val) != -1)
4342 if (get80211wme(ctx, IEEE80211_IOC_WME_ACM, ac, &val) != -1) {
4345 else if (ctx->args->verbose)
4346 printf(" -acm");
4350 if (get80211wme(ctx, IEEE80211_IOC_WME_ACKPOLICY, ac, &val) != -1) {
4352 printf(" -ack");
4353 else if (ctx->args->verbose)
4366 if (ctx->args->verbose) {
4396 if (rp->rssi == 0 && rp->rate == 0)
4402 if (rp->rssi & 1)
4403 LINE_CHECK("roam:%-7.7s rssi %2u.5dBm MCS %2u ",
4404 modename[mode], rp->rssi/2,
4405 rp->rate &~ IEEE80211_RATE_MCS);
4407 LINE_CHECK("roam:%-7.7s rssi %4udBm MCS %2u ",
4408 modename[mode], rp->rssi/2,
4409 rp->rate &~ IEEE80211_RATE_MCS);
4411 if (rp->rssi & 1)
4412 LINE_CHECK("roam:%-7.7s rssi %2u.5dBm rate %2u Mb/s",
4413 modename[mode], rp->rssi/2, rp->rate/2);
4415 LINE_CHECK("roam:%-7.7s rssi %4udBm rate %2u Mb/s",
4416 modename[mode], rp->rssi/2, rp->rate/2);
4421 /* XXX TODO: rate-to-string method... */
4445 if (tp->mgmtrate == 0 && tp->mcastrate == 0)
4451 if (tp->ucastrate == IEEE80211_FIXED_RATE_NONE)
4452 LINE_CHECK("%-7.7s ucast NONE mgmt %2u %s "
4455 get_rate_value(tp->mgmtrate),
4456 get_mcs_mbs_rate_str(tp->mgmtrate),
4457 get_rate_value(tp->mcastrate),
4458 get_mcs_mbs_rate_str(tp->mcastrate),
4459 tp->maxretry);
4461 LINE_CHECK("%-7.7s ucast %2u MCS mgmt %2u %s "
4464 tp->ucastrate &~ IEEE80211_RATE_MCS,
4465 get_rate_value(tp->mgmtrate),
4466 get_mcs_mbs_rate_str(tp->mgmtrate),
4467 get_rate_value(tp->mcastrate),
4468 get_mcs_mbs_rate_str(tp->mcastrate),
4469 tp->maxretry);
4471 if (tp->ucastrate == IEEE80211_FIXED_RATE_NONE)
4472 LINE_CHECK("%-7.7s ucast NONE mgmt %2u Mb/s "
4475 tp->mgmtrate/2,
4476 tp->mcastrate/2, tp->maxretry);
4478 LINE_CHECK("%-7.7s ucast %2u Mb/s mgmt %2u Mb/s "
4481 tp->ucastrate/2, tp->mgmtrate/2,
4482 tp->mcastrate/2, tp->maxretry);
4518 strlcpy(ireq.i_name, ctx->ifname, sizeof(ireq.i_name)); /* XXX ?? */
4534 c = '-';
4541 if (ctx->args->verbose || c == '?')
4549 if (!(ctx->args->verbose || c == '?'))
4573 if ((reg->regdomain != 0 &&
4574 reg->regdomain != reg->country) || verb) {
4576 lib80211_regdomain_findbysku(getregdata(), reg->regdomain);
4578 LINE_CHECK("regdomain %d", reg->regdomain);
4580 LINE_CHECK("regdomain %s", rd->name);
4582 if (reg->country != 0 || verb) {
4584 lib80211_country_findbycc(getregdata(), reg->country);
4586 LINE_CHECK("country %d", reg->country);
4588 LINE_CHECK("country %s", cc->isoname);
4590 if (reg->location == 'I')
4592 else if (reg->location == 'O')
4596 if (reg->ecm)
4599 LINE_CHECK("-ecm");
4613 print_regdomain(®domain, ctx->args->verbose);
4623 strlcpy(ireq.i_name, ctx->ifname, sizeof(ireq.i_name));
4631 printf("%-17.17s %-17.17s %4s %4s %4s %6s %s\n"
4643 ether_ntoa((const struct ether_addr *)rt->imr_dest));
4645 ether_ntoa((const struct ether_addr *)rt->imr_nexthop),
4646 rt->imr_nhops, rt->imr_metric, rt->imr_lifetime,
4647 rt->imr_lastmseq,
4648 (rt->imr_flags & IEEE80211_MESHRT_FLAGS_DISCOVER) ?
4650 (rt->imr_flags & IEEE80211_MESHRT_FLAGS_VALID) ?
4652 (rt->imr_flags & IEEE80211_MESHRT_FLAGS_PROXY) ?
4654 (rt->imr_flags & IEEE80211_MESHRT_FLAGS_GATE) ?
4662 int s = ctx->io_s;
4663 #define iseq(a,b) (strncasecmp(a,b,sizeof(b)-1) == 0)
4696 errx(1, "Don't know how to list %s for %s", arg, ctx->ifname);
4706 strlcpy(ifmr.ifm_name, ctx->ifname, sizeof(ifmr.ifm_name));
4731 switch (ireq->i_val) {
4733 ireq->i_type = keylenop;
4734 if (ioctl(s, SIOCG80211, ireq) != -1)
4735 printf("WEP-%s",
4736 ireq->i_len <= 5 ? "40" :
4737 ireq->i_len <= 13 ? "104" : "128");
4745 printf("AES-OCB");
4748 printf("AES-CCM");
4757 printf("UNKNOWN (0x%x)", ireq->i_val);
4767 u_int keylen = ik->ik_keylen;
4769 const int verbose = ctx->args->verbose;
4770 const bool printkeys = ctx->args->printkeys;
4773 (memcmp(ik->ik_keydata, zerodata, keylen) != 0 || verbose);
4776 switch (ik->ik_type) {
4779 LINE_CHECK("wepkey %u:%s", ik->ik_keyix+1,
4780 keylen <= 5 ? "40-bit" :
4781 keylen <= 13 ? "104-bit" : "128-bit");
4785 keylen -= 128/8; /* ignore MIC for now */
4786 LINE_CHECK("TKIP %u:%u-bit", ik->ik_keyix+1, 8*keylen);
4789 LINE_CHECK("AES-OCB %u:%u-bit", ik->ik_keyix+1, 8*keylen);
4792 LINE_CHECK("AES-CCM %u:%u-bit", ik->ik_keyix+1, 8*keylen);
4795 LINE_CHECK("CKIP %u:%u-bit", ik->ik_keyix+1, 8*keylen);
4798 LINE_CHECK("NULL %u:%u-bit", ik->ik_keyix+1, 8*keylen);
4801 LINE_CHECK("UNKNOWN (0x%x) %u:%u-bit",
4802 ik->ik_type, ik->ik_keyix+1, 8*keylen);
4810 printf("%02x", ik->ik_keydata[i]);
4812 if (ik->ik_type != IEEE80211_CIPHER_WEP &&
4813 (ik->ik_keyrsc != 0 || verbose))
4814 printf(" rsc %ju", (uintmax_t)ik->ik_keyrsc);
4815 if (ik->ik_type != IEEE80211_CIPHER_WEP &&
4816 (ik->ik_keytsc != 0 || verbose))
4817 printf(" tsc %ju", (uintmax_t)ik->ik_keytsc);
4818 if (ik->ik_flags != 0 && verbose) {
4821 if (ik->ik_flags & IEEE80211_KEY_XMIT)
4823 if (ik->ik_flags & IEEE80211_KEY_RECV)
4825 if (ik->ik_flags & IEEE80211_KEY_DEFAULT)
4853 strlcpy(ireq.i_name, ctx->ifname, sizeof(ireq.i_name));
4859 return -1;
4869 strlcpy(ireq.i_name, ctx->ifname, sizeof(ireq.i_name));
4871 ireq.i_val = -1;
4875 return (-1);
4883 int s = ctx->io_s;
4891 const int verbose = ctx->args->verbose;
4893 if (getid(ctx, -1, data, sizeof(data), &len, 0) < 0) {
4928 if (c->ic_freq != IEEE80211_CHAN_ANY) {
4930 printf(" channel %d (%u MHz%s)", c->ic_ieee, c->ic_freq,
4941 if (get80211len(ctx, IEEE80211_IOC_STATIONNAME, data, sizeof(data), &len) != -1) {
4952 if (get80211val(ctx, IEEE80211_IOC_AUTHMODE, &val) != -1) {
4991 if (get80211val(ctx, IEEE80211_IOC_WPS, &val) != -1) {
4995 LINE_CHECK("-wps");
4997 if (get80211val(ctx, IEEE80211_IOC_TSN, &val) != -1) {
5001 LINE_CHECK("-tsn");
5003 if (ioctl(s, IEEE80211_IOC_COUNTERMEASURES, &val) != -1) {
5007 LINE_CHECK("-countermeasures");
5012 if (ioctl(s, SIOCG80211, &ireq) != -1) {
5016 if (ioctl(s, SIOCG80211, &ireq) != -1) {
5023 if (ioctl(s, SIOCG80211, &ireq) != -1) {
5030 if (ioctl(s, SIOCG80211, &ireq) != -1) {
5037 if (ioctl(s, SIOCG80211, &ireq) != -1) {
5042 if (get80211val(ctx, IEEE80211_IOC_WEP, &wepmode) != -1 &&
5050 LINE_CHECK("privacy ON");
5069 if (val != -1)
5100 if (get80211val(ctx, IEEE80211_IOC_POWERSAVE, &val) != -1 &&
5114 LINE_CHECK("powersavemode PSP-CAM");
5117 if (get80211val(ctx, IEEE80211_IOC_POWERSAVESLEEP, &val) != -1)
5122 if (get80211val(ctx, IEEE80211_IOC_TXPOWER, &val) != -1) {
5129 if (get80211val(ctx, IEEE80211_IOC_TXPOWMAX, &val) != -1)
5133 if (get80211val(ctx, IEEE80211_IOC_DOTD, &val) != -1) {
5137 LINE_CHECK("-dotd");
5140 if (get80211val(ctx, IEEE80211_IOC_RTSTHRESHOLD, &val) != -1) {
5145 if (get80211val(ctx, IEEE80211_IOC_FRAGTHRESHOLD, &val) != -1) {
5150 if (get80211val(ctx, IEEE80211_IOC_BMISSTHRESHOLD, &val) != -1) {
5159 printrate("ucastrate", tp->ucastrate,
5161 printrate("mcastrate", tp->mcastrate, 2*1,
5163 printrate("mgmtrate", tp->mgmtrate, 2*1,
5165 if (tp->maxretry != 6) /* XXX */
5166 LINE_CHECK("maxretry %d", tp->maxretry);
5172 bgscaninterval = -1;
5175 if (get80211val(ctx, IEEE80211_IOC_SCANVALID, &val) != -1) {
5181 if (get80211val(ctx, IEEE80211_IOC_BGSCAN, &bgscan) != -1) {
5185 LINE_CHECK("-bgscan");
5188 if (bgscaninterval != -1)
5190 if (get80211val(ctx, IEEE80211_IOC_BGSCAN_IDLE, &val) != -1)
5195 if (rp->rssi & 1)
5196 LINE_CHECK("roam:rssi %u.5", rp->rssi/2);
5198 LINE_CHECK("roam:rssi %u", rp->rssi/2);
5200 (rp->rate & IEEE80211_RATE_MCS) ? "MCS " : "",
5201 get_rate_value(rp->rate));
5210 if (get80211val(ctx, IEEE80211_IOC_PUREG, &val) != -1) {
5214 LINE_CHECK("-pureg");
5216 if (get80211val(ctx, IEEE80211_IOC_PROTMODE, &val) != -1) {
5239 LINE_CHECK("-ht");
5249 if (get80211val(ctx, IEEE80211_IOC_HTCOMPAT, &val) != -1) {
5251 LINE_CHECK("-htcompat");
5255 if (get80211val(ctx, IEEE80211_IOC_AMPDU, &val) != -1) {
5258 LINE_CHECK("-ampdu");
5261 LINE_CHECK("ampdutx -ampdurx");
5264 LINE_CHECK("-ampdutx ampdurx");
5273 if (get80211val(ctx, IEEE80211_IOC_AMPDU_LIMIT, &val) != -1) {
5290 if (get80211val(ctx, IEEE80211_IOC_AMPDU_DENSITY, &val) != -1) {
5319 if (get80211val(ctx, IEEE80211_IOC_AMSDU, &val) != -1) {
5322 LINE_CHECK("-amsdu");
5325 LINE_CHECK("amsdutx -amsdurx");
5328 LINE_CHECK("-amsdutx amsdurx");
5337 if (get80211val(ctx, IEEE80211_IOC_SHORTGI, &val) != -1) {
5341 LINE_CHECK("-shortgi");
5343 if (get80211val(ctx, IEEE80211_IOC_HTPROTMODE, &val) != -1) {
5351 if (get80211val(ctx, IEEE80211_IOC_PUREN, &val) != -1) {
5355 LINE_CHECK("-puren");
5357 if (get80211val(ctx, IEEE80211_IOC_SMPS, &val) != -1) {
5363 LINE_CHECK("-smps");
5365 if (get80211val(ctx, IEEE80211_IOC_RIFS, &val) != -1) {
5369 LINE_CHECK("-rifs");
5373 if (get80211val(ctx, IEEE80211_IOC_STBC, &val) != -1) {
5376 LINE_CHECK("-stbc");
5379 LINE_CHECK("stbctx -stbcrx");
5382 LINE_CHECK("-stbctx stbcrx");
5390 if (get80211val(ctx, IEEE80211_IOC_LDPC, &val) != -1) {
5393 LINE_CHECK("-ldpc");
5396 LINE_CHECK("ldpctx -ldpcrx");
5399 LINE_CHECK("-ldpctx ldpcrx");
5407 if (get80211val(ctx, IEEE80211_IOC_UAPSD, &val) != -1) {
5410 LINE_CHECK("-uapsd");
5427 LINE_CHECK("-vht40");
5431 LINE_CHECK("-vht80");
5435 LINE_CHECK("-vht160");
5439 LINE_CHECK("-vht80p80");
5441 LINE_CHECK("-vht");
5444 if (get80211val(ctx, IEEE80211_IOC_WME, &wme) != -1) {
5448 LINE_CHECK("-wme");
5452 if (get80211val(ctx, IEEE80211_IOC_BURST, &val) != -1) {
5456 LINE_CHECK("-burst");
5459 if (get80211val(ctx, IEEE80211_IOC_FF, &val) != -1) {
5463 LINE_CHECK("-ff");
5465 if (get80211val(ctx, IEEE80211_IOC_TURBOP, &val) != -1) {
5469 LINE_CHECK("-dturbo");
5471 if (get80211val(ctx, IEEE80211_IOC_DWDS, &val) != -1) {
5475 LINE_CHECK("-dwds");
5479 if (get80211val(ctx, IEEE80211_IOC_HIDESSID, &val) != -1) {
5483 LINE_CHECK("-hidessid");
5485 if (get80211val(ctx, IEEE80211_IOC_APBRIDGE, &val) != -1) {
5487 LINE_CHECK("-apbridge");
5491 if (get80211val(ctx, IEEE80211_IOC_DTIM_PERIOD, &val) != -1)
5494 if (get80211val(ctx, IEEE80211_IOC_DOTH, &val) != -1) {
5496 LINE_CHECK("-doth");
5500 if (get80211val(ctx, IEEE80211_IOC_DFS, &val) != -1) {
5502 LINE_CHECK("-dfs");
5506 if (get80211val(ctx, IEEE80211_IOC_INACTIVITY, &val) != -1) {
5508 LINE_CHECK("-inact");
5513 if (get80211val(ctx, IEEE80211_IOC_ROAMING, &val) != -1) {
5535 if (get80211val(ctx, IEEE80211_IOC_TDMA_SLOT, &val) != -1)
5537 if (get80211val(ctx, IEEE80211_IOC_TDMA_SLOTCNT, &val) != -1)
5539 if (get80211val(ctx, IEEE80211_IOC_TDMA_SLOTLEN, &val) != -1)
5541 if (get80211val(ctx, IEEE80211_IOC_TDMA_BINTERVAL, &val) != -1)
5543 } else if (get80211val(ctx, IEEE80211_IOC_BEACON_INTERVAL, &val) != -1) {
5555 if (get80211val(ctx, IEEE80211_IOC_MESH_TTL, &val) != -1) {
5558 if (get80211val(ctx, IEEE80211_IOC_MESH_AP, &val) != -1) {
5562 LINE_CHECK("-meshpeering");
5564 if (get80211val(ctx, IEEE80211_IOC_MESH_FWRD, &val) != -1) {
5568 LINE_CHECK("-meshforward");
5570 if (get80211val(ctx, IEEE80211_IOC_MESH_GATE, &val) != -1) {
5574 LINE_CHECK("-meshgate");
5577 &len) != -1) {
5582 &len) != -1) {
5586 if (get80211val(ctx, IEEE80211_IOC_HWMP_ROOTMODE, &val) != -1) {
5605 if (get80211val(ctx, IEEE80211_IOC_HWMP_MAXHOPS, &val) != -1) {
5623 return (lib80211_get80211(ctx->io_s, ctx->ifname, type, data, len));
5630 return (lib80211_get80211len(ctx->io_s, ctx->ifname, type, data, len, plen));
5637 return (lib80211_get80211val(ctx->io_s, ctx->ifname, type, val));
5645 ret = lib80211_set80211(ctx->io_s, ctx->ifname, type, val, len, data);
5687 #define tohex(x) (isdigit(x) ? (x) - '0' : tolower(x) - 'a' + 10)
5695 len = p - buf;
5696 /* The string "-" is treated as the empty string. */
5697 if (!hexstr && len == 1 && buf[0] == '-') {
5701 memset(p, 0, *lenp - len);
5717 utf8 = strncmp("UTF-8", nl_langinfo(CODESET), 5) == 0;
5761 regdomain.regdomain = rd->sku;
5762 if (rd->cc != NULL)
5793 ifr->ifr_data = (caddr_t) ¶ms;
5813 memcpy(params.icp_bssid, ea->octet, IEEE80211_ADDR_LEN);
5824 memcpy(params.icp_macaddr, ea->octet, IEEE80211_ADDR_LEN);
5831 #define iseq(a,b) (strncasecmp(a,b,sizeof(b)-1) == 0)
5834 else if (iseq(arg, "ahdemo") || iseq(arg, "adhoc-demo"))
5850 errx(1, "Don't know to create %s for %s", arg, ctx->ifname);
5892 DEF_CMD("-powersave", 0, set80211powersave),
5896 DEF_CMD("-wep", 0, set80211wep),
5901 DEF_CMD("-nwkey", 0, set80211wep), /* NetBSD */
5907 DEF_CMD("-wme", 0, set80211wme),
5909 DEF_CMD("-wmm", 0, set80211wme),
5911 DEF_CMD("-hidessid", 0, set80211hidessid),
5913 DEF_CMD("-apbridge", 0, set80211apbridge),
5924 DEF_CMD_ARG("-acm", set80211noacm),
5926 DEF_CMD_ARG("-ack", set80211noackpolicy),
5943 DEF_CMD("-pureg", 0, set80211pureg),
5945 DEF_CMD("-ff", 0, set80211fastframes),
5947 DEF_CMD("-dturbo", 0, set80211dturbo),
5949 DEF_CMD("-bgscan", 0, set80211bgscan),
5954 DEF_CMD("-quiet", 0, set80211quiet),
5968 DEF_CMD("-burst", 0, set80211burst),
5972 DEF_CMD("-shortgi", 0, set80211shortgi),
5974 DEF_CMD("-ampdurx", -2, set80211ampdu),
5976 DEF_CMD("-ampdutx", -1, set80211ampdu),
5978 DEF_CMD("-ampdu", -3, set80211ampdu),
5982 DEF_CMD("-amsdurx", -2, set80211amsdu),
5984 DEF_CMD("-amsdutx", -1, set80211amsdu),
5986 DEF_CMD("-amsdu", -3, set80211amsdu),
5989 DEF_CMD("-stbcrx", -2, set80211stbc),
5991 DEF_CMD("-stbctx", -1, set80211stbc),
5993 DEF_CMD("-stbc", -3, set80211stbc),
5995 DEF_CMD("-ldpcrx", -2, set80211ldpc),
5997 DEF_CMD("-ldpctx", -1, set80211ldpc),
5999 DEF_CMD("-ldpc", -3, set80211ldpc),
6001 DEF_CMD("-uapsd", 0, set80211uapsd),
6003 DEF_CMD("-puren", 0, set80211puren),
6005 DEF_CMD("-doth", 0, set80211doth),
6007 DEF_CMD("-dfs", 0, set80211dfs),
6009 DEF_CMD("-htcompat", 0, set80211htcompat),
6011 DEF_CMD("-dwds", 0, set80211dwds),
6013 DEF_CMD("-inact", 0, set80211inact),
6015 DEF_CMD("-tsn", 0, set80211tsn),
6019 DEF_CMD("-indoor", 'O', set80211location),
6021 DEF_CMD("-outdoor", 'I', set80211location),
6024 DEF_CMD("-ecm", 0, set80211ecm),
6026 DEF_CMD("-dotd", 0, set80211dotd),
6029 DEF_CMD("-ht20", 0, set80211htconf),
6031 DEF_CMD("-ht40", 0, set80211htconf),
6033 DEF_CMD("-ht", 0, set80211htconf),
6035 DEF_CMD("-vht", -IEEE80211_FVHT_VHT, set80211vhtconf),
6037 DEF_CMD("-vht40", -IEEE80211_FVHT_USEVHT40, set80211vhtconf),
6039 DEF_CMD("-vht80", -IEEE80211_FVHT_USEVHT80, set80211vhtconf),
6041 DEF_CMD("-vht160", -IEEE80211_FVHT_USEVHT160, set80211vhtconf),
6043 DEF_CMD("-vht80p80", -IEEE80211_FVHT_USEVHT80P80, set80211vhtconf),
6045 DEF_CMD("-vhtstbctx", -IEEE80211_FVHT_STBC_TX, set80211vhtconf),
6047 DEF_CMD("-vhtstbcrx", -IEEE80211_FVHT_STBC_RX, set80211vhtconf),
6049 DEF_CMD("-vhtstbc", -(IEEE80211_FVHT_STBC_TX|IEEE80211_FVHT_STBC_RX), set80211vhtconf),
6051 DEF_CMD("-rifs", 0, set80211rifs),
6054 DEF_CMD("-smps", IEEE80211_HTCAP_SMPS_OFF, set80211smps),
6065 DEF_CMD("-meshforward", 0, set80211meshforward),
6067 DEF_CMD("-meshgate", 0, set80211meshgate),
6069 DEF_CMD("-meshpeering", 0, set80211meshpeering),
6084 DEF_CLONE_CMD("-beacons", 0, set80211clone_beacons),
6086 DEF_CLONE_CMD("-bssid", 0, set80211clone_bssid),
6088 DEF_CLONE_CMD("-wdslegacy", 0, set80211clone_wdslegacy),