Lines Matching refs:vap

94 sta_vdetach(struct ieee80211vap *vap)
99 sta_vattach(struct ieee80211vap *vap)
101 vap->iv_newstate = sta_newstate;
102 vap->iv_input = sta_input;
103 vap->iv_recv_mgmt = sta_recv_mgmt;
104 vap->iv_recv_ctl = sta_recv_ctl;
105 vap->iv_opdetach = sta_vdetach;
106 vap->iv_bmiss = sta_beacon_miss;
115 sta_beacon_miss(struct ieee80211vap *vap)
117 struct ieee80211com *ic = vap->iv_ic;
122 KASSERT(vap->iv_state >= IEEE80211_S_RUN,
123 ("wrong state %s", ieee80211_state_name[vap->iv_state]));
125 IEEE80211_DPRINTF(vap, IEEE80211_MSG_STATE | IEEE80211_MSG_DEBUG,
127 ieee80211_opmode_name[vap->iv_opmode],
128 ieee80211_state_name[vap->iv_state]);
130 if (vap->iv_state == IEEE80211_S_CSA) {
141 if (++vap->iv_bmiss_count < vap->iv_bmiss_max) {
149 ieee80211_send_probereq(vap->iv_bss, vap->iv_myaddr,
150 vap->iv_bss->ni_bssid, vap->iv_bss->ni_bssid,
151 vap->iv_bss->ni_essid, vap->iv_bss->ni_esslen);
155 callout_stop(&vap->iv_swbmiss);
156 vap->iv_bmiss_count = 0;
157 vap->iv_stats.is_beacon_miss++;
158 if (vap->iv_roaming == IEEE80211_ROAMING_AUTO) {
166 if (IEEE80211_ATH_CAP(vap, vap->iv_bss, IEEE80211_NODE_TURBOP))
167 ieee80211_dturbo_switch(vap,
173 ieee80211_new_state(vap, IEEE80211_S_ASSOC, 1);
181 ieee80211_new_state(vap, IEEE80211_S_SCAN, 0);
191 sta_authretry(struct ieee80211vap *vap, struct ieee80211_node *ni, int reason)
204 ieee80211_scan_assoc_fail(vap, vap->iv_bss->ni_macaddr, reason);
205 if (vap->iv_roaming == IEEE80211_ROAMING_AUTO)
206 ieee80211_check_scan_current(vap);
212 sta_swbmiss_start(struct ieee80211vap *vap)
215 if (vap->iv_flags_ext & IEEE80211_FEXT_SWBMISS) {
221 vap->iv_swbmiss_period = IEEE80211_TU_TO_TICKS(
222 2 * vap->iv_bmissthreshold * vap->iv_bss->ni_intval);
223 vap->iv_swbmiss_count = 0;
224 callout_reset(&vap->iv_swbmiss, vap->iv_swbmiss_period,
225 ieee80211_swbmiss, vap);
230 * IEEE80211_M_STA vap state machine handler.
234 sta_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
236 struct ieee80211com *ic = vap->iv_ic;
242 ostate = vap->iv_state;
243 IEEE80211_DPRINTF(vap, IEEE80211_MSG_STATE, "%s: %s -> %s (%d)\n",
246 vap->iv_state = nstate; /* state transition */
247 callout_stop(&vap->iv_mgtsend); /* XXX callout_drain */
249 ieee80211_cancel_scan(vap); /* background scan */
250 ni = vap->iv_bss; /* NB: no reference held */
251 if (vap->iv_flags_ext & IEEE80211_FEXT_SWBMISS)
252 callout_stop(&vap->iv_swbmiss);
271 ieee80211_cancel_scan(vap);
278 ieee80211_reset_bss(vap);
280 if (vap->iv_auth->ia_detach != NULL)
281 vap->iv_auth->ia_detach(vap);
289 * the vap will be marked with IEEE80211_FEXT_SCANREQ
293 if (vap->iv_flags_ext & IEEE80211_FEXT_SCANREQ) {
294 ieee80211_check_scan(vap,
295 vap->iv_scanreq_flags,
296 vap->iv_scanreq_duration,
297 vap->iv_scanreq_mindwell,
298 vap->iv_scanreq_maxdwell,
299 vap->iv_scanreq_nssid, vap->iv_scanreq_ssid);
300 vap->iv_flags_ext &= ~IEEE80211_FEXT_SCANREQ;
302 ieee80211_check_scan_current(vap);
319 ieee80211_scan_assoc_fail(vap,
320 vap->iv_bss->ni_macaddr, arg);
321 if (vap->iv_roaming == IEEE80211_ROAMING_AUTO)
322 ieee80211_check_scan_current(vap);
337 if (vap->iv_roaming == IEEE80211_ROAMING_AUTO)
338 ieee80211_check_scan_current(vap);
360 sta_authretry(vap, ni, arg>>8);
370 vap->iv_state = IEEE80211_S_RUN; /* stay RUN */
374 if (vap->iv_roaming == IEEE80211_ROAMING_AUTO) {
396 if (vap->iv_roaming == IEEE80211_ROAMING_AUTO) {
407 if (vap->iv_flags & IEEE80211_F_WPA) {
417 if (ieee80211_msg_debug(vap)) {
418 ieee80211_note(vap, "%s with %s ssid ",
419 (vap->iv_opmode == IEEE80211_M_STA ?
422 ieee80211_print_essid(vap->iv_bss->ni_essid,
430 ieee80211_scan_assoc_success(vap, ni->ni_macaddr);
436 vap->iv_sta_ps(vap, 0);
443 sta_swbmiss_start(vap);
456 ic->ic_newassoc(vap->iv_bss, (ostate != IEEE80211_S_RUN));
463 sta_swbmiss_start(vap);
464 vap->iv_sta_ps(vap, 1);
468 IEEE80211_DPRINTF(vap, IEEE80211_MSG_STATE,
481 isdstods_mcastecho(struct ieee80211vap *vap, const struct ieee80211_frame *wh)
487 KASSERT(vap->iv_opmode == IEEE80211_M_STA, ("wrong mode"));
492 return IEEE80211_ADDR_EQ(sa, vap->iv_myaddr);
502 isfromds_mcastecho(struct ieee80211vap *vap, const struct ieee80211_frame *wh)
504 KASSERT(vap->iv_opmode == IEEE80211_M_STA, ("wrong mode"));
508 return IEEE80211_ADDR_EQ(wh->i_addr3, vap->iv_myaddr);
518 doprint(struct ieee80211vap *vap, int subtype)
522 return (vap->iv_ic->ic_flags & IEEE80211_F_SCAN);
543 struct ieee80211vap *vap = ni->ni_vap;
545 struct ifnet *ifp = vap->iv_ifp;
586 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
589 vap->iv_stats.is_rx_tooshort++;
602 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
605 vap->iv_stats.is_rx_badversion++;
616 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
618 vap->iv_stats.is_rx_wrongbss++;
638 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
641 vap->iv_stats.is_rx_wrongbss++;
663 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
666 vap->iv_stats.is_rx_tooshort++;
685 isfromds_mcastecho(vap, wh)) {
692 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
694 vap->iv_stats.is_rx_mcastecho++;
697 if ((vap->iv_flags & IEEE80211_F_DWDS) &&
706 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT, wh,
708 vap->iv_stats.is_rx_mcastecho++;
712 if ((vap->iv_flags & IEEE80211_F_DWDS) == 0) {
713 IEEE80211_DISCARD(vap,
716 vap->iv_stats.is_rx_wrongdir++;
720 isdstods_mcastecho(vap, wh)) {
727 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT, wh,
729 vap->iv_stats.is_rx_mcastecho++;
733 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT, wh,
735 vap->iv_stats.is_rx_wrongdir++;
763 if ((vap->iv_flags & IEEE80211_F_PRIVACY) == 0) {
767 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
769 vap->iv_stats.is_rx_noprivacy++;
814 if (!ieee80211_crypto_demic(vap, key, m, 0)) {
815 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
817 vap->iv_stats.is_rx_demicfail++;
823 if (ieee80211_radiotap_active_vap(vap))
824 ieee80211_radiotap_rx(vap, m);
830 m = ieee80211_decap(vap, m, hdrspace);
837 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
839 vap->iv_stats.is_rx_decap++;
854 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
858 vap->iv_stats.is_rx_unauth++;
867 if ((vap->iv_flags & IEEE80211_F_DROPUNENC) &&
874 vap->iv_stats.is_rx_unencrypted++;
886 m = ieee80211_decap_fastframe(vap, ni, m);
891 ieee80211_deliver_data(vap, ni, m);
895 vap->iv_stats.is_rx_mgmt++;
898 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
900 vap->iv_stats.is_rx_wrongdir++;
904 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
907 vap->iv_stats.is_rx_tooshort++;
911 if ((ieee80211_msg_debug(vap) && doprint(vap, subtype)) ||
912 ieee80211_msg_dumppkts(vap)) {
934 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
937 vap->iv_stats.is_rx_mgtdiscard++; /* XXX */
940 if ((vap->iv_flags & IEEE80211_F_PRIVACY) == 0) {
944 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
946 vap->iv_stats.is_rx_noprivacy++;
963 vap->iv_recv_mgmt(ni, m, subtype, rxs, rssi, nf);
967 vap->iv_stats.is_rx_ctl++;
969 vap->iv_recv_ctl(ni, m, subtype);
973 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
982 if (need_tap && ieee80211_radiotap_active_vap(vap))
983 ieee80211_radiotap_rx(vap, m);
993 struct ieee80211vap *vap = ni->ni_vap;
996 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
999 vap->iv_stats.is_rx_bad_auth++; /* XXX */
1002 if (vap->iv_state != IEEE80211_S_AUTH ||
1004 vap->iv_stats.is_rx_bad_auth++;
1008 IEEE80211_NOTE(vap, IEEE80211_MSG_DEBUG | IEEE80211_MSG_AUTH,
1010 vap->iv_stats.is_rx_auth_fail++;
1011 vap->iv_stats.is_rx_authfail_code = status;
1012 ieee80211_new_state(vap, IEEE80211_S_SCAN,
1015 ieee80211_new_state(vap, IEEE80211_S_ASSOC, 0);
1023 struct ieee80211vap *vap = ni->ni_vap;
1034 if ((vap->iv_flags & IEEE80211_F_PRIVACY) == 0) {
1035 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1047 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1050 vap->iv_stats.is_rx_bad_auth++; /* XXX maybe a unique error? */
1057 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1061 vap->iv_stats.is_rx_bad_auth++;
1072 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1075 vap->iv_stats.is_rx_bad_auth++;
1079 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1082 vap->iv_stats.is_rx_bad_auth++;
1088 if (vap->iv_state != IEEE80211_S_AUTH)
1097 IEEE80211_NOTE_FRAME(vap,
1100 vap->iv_stats.is_rx_auth_fail++;
1101 vap->iv_stats.is_rx_authfail_code = status;
1104 ieee80211_new_state(vap, IEEE80211_S_ASSOC, 0);
1115 IEEE80211_DISCARD(vap, IEEE80211_MSG_AUTH,
1117 vap->iv_stats.is_rx_bad_auth++;
1127 if (vap->iv_state == IEEE80211_S_AUTH)
1128 ieee80211_new_state(vap, IEEE80211_S_SCAN,
1161 ieee80211_parse_wmeparams(struct ieee80211vap *vap, uint8_t *frm,
1164 struct ieee80211_wme_state *wme = &vap->iv_ic->ic_wme;
1171 IEEE80211_DISCARD_IE(vap,
1195 IEEE80211_DPRINTF(vap, IEEE80211_MSG_WME,
1217 ieee80211_parse_csaparams(struct ieee80211vap *vap, uint8_t *frm,
1220 struct ieee80211com *ic = vap->iv_ic;
1224 KASSERT(vap->iv_state >= IEEE80211_S_RUN,
1225 ("state %s", ieee80211_state_name[vap->iv_state]));
1228 IEEE80211_DISCARD_IE(vap,
1253 IEEE80211_DISCARD_IE(vap,
1273 IEEE80211_DISCARD_IE(vap,
1299 IEEE80211_NOTE_FRAME(vap, IEEE80211_MSG_DOTH, wh,
1329 contbgscan(struct ieee80211vap *vap)
1331 struct ieee80211com *ic = vap->iv_ic;
1335 !(vap->iv_flags_ext & IEEE80211_FEXT_SCAN_OFFLOAD) &&
1336 vap->iv_state == IEEE80211_S_RUN && /* XXX? */
1337 ieee80211_time_after(ticks, ic->ic_lastdata + vap->iv_bgscanidle));
1349 startbgscan(struct ieee80211vap *vap)
1351 struct ieee80211com *ic = vap->iv_ic;
1353 return ((vap->iv_flags & IEEE80211_F_BGSCAN) &&
1358 ieee80211_time_after(ticks, ic->ic_lastscan + vap->iv_bgscanintvl) &&
1359 ((vap->iv_flags_ext & IEEE80211_FEXT_SCAN_OFFLOAD) ||
1360 ieee80211_time_after(ticks, ic->ic_lastdata + vap->iv_bgscanidle)));
1390 struct ieee80211vap *vap = ni->ni_vap;
1417 vap->iv_stats.is_rx_mgtdiscard++;
1423 c = ieee80211_lookup_channel_rxstatus(vap, rxs);
1431 vap->iv_stats.is_beacon_bad++;
1439 vap->iv_stats.is_rx_beacon++; /* XXX remove */
1455 vap->iv_swbmiss_count++;
1456 vap->iv_bmiss_count = 0;
1458 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ASSOC,
1464 vap->iv_flags |= IEEE80211_F_USEPROT;
1466 vap->iv_flags &= ~IEEE80211_F_USEPROT;
1470 ieee80211_vap_update_erp_protmode(vap);
1473 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ASSOC,
1481 ieee80211_vap_set_shortslottime(vap,
1491 if ((_retval = ieee80211_parse_wmeparams(vap,
1497 ieee80211_wme_updateparams(vap);
1506 (vap->iv_flags_ht & IEEE80211_FHT_HT)) {
1513 (vap->iv_flags_vht & IEEE80211_FVHT_VHT)) {
1589 ieee80211_sta_tim_notify(vap, 1);
1608 (vap->iv_flags & IEEE80211_F_DOTH))
1609 ieee80211_parse_csaparams(vap, scan.csa, wh);
1636 ieee80211_add_scan(vap, rxchan,
1638 } else if (contbgscan(vap)) {
1639 ieee80211_bg_scan(vap, 0);
1640 } else if (startbgscan(vap)) {
1641 vap->iv_stats.is_scan_bg++;
1644 ieee80211_set_pwrsave(vap, 0);
1646 ieee80211_bg_scan(vap, 0);
1654 ieee80211_sta_ps_timer_check(vap);
1678 ieee80211_probe_curchan(vap, 1);
1681 ieee80211_add_scan(vap, rxchan, &scan, wh,
1701 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_AUTH, wh->i_addr2,
1704 if (vap->iv_flags & IEEE80211_F_COUNTERM) {
1705 IEEE80211_DISCARD(vap,
1708 vap->iv_stats.is_rx_auth_countermeasures++;
1709 if (vap->iv_opmode == IEEE80211_M_HOSTAP) {
1722 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
1724 vap->iv_stats.is_rx_auth_unsupported++;
1735 if (vap->iv_state != IEEE80211_S_ASSOC) {
1736 vap->iv_stats.is_rx_mgtdiscard++;
1752 ni = vap->iv_bss;
1758 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ASSOC,
1761 vap->iv_stats.is_rx_auth_fail++; /* XXX */
1787 else if (vap->iv_flags_ht & IEEE80211_FHT_HTCOMPAT) {
1821 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ASSOC,
1825 vap->iv_stats.is_rx_assoc_norate++;
1826 ieee80211_new_state(vap, IEEE80211_S_SCAN,
1836 ieee80211_parse_wmeparams(vap, wme, wh, &qosinfo) >= 0) {
1838 ieee80211_wme_updateparams(vap);
1849 (vap->iv_flags_ht & IEEE80211_FHT_HT)) {
1854 (vap->iv_flags_vht & IEEE80211_FVHT_VHT)) {
1895 vap->iv_flags |= IEEE80211_F_SHPREAMBLE;
1896 vap->iv_flags &= ~IEEE80211_F_USEBARKER;
1898 vap->iv_flags &= ~IEEE80211_F_SHPREAMBLE;
1899 vap->iv_flags |= IEEE80211_F_USEBARKER;
1901 ieee80211_vap_set_shortslottime(vap,
1904 ieee80211_vap_update_preamble(vap);
1912 vap->iv_flags |= IEEE80211_F_USEPROT;
1914 vap->iv_flags &= ~IEEE80211_F_USEPROT;
1915 ieee80211_vap_update_erp_protmode(vap);
1916 IEEE80211_NOTE_MAC(vap,
1921 vap->iv_flags&IEEE80211_F_SHPREAMBLE ? "short" : "long",
1922 vap->iv_flags&IEEE80211_F_SHSLOT ? "short" : "long",
1923 vap->iv_flags&IEEE80211_F_USEPROT ? ", protection" : "",
1932 IEEE80211_ATH_CAP(vap, ni, IEEE80211_NODE_FF) ?
1934 IEEE80211_ATH_CAP(vap, ni, IEEE80211_NODE_TURBOP) ?
1937 ieee80211_new_state(vap, IEEE80211_S_RUN, subtype);
1944 if (vap->iv_state == IEEE80211_S_SCAN) {
1945 vap->iv_stats.is_rx_mgtdiscard++;
1948 if (!IEEE80211_ADDR_EQ(wh->i_addr1, vap->iv_myaddr)) {
1950 vap->iv_stats.is_rx_mgtdiscard++;
1961 vap->iv_stats.is_rx_deauth++;
1962 vap->iv_stats.is_rx_deauth_code = reason;
1965 IEEE80211_NOTE(vap, IEEE80211_MSG_AUTH, ni,
1968 ieee80211_new_state(vap, IEEE80211_S_AUTH,
1976 if (vap->iv_state != IEEE80211_S_RUN &&
1977 vap->iv_state != IEEE80211_S_ASSOC &&
1978 vap->iv_state != IEEE80211_S_AUTH) {
1979 vap->iv_stats.is_rx_mgtdiscard++;
1982 if (!IEEE80211_ADDR_EQ(wh->i_addr1, vap->iv_myaddr)) {
1984 vap->iv_stats.is_rx_mgtdiscard++;
1995 vap->iv_stats.is_rx_disassoc++;
1996 vap->iv_stats.is_rx_disassoc_code = reason;
1999 IEEE80211_NOTE(vap, IEEE80211_MSG_ASSOC, ni,
2002 ieee80211_new_state(vap, IEEE80211_S_ASSOC, 0);
2008 if (!IEEE80211_ADDR_EQ(vap->iv_myaddr, wh->i_addr1) &&
2010 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2012 vap->iv_stats.is_rx_mgtdiscard++;
2013 } else if (vap->iv_state != IEEE80211_S_RUN) {
2014 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2016 ieee80211_state_name[vap->iv_state]);
2017 vap->iv_stats.is_rx_mgtdiscard++;
2029 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2031 vap->iv_stats.is_rx_mgtdiscard++;
2035 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
2037 vap->iv_stats.is_rx_badsubtype++;