Lines Matching refs:vap

91 hostap_vdetach(struct ieee80211vap *vap)
96 hostap_vattach(struct ieee80211vap *vap)
98 vap->iv_newstate = hostap_newstate;
99 vap->iv_input = hostap_input;
100 vap->iv_recv_mgmt = hostap_recv_mgmt;
101 vap->iv_recv_ctl = hostap_recv_ctl;
102 vap->iv_opdetach = hostap_vdetach;
103 vap->iv_deliver_data = hostap_deliver_data;
104 vap->iv_recv_pspoll = ieee80211_recv_pspoll;
110 struct ieee80211vap *vap = arg;
112 if (ni->ni_vap == vap && ni->ni_associd != 0) {
122 struct ieee80211vap *vap = arg;
124 if (ni->ni_vap == vap && ni->ni_associd != 0)
125 if (ni->ni_inact > vap->iv_inact_init) {
126 ni->ni_inact = vap->iv_inact_init;
127 IEEE80211_NOTE(vap, IEEE80211_MSG_INACT, ni,
135 struct ieee80211vap *vap = arg;
137 if (ni->ni_vap == vap && ni->ni_associd != 0)
155 * IEEE80211_M_HOSTAP vap state machine handler.
158 hostap_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
160 struct ieee80211com *ic = vap->iv_ic;
165 ostate = vap->iv_state;
166 IEEE80211_DPRINTF(vap, IEEE80211_MSG_STATE, "%s: %s -> %s (%d)\n",
169 vap->iv_state = nstate; /* state transition */
171 ieee80211_cancel_scan(vap); /* background scan */
176 ieee80211_cancel_scan(vap);
179 ieee80211_dfs_cac_stop(vap);
182 ieee80211_iterate_nodes(&ic->ic_sta, sta_disassoc, vap);
189 ieee80211_reset_bss(vap);
191 if (vap->iv_auth->ia_detach != NULL)
192 vap->iv_auth->ia_detach(vap);
198 ieee80211_iterate_nodes(&ic->ic_sta, sta_disassoc, vap);
214 ieee80211_dfs_cac_stop(vap);
217 if (vap->iv_des_chan != IEEE80211_CHAN_ANYC &&
218 !IEEE80211_IS_CHAN_RADAR(vap->iv_des_chan)) {
225 ieee80211_create_ibss(vap, vap->iv_des_chan);
231 * the vap will be marked with IEEE80211_FEXT_SCANREQ
235 if (vap->iv_flags_ext & IEEE80211_FEXT_SCANREQ) {
236 ieee80211_check_scan(vap,
237 vap->iv_scanreq_flags,
238 vap->iv_scanreq_duration,
239 vap->iv_scanreq_mindwell,
240 vap->iv_scanreq_maxdwell,
241 vap->iv_scanreq_nssid, vap->iv_scanreq_ssid);
242 vap->iv_flags_ext &= ~IEEE80211_FEXT_SCANREQ;
244 ieee80211_check_scan_current(vap);
250 ieee80211_check_scan_current(vap);
261 ieee80211_dfs_cac_start(vap);
264 if (vap->iv_flags & IEEE80211_F_WPA) {
275 ieee80211_create_ibss(vap,
277 ic->ic_curchan, vap->iv_flags_ht));
292 ieee80211_iterate_nodes(&ic->ic_sta, sta_csa, vap);
297 ieee80211_node_set_chan(vap->iv_bss,
299 ieee80211_htchanflags(vap->iv_bss->ni_chan)));
305 if (ieee80211_msg_debug(vap)) {
306 struct ieee80211_node *ni = vap->iv_bss;
307 ieee80211_note(vap,
326 if (vap->iv_auth->ia_attach != NULL) {
328 vap->iv_auth->ia_attach(vap);
329 } else if (vap->iv_auth->ia_detach != NULL) {
330 vap->iv_auth->ia_detach(vap);
332 ieee80211_node_authorize(vap->iv_bss);
343 ieee80211_iterate_nodes(&ic->ic_sta, sta_drop, vap);
353 hostap_deliver_data(struct ieee80211vap *vap,
357 struct ifnet *ifp = vap->iv_ifp;
363 KASSERT(vap->iv_opmode == IEEE80211_M_HOSTAP,
364 ("gack, opmode %d", vap->iv_opmode));
378 if ((vap->iv_flags & IEEE80211_F_NOBRIDGE) == 0) {
390 * same vap and authorized to receive traffic.
391 * Beware of traffic destined for the vap itself;
396 &vap->iv_ic->ic_sta, vap, eh->ether_dhost);
404 if (sta != vap->iv_bss) {
409 vap->iv_stats.is_rx_unauth++;
416 (void) ieee80211_vap_xmitpkt(vap, mcopy);
420 * Mark frame as coming from vap's interface.
425 * Spam DWDS vap's w/ multicast traffic.
428 ieee80211_dwds_mcast(vap, m);
446 doprint(struct ieee80211vap *vap, int subtype)
450 return (vap->iv_ic->ic_flags & IEEE80211_F_SCAN);
471 struct ieee80211vap *vap = ni->ni_vap;
473 struct ifnet *ifp = vap->iv_ifp;
504 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
507 vap->iv_stats.is_rx_tooshort++;
520 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
523 vap->iv_stats.is_rx_badversion++;
537 IEEE80211_DISCARD_MAC(vap,
541 vap->iv_stats.is_rx_tooshort++;
551 !IEEE80211_ADDR_EQ(bssid, vap->iv_bss->ni_bssid) &&
554 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
556 vap->iv_stats.is_rx_wrongbss++;
577 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
580 vap->iv_stats.is_rx_tooshort++;
585 (vap->iv_flags & IEEE80211_F_DWDS)))) {
587 IEEE80211_DISCARD(vap,
591 IEEE80211_DISCARD(vap,
597 vap->iv_stats.is_rx_wrongdir++;
601 if (ni == vap->iv_bss) {
602 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
607 vap->iv_stats.is_rx_notassoc++;
611 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
616 vap->iv_stats.is_rx_notassoc++;
626 vap->iv_node_ps(ni,
631 * are just delivered to the WDS vap (see below).
635 IEEE80211_DISCARD(vap,
640 vap->iv_stats.is_rx_unauth++;
670 if ((vap->iv_flags & IEEE80211_F_PRIVACY) == 0) {
674 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
676 vap->iv_stats.is_rx_noprivacy++;
716 if (key != NULL && !ieee80211_crypto_demic(vap, key, m, 0)) {
717 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
719 vap->iv_stats.is_rx_demicfail++;
724 if (ieee80211_radiotap_active_vap(vap))
725 ieee80211_radiotap_rx(vap, m);
730 m = ieee80211_decap(vap, m, hdrspace);
737 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
739 vap->iv_stats.is_rx_decap++;
754 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
758 vap->iv_stats.is_rx_unauth++;
767 if ((vap->iv_flags & IEEE80211_F_DROPUNENC) &&
773 vap->iv_stats.is_rx_unencrypted++;
785 m = ieee80211_decap_fastframe(vap, ni, m);
793 hostap_deliver_data(vap, ni, m);
797 vap->iv_stats.is_rx_mgmt++;
800 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
802 vap->iv_stats.is_rx_wrongdir++;
806 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
809 vap->iv_stats.is_rx_tooshort++;
814 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
817 vap->iv_stats.is_rx_mgtdiscard++; /* XXX stat */
821 if ((ieee80211_msg_debug(vap) && doprint(vap, subtype)) ||
822 ieee80211_msg_dumppkts(vap)) {
834 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
837 vap->iv_stats.is_rx_mgtdiscard++; /* XXX */
840 if ((vap->iv_flags & IEEE80211_F_PRIVACY) == 0) {
844 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
846 vap->iv_stats.is_rx_noprivacy++;
863 if (ieee80211_radiotap_active_vap(vap))
864 ieee80211_radiotap_rx(vap, m);
866 vap->iv_recv_mgmt(ni, m, subtype, rxs, rssi, nf);
870 vap->iv_stats.is_rx_ctl++;
872 vap->iv_recv_ctl(ni, m, subtype);
875 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
884 if (need_tap && ieee80211_radiotap_active_vap(vap))
885 ieee80211_radiotap_rx(vap, m);
895 struct ieee80211vap *vap = ni->ni_vap;
897 KASSERT(vap->iv_state == IEEE80211_S_RUN, ("state %d", vap->iv_state));
900 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
903 vap->iv_stats.is_rx_bad_auth++; /* XXX */
920 vap->iv_stats.is_rx_bad_auth++;
924 if (ni == vap->iv_bss) {
925 ni = ieee80211_dup_bss(vap, wh->i_addr2);
942 if (vap->iv_acl != NULL &&
943 vap->iv_acl->iac_getpolicy(vap) == IEEE80211_MACCMD_POLICY_RADIUS) {
951 IEEE80211_NOTE_MAC(vap,
957 IEEE80211_NOTE_MAC(vap,
974 struct ieee80211vap *vap = ni->ni_vap;
978 KASSERT(vap->iv_state == IEEE80211_S_RUN, ("state %d", vap->iv_state));
988 if ((vap->iv_flags & IEEE80211_F_PRIVACY) == 0) {
989 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1002 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1005 vap->iv_stats.is_rx_bad_auth++; /* XXX maybe a unique error? */
1013 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1017 vap->iv_stats.is_rx_bad_auth++;
1029 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1032 vap->iv_stats.is_rx_bad_auth++;
1037 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1040 vap->iv_stats.is_rx_bad_auth++;
1049 if (ni == vap->iv_bss) {
1050 ni = ieee80211_dup_bss(vap, wh->i_addr2);
1080 IEEE80211_NOTE(vap, IEEE80211_MSG_DEBUG | IEEE80211_MSG_AUTH,
1089 if (vap->iv_acl != NULL &&
1090 vap->iv_acl->iac_getpolicy(vap) == IEEE80211_MACCMD_POLICY_RADIUS) {
1091 IEEE80211_NOTE_MAC(vap,
1100 if (ni == vap->iv_bss) {
1101 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1108 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1111 vap->iv_stats.is_rx_bad_auth++;
1117 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1120 vap->iv_stats.is_rx_auth_fail++;
1124 IEEE80211_NOTE(vap, IEEE80211_MSG_DEBUG | IEEE80211_MSG_AUTH,
1129 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1132 vap->iv_stats.is_rx_bad_auth++;
1208 ieee80211_parse_wpa(struct ieee80211vap *vap, const uint8_t *frm,
1220 if ((vap->iv_flags & IEEE80211_F_WPA1) == 0) {
1221 IEEE80211_DISCARD_IE(vap,
1223 wh, "WPA", "not WPA, flags 0x%x", vap->iv_flags);
1227 IEEE80211_DISCARD_IE(vap,
1236 IEEE80211_DISCARD_IE(vap,
1253 IEEE80211_DISCARD_IE(vap,
1273 IEEE80211_DISCARD_IE(vap,
1356 ieee80211_parse_rsn(struct ieee80211vap *vap, const uint8_t *frm,
1368 if ((vap->iv_flags & IEEE80211_F_WPA2) == 0) {
1369 IEEE80211_DISCARD_IE(vap,
1371 wh, "WPA", "not RSN, flags 0x%x", vap->iv_flags);
1375 IEEE80211_DISCARD_IE(vap,
1383 IEEE80211_DISCARD_IE(vap,
1400 IEEE80211_DISCARD_IE(vap,
1420 IEEE80211_DISCARD_IE(vap,
1452 struct ieee80211vap *vap = ni->ni_vap;
1458 if (vap->iv_flags_ext & IEEE80211_FEXT_WPS) {
1467 if ((vap->iv_flags_ext & IEEE80211_FEXT_TSN) &&
1476 IEEE80211_DISCARD(vap, IEEE80211_MSG_ASSOC | IEEE80211_MSG_WPA,
1478 vap->iv_stats.is_rx_assoc_badwpaie++;
1484 switch (vap->iv_flags & IEEE80211_F_WPA) {
1496 IEEE80211_DISCARD(vap, IEEE80211_MSG_ASSOC | IEEE80211_MSG_WPA,
1499 vap->iv_stats.is_rx_assoc_badwpaie++;
1507 reason = ieee80211_parse_wpa(vap, wpa, rsnparms, wh);
1509 reason = ieee80211_parse_rsn(vap, rsn, rsnparms, wh);
1512 vap->iv_stats.is_rx_assoc_badwpaie++;
1515 IEEE80211_NOTE(vap, IEEE80211_MSG_ASSOC | IEEE80211_MSG_WPA, ni,
1545 struct ieee80211vap *vap = ni->ni_vap;
1546 struct ifnet *ifp = vap->iv_ifp;
1553 IEEE80211_NOTE(vap, IEEE80211_MSG_ASSOC, ni,
1555 vap->iv_stats.is_rx_nobuf++; /* XXX not right */
1574 hostap_deliver_data(vap, ni, m);
1592 struct ieee80211vap *vap = ni->ni_vap;
1594 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ANY, wh->i_addr2,
1599 vap->iv_stats.is_rx_assoc_capmismatch++;
1617 struct ieee80211vap *vap = ni->ni_vap;
1619 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
1621 vap->iv_stats.is_rx_auth_unsupported++;
1656 struct ieee80211vap *vap = ni->ni_vap;
1675 vap->iv_stats.is_rx_mgtdiscard++;
1690 vap->iv_stats.is_rx_beacon++; /* XXX remove */
1708 ieee80211_probe_curchan(vap, 1);
1711 ieee80211_add_scan(vap, ic->ic_curchan, &scan, wh,
1729 IEEE80211_NOTE_FRAME(vap,
1771 if (vap->iv_state != IEEE80211_S_RUN) {
1772 vap->iv_stats.is_rx_mgtdiscard++;
1778 if (vap->iv_acl != NULL && !vap->iv_acl->iac_check(vap, wh)) {
1779 IEEE80211_DISCARD(vap, IEEE80211_MSG_ACL,
1781 vap->iv_stats.is_rx_acl++;
1811 IEEE80211_VERIFY_SSID(vap->iv_bss, ssid, return);
1812 if ((vap->iv_flags & IEEE80211_F_HIDESSID) && ssid[1] == 0) {
1813 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1816 vap->iv_stats.is_rx_ssidmismatch++; /*XXX*/
1821 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_INPUT, wh->i_addr2,
1829 ieee80211_send_proberesp(vap, wh->i_addr2,
1836 if (vap->iv_state != IEEE80211_S_RUN) {
1837 vap->iv_stats.is_rx_mgtdiscard++;
1840 if (!IEEE80211_ADDR_EQ(wh->i_addr3, vap->iv_bss->ni_bssid)) {
1841 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
1843 vap->iv_stats.is_rx_wrongbss++; /*XXX unique stat?*/
1857 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_AUTH, wh->i_addr2,
1862 if (vap->iv_acl != NULL && !vap->iv_acl->iac_check(vap, wh)) {
1863 IEEE80211_DISCARD(vap, IEEE80211_MSG_ACL,
1865 vap->iv_stats.is_rx_acl++;
1871 if (vap->iv_flags & IEEE80211_F_COUNTERM) {
1872 IEEE80211_DISCARD(vap,
1875 vap->iv_stats.is_rx_auth_countermeasures++;
1912 if (vap->iv_state != IEEE80211_S_RUN) {
1913 vap->iv_stats.is_rx_mgtdiscard++;
1916 if (!IEEE80211_ADDR_EQ(wh->i_addr3, vap->iv_bss->ni_bssid)) {
1917 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
1919 vap->iv_stats.is_rx_assoc_bss++;
1929 if (ni == vap->iv_bss) {
1930 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ANY, wh->i_addr2,
1936 vap->iv_stats.is_rx_assoc_notauth++;
1986 else if (vap->iv_flags_ht & IEEE80211_FHT_HTCOMPAT) {
1999 IEEE80211_VERIFY_SSID(vap->iv_bss, ssid, return);
2008 if ((vap->iv_flags & IEEE80211_F_WPA) &&
2037 vap->iv_stats.is_rx_assoc_norate++;
2046 if ((vap->iv_flags & IEEE80211_F_PUREG) && rate < 48) {
2048 vap->iv_stats.is_rx_assoc_norate++;
2054 ni->ni_chan = vap->iv_bss->ni_chan;
2062 vap->iv_stats.is_ht_assoc_norate++;
2080 (((vap->iv_flags & IEEE80211_F_WPA) &&
2082 (vap->iv_flags & (IEEE80211_F_WPA|IEEE80211_F_PRIVACY)) == IEEE80211_F_PRIVACY)) {
2083 IEEE80211_NOTE(vap,
2093 vap->iv_stats.is_ht_assoc_downgrade++;
2098 if ((vap->iv_flags_ht & IEEE80211_FHT_PUREN) &&
2101 vap->iv_stats.is_ht_assoc_nohtcap++;
2108 ni->ni_fhdwell = vap->iv_bss->ni_fhdwell;
2109 ni->ni_fhindex = vap->iv_bss->ni_fhindex;
2154 if (vap->iv_state != IEEE80211_S_RUN ||
2156 !IEEE80211_ADDR_EQ(wh->i_addr1, vap->iv_myaddr)) {
2157 vap->iv_stats.is_rx_mgtdiscard++;
2167 vap->iv_stats.is_rx_deauth++;
2170 vap->iv_stats.is_rx_disassoc++;
2173 IEEE80211_NOTE(vap, IEEE80211_MSG_AUTH, ni,
2177 if (ni != vap->iv_bss)
2184 if (ni == vap->iv_bss) {
2185 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2187 vap->iv_stats.is_rx_mgtdiscard++;
2188 } else if (!IEEE80211_ADDR_EQ(vap->iv_myaddr, wh->i_addr1) &&
2190 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2192 vap->iv_stats.is_rx_mgtdiscard++;
2193 } else if (vap->iv_state != IEEE80211_S_RUN) {
2194 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2196 ieee80211_state_name[vap->iv_state]);
2197 vap->iv_stats.is_rx_mgtdiscard++;
2208 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2210 vap->iv_stats.is_rx_mgtdiscard++;
2214 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
2216 vap->iv_stats.is_rx_badsubtype++;
2240 struct ieee80211vap *vap = ni->ni_vap;
2241 struct ieee80211com *ic = vap->iv_ic;
2249 IEEE80211_DISCARD(vap,
2253 vap->iv_stats.is_ps_unassoc++;
2261 IEEE80211_DISCARD(vap,
2266 vap->iv_stats.is_ps_badaid++;
2281 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_POWER, wh->i_addr2,
2284 vap->iv_stats.is_ps_qempty++; /* XXX node stat */
2285 if (vap->iv_set_tim != NULL)
2286 vap->iv_set_tim(ni, 0); /* just in case */
2295 IEEE80211_NOTE(vap, IEEE80211_MSG_POWER, ni,
2299 IEEE80211_NOTE(vap, IEEE80211_MSG_POWER, ni,
2301 if (vap->iv_set_tim != NULL)
2302 vap->iv_set_tim(ni, 0);
2314 (void) ieee80211_vap_xmitpkt(vap, m);