Lines Matching defs:vap
90 sta_vdetach(struct ieee80211vap *vap)
95 sta_vattach(struct ieee80211vap *vap)
97 vap->iv_newstate = sta_newstate;
98 vap->iv_input = sta_input;
99 vap->iv_recv_mgmt = sta_recv_mgmt;
100 vap->iv_recv_ctl = sta_recv_ctl;
101 vap->iv_opdetach = sta_vdetach;
102 vap->iv_bmiss = sta_beacon_miss;
111 sta_beacon_miss(struct ieee80211vap *vap)
113 struct ieee80211com *ic = vap->iv_ic;
118 KASSERT(vap->iv_state >= IEEE80211_S_RUN,
119 ("wrong state %s", ieee80211_state_name[vap->iv_state]));
121 IEEE80211_DPRINTF(vap, IEEE80211_MSG_STATE | IEEE80211_MSG_DEBUG,
123 ieee80211_opmode_name[vap->iv_opmode],
124 ieee80211_state_name[vap->iv_state]);
126 if (vap->iv_state == IEEE80211_S_CSA) {
137 if (++vap->iv_bmiss_count < vap->iv_bmiss_max) {
145 ieee80211_send_probereq(vap->iv_bss, vap->iv_myaddr,
146 vap->iv_bss->ni_bssid, vap->iv_bss->ni_bssid,
147 vap->iv_bss->ni_essid, vap->iv_bss->ni_esslen);
151 callout_stop(&vap->iv_swbmiss);
152 vap->iv_bmiss_count = 0;
153 vap->iv_stats.is_beacon_miss++;
154 if (vap->iv_roaming == IEEE80211_ROAMING_AUTO) {
162 if (IEEE80211_ATH_CAP(vap, vap->iv_bss, IEEE80211_NODE_TURBOP))
163 ieee80211_dturbo_switch(vap,
169 ieee80211_new_state(vap, IEEE80211_S_ASSOC, 1);
177 ieee80211_new_state(vap, IEEE80211_S_SCAN, 0);
187 sta_authretry(struct ieee80211vap *vap, struct ieee80211_node *ni, int reason)
200 ieee80211_scan_assoc_fail(vap, vap->iv_bss->ni_macaddr, reason);
201 if (vap->iv_roaming == IEEE80211_ROAMING_AUTO)
202 ieee80211_check_scan_current(vap);
208 sta_swbmiss_start(struct ieee80211vap *vap)
211 if (vap->iv_flags_ext & IEEE80211_FEXT_SWBMISS) {
217 vap->iv_swbmiss_period = IEEE80211_TU_TO_TICKS(
218 2 * vap->iv_bmissthreshold * vap->iv_bss->ni_intval);
219 vap->iv_swbmiss_count = 0;
220 callout_reset(&vap->iv_swbmiss, vap->iv_swbmiss_period,
221 ieee80211_swbmiss, vap);
226 * IEEE80211_M_STA vap state machine handler.
230 sta_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
232 struct ieee80211com *ic = vap->iv_ic;
238 ostate = vap->iv_state;
239 IEEE80211_DPRINTF(vap, IEEE80211_MSG_STATE, "%s: %s -> %s (%d)\n",
242 vap->iv_state = nstate; /* state transition */
243 callout_stop(&vap->iv_mgtsend); /* XXX callout_drain */
245 ieee80211_cancel_scan(vap); /* background scan */
246 ni = vap->iv_bss; /* NB: no reference held */
247 if (vap->iv_flags_ext & IEEE80211_FEXT_SWBMISS)
248 callout_stop(&vap->iv_swbmiss);
267 ieee80211_cancel_scan(vap);
274 ieee80211_reset_bss(vap);
276 if (vap->iv_auth->ia_detach != NULL)
277 vap->iv_auth->ia_detach(vap);
285 * the vap will be marked with IEEE80211_FEXT_SCANREQ
289 if (vap->iv_flags_ext & IEEE80211_FEXT_SCANREQ) {
290 ieee80211_check_scan(vap,
291 vap->iv_scanreq_flags,
292 vap->iv_scanreq_duration,
293 vap->iv_scanreq_mindwell,
294 vap->iv_scanreq_maxdwell,
295 vap->iv_scanreq_nssid, vap->iv_scanreq_ssid);
296 vap->iv_flags_ext &= ~IEEE80211_FEXT_SCANREQ;
298 ieee80211_check_scan_current(vap);
315 ieee80211_scan_assoc_fail(vap,
316 vap->iv_bss->ni_macaddr, arg);
317 if (vap->iv_roaming == IEEE80211_ROAMING_AUTO)
318 ieee80211_check_scan_current(vap);
333 if (vap->iv_roaming == IEEE80211_ROAMING_AUTO)
334 ieee80211_check_scan_current(vap);
356 sta_authretry(vap, ni, arg>>8);
366 vap->iv_state = IEEE80211_S_RUN; /* stay RUN */
370 if (vap->iv_roaming == IEEE80211_ROAMING_AUTO) {
392 if (vap->iv_roaming == IEEE80211_ROAMING_AUTO) {
403 if (vap->iv_flags & IEEE80211_F_WPA) {
413 if (ieee80211_msg_debug(vap)) {
414 ieee80211_note(vap, "%s with %s ssid ",
415 (vap->iv_opmode == IEEE80211_M_STA ?
418 ieee80211_print_essid(vap->iv_bss->ni_essid,
426 ieee80211_scan_assoc_success(vap, ni->ni_macaddr);
432 vap->iv_sta_ps(vap, 0);
439 sta_swbmiss_start(vap);
452 ic->ic_newassoc(vap->iv_bss, (ostate != IEEE80211_S_RUN));
459 sta_swbmiss_start(vap);
460 vap->iv_sta_ps(vap, 1);
464 IEEE80211_DPRINTF(vap, IEEE80211_MSG_STATE,
477 isdstods_mcastecho(struct ieee80211vap *vap, const struct ieee80211_frame *wh)
483 KASSERT(vap->iv_opmode == IEEE80211_M_STA, ("wrong mode"));
488 return IEEE80211_ADDR_EQ(sa, vap->iv_myaddr);
498 isfromds_mcastecho(struct ieee80211vap *vap, const struct ieee80211_frame *wh)
500 KASSERT(vap->iv_opmode == IEEE80211_M_STA, ("wrong mode"));
504 return IEEE80211_ADDR_EQ(wh->i_addr3, vap->iv_myaddr);
514 doprint(struct ieee80211vap *vap, int subtype)
518 return (vap->iv_ic->ic_flags & IEEE80211_F_SCAN);
539 struct ieee80211vap *vap = ni->ni_vap;
541 struct ifnet *ifp = vap->iv_ifp;
565 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
568 vap->iv_stats.is_rx_tooshort++;
572 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
575 vap->iv_stats.is_rx_badversion++;
619 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
621 vap->iv_stats.is_rx_wrongbss++;
641 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
644 vap->iv_stats.is_rx_wrongbss++;
666 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
669 vap->iv_stats.is_rx_tooshort++;
688 isfromds_mcastecho(vap, wh)) {
695 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
697 vap->iv_stats.is_rx_mcastecho++;
700 if ((vap->iv_flags & IEEE80211_F_DWDS) &&
709 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT, wh,
711 vap->iv_stats.is_rx_mcastecho++;
715 if ((vap->iv_flags & IEEE80211_F_DWDS) == 0) {
716 IEEE80211_DISCARD(vap,
719 vap->iv_stats.is_rx_wrongdir++;
723 isdstods_mcastecho(vap, wh)) {
730 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT, wh,
732 vap->iv_stats.is_rx_mcastecho++;
736 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT, wh,
738 vap->iv_stats.is_rx_wrongdir++;
766 if ((vap->iv_flags & IEEE80211_F_PRIVACY) == 0) {
770 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
772 vap->iv_stats.is_rx_noprivacy++;
817 if (!ieee80211_crypto_demic(vap, key, m, 0)) {
818 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
820 vap->iv_stats.is_rx_demicfail++;
826 if (ieee80211_radiotap_active_vap(vap))
827 ieee80211_radiotap_rx(vap, m);
833 m = ieee80211_decap(vap, m, hdrspace, qos);
840 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
842 vap->iv_stats.is_rx_decap++;
861 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
866 vap->iv_stats.is_rx_unauth++;
875 if ((vap->iv_flags & IEEE80211_F_DROPUNENC) &&
883 vap->iv_stats.is_rx_unencrypted++;
895 m = ieee80211_decap_fastframe(vap, ni, m);
900 ieee80211_deliver_data(vap, ni, m);
904 vap->iv_stats.is_rx_mgmt++;
907 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
909 vap->iv_stats.is_rx_wrongdir++;
913 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
916 vap->iv_stats.is_rx_tooshort++;
920 if ((ieee80211_msg_debug(vap) && doprint(vap, subtype)) ||
921 ieee80211_msg_dumppkts(vap)) {
943 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
946 vap->iv_stats.is_rx_mgtdiscard++; /* XXX */
949 if ((vap->iv_flags & IEEE80211_F_PRIVACY) == 0) {
953 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
955 vap->iv_stats.is_rx_noprivacy++;
972 vap->iv_recv_mgmt(ni, m, subtype, rxs, rssi, nf);
976 vap->iv_stats.is_rx_ctl++;
978 vap->iv_recv_ctl(ni, m, subtype);
982 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
991 if (need_tap && ieee80211_radiotap_active_vap(vap))
992 ieee80211_radiotap_rx(vap, m);
1002 struct ieee80211vap *vap = ni->ni_vap;
1005 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1008 vap->iv_stats.is_rx_bad_auth++; /* XXX */
1011 if (vap->iv_state != IEEE80211_S_AUTH ||
1013 vap->iv_stats.is_rx_bad_auth++;
1017 IEEE80211_NOTE(vap, IEEE80211_MSG_DEBUG | IEEE80211_MSG_AUTH,
1019 vap->iv_stats.is_rx_auth_fail++;
1020 vap->iv_stats.is_rx_authfail_code = status;
1021 ieee80211_new_state(vap, IEEE80211_S_SCAN,
1024 ieee80211_new_state(vap, IEEE80211_S_ASSOC, 0);
1032 struct ieee80211vap *vap = ni->ni_vap;
1043 if ((vap->iv_flags & IEEE80211_F_PRIVACY) == 0) {
1044 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1056 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1059 vap->iv_stats.is_rx_bad_auth++; /* XXX maybe a unique error? */
1066 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1070 vap->iv_stats.is_rx_bad_auth++;
1081 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1084 vap->iv_stats.is_rx_bad_auth++;
1088 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1091 vap->iv_stats.is_rx_bad_auth++;
1097 if (vap->iv_state != IEEE80211_S_AUTH)
1106 IEEE80211_NOTE_FRAME(vap,
1109 vap->iv_stats.is_rx_auth_fail++;
1110 vap->iv_stats.is_rx_authfail_code = status;
1113 ieee80211_new_state(vap, IEEE80211_S_ASSOC, 0);
1124 IEEE80211_DISCARD(vap, IEEE80211_MSG_AUTH,
1126 vap->iv_stats.is_rx_bad_auth++;
1136 if (vap->iv_state == IEEE80211_S_AUTH)
1137 ieee80211_new_state(vap, IEEE80211_S_SCAN,
1170 ieee80211_parse_wmeparams(struct ieee80211vap *vap, uint8_t *frm,
1173 struct ieee80211_wme_state *wme = &vap->iv_ic->ic_wme;
1180 IEEE80211_DISCARD_IE(vap,
1204 IEEE80211_DPRINTF(vap, IEEE80211_MSG_WME,
1226 ieee80211_parse_csaparams(struct ieee80211vap *vap, uint8_t *frm,
1229 struct ieee80211com *ic = vap->iv_ic;
1233 KASSERT(vap->iv_state >= IEEE80211_S_RUN,
1234 ("state %s", ieee80211_state_name[vap->iv_state]));
1237 IEEE80211_DISCARD_IE(vap,
1262 IEEE80211_DISCARD_IE(vap,
1282 IEEE80211_DISCARD_IE(vap,
1308 IEEE80211_NOTE_FRAME(vap, IEEE80211_MSG_DOTH, wh,
1338 contbgscan(struct ieee80211vap *vap)
1340 struct ieee80211com *ic = vap->iv_ic;
1344 !(vap->iv_flags_ext & IEEE80211_FEXT_SCAN_OFFLOAD) &&
1345 vap->iv_state == IEEE80211_S_RUN && /* XXX? */
1346 ieee80211_time_after(ticks, ic->ic_lastdata + vap->iv_bgscanidle));
1358 startbgscan(struct ieee80211vap *vap)
1360 struct ieee80211com *ic = vap->iv_ic;
1362 return ((vap->iv_flags & IEEE80211_F_BGSCAN) &&
1367 ieee80211_time_after(ticks, ic->ic_lastscan + vap->iv_bgscanintvl) &&
1368 ((vap->iv_flags_ext & IEEE80211_FEXT_SCAN_OFFLOAD) ||
1369 ieee80211_time_after(ticks, ic->ic_lastdata + vap->iv_bgscanidle)));
1399 struct ieee80211vap *vap = ni->ni_vap;
1426 vap->iv_stats.is_rx_mgtdiscard++;
1432 c = ieee80211_lookup_channel_rxstatus(vap, rxs);
1440 vap->iv_stats.is_beacon_bad++;
1448 vap->iv_stats.is_rx_beacon++; /* XXX remove */
1464 vap->iv_swbmiss_count++;
1465 vap->iv_bmiss_count = 0;
1467 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ASSOC,
1473 vap->iv_flags |= IEEE80211_F_USEPROT;
1475 vap->iv_flags &= ~IEEE80211_F_USEPROT;
1479 ieee80211_vap_update_erp_protmode(vap);
1482 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ASSOC,
1490 ieee80211_vap_set_shortslottime(vap,
1500 if ((_retval = ieee80211_parse_wmeparams(vap,
1506 ieee80211_wme_updateparams(vap);
1515 (vap->iv_flags_ht & IEEE80211_FHT_HT)) {
1522 (vap->iv_vht_flags & IEEE80211_FVHT_VHT)) {
1603 ieee80211_sta_tim_notify(vap, 1);
1622 (vap->iv_flags & IEEE80211_F_DOTH))
1623 ieee80211_parse_csaparams(vap, scan.csa, wh);
1650 ieee80211_add_scan(vap, rxchan,
1652 } else if (contbgscan(vap)) {
1653 ieee80211_bg_scan(vap, 0);
1654 } else if (startbgscan(vap)) {
1655 vap->iv_stats.is_scan_bg++;
1658 ieee80211_set_pwrsave(vap, 0);
1660 ieee80211_bg_scan(vap, 0);
1668 ieee80211_sta_ps_timer_check(vap);
1692 ieee80211_probe_curchan(vap, true);
1695 ieee80211_add_scan(vap, rxchan, &scan, wh,
1715 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_AUTH, wh->i_addr2,
1718 if (vap->iv_flags & IEEE80211_F_COUNTERM) {
1719 IEEE80211_DISCARD(vap,
1722 vap->iv_stats.is_rx_auth_countermeasures++;
1723 if (vap->iv_opmode == IEEE80211_M_HOSTAP) {
1736 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
1738 vap->iv_stats.is_rx_auth_unsupported++;
1749 if (vap->iv_state != IEEE80211_S_ASSOC) {
1750 vap->iv_stats.is_rx_mgtdiscard++;
1766 ni = vap->iv_bss;
1772 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ASSOC,
1775 vap->iv_stats.is_rx_auth_fail++; /* XXX */
1801 else if (vap->iv_flags_ht & IEEE80211_FHT_HTCOMPAT) {
1835 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ASSOC,
1839 vap->iv_stats.is_rx_assoc_norate++;
1840 ieee80211_new_state(vap, IEEE80211_S_SCAN,
1850 ieee80211_parse_wmeparams(vap, wme, wh, &qosinfo) >= 0) {
1852 ieee80211_wme_updateparams(vap);
1863 (vap->iv_flags_ht & IEEE80211_FHT_HT)) {
1868 (vap->iv_vht_flags & IEEE80211_FVHT_VHT)) {
1909 vap->iv_flags |= IEEE80211_F_SHPREAMBLE;
1910 vap->iv_flags &= ~IEEE80211_F_USEBARKER;
1912 vap->iv_flags &= ~IEEE80211_F_SHPREAMBLE;
1913 vap->iv_flags |= IEEE80211_F_USEBARKER;
1915 ieee80211_vap_set_shortslottime(vap,
1918 ieee80211_vap_update_preamble(vap);
1926 vap->iv_flags |= IEEE80211_F_USEPROT;
1928 vap->iv_flags &= ~IEEE80211_F_USEPROT;
1929 ieee80211_vap_update_erp_protmode(vap);
1930 IEEE80211_NOTE_MAC(vap,
1935 vap->iv_flags&IEEE80211_F_SHPREAMBLE ? "short" : "long",
1936 vap->iv_flags&IEEE80211_F_SHSLOT ? "short" : "long",
1937 vap->iv_flags&IEEE80211_F_USEPROT ? ", protection" : "",
1946 IEEE80211_ATH_CAP(vap, ni, IEEE80211_NODE_FF) ?
1948 IEEE80211_ATH_CAP(vap, ni, IEEE80211_NODE_TURBOP) ?
1951 ieee80211_new_state(vap, IEEE80211_S_RUN, subtype);
1958 if (vap->iv_state == IEEE80211_S_SCAN) {
1959 vap->iv_stats.is_rx_mgtdiscard++;
1962 if (!IEEE80211_ADDR_EQ(wh->i_addr1, vap->iv_myaddr)) {
1964 vap->iv_stats.is_rx_mgtdiscard++;
1975 vap->iv_stats.is_rx_deauth++;
1976 vap->iv_stats.is_rx_deauth_code = reason;
1979 IEEE80211_NOTE(vap, IEEE80211_MSG_AUTH, ni,
1982 ieee80211_new_state(vap, IEEE80211_S_AUTH,
1990 if (vap->iv_state != IEEE80211_S_RUN &&
1991 vap->iv_state != IEEE80211_S_ASSOC &&
1992 vap->iv_state != IEEE80211_S_AUTH) {
1993 vap->iv_stats.is_rx_mgtdiscard++;
1996 if (!IEEE80211_ADDR_EQ(wh->i_addr1, vap->iv_myaddr)) {
1998 vap->iv_stats.is_rx_mgtdiscard++;
2009 vap->iv_stats.is_rx_disassoc++;
2010 vap->iv_stats.is_rx_disassoc_code = reason;
2013 IEEE80211_NOTE(vap, IEEE80211_MSG_ASSOC, ni,
2016 ieee80211_new_state(vap, IEEE80211_S_ASSOC, 0);
2022 if (!IEEE80211_ADDR_EQ(vap->iv_myaddr, wh->i_addr1) &&
2024 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2026 vap->iv_stats.is_rx_mgtdiscard++;
2027 } else if (vap->iv_state != IEEE80211_S_RUN) {
2028 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2030 ieee80211_state_name[vap->iv_state]);
2031 vap->iv_stats.is_rx_mgtdiscard++;
2043 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2045 vap->iv_stats.is_rx_mgtdiscard++;
2049 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
2051 vap->iv_stats.is_rx_badsubtype++;