Lines Matching +full:combined +full:- +full:power +full:- +full:req
1 /*-
2 * SPDX-License-Identifier: BSD-3-Clause
30 /*-
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"); in getregdata()
272 const struct ieee80211_channel *fc = &chaninfo->ic_chans[i]; in canpromote()
275 if ((fc->ic_flags & from) != from) in canpromote()
278 if (i+1 < chaninfo->ic_nchans && in canpromote()
279 chaninfo->ic_chans[i+1].ic_freq == fc->ic_freq && in canpromote()
280 (chaninfo->ic_chans[i+1].ic_flags & to) == to) in canpromote()
283 for (j = 0; j < chaninfo->ic_nchans; j++) { in canpromote()
284 const struct ieee80211_channel *tc = &chaninfo->ic_chans[j]; in canpromote()
286 tc->ic_freq == fc->ic_freq && (tc->ic_flags & to) == to) in canpromote()
297 * attributes requires we upgrade, e.g. from 11b -> 11g. This
314 * is an unfortunate side-effect of the way ifconfig is in promote()
323 int chanmode = global_ifmr != NULL ? IFM_MODE(global_ifmr->ifm_current) : IFM_AUTO; in promote()
326 /* NB: we abitrarily pick HT40+ over HT40- */ in promote()
357 for (i = 0; i < chaninfo->ic_nchans; i++) { in mapfreq()
358 const struct ieee80211_channel *c = &chaninfo->ic_chans[i]; in mapfreq()
360 if (c->ic_freq == freq && (c->ic_flags & flags) == flags) { in mapfreq()
363 c = &chaninfo->ic_chans[promote(i)]; in mapfreq()
377 for (i = 0; i < chaninfo->ic_nchans; i++) { in mapchan()
378 const struct ieee80211_channel *c = &chaninfo->ic_chans[i]; in mapchan()
380 if (c->ic_ieee == ieee && (c->ic_flags & flags) == flags) { in mapchan()
383 c = &chaninfo->ic_chans[promote(i)]; in mapchan()
401 err(-1, "cannot figure out current channel"); in getcurchan()
499 struct ieee80211_regdomain_req *req; in setregdomain_cb() local
504 if (rd->country != NO_COUNTRY) { in setregdomain_cb()
512 cc = lib80211_country_findbycc(rdp, rd->country); in setregdomain_cb()
514 errx(1, "unknown ISO country code %d", rd->country); in setregdomain_cb()
515 if (cc->rd->sku != rd->regdomain) { in setregdomain_cb()
524 * we allow US to be combined with FCC3 because FCC3 in setregdomain_cb()
530 rp = lib80211_regdomain_findbysku(rdp, rd->regdomain); in setregdomain_cb()
533 "regdomain %d", cc->isoname, cc->name, in setregdomain_cb()
534 rd->regdomain); in setregdomain_cb()
535 else if (rp->cc != NULL && rp->cc != cc) in setregdomain_cb()
537 "regdomain %s", cc->isoname, cc->name, in setregdomain_cb()
538 rp->name); in setregdomain_cb()
550 dc->dc_chaninfo.ic_nchans = MAXCHAN; in setregdomain_cb()
554 printf("drivercaps: 0x%x\n", dc->dc_drivercaps); in setregdomain_cb()
555 printf("cryptocaps: 0x%x\n", dc->dc_cryptocaps); in setregdomain_cb()
556 printf("htcaps : 0x%x\n", dc->dc_htcaps); in setregdomain_cb()
557 printf("vhtcaps : 0x%x\n", dc->dc_vhtcaps); in setregdomain_cb()
559 memcpy(chaninfo, &dc->dc_chaninfo, in setregdomain_cb()
560 IEEE80211_CHANINFO_SPACE(&dc->dc_chaninfo)); in setregdomain_cb()
561 print_channels(s, &dc->dc_chaninfo, 1/*allchans*/, 1/*verbose*/); in setregdomain_cb()
565 req = malloc(IEEE80211_REGDOMAIN_SIZE(dc->dc_chaninfo.ic_nchans)); in setregdomain_cb()
566 if (req == NULL) in setregdomain_cb()
568 req->rd = *rd; in setregdomain_cb()
569 regdomain_makechannels(ctx, req, dc); in setregdomain_cb()
570 if (ctx->args->verbose) { in setregdomain_cb()
577 chaninfo = malloc(IEEE80211_CHANINFO_SPACE(&req->chaninfo)); in setregdomain_cb()
580 memcpy(chaninfo, &req->chaninfo, in setregdomain_cb()
581 IEEE80211_CHANINFO_SPACE(&req->chaninfo)); in setregdomain_cb()
582 print_channels(ctx, &req->chaninfo, 1/*allchans*/, 1/*verbose*/); in setregdomain_cb()
584 if (req->chaninfo.ic_nchans == 0) in setregdomain_cb()
587 IEEE80211_REGDOMAIN_SPACE(req), req); in setregdomain_cb()
588 free(req); in setregdomain_cb()
603 return (strncmp(arg, "-", 1) == 0 || in isanyarg()
617 ssid = atoi(val)-1; in set80211ssid()
659 * freq/xx channel width (5,10,20,40,40+,40-)
662 * These can be combined in either order; e.g. 2437:ng/40.
714 errx(-1, "%s: Invalid channel attribute %c\n", in getchannelflags()
747 else if (ep != NULL && *ep == '-') in getchannelflags()
751 errx(-1, "%s: Invalid channel width\n", val); in getchannelflags()
779 * HT40+ or HT40- (if both the map routines choose). in getchannelflags()
819 chan->ic_freq = IEEE80211_CHAN_ANY; in getchannel()
893 } else if (strcasecmp(val, "psp-cam") == 0) { in set80211powersavemode()
946 return (strcmp(arg, "-") == 0 || strncasecmp(arg, "undef", 5) == 0); in isundefarg()
955 set80211(ctx, IEEE80211_IOC_WEPTXKEY, atoi(val)-1, 0, NULL); in set80211weptxkey()
966 key = atoi(val)-1; in set80211wepkey()
992 txkey = val[0]-'0'-1; in set80211nwkey()
1069 errx(-1, "invalid tx power (must be .5 dBm units)"); in set80211txpower()
1142 switch (sscanf(cp, "%u-%u", &first, &last)) { in set80211chanlist()
1145 errx(-1, "channel %u out of range, max %u", in set80211chanlist()
1151 errx(-1, "channel %u out of range, max %u", in set80211chanlist()
1154 errx(-1, "channel %u out of range, max %u", in set80211chanlist()
1157 errx(-1, "void channel range, %u > %u", in set80211chanlist()
1192 errx(1, "malformed link-level address"); in set80211bssid()
1319 errx(1, "malformed link-level address"); in set80211macmac()
1351 errx(1, "malformed link-level address"); in set80211kickmac()
1366 set80211meshrtmac(if_ctx *ctx, int req, const char *val) in set80211meshrtmac() argument
1380 errx(1, "malformed link-level address"); in set80211meshrtmac()
1381 set80211(ctx, IEEE80211_IOC_MESH_RTCMD, req, in set80211meshrtmac()
1534 case 'h': /* 1/2-width channels */ in getmodeflags()
1537 case 'q': /* 1/4-width channels */ in getmodeflags()
1545 errx(-1, "%s: Invalid mode attribute %c\n", in getmodeflags()
1629 errx(-1, "invalid rssi (must be .5 dBm units)"); in set80211roamrssi()
1633 flags = getcurchan(ctx)->ic_flags; in set80211roamrssi()
1648 errx(-1, "invalid %s rate (must be .5 Mb/s units)", tag); in getrate()
1661 flags = getcurchan(ctx)->ic_flags; in set80211roamrate()
1677 flags = getcurchan(ctx)->ic_flags; in set80211mcastrate()
1693 flags = getcurchan(ctx)->ic_flags; in set80211mgtrate()
1709 flags = getcurchan(ctx)->ic_flags; in set80211ucastrate()
1718 flags = getcurchan(ctx)->ic_flags; in set80211ucastrate()
1734 flags = getcurchan(ctx)->ic_flags; in set80211maxretry()
1790 errx(-1, "cannot set AMPDU setting"); in set80211ampdu()
1792 d = -d; in set80211ampdu()
1805 errx(-1, "cannot set STBC setting"); in set80211stbc()
1807 d = -d; in set80211stbc()
1820 errx(-1, "cannot set LDPC setting"); in set80211ldpc()
1822 d = -d; in set80211ldpc()
1858 errx(-1, "invalid A-MPDU limit %s", val); in set80211ampdulimit()
1897 errx(-1, "invalid A-MPDU density %s", val); in set80211ampdudensity()
1908 err(-1, "cannot get AMSDU setting"); in set80211amsdu()
1910 d = -d; in set80211amsdu()
1982 errx(-1, "cannot set VHT setting"); in set80211vhtconf()
1984 d = -d; in set80211vhtconf()
2065 return ca->ic_freq == cb->ic_freq ? in regdomain_sort()
2066 (int)(ca->ic_flags & CHAN_ALL) - (int)(cb->ic_flags & CHAN_ALL) : in regdomain_sort()
2067 ca->ic_freq - cb->ic_freq; in regdomain_sort()
2080 if (c->ic_freq == freq && in chanlookup()
2081 (c->ic_flags & IEEE80211_CHAN_ALLTURBO) == flags) in chanlookup()
2092 if ((c->ic_flags & flags) == flags) in chanfind()
2110 if (chanlookup(avail->ic_chans, avail->ic_nchans, freq, flags) != NULL) in checkchan()
2126 * by per-band attributes though (we are effectively calculating in checkchan()
2131 if (chanlookup(avail->ic_chans, avail->ic_nchans, freq, in checkchan()
2135 return chanfind(avail->ic_chans, avail->ic_nchans, in checkchan()
2139 return chanfind(avail->ic_chans, avail->ic_nchans, in checkchan()
2157 const int verbose = ctx->args->verbose; in regdomain_addchans()
2159 hi_adj = (chanFlags & IEEE80211_CHAN_HT40U) ? -20 : 0; in regdomain_addchans()
2164 b = nb->band; in regdomain_addchans()
2168 printb(" bandFlags", nb->flags | b->flags, in regdomain_addchans()
2174 for (freq = b->freqStart + lo_adj; in regdomain_addchans()
2175 freq <= b->freqEnd + hi_adj; freq += b->chanSep) { in regdomain_addchans()
2179 * for HT40 which is enabled generically (i.e. +/- in regdomain_addchans()
2183 flags = nb->flags | b->flags; in regdomain_addchans()
2186 * VHT first - HT is a subset. in regdomain_addchans()
2232 * called to add HT20, HT40+, and HT40- chan's in regdomain_addchans()
2266 if ((flags & REQ_ECM) && !reg->ecm) { in regdomain_addchans()
2271 if ((flags & REQ_INDOOR) && reg->location == 'O') { in regdomain_addchans()
2277 if ((flags & REQ_OUTDOOR) && reg->location == 'I') { in regdomain_addchans()
2284 prev != NULL && (freq - prev->ic_freq) < channelSep) { in regdomain_addchans()
2288 freq - prev->ic_freq, channelSep); in regdomain_addchans()
2291 if (ci->ic_nchans == IEEE80211_CHAN_MAX) { in regdomain_addchans()
2297 c = &ci->ic_chans[ci->ic_nchans++]; in regdomain_addchans()
2299 c->ic_freq = freq; in regdomain_addchans()
2300 c->ic_flags = flags; in regdomain_addchans()
2301 if (c->ic_flags & IEEE80211_CHAN_DFS) in regdomain_addchans()
2302 c->ic_maxregpower = nb->maxPowerDFS; in regdomain_addchans()
2304 c->ic_maxregpower = nb->maxPower; in regdomain_addchans()
2307 ci->ic_nchans-1, c->ic_freq); in regdomain_addchans()
2308 printb("flags", c->ic_flags, IEEE80211_CHAN_BITS); in regdomain_addchans()
2309 printf(" power %u\n", c->ic_maxregpower); in regdomain_addchans()
2320 struct ieee80211_regdomain_req *req, in regdomain_makechannels() argument
2325 const struct ieee80211_regdomain *reg = &req->rd; in regdomain_makechannels()
2326 struct ieee80211req_chaninfo *ci = &req->chaninfo; in regdomain_makechannels()
2337 if (reg->regdomain == 0) { in regdomain_makechannels()
2338 cc = lib80211_country_findbycc(rdp, reg->country); in regdomain_makechannels()
2341 reg->country); in regdomain_makechannels()
2342 rd = cc->rd; in regdomain_makechannels()
2344 rd = lib80211_regdomain_findbysku(rdp, reg->regdomain); in regdomain_makechannels()
2347 reg->regdomain); in regdomain_makechannels()
2348 if (rd->sku != SKU_DEBUG) { in regdomain_makechannels()
2356 ci->ic_nchans = 0; in regdomain_makechannels()
2357 if (!LIST_EMPTY(&rd->bands_11b)) in regdomain_makechannels()
2358 regdomain_addchans(ctx, ci, &rd->bands_11b, reg, in regdomain_makechannels()
2359 IEEE80211_CHAN_B, &dc->dc_chaninfo); in regdomain_makechannels()
2360 if (!LIST_EMPTY(&rd->bands_11g)) in regdomain_makechannels()
2361 regdomain_addchans(ctx, ci, &rd->bands_11g, reg, in regdomain_makechannels()
2362 IEEE80211_CHAN_G, &dc->dc_chaninfo); in regdomain_makechannels()
2363 if (!LIST_EMPTY(&rd->bands_11a)) in regdomain_makechannels()
2364 regdomain_addchans(ctx, ci, &rd->bands_11a, reg, in regdomain_makechannels()
2365 IEEE80211_CHAN_A, &dc->dc_chaninfo); in regdomain_makechannels()
2366 if (!LIST_EMPTY(&rd->bands_11na) && dc->dc_htcaps != 0) { in regdomain_makechannels()
2367 regdomain_addchans(ctx, ci, &rd->bands_11na, reg, in regdomain_makechannels()
2369 &dc->dc_chaninfo); in regdomain_makechannels()
2370 if (dc->dc_htcaps & IEEE80211_HTCAP_CHWIDTH40) { in regdomain_makechannels()
2371 regdomain_addchans(ctx, ci, &rd->bands_11na, reg, in regdomain_makechannels()
2373 &dc->dc_chaninfo); in regdomain_makechannels()
2374 regdomain_addchans(ctx, ci, &rd->bands_11na, reg, in regdomain_makechannels()
2376 &dc->dc_chaninfo); in regdomain_makechannels()
2379 if (!LIST_EMPTY(&rd->bands_11ac) && dc->dc_vhtcaps != 0) { in regdomain_makechannels()
2380 regdomain_addchans(ctx, ci, &rd->bands_11ac, reg, in regdomain_makechannels()
2383 &dc->dc_chaninfo); in regdomain_makechannels()
2386 if (dc->dc_htcaps & IEEE80211_HTCAP_CHWIDTH40) { in regdomain_makechannels()
2387 regdomain_addchans(ctx, ci, &rd->bands_11ac, reg, in regdomain_makechannels()
2390 &dc->dc_chaninfo); in regdomain_makechannels()
2391 regdomain_addchans(ctx, ci, &rd->bands_11ac, reg, in regdomain_makechannels()
2394 &dc->dc_chaninfo); in regdomain_makechannels()
2399 regdomain_addchans(ctx, ci, &rd->bands_11ac, reg, in regdomain_makechannels()
2402 &dc->dc_chaninfo); in regdomain_makechannels()
2403 regdomain_addchans(ctx, ci, &rd->bands_11ac, reg, in regdomain_makechannels()
2406 &dc->dc_chaninfo); in regdomain_makechannels()
2411 dc->dc_vhtcaps)) { in regdomain_makechannels()
2412 regdomain_addchans(ctx, ci, &rd->bands_11ac, reg, in regdomain_makechannels()
2415 &dc->dc_chaninfo); in regdomain_makechannels()
2416 regdomain_addchans(ctx, ci, &rd->bands_11ac, reg, in regdomain_makechannels()
2419 &dc->dc_chaninfo); in regdomain_makechannels()
2424 dc->dc_vhtcaps)) { in regdomain_makechannels()
2425 regdomain_addchans(ctx, ci, &rd->bands_11ac, reg, in regdomain_makechannels()
2428 &dc->dc_chaninfo); in regdomain_makechannels()
2429 regdomain_addchans(ctx, ci, &rd->bands_11ac, reg, in regdomain_makechannels()
2432 &dc->dc_chaninfo); in regdomain_makechannels()
2436 if (!LIST_EMPTY(&rd->bands_11ng) && dc->dc_htcaps != 0) { in regdomain_makechannels()
2437 regdomain_addchans(ctx, ci, &rd->bands_11ng, reg, in regdomain_makechannels()
2439 &dc->dc_chaninfo); in regdomain_makechannels()
2440 if (dc->dc_htcaps & IEEE80211_HTCAP_CHWIDTH40) { in regdomain_makechannels()
2441 regdomain_addchans(ctx, ci, &rd->bands_11ng, reg, in regdomain_makechannels()
2443 &dc->dc_chaninfo); in regdomain_makechannels()
2444 regdomain_addchans(ctx, ci, &rd->bands_11ng, reg, in regdomain_makechannels()
2446 &dc->dc_chaninfo); in regdomain_makechannels()
2449 qsort(ci->ic_chans, ci->ic_nchans, sizeof(ci->ic_chans[0]), in regdomain_makechannels()
2452 memcpy(ci, &dc->dc_chaninfo, in regdomain_makechannels()
2453 IEEE80211_CHANINFO_SPACE(&dc->dc_chaninfo)); in regdomain_makechannels()
2466 LIST_FOREACH(cp, &rdp->countries, next) { in list_countries()
2467 printf("%2s %-15.15s%s", cp->isoname, in list_countries()
2468 cp->name, ((i+1)%4) == 0 ? "\n" : " "); in list_countries()
2473 LIST_FOREACH(dp, &rdp->domains, next) { in list_countries()
2474 printf("%-15.15s%s", dp->name, ((i+1)%4) == 0 ? "\n" : " "); in list_countries()
2486 cc = lib80211_country_findbycc(rdp, rd->cc->code); in defaultcountry()
2489 "defined for regdomain %s", rd->cc->code, rd->name); in defaultcountry()
2490 regdomain.country = cc->code; in defaultcountry()
2491 regdomain.isocc[0] = cc->isoname[0]; in defaultcountry()
2492 regdomain.isocc[1] = cc->isoname[1]; in defaultcountry()
2512 regdomain.regdomain = rd->sku; in set80211regdomain()
2513 if (regdomain.country == 0 && rd->cc != NULL) { in set80211regdomain()
2540 regdomain.regdomain = cc->rd->sku; in set80211country()
2541 regdomain.country = cc->code; in set80211country()
2542 regdomain.isocc[0] = cc->isoname[0]; in set80211country()
2543 regdomain.isocc[1] = cc->isoname[1]; in set80211country()
2580 col = 8; /* 8-col tab */ in LINE_BREAK()
2591 n = vsnprintf(buf+1, sizeof(buf)-1, fmt, ap); in LINE_CHECK()
2606 int i, maxrate = -1; in getmaxrate()
2706 if (ctx->args->verbose) { in printie()
2707 maxlen -= strlen(tag)+2; in printie()
2709 maxlen--; in printie()
2711 for (; ielen > 0; ie++, ielen--) { in printie()
2712 if (maxlen-- <= 0) in printie()
2717 printf("-"); in printie()
2748 if (!ctx->args->verbose) in printwmeparam()
2750 printf("<qosinfo 0x%x", wme->param_qosInfo); in printwmeparam()
2754 &wme->params_acParams[i]; in printwmeparam()
2757 _IEEE80211_MASKSHIFT(ac->acp_aci_aifsn, WME_PARAM_ACM) ? in printwmeparam()
2759 _IEEE80211_MASKSHIFT(ac->acp_aci_aifsn, WME_PARAM_AIFSN), in printwmeparam()
2760 _IEEE80211_MASKSHIFT(ac->acp_logcwminmax, in printwmeparam()
2762 _IEEE80211_MASKSHIFT(ac->acp_logcwminmax, in printwmeparam()
2764 LE_READ_2(&ac->acp_txop)); in printwmeparam()
2773 if (ctx->args->verbose) { in printwmeinfo()
2777 wme->wme_version, wme->wme_info); in printwmeinfo()
2790 if (!ctx->args->verbose) in printhecap()
2801 /* XXX-BZ we need to somehow decode each field? */ in printhecap()
2803 for (i = 0; i < nitems(hecap->mac_cap_info); i++) in printhecap()
2804 printf(" %#04x", hecap->mac_cap_info[i]); in printhecap()
2806 for (i = 0; i < nitems(hecap->phy_cap_info); i++) in printhecap()
2807 printf(" %#04x", hecap->phy_cap_info[i]); in printhecap()
2809 chw = hecap->phy_cap_info[0]; in printhecap()
2814 mcsnss->rx_mcs_80, mcsnss->tx_mcs_80); in printhecap()
2818 mcsnss->rx_mcs_160, mcsnss->tx_mcs_160); in printhecap()
2823 mcsnss->rx_mcs_80p80, mcsnss->tx_mcs_80p80); in printhecap()
2835 if (ctx->args->verbose) { in printheoper()
2847 /* XXX-BZ we need to somehow decode each field? */ in printheoper()
2848 params = heoper->he_oper_params & 0x00ffffff; in printheoper()
2850 printf(" bss_col %#04x", (heoper->he_oper_params & 0xff000000) >> 24); in printheoper()
2851 printf(" mcs_nss %#06x", heoper->he_mcs_nss_set); in printheoper()
2853 printf(" vht_op 0-3"); in printheoper()
2856 printf(" max_coh_bssid 0-1"); in printheoper()
2859 printf(" 6ghz_op 0-5"); in printheoper()
2873 if (!ctx->args->verbose) in printmuedcaparamset()
2884 printf("<qosinfo 0x%x", mu_edca->mu_qos_info); in printmuedcaparamset()
2888 &mu_edca->param_ac_recs[i]; in printmuedcaparamset()
2891 ac->aifsn, in printmuedcaparamset()
2892 _IEEE80211_MASKSHIFT(ac->ecw_min_max, WME_PARAM_LOGCWMIN), in printmuedcaparamset()
2893 _IEEE80211_MASKSHIFT(ac->ecw_min_max, WME_PARAM_LOGCWMAX), in printmuedcaparamset()
2894 ac->mu_edca_timer); in printmuedcaparamset()
2905 if (!ctx->args->verbose) in printsupopclass()
2956 if (ctx->args->verbose) { in printvhtcap()
2968 vhtcap_info = LE_READ_4(&vhtcap->vht_cap_info); in printvhtcap()
2971 LE_READ_2(&vhtcap->supp_mcs.rx_mcs_map)); in printvhtcap()
2973 LE_READ_2(&vhtcap->supp_mcs.rx_highest) & 0x1fff); in printvhtcap()
2975 LE_READ_2(&vhtcap->supp_mcs.tx_mcs_map)); in printvhtcap()
2977 LE_READ_2(&vhtcap->supp_mcs.tx_highest) & 0x1fff); in printvhtcap()
2987 if (ctx->args->verbose) { in printvhtinfo()
2999 vhtinfo->chan_width, in printvhtinfo()
3000 vhtinfo->center_freq_seq0_idx, in printvhtinfo()
3001 vhtinfo->center_freq_seq1_idx, in printvhtinfo()
3002 LE_READ_2(&vhtinfo->basic_mcs_set)); in printvhtinfo()
3016 if (ctx->args->verbose) { in printvhtpwrenv()
3023 n = (vhtpwr->tx_info & in printvhtpwrenv()
3027 n = ielen - 3; in printvhtpwrenv()
3028 printf("<tx_info 0x%02x pwr:[", vhtpwr->tx_info); in printvhtpwrenv()
3043 if (ctx->args->verbose) { in printhtcap()
3050 LE_READ_2(&htcap->hc_cap), htcap->hc_param); in printhtcap()
3054 if (isset(htcap->hc_mcsset, i)) { in printhtcap()
3056 if (isclr(htcap->hc_mcsset, j)) in printhtcap()
3058 j--; in printhtcap()
3062 printf("%s%u-%u", sep, i, j); in printhtcap()
3063 i += j-i; in printhtcap()
3067 LE_READ_2(&htcap->hc_extcap), in printhtcap()
3068 LE_READ_4(&htcap->hc_txbf), in printhtcap()
3069 htcap->hc_antenna); in printhtcap()
3077 if (ctx->args->verbose) { in printhtinfo()
3083 printf("<ctl %u, %x,%x,%x,%x", htinfo->hi_ctrlchannel, in printhtinfo()
3084 htinfo->hi_byte1, htinfo->hi_byte2, htinfo->hi_byte3, in printhtinfo()
3085 LE_READ_2(&htinfo->hi_byte45)); in printhtinfo()
3089 if (isset(htinfo->hi_basicmcsset, i)) { in printhtinfo()
3091 if (isclr(htinfo->hi_basicmcsset, j)) in printhtinfo()
3093 j--; in printhtinfo()
3097 printf("%s%u-%u", sep, i, j); in printhtinfo()
3098 i += j-i; in printhtinfo()
3110 if (ctx->args->verbose) { in printathie()
3115 if (ath->ath_capability & ATHEROS_CAP_TURBO_PRIME) in printathie()
3117 if (ath->ath_capability & ATHEROS_CAP_COMPRESSION) in printathie()
3119 if (ath->ath_capability & ATHEROS_CAP_FAST_FRAME) in printathie()
3121 if (ath->ath_capability & ATHEROS_CAP_XR) in printathie()
3123 if (ath->ath_capability & ATHEROS_CAP_AR) in printathie()
3125 if (ath->ath_capability & ATHEROS_CAP_BURST) in printathie()
3127 if (ath->ath_capability & ATHEROS_CAP_WME) in printathie()
3129 if (ath->ath_capability & ATHEROS_CAP_BOOST) in printathie()
3131 printf("0x%x>", LE_READ_2(ath->ath_defkeyix)); in printathie()
3141 if (ctx->args->verbose) { in printmeshconf()
3145 if (mconf->conf_pselid == IEEE80211_MESHCONF_PATH_HWMP) in printmeshconf()
3150 if (mconf->conf_pmetid == IEEE80211_MESHCONF_METRIC_AIRTIME) in printmeshconf()
3155 if (mconf->conf_ccid == IEEE80211_MESHCONF_CC_DISABLED) in printmeshconf()
3160 if (mconf->conf_syncid == IEEE80211_MESHCONF_SYNC_NEIGHOFF) in printmeshconf()
3165 if (mconf->conf_authid == IEEE80211_MESHCONF_AUTH_DISABLED) in printmeshconf()
3169 printf(" FORM:0x%x CAPS:0x%x>", mconf->conf_form, in printmeshconf()
3170 mconf->conf_cap); in printmeshconf()
3178 if (ctx->args->verbose) { in printbssload()
3182 LE_READ_2(&bssload->sta_count), in printbssload()
3183 bssload->chan_load, in printbssload()
3184 bssload->aac); in printbssload()
3192 if (ctx->args->verbose) { in printapchanrep()
3197 printf("<class %u, chan:[", ap->i_class); in printapchanrep()
3223 return "AES-CCMP"; in wpa_cipher()
3237 return "8021X-UNSPEC"; in wpa_keymgmt()
3239 return "8021X-PSK"; in wpa_keymgmt()
3253 if (ctx->args->verbose) { in printwpaie()
3257 ie += 6, len -= 4; /* NB: len is payload only */ in printwpaie()
3260 ie += 2, len -= 2; in printwpaie()
3263 ie += 4, len -= 4; in printwpaie()
3267 ie += 2, len -= 2; in printwpaie()
3269 for (; n > 0; n--) { in printwpaie()
3271 ie += 4, len -= 4; in printwpaie()
3277 ie += 2, len -= 2; in printwpaie()
3279 for (; n > 0; n--) { in printwpaie()
3281 ie += 4, len -= 4; in printwpaie()
3307 return "AES-CCMP"; in rsn_cipher()
3309 return "AES-OCB"; in rsn_cipher()
3311 return "AES-GCMP"; in rsn_cipher()
3313 return "AES-CCMP-256"; in rsn_cipher()
3315 return "AES-GCMP-256"; in rsn_cipher()
3329 return "8021X-UNSPEC"; in rsn_keymgmt()
3331 return "8021X-PSK"; in rsn_keymgmt()
3333 return "8021X-UNSPEC-SHA256"; in rsn_keymgmt()
3335 return "8021X-PSK-256"; in rsn_keymgmt()
3347 if (ctx->args->verbose) { in printrsnie()
3351 ie += 2, ielen -= 2; in printrsnie()
3354 ie += 2, ielen -= 2; in printrsnie()
3357 ie += 4, ielen -= 4; in printrsnie()
3361 ie += 2, ielen -= 2; in printrsnie()
3363 for (; n > 0; n--) { in printrsnie()
3365 ie += 4, ielen -= 4; in printrsnie()
3371 ie += 2, ielen -= 2; in printrsnie()
3373 for (; n > 0; n--) { in printrsnie()
3375 ie += 4, ielen -= 4; in printrsnie()
3392 if (!ctx->args->verbose) in printrsnxe()
3395 ie += 2, ielen -= 2; in printrsnxe()
3407 printf(" SAE h-t-e"); in printrsnxe()
3424 if (ctx->args->verbose) { in printwpsie()
3427 "U", /* User-specified */ in printwpsie()
3428 "M", /* Machine-specified */ in printwpsie()
3431 "R" /* Registrar-specified */ in printwpsie()
3436 ie +=6, len -= 4; /* NB: len is payload only */ in printwpsie()
3453 ie += 4, len -= 4; in printwpsie()
3471 for (n = 15; n >= 0; n--) { in printwpsie()
3577 for (n = 7; n >= 0; n--) { in printwpsie()
3615 printf(" uuid-e:"); in printwpsie()
3616 for (n = 0; n < (tlv_len - 1); n++) in printwpsie()
3617 printf("%02x-", ie[n]); in printwpsie()
3642 ie += tlv_len, len -= tlv_len; in printwpsie()
3652 if (ctx->args->verbose && ielen >= sizeof(struct ieee80211_tdma_param)) { in printtdmaie()
3658 tdma->tdma_version, tdma->tdma_slot, tdma->tdma_slotcnt, in printtdmaie()
3659 LE_READ_2(&tdma->tdma_slotlen), tdma->tdma_bintval, in printtdmaie()
3660 tdma->tdma_inuse[0]); in printtdmaie()
3690 bufsize -= 2; in copy_essid()
3694 bufsize -= 2; in copy_essid()
3697 memcpy(&buf[2+2*i-3], "...", 3); in copy_essid()
3701 memcpy(&buf[maxlen-3], "...", 3); in copy_essid()
3737 printf("%s<%c%c%c", tag, cie->cc[0], cie->cc[1], cie->cc[2]); in printcountry()
3738 nbands = (cie->len - 3) / sizeof(cie->band[0]); in printcountry()
3740 schan = cie->band[i].schan; in printcountry()
3741 nchan = cie->band[i].nchan; in printcountry()
3743 printf(" %u-%u,%u", schan, schan + nchan-1, in printcountry()
3744 cie->band[i].maxtxpwr); in printcountry()
3746 printf(" %u,%u", schan, cie->band[i].maxtxpwr); in printcountry()
3852 const int verbose = ctx->args->verbose; in printexties()
3877 const int verbose = ctx->args->verbose; in printies()
3965 ielen -= 2+vp[1]; in printies()
3977 if (mi->ch[i].rssi[0] != 0) { in printmimo()
3989 mi->ch[0].rssi[0] / 2.0, in printmimo()
3990 mi->ch[1].rssi[0] / 2.0, in printmimo()
3991 mi->ch[2].rssi[0] / 2.0, in printmimo()
3992 mi->ch[3].rssi[0] / 2.0, in printmimo()
3993 mi->ch[0].noise[0], in printmimo()
3994 mi->ch[1].noise[0], in printmimo()
3995 mi->ch[2].noise[0], in printmimo()
3996 mi->ch[3].noise[0]); in printmimo()
4025 printf("%-*.*s %-17.17s %4s %4s %-7s %3s %4s\n" in list_scan()
4040 vp = cp + sr->isr_ie_off; in list_scan()
4041 if (sr->isr_meshid_len) { in list_scan()
4042 idp = vp + sr->isr_ssid_len; in list_scan()
4043 idlen = sr->isr_meshid_len; in list_scan()
4046 idlen = sr->isr_ssid_len; in list_scan()
4048 printf("%-*.*s %s %3d %3dM %4d:%-4d %4d %-4.4s" in list_scan()
4052 , ether_ntoa((const struct ether_addr *) sr->isr_bssid) in list_scan()
4053 , ieee80211_mhz2ieee(sr->isr_freq, sr->isr_flags) in list_scan()
4054 , getmaxrate(sr->isr_rates, sr->isr_nrates) in list_scan()
4055 , (sr->isr_rssi/2)+sr->isr_noise, sr->isr_noise in list_scan()
4056 , sr->isr_intval in list_scan()
4057 , getcaps(sr->isr_capinfo) in list_scan()
4059 printies(ctx, vp + sr->isr_ssid_len + sr->isr_meshid_len, in list_scan()
4060 sr->isr_ie_len, 24); in list_scan()
4061 printbssidname((const struct ether_addr *)sr->isr_bssid); in list_scan()
4063 cp += sr->isr_len, len -= sr->isr_len; in list_scan()
4080 strlcpy(ireq.i_name, ctx->ifname, sizeof(ireq.i_name)); in scan_and_wait()
4109 if (rtm->rtm_version != RTM_VERSION) in scan_and_wait()
4112 } while (rtm->rtm_type != RTM_IEEE80211 || in scan_and_wait()
4113 ifan->ifan_what != RTM_IEEE80211_SCAN); in scan_and_wait()
4132 if ((si->isi_state & IEEE80211_NODE_QOS) == 0) in gettxseq()
4133 return si->isi_txseqs[0]; in gettxseq()
4137 if (si->isi_txseqs[i] > txseq) in gettxseq()
4138 txseq = si->isi_txseqs[i]; in gettxseq()
4147 if ((si->isi_state & IEEE80211_NODE_QOS) == 0) in getrxseq()
4148 return si->isi_rxseqs[0]; in getrxseq()
4152 if (si->isi_rxseqs[i] > rxseq) in getrxseq()
4153 rxseq = si->isi_rxseqs[i]; in getrxseq()
4161 struct ieee80211req_sta_req req; in list_stations() member
4169 (void) memset(u.req.is_u.macaddr, 0xff, IEEE80211_ADDR_LEN); in list_stations()
4175 u.req.is_u.macaddr, IEEE80211_ADDR_LEN); in list_stations()
4185 printf("%-17.17s %4s %5s %5s %7s %4s %4s %4s %6s %6s\n" in list_stations()
4198 printf("%-17.17s %4s %4s %4s %4s %4s %6s %6s %4s %-12s\n" in list_stations()
4210 cp = (const uint8_t *) u.req.info; in list_stations()
4215 if (si->isi_len < sizeof(*si)) in list_stations()
4220 si->isi_macaddr) in list_stations()
4221 , ieee80211_mhz2ieee(si->isi_freq, in list_stations()
4222 si->isi_flags) in list_stations()
4223 , si->isi_localid in list_stations()
4224 , si->isi_peerid in list_stations()
4225 , mesh_linkstate_string(si->isi_peerstate) in list_stations()
4226 , si->isi_txmbps/2 in list_stations()
4227 , si->isi_rssi/2. in list_stations()
4228 , si->isi_inact in list_stations()
4233 printf("%s %4u %4d %3dM %4.1f %4d %6d %6d %-4.4s %-12.12s" in list_stations()
4235 si->isi_macaddr) in list_stations()
4236 , IEEE80211_AID(si->isi_associd) in list_stations()
4237 , ieee80211_mhz2ieee(si->isi_freq, in list_stations()
4238 si->isi_flags) in list_stations()
4239 , si->isi_txmbps/2 in list_stations()
4240 , si->isi_rssi/2. in list_stations()
4241 , si->isi_inact in list_stations()
4244 , getcaps(si->isi_capinfo) in list_stations()
4245 , getflags(si->isi_state) in list_stations()
4247 printies(ctx, cp + si->isi_ie_off, si->isi_ie_len, 24); in list_stations()
4248 printmimo(&si->isi_mimo); in list_stations()
4250 cp += si->isi_len, len -= si->isi_len; in list_stations()
4259 [1] = "OPEN-TX", in mesh_linkstate_string()
4260 [2] = "OPEN-RX", in mesh_linkstate_string()
4261 [3] = "CONF-RX", in mesh_linkstate_string()
4300 strlcat(buf, " vht/80-", bsize); in get_chaninfo()
4307 strlcat(buf, " vht/40-", bsize); in get_chaninfo()
4315 strlcat(buf, " ht/40-", bsize); in get_chaninfo()
4333 printf("Channel %3u : %u%c%c%c%c%c MHz%-14.14s", in print_chaninfo()
4334 ieee80211_mhz2ieee(c->ic_freq, c->ic_flags), c->ic_freq, in print_chaninfo()
4342 printf("Channel %3u : %u%c MHz%-14.14s", in print_chaninfo()
4343 ieee80211_mhz2ieee(c->ic_freq, c->ic_flags), c->ic_freq, in print_chaninfo()
4396 achans->ic_nchans = 0; in print_channels()
4403 for (i = 0; i < chans->ic_nchans; i++) { in print_channels()
4404 c = &chans->ic_chans[i]; in print_channels()
4405 if (!isset(active.ic_channels, c->ic_ieee)) in print_channels()
4413 if (isset(reported, c->ic_ieee) && !verb) { in print_channels()
4415 achans->ic_chans[achans->ic_nchans-1] = *c; in print_channels()
4417 achans->ic_chans[achans->ic_nchans++] = *c; in print_channels()
4418 setbit(reported, c->ic_ieee); in print_channels()
4422 for (i = 0; i < chans->ic_nchans; i++) { in print_channels()
4423 c = &chans->ic_chans[i]; in print_channels()
4425 if (isset(reported, c->ic_ieee) && !verb) { in print_channels()
4428 &achans->ic_chans[achans->ic_nchans-1]; in print_channels()
4432 achans->ic_chans[achans->ic_nchans++] = *c; in print_channels()
4433 setbit(reported, c->ic_ieee); in print_channels()
4437 half = achans->ic_nchans / 2; in print_channels()
4438 if (achans->ic_nchans % 2) in print_channels()
4441 for (i = 0; i < achans->ic_nchans / 2; i++) { in print_channels()
4442 print_chaninfo(&achans->ic_chans[i], verb); in print_channels()
4443 print_chaninfo(&achans->ic_chans[half+i], verb); in print_channels()
4446 if (achans->ic_nchans % 2) { in print_channels()
4447 print_chaninfo(&achans->ic_chans[i], verb); in print_channels()
4457 print_channels(ctx, chaninfo, allchans, ctx->args->verbose); in list_channels()
4464 c->ic_ieee, c->ic_freq, in print_txpow()
4465 c->ic_maxpower/2., c->ic_maxregpower); in print_txpow()
4473 c->ic_minpower/2., c->ic_maxpower/2., c->ic_maxregpower); in print_txpow_verbose()
4474 /* indicate where regulatory cap limits power use */ in print_txpow_verbose()
4475 if (c->ic_maxpower > 2*c->ic_maxregpower) in print_txpow_verbose()
4491 achans->ic_nchans = 0; in list_txpow()
4493 for (i = 0; i < chaninfo->ic_nchans; i++) { in list_txpow()
4494 c = &chaninfo->ic_chans[i]; in list_txpow()
4496 if (isset(reported, c->ic_ieee) && !ctx->args->verbose) { in list_txpow()
4498 assert(achans->ic_nchans > 0); in list_txpow()
4499 prev = &achans->ic_chans[achans->ic_nchans-1]; in list_txpow()
4500 /* display highest power on channel */ in list_txpow()
4501 if (c->ic_maxpower > prev->ic_maxpower) in list_txpow()
4504 achans->ic_chans[achans->ic_nchans++] = *c; in list_txpow()
4505 setbit(reported, c->ic_ieee); in list_txpow()
4508 if (!ctx->args->verbose) { in list_txpow()
4509 half = achans->ic_nchans / 2; in list_txpow()
4510 if (achans->ic_nchans % 2) in list_txpow()
4513 for (i = 0; i < achans->ic_nchans / 2; i++) { in list_txpow()
4514 print_txpow(&achans->ic_chans[i]); in list_txpow()
4515 print_txpow(&achans->ic_chans[half+i]); in list_txpow()
4518 if (achans->ic_nchans % 2) { in list_txpow()
4519 print_txpow(&achans->ic_chans[i]); in list_txpow()
4523 for (i = 0; i < achans->ic_nchans; i++) { in list_txpow()
4524 print_txpow_verbose(&achans->ic_chans[i]); in list_txpow()
4540 const int verbose = ctx->args->verbose; in list_capabilities()
4548 dc->dc_chaninfo.ic_nchans = verbose ? MAXCHAN : 1; in list_capabilities()
4550 printb("drivercaps", dc->dc_drivercaps, IEEE80211_C_BITS); in list_capabilities()
4551 if (dc->dc_cryptocaps != 0 || verbose) { in list_capabilities()
4553 printb("cryptocaps", dc->dc_cryptocaps, IEEE80211_CRYPTO_BITS); in list_capabilities()
4555 if (dc->dc_htcaps != 0 || verbose) { in list_capabilities()
4557 printb("htcaps", dc->dc_htcaps, IEEE80211_HTCAP_BITS); in list_capabilities()
4559 if (dc->dc_vhtcaps != 0 || verbose) { in list_capabilities()
4561 printb("vhtcaps", dc->dc_vhtcaps, IEEE80211_VHTCAP_BITS); in list_capabilities()
4566 chaninfo = &dc->dc_chaninfo; /* XXX */ in list_capabilities()
4567 print_channels(ctx, &dc->dc_chaninfo, 1/*allchans*/, verbose); in list_capabilities()
4577 strlcpy(ireq.i_name, ctx->ifname, sizeof(ireq.i_name)); in get80211wme()
4584 return -1; in get80211wme()
4598 if (get80211wme(ctx, IEEE80211_IOC_WME_CWMIN, ac, &val) != -1) in list_wme_aci()
4600 if (get80211wme(ctx, IEEE80211_IOC_WME_CWMAX, ac, &val) != -1) in list_wme_aci()
4602 if (get80211wme(ctx, IEEE80211_IOC_WME_AIFS, ac, &val) != -1) in list_wme_aci()
4604 if (get80211wme(ctx, IEEE80211_IOC_WME_TXOPLIMIT, ac, &val) != -1) in list_wme_aci()
4606 if (get80211wme(ctx, IEEE80211_IOC_WME_ACM, ac, &val) != -1) { in list_wme_aci()
4609 else if (ctx->args->verbose) in list_wme_aci()
4610 printf(" -acm"); in list_wme_aci()
4614 if (get80211wme(ctx, IEEE80211_IOC_WME_ACKPOLICY, ac, &val) != -1) { in list_wme_aci()
4616 printf(" -ack"); in list_wme_aci()
4617 else if (ctx->args->verbose) in list_wme_aci()
4630 if (ctx->args->verbose) { in list_wme()
4660 if (rp->rssi == 0 && rp->rate == 0) in list_roam()
4666 if (rp->rssi & 1) in list_roam()
4667 LINE_CHECK("roam:%-7.7s rssi %2u.5dBm MCS %2u ", in list_roam()
4668 modename[mode], rp->rssi/2, in list_roam()
4669 rp->rate &~ IEEE80211_RATE_MCS); in list_roam()
4671 LINE_CHECK("roam:%-7.7s rssi %4udBm MCS %2u ", in list_roam()
4672 modename[mode], rp->rssi/2, in list_roam()
4673 rp->rate &~ IEEE80211_RATE_MCS); in list_roam()
4675 if (rp->rssi & 1) in list_roam()
4676 LINE_CHECK("roam:%-7.7s rssi %2u.5dBm rate %2u Mb/s", in list_roam()
4677 modename[mode], rp->rssi/2, rp->rate/2); in list_roam()
4679 LINE_CHECK("roam:%-7.7s rssi %4udBm rate %2u Mb/s", in list_roam()
4680 modename[mode], rp->rssi/2, rp->rate/2); in list_roam()
4685 /* XXX TODO: rate-to-string method... */
4709 if (tp->mgmtrate == 0 && tp->mcastrate == 0) in list_txparams()
4715 if (tp->ucastrate == IEEE80211_FIXED_RATE_NONE) in list_txparams()
4716 LINE_CHECK("%-7.7s ucast NONE mgmt %2u %s " in list_txparams()
4719 get_rate_value(tp->mgmtrate), in list_txparams()
4720 get_mcs_mbs_rate_str(tp->mgmtrate), in list_txparams()
4721 get_rate_value(tp->mcastrate), in list_txparams()
4722 get_mcs_mbs_rate_str(tp->mcastrate), in list_txparams()
4723 tp->maxretry); in list_txparams()
4725 LINE_CHECK("%-7.7s ucast %2u MCS mgmt %2u %s " in list_txparams()
4728 tp->ucastrate &~ IEEE80211_RATE_MCS, in list_txparams()
4729 get_rate_value(tp->mgmtrate), in list_txparams()
4730 get_mcs_mbs_rate_str(tp->mgmtrate), in list_txparams()
4731 get_rate_value(tp->mcastrate), in list_txparams()
4732 get_mcs_mbs_rate_str(tp->mcastrate), in list_txparams()
4733 tp->maxretry); in list_txparams()
4735 if (tp->ucastrate == IEEE80211_FIXED_RATE_NONE) in list_txparams()
4736 LINE_CHECK("%-7.7s ucast NONE mgmt %2u Mb/s " in list_txparams()
4739 tp->mgmtrate/2, in list_txparams()
4740 tp->mcastrate/2, tp->maxretry); in list_txparams()
4742 LINE_CHECK("%-7.7s ucast %2u Mb/s mgmt %2u Mb/s " in list_txparams()
4745 tp->ucastrate/2, tp->mgmtrate/2, in list_txparams()
4746 tp->mcastrate/2, tp->maxretry); in list_txparams()
4782 strlcpy(ireq.i_name, ctx->ifname, sizeof(ireq.i_name)); /* XXX ?? */ in list_mac()
4798 c = '-'; in list_mac()
4805 if (ctx->args->verbose || c == '?') in list_mac()
4813 if (!(ctx->args->verbose || c == '?')) in list_mac()
4837 if ((reg->regdomain != 0 && in print_regdomain()
4838 reg->regdomain != reg->country) || verb) { in print_regdomain()
4840 lib80211_regdomain_findbysku(getregdata(), reg->regdomain); in print_regdomain()
4842 LINE_CHECK("regdomain %d", reg->regdomain); in print_regdomain()
4844 LINE_CHECK("regdomain %s", rd->name); in print_regdomain()
4846 if (reg->country != 0 || verb) { in print_regdomain()
4848 lib80211_country_findbycc(getregdata(), reg->country); in print_regdomain()
4850 LINE_CHECK("country %d", reg->country); in print_regdomain()
4852 LINE_CHECK("country %s", cc->isoname); in print_regdomain()
4854 if (reg->location == 'I') in print_regdomain()
4856 else if (reg->location == 'O') in print_regdomain()
4860 if (reg->ecm) in print_regdomain()
4863 LINE_CHECK("-ecm"); in print_regdomain()
4877 print_regdomain(®domain, ctx->args->verbose); in list_regdomain()
4887 strlcpy(ireq.i_name, ctx->ifname, sizeof(ireq.i_name)); in list_mesh()
4895 printf("%-17.17s %-17.17s %4s %4s %4s %6s %s\n" in list_mesh()
4907 ether_ntoa((const struct ether_addr *)rt->imr_dest)); in list_mesh()
4909 ether_ntoa((const struct ether_addr *)rt->imr_nexthop), in list_mesh()
4910 rt->imr_nhops, rt->imr_metric, rt->imr_lifetime, in list_mesh()
4911 rt->imr_lastmseq, in list_mesh()
4912 (rt->imr_flags & IEEE80211_MESHRT_FLAGS_DISCOVER) ? in list_mesh()
4914 (rt->imr_flags & IEEE80211_MESHRT_FLAGS_VALID) ? in list_mesh()
4916 (rt->imr_flags & IEEE80211_MESHRT_FLAGS_PROXY) ? in list_mesh()
4918 (rt->imr_flags & IEEE80211_MESHRT_FLAGS_GATE) ? in list_mesh()
4926 int s = ctx->io_s; in set80211list()
4927 #define iseq(a,b) (strncasecmp(a,b,sizeof(b)-1) == 0) in set80211list()
4960 errx(1, "Don't know how to list %s for %s", arg, ctx->ifname); in set80211list()
4970 strlcpy(ifmr.ifm_name, ctx->ifname, sizeof(ifmr.ifm_name)); in get80211opmode()
4995 switch (ireq->i_val) {
4997 ireq->i_type = keylenop;
4998 if (ioctl(s, SIOCG80211, ireq) != -1)
4999 printf("WEP-%s",
5000 ireq->i_len <= 5 ? "40" :
5001 ireq->i_len <= 13 ? "104" : "128");
5009 printf("AES-OCB");
5012 printf("AES-CCM");
5015 printf("AES-GCM");
5024 printf("UNKNOWN (0x%x)", ireq->i_val);
5045 u_int keylen = ik->ik_keylen; in printkey()
5047 const int verbose = ctx->args->verbose; in printkey()
5048 const bool printkeys = ctx->args->printkeys; in printkey()
5052 (memcmp(ik->ik_keydata, zerodata, keylen) != 0 || verbose); in printkey()
5055 printkey_index(ik->ik_keyix, keyix, sizeof(keyix)); in printkey()
5056 switch (ik->ik_type) { in printkey()
5060 keylen <= 5 ? "40-bit" : in printkey()
5061 keylen <= 13 ? "104-bit" : "128-bit"); in printkey()
5065 keylen -= 128/8; /* ignore MIC for now */ in printkey()
5066 LINE_CHECK("TKIP %s:%u-bit", keyix, 8*keylen); in printkey()
5069 LINE_CHECK("AES-OCB %s:%u-bit", keyix, 8*keylen); in printkey()
5072 LINE_CHECK("AES-CCM %s:%u-bit", keyix, 8*keylen); in printkey()
5075 LINE_CHECK("AES-GCM %s:%u-bit", keyix, 8*keylen); in printkey()
5078 LINE_CHECK("CKIP %s:%u-bit", keyix, 8*keylen); in printkey()
5081 LINE_CHECK("NULL %s:%u-bit", keyix, 8*keylen); in printkey()
5084 LINE_CHECK("UNKNOWN (0x%x) %s:%u-bit", in printkey()
5085 ik->ik_type, keyix, 8*keylen); in printkey()
5093 printf("%02x", ik->ik_keydata[i]); in printkey()
5095 if (ik->ik_type != IEEE80211_CIPHER_WEP && in printkey()
5096 (ik->ik_keyrsc != 0 || verbose)) in printkey()
5097 printf(" rsc %ju", (uintmax_t)ik->ik_keyrsc); in printkey()
5098 if (ik->ik_type != IEEE80211_CIPHER_WEP && in printkey()
5099 (ik->ik_keytsc != 0 || verbose)) in printkey()
5100 printf(" tsc %ju", (uintmax_t)ik->ik_keytsc); in printkey()
5101 if (ik->ik_flags != 0 && verbose) { in printkey()
5104 if (ik->ik_flags & IEEE80211_KEY_XMIT) in printkey()
5106 if (ik->ik_flags & IEEE80211_KEY_RECV) in printkey()
5108 if (ik->ik_flags & IEEE80211_KEY_DEFAULT) in printkey()
5136 strlcpy(ireq.i_name, ctx->ifname, sizeof(ireq.i_name)); in getid()
5142 return -1; in getid()
5152 strlcpy(ireq.i_name, ctx->ifname, sizeof(ireq.i_name)); in getdevicename()
5154 ireq.i_val = -1; in getdevicename()
5158 return (-1); in getdevicename()
5166 int s = ctx->io_s; in ieee80211_status()
5175 const int verbose = ctx->args->verbose; in ieee80211_status()
5177 if (getid(ctx, -1, data, sizeof(data), &len, 0) < 0) { in ieee80211_status()
5212 if (c->ic_freq != IEEE80211_CHAN_ANY) { in ieee80211_status()
5214 printf(" channel %d (%u MHz%s)", c->ic_ieee, c->ic_freq, in ieee80211_status()
5225 if (get80211len(ctx, IEEE80211_IOC_STATIONNAME, data, sizeof(data), &len) != -1) { in ieee80211_status()
5236 if (get80211val(ctx, IEEE80211_IOC_AUTHMODE, &val) != -1) { in ieee80211_status()
5275 if (get80211val(ctx, IEEE80211_IOC_WPS, &val) != -1) { in ieee80211_status()
5279 LINE_CHECK("-wps"); in ieee80211_status()
5281 if (get80211val(ctx, IEEE80211_IOC_TSN, &val) != -1) { in ieee80211_status()
5285 LINE_CHECK("-tsn"); in ieee80211_status()
5287 if (ioctl(s, IEEE80211_IOC_COUNTERMEASURES, &val) != -1) { in ieee80211_status()
5291 LINE_CHECK("-countermeasures"); in ieee80211_status()
5296 if (ioctl(s, SIOCG80211, &ireq) != -1) { in ieee80211_status()
5300 if (ioctl(s, SIOCG80211, &ireq) != -1) { in ieee80211_status()
5307 if (ioctl(s, SIOCG80211, &ireq) != -1) { in ieee80211_status()
5314 if (ioctl(s, SIOCG80211, &ireq) != -1) { in ieee80211_status()
5321 if (ioctl(s, SIOCG80211, &ireq) != -1) { in ieee80211_status()
5326 if (get80211val(ctx, IEEE80211_IOC_WEP, &wepmode) != -1 && in ieee80211_status()
5353 if (val != -1) in ieee80211_status()
5399 if (get80211val(ctx, IEEE80211_IOC_POWERSAVE, &val) != -1 && in ieee80211_status()
5413 LINE_CHECK("powersavemode PSP-CAM"); in ieee80211_status()
5416 if (get80211val(ctx, IEEE80211_IOC_POWERSAVESLEEP, &val) != -1) in ieee80211_status()
5421 if (get80211val(ctx, IEEE80211_IOC_TXPOWER, &val) != -1) { in ieee80211_status()
5428 if (get80211val(ctx, IEEE80211_IOC_TXPOWMAX, &val) != -1) in ieee80211_status()
5432 if (get80211val(ctx, IEEE80211_IOC_DOTD, &val) != -1) { in ieee80211_status()
5436 LINE_CHECK("-dotd"); in ieee80211_status()
5439 if (get80211val(ctx, IEEE80211_IOC_RTSTHRESHOLD, &val) != -1) { in ieee80211_status()
5444 if (get80211val(ctx, IEEE80211_IOC_FRAGTHRESHOLD, &val) != -1) { in ieee80211_status()
5449 if (get80211val(ctx, IEEE80211_IOC_BMISSTHRESHOLD, &val) != -1) { in ieee80211_status()
5458 printrate("ucastrate", tp->ucastrate, in ieee80211_status()
5460 printrate("mcastrate", tp->mcastrate, 2*1, in ieee80211_status()
5462 printrate("mgmtrate", tp->mgmtrate, 2*1, in ieee80211_status()
5464 if (tp->maxretry != 6) /* XXX */ in ieee80211_status()
5465 LINE_CHECK("maxretry %d", tp->maxretry); in ieee80211_status()
5471 bgscaninterval = -1; in ieee80211_status()
5474 if (get80211val(ctx, IEEE80211_IOC_SCANVALID, &val) != -1) { in ieee80211_status()
5480 if (get80211val(ctx, IEEE80211_IOC_BGSCAN, &bgscan) != -1) { in ieee80211_status()
5484 LINE_CHECK("-bgscan"); in ieee80211_status()
5487 if (bgscaninterval != -1) in ieee80211_status()
5489 if (get80211val(ctx, IEEE80211_IOC_BGSCAN_IDLE, &val) != -1) in ieee80211_status()
5494 if (rp->rssi & 1) in ieee80211_status()
5495 LINE_CHECK("roam:rssi %u.5", rp->rssi/2); in ieee80211_status()
5497 LINE_CHECK("roam:rssi %u", rp->rssi/2); in ieee80211_status()
5499 (rp->rate & IEEE80211_RATE_MCS) ? "MCS " : "", in ieee80211_status()
5500 get_rate_value(rp->rate)); in ieee80211_status()
5509 if (get80211val(ctx, IEEE80211_IOC_PUREG, &val) != -1) { in ieee80211_status()
5513 LINE_CHECK("-pureg"); in ieee80211_status()
5515 if (get80211val(ctx, IEEE80211_IOC_PROTMODE, &val) != -1) { in ieee80211_status()
5538 LINE_CHECK("-ht"); in ieee80211_status()
5548 if (get80211val(ctx, IEEE80211_IOC_HTCOMPAT, &val) != -1) { in ieee80211_status()
5550 LINE_CHECK("-htcompat"); in ieee80211_status()
5554 if (get80211val(ctx, IEEE80211_IOC_AMPDU, &val) != -1) { in ieee80211_status()
5557 LINE_CHECK("-ampdu"); in ieee80211_status()
5560 LINE_CHECK("ampdutx -ampdurx"); in ieee80211_status()
5563 LINE_CHECK("-ampdutx ampdurx"); in ieee80211_status()
5572 if (get80211val(ctx, IEEE80211_IOC_AMPDU_LIMIT, &val) != -1) { in ieee80211_status()
5589 if (get80211val(ctx, IEEE80211_IOC_AMPDU_DENSITY, &val) != -1) { in ieee80211_status()
5618 if (get80211val(ctx, IEEE80211_IOC_AMSDU, &val) != -1) { in ieee80211_status()
5621 LINE_CHECK("-amsdu"); in ieee80211_status()
5624 LINE_CHECK("amsdutx -amsdurx"); in ieee80211_status()
5627 LINE_CHECK("-amsdutx amsdurx"); in ieee80211_status()
5636 if (get80211val(ctx, IEEE80211_IOC_SHORTGI, &val) != -1) { in ieee80211_status()
5640 LINE_CHECK("-shortgi"); in ieee80211_status()
5642 if (get80211val(ctx, IEEE80211_IOC_HTPROTMODE, &val) != -1) { in ieee80211_status()
5650 if (get80211val(ctx, IEEE80211_IOC_PUREN, &val) != -1) { in ieee80211_status()
5654 LINE_CHECK("-puren"); in ieee80211_status()
5656 if (get80211val(ctx, IEEE80211_IOC_SMPS, &val) != -1) { in ieee80211_status()
5662 LINE_CHECK("-smps"); in ieee80211_status()
5664 if (get80211val(ctx, IEEE80211_IOC_RIFS, &val) != -1) { in ieee80211_status()
5668 LINE_CHECK("-rifs"); in ieee80211_status()
5672 if (get80211val(ctx, IEEE80211_IOC_STBC, &val) != -1) { in ieee80211_status()
5675 LINE_CHECK("-stbc"); in ieee80211_status()
5678 LINE_CHECK("stbctx -stbcrx"); in ieee80211_status()
5681 LINE_CHECK("-stbctx stbcrx"); in ieee80211_status()
5689 if (get80211val(ctx, IEEE80211_IOC_LDPC, &val) != -1) { in ieee80211_status()
5692 LINE_CHECK("-ldpc"); in ieee80211_status()
5695 LINE_CHECK("ldpctx -ldpcrx"); in ieee80211_status()
5698 LINE_CHECK("-ldpctx ldpcrx"); in ieee80211_status()
5706 if (get80211val(ctx, IEEE80211_IOC_UAPSD, &val) != -1) { in ieee80211_status()
5709 LINE_CHECK("-uapsd"); in ieee80211_status()
5726 LINE_CHECK("-vht40"); in ieee80211_status()
5730 LINE_CHECK("-vht80"); in ieee80211_status()
5734 LINE_CHECK("-vht160"); in ieee80211_status()
5738 LINE_CHECK("-vht80p80"); in ieee80211_status()
5740 LINE_CHECK("-vht"); in ieee80211_status()
5743 if (get80211val(ctx, IEEE80211_IOC_WME, &wme) != -1) { in ieee80211_status()
5747 LINE_CHECK("-wme"); in ieee80211_status()
5751 if (get80211val(ctx, IEEE80211_IOC_BURST, &val) != -1) { in ieee80211_status()
5755 LINE_CHECK("-burst"); in ieee80211_status()
5758 if (get80211val(ctx, IEEE80211_IOC_FF, &val) != -1) { in ieee80211_status()
5762 LINE_CHECK("-ff"); in ieee80211_status()
5764 if (get80211val(ctx, IEEE80211_IOC_TURBOP, &val) != -1) { in ieee80211_status()
5768 LINE_CHECK("-dturbo"); in ieee80211_status()
5770 if (get80211val(ctx, IEEE80211_IOC_DWDS, &val) != -1) { in ieee80211_status()
5774 LINE_CHECK("-dwds"); in ieee80211_status()
5778 if (get80211val(ctx, IEEE80211_IOC_HIDESSID, &val) != -1) { in ieee80211_status()
5782 LINE_CHECK("-hidessid"); in ieee80211_status()
5784 if (get80211val(ctx, IEEE80211_IOC_APBRIDGE, &val) != -1) { in ieee80211_status()
5786 LINE_CHECK("-apbridge"); in ieee80211_status()
5790 if (get80211val(ctx, IEEE80211_IOC_DTIM_PERIOD, &val) != -1) in ieee80211_status()
5793 if (get80211val(ctx, IEEE80211_IOC_DOTH, &val) != -1) { in ieee80211_status()
5795 LINE_CHECK("-doth"); in ieee80211_status()
5799 if (get80211val(ctx, IEEE80211_IOC_DFS, &val) != -1) { in ieee80211_status()
5801 LINE_CHECK("-dfs"); in ieee80211_status()
5805 if (get80211val(ctx, IEEE80211_IOC_INACTIVITY, &val) != -1) { in ieee80211_status()
5807 LINE_CHECK("-inact"); in ieee80211_status()
5812 if (get80211val(ctx, IEEE80211_IOC_ROAMING, &val) != -1) { in ieee80211_status()
5834 if (get80211val(ctx, IEEE80211_IOC_TDMA_SLOT, &val) != -1) in ieee80211_status()
5836 if (get80211val(ctx, IEEE80211_IOC_TDMA_SLOTCNT, &val) != -1) in ieee80211_status()
5838 if (get80211val(ctx, IEEE80211_IOC_TDMA_SLOTLEN, &val) != -1) in ieee80211_status()
5840 if (get80211val(ctx, IEEE80211_IOC_TDMA_BINTERVAL, &val) != -1) in ieee80211_status()
5842 } else if (get80211val(ctx, IEEE80211_IOC_BEACON_INTERVAL, &val) != -1) { in ieee80211_status()
5854 if (get80211val(ctx, IEEE80211_IOC_MESH_TTL, &val) != -1) { in ieee80211_status()
5857 if (get80211val(ctx, IEEE80211_IOC_MESH_AP, &val) != -1) { in ieee80211_status()
5861 LINE_CHECK("-meshpeering"); in ieee80211_status()
5863 if (get80211val(ctx, IEEE80211_IOC_MESH_FWRD, &val) != -1) { in ieee80211_status()
5867 LINE_CHECK("-meshforward"); in ieee80211_status()
5869 if (get80211val(ctx, IEEE80211_IOC_MESH_GATE, &val) != -1) { in ieee80211_status()
5873 LINE_CHECK("-meshgate"); in ieee80211_status()
5876 &len) != -1) { in ieee80211_status()
5881 &len) != -1) { in ieee80211_status()
5885 if (get80211val(ctx, IEEE80211_IOC_HWMP_ROOTMODE, &val) != -1) { in ieee80211_status()
5904 if (get80211val(ctx, IEEE80211_IOC_HWMP_MAXHOPS, &val) != -1) { in ieee80211_status()
5922 return (lib80211_get80211(ctx->io_s, ctx->ifname, type, data, len)); in get80211()
5929 return (lib80211_get80211len(ctx->io_s, ctx->ifname, type, data, len, plen)); in get80211len()
5936 return (lib80211_get80211val(ctx->io_s, ctx->ifname, type, val)); in get80211val()
5944 ret = lib80211_set80211(ctx->io_s, ctx->ifname, type, val, len, data); in set80211()
5986 #define tohex(x) (isdigit(x) ? (x) - '0' : tolower(x) - 'a' + 10) in get_string()
5994 len = p - buf; in get_string()
5995 /* The string "-" is treated as the empty string. */ in get_string()
5996 if (!hexstr && len == 1 && buf[0] == '-') { in get_string()
6000 memset(p, 0, *lenp - len); in get_string()
6016 utf8 = strncmp("UTF-8", nl_langinfo(CODESET), 5) == 0; in print_string()
6060 regdomain.regdomain = rd->sku; in setdefregdomain()
6061 if (rd->cc != NULL) in setdefregdomain()
6092 ifr->ifr_data = (caddr_t) ¶ms; in wlan_create()
6112 memcpy(params.icp_bssid, ea->octet, IEEE80211_ADDR_LEN); in set80211clone_wlanbssid()
6123 memcpy(params.icp_macaddr, ea->octet, IEEE80211_ADDR_LEN); in set80211clone_wlanaddr()
6130 #define iseq(a,b) (strncasecmp(a,b,sizeof(b)-1) == 0) in set80211clone_wlanmode()
6133 else if (iseq(arg, "ahdemo") || iseq(arg, "adhoc-demo")) in set80211clone_wlanmode()
6149 errx(1, "Don't know to create %s for %s", arg, ctx->ifname); in set80211clone_wlanmode()
6191 DEF_CMD("-powersave", 0, set80211powersave),
6195 DEF_CMD("-wep", 0, set80211wep),
6200 DEF_CMD("-nwkey", 0, set80211wep), /* NetBSD */
6206 DEF_CMD("-wme", 0, set80211wme),
6208 DEF_CMD("-wmm", 0, set80211wme),
6210 DEF_CMD("-hidessid", 0, set80211hidessid),
6212 DEF_CMD("-apbridge", 0, set80211apbridge),
6223 DEF_CMD_ARG("-acm", set80211noacm),
6225 DEF_CMD_ARG("-ack", set80211noackpolicy),
6242 DEF_CMD("-pureg", 0, set80211pureg),
6244 DEF_CMD("-ff", 0, set80211fastframes),
6246 DEF_CMD("-dturbo", 0, set80211dturbo),
6248 DEF_CMD("-bgscan", 0, set80211bgscan),
6253 DEF_CMD("-quiet", 0, set80211quiet),
6267 DEF_CMD("-burst", 0, set80211burst),
6271 DEF_CMD("-shortgi", 0, set80211shortgi),
6273 DEF_CMD("-ampdurx", -2, set80211ampdu),
6275 DEF_CMD("-ampdutx", -1, set80211ampdu),
6277 DEF_CMD("-ampdu", -3, set80211ampdu),
6281 DEF_CMD("-amsdurx", -2, set80211amsdu),
6283 DEF_CMD("-amsdutx", -1, set80211amsdu),
6285 DEF_CMD("-amsdu", -3, set80211amsdu),
6288 DEF_CMD("-stbcrx", -2, set80211stbc),
6290 DEF_CMD("-stbctx", -1, set80211stbc),
6292 DEF_CMD("-stbc", -3, set80211stbc),
6294 DEF_CMD("-ldpcrx", -2, set80211ldpc),
6296 DEF_CMD("-ldpctx", -1, set80211ldpc),
6298 DEF_CMD("-ldpc", -3, set80211ldpc),
6300 DEF_CMD("-uapsd", 0, set80211uapsd),
6302 DEF_CMD("-puren", 0, set80211puren),
6304 DEF_CMD("-doth", 0, set80211doth),
6306 DEF_CMD("-dfs", 0, set80211dfs),
6308 DEF_CMD("-htcompat", 0, set80211htcompat),
6310 DEF_CMD("-dwds", 0, set80211dwds),
6312 DEF_CMD("-inact", 0, set80211inact),
6314 DEF_CMD("-tsn", 0, set80211tsn),
6318 DEF_CMD("-indoor", 'O', set80211location),
6320 DEF_CMD("-outdoor", 'I', set80211location),
6323 DEF_CMD("-ecm", 0, set80211ecm),
6325 DEF_CMD("-dotd", 0, set80211dotd),
6328 DEF_CMD("-ht20", 0, set80211htconf),
6330 DEF_CMD("-ht40", 0, set80211htconf),
6332 DEF_CMD("-ht", 0, set80211htconf),
6334 DEF_CMD("-vht", -IEEE80211_FVHT_VHT, set80211vhtconf),
6336 DEF_CMD("-vht40", -IEEE80211_FVHT_USEVHT40, set80211vhtconf),
6338 DEF_CMD("-vht80", -IEEE80211_FVHT_USEVHT80, set80211vhtconf),
6340 DEF_CMD("-vht160", -IEEE80211_FVHT_USEVHT160, set80211vhtconf),
6342 DEF_CMD("-vht80p80", -IEEE80211_FVHT_USEVHT80P80, set80211vhtconf),
6344 DEF_CMD("-vhtstbctx", -IEEE80211_FVHT_STBC_TX, set80211vhtconf),
6346 DEF_CMD("-vhtstbcrx", -IEEE80211_FVHT_STBC_RX, set80211vhtconf),
6348 DEF_CMD("-vhtstbc", -(IEEE80211_FVHT_STBC_TX|IEEE80211_FVHT_STBC_RX), set80211vhtconf),
6350 DEF_CMD("-rifs", 0, set80211rifs),
6353 DEF_CMD("-smps", IEEE80211_HTCAP_SMPS_OFF, set80211smps),
6364 DEF_CMD("-meshforward", 0, set80211meshforward),
6366 DEF_CMD("-meshgate", 0, set80211meshgate),
6368 DEF_CMD("-meshpeering", 0, set80211meshpeering),
6383 DEF_CLONE_CMD("-beacons", 0, set80211clone_beacons),
6385 DEF_CLONE_CMD("-bssid", 0, set80211clone_bssid),
6387 DEF_CLONE_CMD("-wdslegacy", 0, set80211clone_wdslegacy),