Lines Matching +full:half +full:- +full:dbm

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
4 * Copyright (c) 2002-2008 Sam Leffler, Errno Consulting
56 * Roaming-related defaults. RSSI thresholds are as returned by the
57 * driver (.5dBm). Transmit rate thresholds are IEEE rate codes (i.e
63 #define ROAM_RSSI_11BONLY_DEFAULT 14 /* 11b-only bss */
67 #define ROAM_RATE_11BONLY_DEFAULT 2*1 /* 11b-only bss */
68 #define ROAM_RATE_HALF_DEFAULT 2*6 /* half-width 11a/g bss */
69 #define ROAM_RATE_QUARTER_DEFAULT 2*3 /* quarter-width 11a/g bss */
80 if (ic->ic_scan_methods == NULL) in ieee80211_scan_attach()
83 ic->ic_scan_methods->sc_attach(ic); in ieee80211_scan_attach()
96 ic->ic_scan_methods->sc_detach(ic); in ieee80211_scan_detach()
130 struct ieee80211com *ic = vap->iv_ic; in ieee80211_scan_vattach()
133 vap->iv_bgscanidle = (IEEE80211_BGSCAN_IDLE_DEFAULT*1000)/hz; in ieee80211_scan_vattach()
134 vap->iv_bgscanintvl = IEEE80211_BGSCAN_INTVAL_DEFAULT*hz; in ieee80211_scan_vattach()
135 vap->iv_scanvalid = IEEE80211_SCAN_VALID_DEFAULT*hz; in ieee80211_scan_vattach()
137 vap->iv_roaming = IEEE80211_ROAMING_AUTO; in ieee80211_scan_vattach()
139 memset(vap->iv_roamparms, 0, sizeof(vap->iv_roamparms)); in ieee80211_scan_vattach()
141 if (isclr(ic->ic_modecaps, m)) in ieee80211_scan_vattach()
144 memcpy(&vap->iv_roamparms[m], &defroam[m], sizeof(defroam[m])); in ieee80211_scan_vattach()
147 ic->ic_scan_methods->sc_vattach(vap); in ieee80211_scan_vattach()
153 struct ieee80211com *ic = vap->iv_ic; in ieee80211_scan_vdetach()
157 ss = ic->ic_scan; in ieee80211_scan_vdetach()
159 ic->ic_scan_methods->sc_vdetach(vap); in ieee80211_scan_vdetach()
161 if (ss != NULL && ss->ss_vap == vap) { in ieee80211_scan_vdetach()
162 if (ss->ss_ops != NULL) { in ieee80211_scan_vdetach()
163 ss->ss_ops->scan_detach(ss); in ieee80211_scan_vdetach()
164 ss->ss_ops = NULL; in ieee80211_scan_vdetach()
166 ss->ss_vap = NULL; in ieee80211_scan_vdetach()
172 * Simple-minded scanner module support.
227 * is transitioned to RUN state w/o scanning--e.g. when
236 struct ieee80211com *ic = vap->iv_ic; in ieee80211_scan_update_locked()
237 struct ieee80211_scan_state *ss = ic->ic_scan; in ieee80211_scan_update_locked()
242 if (ss->ss_vap != vap || ss->ss_ops != scan) { in ieee80211_scan_update_locked()
246 ss->ss_vap != NULL ? in ieee80211_scan_update_locked()
247 ieee80211_get_vap_ifname(ss->ss_vap) : "none", in ieee80211_scan_update_locked()
248 ss->ss_vap != NULL ? in ieee80211_scan_update_locked()
249 ieee80211_opmode_name[ss->ss_vap->iv_opmode] : "none", in ieee80211_scan_update_locked()
251 ieee80211_opmode_name[vap->iv_opmode]); in ieee80211_scan_update_locked()
254 ss->ss_vap = vap; in ieee80211_scan_update_locked()
255 if (ss->ss_ops != scan) { in ieee80211_scan_update_locked()
264 if (scan == NULL || ss->ss_ops == NULL || in ieee80211_scan_update_locked()
265 ss->ss_ops->scan_attach != scan->scan_attach) { in ieee80211_scan_update_locked()
266 if (ss->ss_ops != NULL) in ieee80211_scan_update_locked()
267 ss->ss_ops->scan_detach(ss); in ieee80211_scan_update_locked()
268 if (scan != NULL && !scan->scan_attach(ss)) { in ieee80211_scan_update_locked()
274 ss->ss_ops = scan; in ieee80211_scan_update_locked()
282 struct ieee80211com *ic = ss->ss_ic; in ieee80211_scan_dump_channels()
287 for (i = ss->ss_next; i < ss->ss_last; i++) { in ieee80211_scan_dump_channels()
288 const struct ieee80211_channel *c = ss->ss_chans[i]; in ieee80211_scan_dump_channels()
299 struct ieee80211vap *vap = ss->ss_vap; in ieee80211_scan_dump()
304 ticks_to_msecs(ss->ss_mindwell), ticks_to_msecs(ss->ss_maxdwell)); in ieee80211_scan_dump()
319 memcpy(ss->ss_ssid, ssids, nssid * sizeof(ssids[0])); in ieee80211_scan_copy_ssid()
320 ss->ss_nssid = nssid; in ieee80211_scan_copy_ssid()
332 struct ieee80211com *ic = vap->iv_ic; in ieee80211_start_scan()
334 scan = ieee80211_scanner_get(vap->iv_opmode); in ieee80211_start_scan()
338 __func__, ieee80211_opmode_name[vap->iv_opmode]); in ieee80211_start_scan()
343 return ic->ic_scan_methods->sc_start_scan(scan, vap, flags, duration, in ieee80211_start_scan()
356 struct ieee80211com *ic = vap->iv_ic; in ieee80211_check_scan()
357 struct ieee80211_scan_state *ss = ic->ic_scan; in ieee80211_check_scan()
361 scan = ieee80211_scanner_get(vap->iv_opmode); in ieee80211_check_scan()
365 __func__, vap->iv_opmode); in ieee80211_check_scan()
387 if (ss->ss_ops != scan) { in ieee80211_check_scan()
388 /* XXX re-use cache contents? e.g. adhoc<->sta */ in ieee80211_check_scan()
397 result = ic->ic_scan_methods->sc_check_scan(scan, vap, flags, duration, in ieee80211_check_scan()
415 vap->iv_des_nssid, vap->iv_des_ssid); in ieee80211_check_scan_current()
425 struct ieee80211com *ic = vap->iv_ic; in ieee80211_bg_scan()
436 if ((vap->iv_flags & IEEE80211_F_BGSCAN) == 0) { in ieee80211_bg_scan()
443 scan = ieee80211_scanner_get(vap->iv_opmode); in ieee80211_bg_scan()
447 __func__, vap->iv_opmode); in ieee80211_bg_scan()
457 return (ic->ic_scan_methods->sc_bg_scan(scan, vap, flags)); in ieee80211_bg_scan()
466 struct ieee80211com *ic = vap->iv_ic; in ieee80211_cancel_scan()
468 ic->ic_scan_methods->sc_cancel_scan(vap); in ieee80211_cancel_scan()
480 struct ieee80211com *ic = vap->iv_ic; in ieee80211_cancel_anyscan()
482 ic->ic_scan_methods->sc_cancel_anyscan(vap); in ieee80211_cancel_anyscan()
488 * (e.g. for firmware-based devices).
493 struct ieee80211com *ic = vap->iv_ic; in ieee80211_scan_next()
495 ic->ic_scan_methods->sc_scan_next(vap); in ieee80211_scan_next()
501 * (e.g. for firmware-based devices).
506 struct ieee80211com *ic = vap->iv_ic; in ieee80211_scan_done()
512 ss = ic->ic_scan; in ieee80211_scan_done()
513 ss->ss_next = ss->ss_last; /* all channels are complete */ in ieee80211_scan_done()
515 ic->ic_scan_methods->sc_scan_done(vap); in ieee80211_scan_done()
522 * If the channel is not marked passive-only then send
530 struct ieee80211com *ic = vap->iv_ic; in ieee80211_probe_curchan()
532 if ((ic->ic_curchan->ic_flags & IEEE80211_CHAN_PASSIVE) && !force) { in ieee80211_probe_curchan()
533 ic->ic_flags_ext |= IEEE80211_FEXT_PROBECHAN; in ieee80211_probe_curchan()
537 ic->ic_scan_methods->sc_scan_probe_curchan(vap, force); in ieee80211_probe_curchan()
548 if (cie->len < 3) { in dump_country()
549 net80211_printf(" <bogus country ie, len %d>", cie->len); in dump_country()
552 net80211_printf(" country [%c%c%c", cie->cc[0], cie->cc[1], cie->cc[2]); in dump_country()
553 nbands = (cie->len - 3) / sizeof(cie->band[0]); in dump_country()
555 schan = cie->band[i].schan; in dump_country()
556 nchan = cie->band[i].nchan; in dump_country()
558 net80211_printf(" %u-%u,%u", schan, schan + nchan-1, in dump_country()
559 cie->band[i].maxtxpwr); in dump_country()
561 net80211_printf(" %u,%u", schan, cie->band[i].maxtxpwr); in dump_country()
574 ieee80211_mgt_subtype_name(subtype), sp->chan, sp->bchan); in ieee80211_scan_dump_probe_beacon()
575 ieee80211_print_essid(sp->ssid + 2, sp->ssid[1]); in ieee80211_scan_dump_probe_beacon()
580 ether_sprintf(mac), sp->capinfo, sp->bintval, sp->erp); in ieee80211_scan_dump_probe_beacon()
581 if (sp->country != NULL) in ieee80211_scan_dump_probe_beacon()
582 dump_country(sp->country); in ieee80211_scan_dump_probe_beacon()
598 struct ieee80211com *ic = vap->iv_ic; in ieee80211_add_scan()
600 return (ic->ic_scan_methods->sc_add_scan(vap, curchan, sp, wh, subtype, in ieee80211_add_scan()
606 * timer (XXX should be self-contained).
611 struct ieee80211_scan_state *ss = ic->ic_scan; in ieee80211_scan_timeout()
613 if (ss->ss_ops != NULL) in ieee80211_scan_timeout()
614 ss->ss_ops->scan_age(ss); in ieee80211_scan_timeout()
624 struct ieee80211_scan_state *ss = vap->iv_ic->ic_scan; in ieee80211_scan_assoc_success()
626 if (ss->ss_ops != NULL) { in ieee80211_scan_assoc_success()
629 ss->ss_ops->scan_assoc_success(ss, mac); in ieee80211_scan_assoc_success()
640 struct ieee80211_scan_state *ss = vap->iv_ic->ic_scan; in ieee80211_scan_assoc_fail()
642 if (ss->ss_ops != NULL) { in ieee80211_scan_assoc_fail()
645 ss->ss_ops->scan_assoc_fail(ss, mac, reason); in ieee80211_scan_assoc_fail()
656 struct ieee80211_scan_state *ss = vap->iv_ic->ic_scan; in ieee80211_scan_iterate()
658 if (ss->ss_ops != NULL) in ieee80211_scan_iterate()
659 ss->ss_ops->scan_iterate(ss, f, arg); in ieee80211_scan_iterate()
668 struct ieee80211_scan_state *ss = vap->iv_ic->ic_scan; in ieee80211_scan_flush()
670 if (ss->ss_ops != NULL && ss->ss_vap == vap) { in ieee80211_scan_flush()
672 ss->ss_ops->scan_flush(ss); in ieee80211_scan_flush()
683 struct ieee80211_scan_state *ss = ic->ic_scan; in ieee80211_scan_pickchannel()
687 if (ss == NULL || ss->ss_ops == NULL || ss->ss_vap == NULL) { in ieee80211_scan_pickchannel()
691 if (ss->ss_ops->scan_pickchan == NULL) { in ieee80211_scan_pickchannel()
692 IEEE80211_DPRINTF(ss->ss_vap, IEEE80211_MSG_SCAN, in ieee80211_scan_pickchannel()
694 "opmode %s\n", __func__, ss->ss_vap->iv_opmode); in ieee80211_scan_pickchannel()
697 return ss->ss_ops->scan_pickchan(ss, flags); in ieee80211_scan_pickchannel()