Lines Matching refs:vap

91 sta_vdetach(struct ieee80211vap *vap)
96 sta_vattach(struct ieee80211vap *vap)
98 vap->iv_newstate = sta_newstate;
99 vap->iv_input = sta_input;
100 vap->iv_recv_mgmt = sta_recv_mgmt;
101 vap->iv_recv_ctl = sta_recv_ctl;
102 vap->iv_opdetach = sta_vdetach;
103 vap->iv_bmiss = sta_beacon_miss;
112 sta_beacon_miss(struct ieee80211vap *vap)
114 struct ieee80211com *ic = vap->iv_ic;
119 KASSERT(vap->iv_state >= IEEE80211_S_RUN,
120 ("wrong state %s", ieee80211_state_name[vap->iv_state]));
122 IEEE80211_DPRINTF(vap, IEEE80211_MSG_STATE | IEEE80211_MSG_DEBUG,
124 ieee80211_opmode_name[vap->iv_opmode],
125 ieee80211_state_name[vap->iv_state]);
127 if (vap->iv_state == IEEE80211_S_CSA) {
138 if (++vap->iv_bmiss_count < vap->iv_bmiss_max) {
146 ieee80211_send_probereq(vap->iv_bss, vap->iv_myaddr,
147 vap->iv_bss->ni_bssid, vap->iv_bss->ni_bssid,
148 vap->iv_bss->ni_essid, vap->iv_bss->ni_esslen);
152 callout_stop(&vap->iv_swbmiss);
153 vap->iv_bmiss_count = 0;
154 vap->iv_stats.is_beacon_miss++;
155 if (vap->iv_roaming == IEEE80211_ROAMING_AUTO) {
163 if (IEEE80211_ATH_CAP(vap, vap->iv_bss, IEEE80211_NODE_TURBOP))
164 ieee80211_dturbo_switch(vap,
170 ieee80211_new_state(vap, IEEE80211_S_ASSOC, 1);
178 ieee80211_new_state(vap, IEEE80211_S_SCAN, 0);
188 sta_authretry(struct ieee80211vap *vap, struct ieee80211_node *ni, int reason)
201 ieee80211_scan_assoc_fail(vap, vap->iv_bss->ni_macaddr, reason);
202 if (vap->iv_roaming == IEEE80211_ROAMING_AUTO)
203 ieee80211_check_scan_current(vap);
209 sta_swbmiss_start(struct ieee80211vap *vap)
212 if (vap->iv_flags_ext & IEEE80211_FEXT_SWBMISS) {
218 vap->iv_swbmiss_period = IEEE80211_TU_TO_TICKS(
219 2 * vap->iv_bmissthreshold * vap->iv_bss->ni_intval);
220 vap->iv_swbmiss_count = 0;
221 callout_reset(&vap->iv_swbmiss, vap->iv_swbmiss_period,
222 ieee80211_swbmiss, vap);
227 * IEEE80211_M_STA vap state machine handler.
231 sta_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
233 struct ieee80211com *ic = vap->iv_ic;
239 ostate = vap->iv_state;
240 IEEE80211_DPRINTF(vap, IEEE80211_MSG_STATE, "%s: %s -> %s (%d)\n",
243 vap->iv_state = nstate; /* state transition */
244 callout_stop(&vap->iv_mgtsend); /* XXX callout_drain */
246 ieee80211_cancel_scan(vap); /* background scan */
247 ni = vap->iv_bss; /* NB: no reference held */
248 if (vap->iv_flags_ext & IEEE80211_FEXT_SWBMISS)
249 callout_stop(&vap->iv_swbmiss);
268 ieee80211_cancel_scan(vap);
275 ieee80211_reset_bss(vap);
277 if (vap->iv_auth->ia_detach != NULL)
278 vap->iv_auth->ia_detach(vap);
286 * the vap will be marked with IEEE80211_FEXT_SCANREQ
290 if (vap->iv_flags_ext & IEEE80211_FEXT_SCANREQ) {
291 ieee80211_check_scan(vap,
292 vap->iv_scanreq_flags,
293 vap->iv_scanreq_duration,
294 vap->iv_scanreq_mindwell,
295 vap->iv_scanreq_maxdwell,
296 vap->iv_scanreq_nssid, vap->iv_scanreq_ssid);
297 vap->iv_flags_ext &= ~IEEE80211_FEXT_SCANREQ;
299 ieee80211_check_scan_current(vap);
316 ieee80211_scan_assoc_fail(vap,
317 vap->iv_bss->ni_macaddr, arg);
318 if (vap->iv_roaming == IEEE80211_ROAMING_AUTO)
319 ieee80211_check_scan_current(vap);
334 if (vap->iv_roaming == IEEE80211_ROAMING_AUTO)
335 ieee80211_check_scan_current(vap);
357 sta_authretry(vap, ni, arg>>8);
367 vap->iv_state = IEEE80211_S_RUN; /* stay RUN */
371 if (vap->iv_roaming == IEEE80211_ROAMING_AUTO) {
393 if (vap->iv_roaming == IEEE80211_ROAMING_AUTO) {
404 if (vap->iv_flags & IEEE80211_F_WPA) {
414 if (ieee80211_msg_debug(vap)) {
415 ieee80211_note(vap, "%s with %s ssid ",
416 (vap->iv_opmode == IEEE80211_M_STA ?
419 ieee80211_print_essid(vap->iv_bss->ni_essid,
427 ieee80211_scan_assoc_success(vap, ni->ni_macaddr);
433 vap->iv_sta_ps(vap, 0);
440 sta_swbmiss_start(vap);
453 ic->ic_newassoc(vap->iv_bss, (ostate != IEEE80211_S_RUN));
460 sta_swbmiss_start(vap);
461 vap->iv_sta_ps(vap, 1);
465 IEEE80211_DPRINTF(vap, IEEE80211_MSG_STATE,
478 isdstods_mcastecho(struct ieee80211vap *vap, const struct ieee80211_frame *wh)
484 KASSERT(vap->iv_opmode == IEEE80211_M_STA, ("wrong mode"));
489 return IEEE80211_ADDR_EQ(sa, vap->iv_myaddr);
499 isfromds_mcastecho(struct ieee80211vap *vap, const struct ieee80211_frame *wh)
501 KASSERT(vap->iv_opmode == IEEE80211_M_STA, ("wrong mode"));
505 return IEEE80211_ADDR_EQ(wh->i_addr3, vap->iv_myaddr);
515 doprint(struct ieee80211vap *vap, int subtype)
519 return (vap->iv_ic->ic_flags & IEEE80211_F_SCAN);
540 struct ieee80211vap *vap = ni->ni_vap;
542 struct ifnet *ifp = vap->iv_ifp;
573 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
576 vap->iv_stats.is_rx_tooshort++;
589 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
592 vap->iv_stats.is_rx_badversion++;
603 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
605 vap->iv_stats.is_rx_wrongbss++;
625 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
628 vap->iv_stats.is_rx_wrongbss++;
650 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
653 vap->iv_stats.is_rx_tooshort++;
672 isfromds_mcastecho(vap, wh)) {
679 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
681 vap->iv_stats.is_rx_mcastecho++;
684 if ((vap->iv_flags & IEEE80211_F_DWDS) &&
693 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT, wh,
695 vap->iv_stats.is_rx_mcastecho++;
699 if ((vap->iv_flags & IEEE80211_F_DWDS) == 0) {
700 IEEE80211_DISCARD(vap,
703 vap->iv_stats.is_rx_wrongdir++;
707 isdstods_mcastecho(vap, wh)) {
714 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT, wh,
716 vap->iv_stats.is_rx_mcastecho++;
720 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT, wh,
722 vap->iv_stats.is_rx_wrongdir++;
735 if ((vap->iv_flags & IEEE80211_F_PRIVACY) == 0) {
739 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
741 vap->iv_stats.is_rx_noprivacy++;
781 if (key != NULL && !ieee80211_crypto_demic(vap, key, m, 0)) {
782 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
784 vap->iv_stats.is_rx_demicfail++;
790 if (ieee80211_radiotap_active_vap(vap))
791 ieee80211_radiotap_rx(vap, m);
797 m = ieee80211_decap(vap, m, hdrspace);
804 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
806 vap->iv_stats.is_rx_decap++;
821 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
825 vap->iv_stats.is_rx_unauth++;
834 if ((vap->iv_flags & IEEE80211_F_DROPUNENC) &&
840 vap->iv_stats.is_rx_unencrypted++;
852 m = ieee80211_decap_fastframe(vap, ni, m);
857 ieee80211_deliver_data(vap, ni, m);
861 vap->iv_stats.is_rx_mgmt++;
864 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
866 vap->iv_stats.is_rx_wrongdir++;
870 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
873 vap->iv_stats.is_rx_tooshort++;
877 if ((ieee80211_msg_debug(vap) && doprint(vap, subtype)) ||
878 ieee80211_msg_dumppkts(vap)) {
890 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
893 vap->iv_stats.is_rx_mgtdiscard++; /* XXX */
896 if ((vap->iv_flags & IEEE80211_F_PRIVACY) == 0) {
900 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
902 vap->iv_stats.is_rx_noprivacy++;
914 vap->iv_recv_mgmt(ni, m, subtype, rxs, rssi, nf);
918 vap->iv_stats.is_rx_ctl++;
920 vap->iv_recv_ctl(ni, m, subtype);
924 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
933 if (need_tap && ieee80211_radiotap_active_vap(vap))
934 ieee80211_radiotap_rx(vap, m);
944 struct ieee80211vap *vap = ni->ni_vap;
947 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
950 vap->iv_stats.is_rx_bad_auth++; /* XXX */
953 if (vap->iv_state != IEEE80211_S_AUTH ||
955 vap->iv_stats.is_rx_bad_auth++;
959 IEEE80211_NOTE(vap, IEEE80211_MSG_DEBUG | IEEE80211_MSG_AUTH,
961 vap->iv_stats.is_rx_auth_fail++;
962 vap->iv_stats.is_rx_authfail_code = status;
963 ieee80211_new_state(vap, IEEE80211_S_SCAN,
966 ieee80211_new_state(vap, IEEE80211_S_ASSOC, 0);
974 struct ieee80211vap *vap = ni->ni_vap;
985 if ((vap->iv_flags & IEEE80211_F_PRIVACY) == 0) {
986 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
998 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1001 vap->iv_stats.is_rx_bad_auth++; /* XXX maybe a unique error? */
1008 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1012 vap->iv_stats.is_rx_bad_auth++;
1023 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1026 vap->iv_stats.is_rx_bad_auth++;
1030 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1033 vap->iv_stats.is_rx_bad_auth++;
1039 if (vap->iv_state != IEEE80211_S_AUTH)
1048 IEEE80211_NOTE_FRAME(vap,
1051 vap->iv_stats.is_rx_auth_fail++;
1052 vap->iv_stats.is_rx_authfail_code = status;
1055 ieee80211_new_state(vap, IEEE80211_S_ASSOC, 0);
1066 IEEE80211_DISCARD(vap, IEEE80211_MSG_AUTH,
1068 vap->iv_stats.is_rx_bad_auth++;
1078 if (vap->iv_state == IEEE80211_S_AUTH)
1079 ieee80211_new_state(vap, IEEE80211_S_SCAN,
1084 ieee80211_parse_wmeparams(struct ieee80211vap *vap, uint8_t *frm,
1088 struct ieee80211_wme_state *wme = &vap->iv_ic->ic_wme;
1093 IEEE80211_DISCARD_IE(vap,
1127 ieee80211_parse_csaparams(struct ieee80211vap *vap, uint8_t *frm,
1130 struct ieee80211com *ic = vap->iv_ic;
1134 KASSERT(vap->iv_state >= IEEE80211_S_RUN,
1135 ("state %s", ieee80211_state_name[vap->iv_state]));
1138 IEEE80211_DISCARD_IE(vap,
1163 IEEE80211_DISCARD_IE(vap,
1183 IEEE80211_DISCARD_IE(vap,
1209 IEEE80211_NOTE_FRAME(vap, IEEE80211_MSG_DOTH, wh,
1238 contbgscan(struct ieee80211vap *vap)
1240 struct ieee80211com *ic = vap->iv_ic;
1244 vap->iv_state == IEEE80211_S_RUN && /* XXX? */
1245 ieee80211_time_after(ticks, ic->ic_lastdata + vap->iv_bgscanidle));
1257 startbgscan(struct ieee80211vap *vap)
1259 struct ieee80211com *ic = vap->iv_ic;
1261 return ((vap->iv_flags & IEEE80211_F_BGSCAN) &&
1266 ieee80211_time_after(ticks, ic->ic_lastscan + vap->iv_bgscanintvl) &&
1267 ieee80211_time_after(ticks, ic->ic_lastdata + vap->iv_bgscanidle));
1276 struct ieee80211vap *vap = ni->ni_vap;
1301 vap->iv_stats.is_rx_mgtdiscard++;
1307 c = ieee80211_lookup_channel_rxstatus(vap, rxs);
1315 vap->iv_stats.is_beacon_bad++;
1323 vap->iv_stats.is_rx_beacon++; /* XXX remove */
1339 vap->iv_swbmiss_count++;
1340 vap->iv_bmiss_count = 0;
1342 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ASSOC,
1356 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ASSOC,
1373 ieee80211_parse_wmeparams(vap, scan.wme, wh) > 0)
1374 ieee80211_wme_updateparams(vap);
1380 (vap->iv_flags_ht & IEEE80211_FHT_HT)) {
1433 ieee80211_sta_tim_notify(vap, 1);
1452 (vap->iv_flags & IEEE80211_F_DOTH))
1453 ieee80211_parse_csaparams(vap, scan.csa, wh);
1480 ieee80211_add_scan(vap, rxchan,
1482 } else if (contbgscan(vap)) {
1483 ieee80211_bg_scan(vap, 0);
1484 } else if (startbgscan(vap)) {
1485 vap->iv_stats.is_scan_bg++;
1488 ieee80211_set_pwrsave(vap, 0);
1490 ieee80211_bg_scan(vap, 0);
1498 ieee80211_sta_ps_timer_check(vap);
1522 ieee80211_probe_curchan(vap, 1);
1525 ieee80211_add_scan(vap, rxchan, &scan, wh,
1545 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_AUTH, wh->i_addr2,
1548 if (vap->iv_flags & IEEE80211_F_COUNTERM) {
1549 IEEE80211_DISCARD(vap,
1552 vap->iv_stats.is_rx_auth_countermeasures++;
1553 if (vap->iv_opmode == IEEE80211_M_HOSTAP) {
1566 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
1568 vap->iv_stats.is_rx_auth_unsupported++;
1579 if (vap->iv_state != IEEE80211_S_ASSOC) {
1580 vap->iv_stats.is_rx_mgtdiscard++;
1596 ni = vap->iv_bss;
1602 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ASSOC,
1605 vap->iv_stats.is_rx_auth_fail++; /* XXX */
1630 else if (vap->iv_flags_ht & IEEE80211_FHT_HTCOMPAT) {
1658 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ASSOC,
1662 vap->iv_stats.is_rx_assoc_norate++;
1663 ieee80211_new_state(vap, IEEE80211_S_SCAN,
1673 ieee80211_parse_wmeparams(vap, wme, wh) >= 0) {
1675 ieee80211_wme_updateparams(vap);
1686 (vap->iv_flags_ht & IEEE80211_FHT_HT)) {
1730 IEEE80211_NOTE_MAC(vap,
1745 IEEE80211_ATH_CAP(vap, ni, IEEE80211_NODE_FF) ?
1747 IEEE80211_ATH_CAP(vap, ni, IEEE80211_NODE_TURBOP) ?
1750 ieee80211_new_state(vap, IEEE80211_S_RUN, subtype);
1757 if (vap->iv_state == IEEE80211_S_SCAN) {
1758 vap->iv_stats.is_rx_mgtdiscard++;
1761 if (!IEEE80211_ADDR_EQ(wh->i_addr1, vap->iv_myaddr)) {
1763 vap->iv_stats.is_rx_mgtdiscard++;
1774 vap->iv_stats.is_rx_deauth++;
1775 vap->iv_stats.is_rx_deauth_code = reason;
1778 IEEE80211_NOTE(vap, IEEE80211_MSG_AUTH, ni,
1781 ieee80211_new_state(vap, IEEE80211_S_AUTH,
1789 if (vap->iv_state != IEEE80211_S_RUN &&
1790 vap->iv_state != IEEE80211_S_ASSOC &&
1791 vap->iv_state != IEEE80211_S_AUTH) {
1792 vap->iv_stats.is_rx_mgtdiscard++;
1795 if (!IEEE80211_ADDR_EQ(wh->i_addr1, vap->iv_myaddr)) {
1797 vap->iv_stats.is_rx_mgtdiscard++;
1808 vap->iv_stats.is_rx_disassoc++;
1809 vap->iv_stats.is_rx_disassoc_code = reason;
1812 IEEE80211_NOTE(vap, IEEE80211_MSG_ASSOC, ni,
1815 ieee80211_new_state(vap, IEEE80211_S_ASSOC, 0);
1821 if (!IEEE80211_ADDR_EQ(vap->iv_myaddr, wh->i_addr1) &&
1823 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1825 vap->iv_stats.is_rx_mgtdiscard++;
1826 } else if (vap->iv_state != IEEE80211_S_RUN) {
1827 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1829 ieee80211_state_name[vap->iv_state]);
1830 vap->iv_stats.is_rx_mgtdiscard++;
1842 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1844 vap->iv_stats.is_rx_mgtdiscard++;
1848 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
1850 vap->iv_stats.is_rx_badsubtype++;