Lines Matching refs:vap

95 hostap_vdetach(struct ieee80211vap *vap)
100 hostap_vattach(struct ieee80211vap *vap)
102 vap->iv_newstate = hostap_newstate;
103 vap->iv_input = hostap_input;
104 vap->iv_recv_mgmt = hostap_recv_mgmt;
105 vap->iv_recv_ctl = hostap_recv_ctl;
106 vap->iv_opdetach = hostap_vdetach;
107 vap->iv_deliver_data = hostap_deliver_data;
108 vap->iv_recv_pspoll = ieee80211_recv_pspoll;
125 struct ieee80211vap *vap = ni->ni_vap;
128 if (ni->ni_inact > vap->iv_inact_init) {
129 ni->ni_inact = vap->iv_inact_init;
130 IEEE80211_NOTE(vap, IEEE80211_MSG_INACT, ni,
157 * IEEE80211_M_HOSTAP vap state machine handler.
160 hostap_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
162 struct ieee80211com *ic = vap->iv_ic;
167 ostate = vap->iv_state;
168 IEEE80211_DPRINTF(vap, IEEE80211_MSG_STATE, "%s: %s -> %s (%d)\n",
171 vap->iv_state = nstate; /* state transition */
173 ieee80211_cancel_scan(vap); /* background scan */
178 ieee80211_cancel_scan(vap);
181 ieee80211_dfs_cac_stop(vap);
184 ieee80211_iterate_nodes_vap(&ic->ic_sta, vap,
192 ieee80211_reset_bss(vap);
194 if (vap->iv_auth->ia_detach != NULL)
195 vap->iv_auth->ia_detach(vap);
201 ieee80211_iterate_nodes_vap(&ic->ic_sta, vap,
209 vap->iv_flags_ext &= ~IEEE80211_FEXT_NONERP_PR;
210 vap->iv_flags_ht &= ~IEEE80211_FHT_NONHT_PR;
219 ieee80211_dfs_cac_stop(vap);
222 if (vap->iv_des_chan != IEEE80211_CHAN_ANYC &&
223 !IEEE80211_IS_CHAN_RADAR(vap->iv_des_chan)) {
230 ieee80211_create_ibss(vap, vap->iv_des_chan);
236 * the vap will be marked with IEEE80211_FEXT_SCANREQ
240 if (vap->iv_flags_ext & IEEE80211_FEXT_SCANREQ) {
241 ieee80211_check_scan(vap,
242 vap->iv_scanreq_flags,
243 vap->iv_scanreq_duration,
244 vap->iv_scanreq_mindwell,
245 vap->iv_scanreq_maxdwell,
246 vap->iv_scanreq_nssid, vap->iv_scanreq_ssid);
247 vap->iv_flags_ext &= ~IEEE80211_FEXT_SCANREQ;
249 ieee80211_check_scan_current(vap);
255 ieee80211_check_scan_current(vap);
266 ieee80211_dfs_cac_start(vap);
269 if (vap->iv_flags & IEEE80211_F_WPA) {
280 ieee80211_create_ibss(vap,
282 ic->ic_curchan, vap->iv_flags_ht));
297 ieee80211_iterate_nodes_vap(&ic->ic_sta, vap,
303 ieee80211_node_set_chan(vap->iv_bss,
305 ieee80211_htchanflags(vap->iv_bss->ni_chan)));
311 if (ieee80211_msg_debug(vap)) {
312 struct ieee80211_node *ni = vap->iv_bss;
313 ieee80211_note(vap,
332 if (vap->iv_auth->ia_attach != NULL) {
334 vap->iv_auth->ia_attach(vap);
335 } else if (vap->iv_auth->ia_detach != NULL) {
336 vap->iv_auth->ia_detach(vap);
338 ieee80211_node_authorize(vap->iv_bss);
349 ieee80211_iterate_nodes_vap(&ic->ic_sta, vap,
360 hostap_deliver_data(struct ieee80211vap *vap,
364 struct ifnet *ifp = vap->iv_ifp;
370 KASSERT(vap->iv_opmode == IEEE80211_M_HOSTAP,
371 ("gack, opmode %d", vap->iv_opmode));
385 if ((vap->iv_flags & IEEE80211_F_NOBRIDGE) == 0) {
397 * same vap and authorized to receive traffic.
398 * Beware of traffic destined for the vap itself;
403 &vap->iv_ic->ic_sta, vap, eh->ether_dhost);
411 if (sta != vap->iv_bss) {
416 vap->iv_stats.is_rx_unauth++;
423 (void) ieee80211_vap_xmitpkt(vap, mcopy);
427 * Mark frame as coming from vap's interface.
432 * Spam DWDS vap's w/ multicast traffic.
435 ieee80211_dwds_mcast(vap, m);
453 doprint(struct ieee80211vap *vap, int subtype)
457 return (vap->iv_ic->ic_flags & IEEE80211_F_SCAN);
478 struct ieee80211vap *vap = ni->ni_vap;
480 struct ifnet *ifp = vap->iv_ifp;
521 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
524 vap->iv_stats.is_rx_tooshort++;
537 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
540 vap->iv_stats.is_rx_badversion++;
554 IEEE80211_DISCARD_MAC(vap,
558 vap->iv_stats.is_rx_tooshort++;
568 !IEEE80211_ADDR_EQ(bssid, vap->iv_bss->ni_bssid) &&
571 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
573 vap->iv_stats.is_rx_wrongbss++;
594 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
597 vap->iv_stats.is_rx_tooshort++;
602 (vap->iv_flags & IEEE80211_F_DWDS)))) {
604 IEEE80211_DISCARD(vap,
608 IEEE80211_DISCARD(vap,
614 vap->iv_stats.is_rx_wrongdir++;
618 if (ni == vap->iv_bss) {
619 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
624 vap->iv_stats.is_rx_notassoc++;
628 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
633 vap->iv_stats.is_rx_notassoc++;
643 vap->iv_node_ps(ni,
648 * are just delivered to the WDS vap (see below).
652 IEEE80211_DISCARD(vap,
657 vap->iv_stats.is_rx_unauth++;
687 if ((vap->iv_flags & IEEE80211_F_PRIVACY) == 0) {
691 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
693 vap->iv_stats.is_rx_noprivacy++;
733 if (key != NULL && !ieee80211_crypto_demic(vap, key, m, 0)) {
734 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
736 vap->iv_stats.is_rx_demicfail++;
741 if (ieee80211_radiotap_active_vap(vap))
742 ieee80211_radiotap_rx(vap, m);
747 m = ieee80211_decap(vap, m, hdrspace);
754 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
756 vap->iv_stats.is_rx_decap++;
771 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
775 vap->iv_stats.is_rx_unauth++;
784 if ((vap->iv_flags & IEEE80211_F_DROPUNENC) &&
791 vap->iv_stats.is_rx_unencrypted++;
803 m = ieee80211_decap_fastframe(vap, ni, m);
811 hostap_deliver_data(vap, ni, m);
815 vap->iv_stats.is_rx_mgmt++;
818 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
820 vap->iv_stats.is_rx_wrongdir++;
824 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
827 vap->iv_stats.is_rx_tooshort++;
832 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
835 vap->iv_stats.is_rx_mgtdiscard++; /* XXX stat */
839 if ((ieee80211_msg_debug(vap) && doprint(vap, subtype)) ||
840 ieee80211_msg_dumppkts(vap)) {
852 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
855 vap->iv_stats.is_rx_mgtdiscard++; /* XXX */
858 if ((vap->iv_flags & IEEE80211_F_PRIVACY) == 0) {
862 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
864 vap->iv_stats.is_rx_noprivacy++;
881 if (ieee80211_radiotap_active_vap(vap))
882 ieee80211_radiotap_rx(vap, m);
884 vap->iv_recv_mgmt(ni, m, subtype, rxs, rssi, nf);
888 vap->iv_stats.is_rx_ctl++;
890 vap->iv_recv_ctl(ni, m, subtype);
893 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
902 if (need_tap && ieee80211_radiotap_active_vap(vap))
903 ieee80211_radiotap_rx(vap, m);
913 struct ieee80211vap *vap = ni->ni_vap;
915 KASSERT(vap->iv_state == IEEE80211_S_RUN, ("state %d", vap->iv_state));
918 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
921 vap->iv_stats.is_rx_bad_auth++; /* XXX */
938 vap->iv_stats.is_rx_bad_auth++;
942 if (ni == vap->iv_bss) {
943 ni = ieee80211_dup_bss(vap, wh->i_addr2);
960 if (vap->iv_acl != NULL &&
961 vap->iv_acl->iac_getpolicy(vap) == IEEE80211_MACCMD_POLICY_RADIUS) {
969 IEEE80211_NOTE_MAC(vap,
975 IEEE80211_NOTE_MAC(vap,
992 struct ieee80211vap *vap = ni->ni_vap;
996 KASSERT(vap->iv_state == IEEE80211_S_RUN, ("state %d", vap->iv_state));
1006 if ((vap->iv_flags & IEEE80211_F_PRIVACY) == 0) {
1007 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1020 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1023 vap->iv_stats.is_rx_bad_auth++; /* XXX maybe a unique error? */
1031 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1035 vap->iv_stats.is_rx_bad_auth++;
1047 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1050 vap->iv_stats.is_rx_bad_auth++;
1055 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1058 vap->iv_stats.is_rx_bad_auth++;
1067 if (ni == vap->iv_bss) {
1068 ni = ieee80211_dup_bss(vap, wh->i_addr2);
1098 IEEE80211_NOTE(vap, IEEE80211_MSG_DEBUG | IEEE80211_MSG_AUTH,
1107 if (vap->iv_acl != NULL &&
1108 vap->iv_acl->iac_getpolicy(vap) == IEEE80211_MACCMD_POLICY_RADIUS) {
1109 IEEE80211_NOTE_MAC(vap,
1118 if (ni == vap->iv_bss) {
1119 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1126 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1129 vap->iv_stats.is_rx_bad_auth++;
1135 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1138 vap->iv_stats.is_rx_auth_fail++;
1142 IEEE80211_NOTE(vap, IEEE80211_MSG_DEBUG | IEEE80211_MSG_AUTH,
1147 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_AUTH,
1150 vap->iv_stats.is_rx_bad_auth++;
1234 ieee80211_parse_wpa(struct ieee80211vap *vap, const uint8_t *frm,
1246 if ((vap->iv_flags & IEEE80211_F_WPA1) == 0) {
1247 IEEE80211_DISCARD_IE(vap,
1249 wh, "WPA", "not WPA, flags 0x%x", vap->iv_flags);
1253 IEEE80211_DISCARD_IE(vap,
1262 IEEE80211_DISCARD_IE(vap,
1274 IEEE80211_DISCARD_IE(vap,
1286 IEEE80211_DISCARD_IE(vap,
1303 IEEE80211_DISCARD_IE(vap,
1319 IEEE80211_DISCARD_IE(vap,
1411 ieee80211_parse_rsn(struct ieee80211vap *vap, const uint8_t *frm,
1423 if ((vap->iv_flags & IEEE80211_F_WPA2) == 0) {
1424 IEEE80211_DISCARD_IE(vap,
1426 wh, "WPA", "not RSN, flags 0x%x", vap->iv_flags);
1431 IEEE80211_DISCARD_IE(vap,
1439 IEEE80211_DISCARD_IE(vap,
1451 IEEE80211_DISCARD_IE(vap,
1458 IEEE80211_DISCARD_IE(vap,
1470 IEEE80211_DISCARD_IE(vap,
1498 IEEE80211_DISCARD_IE(vap,
1509 IEEE80211_DISCARD_IE(vap,
1541 struct ieee80211vap *vap = ni->ni_vap;
1547 if (vap->iv_flags_ext & IEEE80211_FEXT_WPS) {
1556 if ((vap->iv_flags_ext & IEEE80211_FEXT_TSN) &&
1565 IEEE80211_DISCARD(vap, IEEE80211_MSG_ASSOC | IEEE80211_MSG_WPA,
1567 vap->iv_stats.is_rx_assoc_badwpaie++;
1573 switch (vap->iv_flags & IEEE80211_F_WPA) {
1585 IEEE80211_DISCARD(vap, IEEE80211_MSG_ASSOC | IEEE80211_MSG_WPA,
1588 vap->iv_stats.is_rx_assoc_badwpaie++;
1596 reason = ieee80211_parse_wpa(vap, wpa, rsnparms, wh);
1598 reason = ieee80211_parse_rsn(vap, rsn, rsnparms, wh);
1602 vap->iv_stats.is_rx_assoc_badwpaie++;
1605 IEEE80211_NOTE(vap, IEEE80211_MSG_ASSOC | IEEE80211_MSG_WPA, ni,
1635 struct ieee80211vap *vap = ni->ni_vap;
1636 struct ifnet *ifp = vap->iv_ifp;
1643 IEEE80211_NOTE(vap, IEEE80211_MSG_ASSOC, ni,
1645 vap->iv_stats.is_rx_nobuf++; /* XXX not right */
1664 hostap_deliver_data(vap, ni, m);
1682 struct ieee80211vap *vap = ni->ni_vap;
1684 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ANY, wh->i_addr2,
1689 vap->iv_stats.is_rx_assoc_capmismatch++;
1707 struct ieee80211vap *vap = ni->ni_vap;
1709 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
1711 vap->iv_stats.is_rx_auth_unsupported++;
1746 struct ieee80211vap *vap = ni->ni_vap;
1766 vap->iv_stats.is_rx_mgtdiscard++;
1781 vap->iv_stats.is_rx_beacon++; /* XXX remove */
1799 ieee80211_probe_curchan(vap, 1);
1802 ieee80211_add_scan(vap, ic->ic_curchan, &scan, wh,
1816 vap->iv_lastnonerp = ticks;
1817 vap->iv_flags_ext |= IEEE80211_FEXT_NONERP_PR;
1821 if (vap->iv_protmode != IEEE80211_PROT_NONE &&
1822 (vap->iv_flags & IEEE80211_F_USEPROT) == 0) {
1823 IEEE80211_NOTE_FRAME(vap,
1830 vap->iv_flags |= IEEE80211_F_USEPROT;
1831 ieee80211_vap_update_erp_protmode(vap);
1851 ieee80211_htprot_update(vap,
1856 ieee80211_htprot_update(vap,
1865 if (vap->iv_state != IEEE80211_S_RUN) {
1866 vap->iv_stats.is_rx_mgtdiscard++;
1872 if (vap->iv_acl != NULL && !vap->iv_acl->iac_check(vap, wh)) {
1873 IEEE80211_DISCARD(vap, IEEE80211_MSG_ACL,
1875 vap->iv_stats.is_rx_acl++;
1905 IEEE80211_VERIFY_SSID(vap->iv_bss, ssid, return);
1906 if ((vap->iv_flags & IEEE80211_F_HIDESSID) && ssid[1] == 0) {
1907 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1910 vap->iv_stats.is_rx_ssidmismatch++; /*XXX*/
1915 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_INPUT, wh->i_addr2,
1923 ieee80211_send_proberesp(vap, wh->i_addr2,
1930 if (vap->iv_state != IEEE80211_S_RUN) {
1931 vap->iv_stats.is_rx_mgtdiscard++;
1934 if (!IEEE80211_ADDR_EQ(wh->i_addr3, vap->iv_bss->ni_bssid)) {
1935 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
1937 vap->iv_stats.is_rx_wrongbss++; /*XXX unique stat?*/
1951 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_AUTH, wh->i_addr2,
1956 if (vap->iv_acl != NULL && !vap->iv_acl->iac_check(vap, wh)) {
1957 IEEE80211_DISCARD(vap, IEEE80211_MSG_ACL,
1959 vap->iv_stats.is_rx_acl++;
1965 if (vap->iv_flags & IEEE80211_F_COUNTERM) {
1966 IEEE80211_DISCARD(vap,
1969 vap->iv_stats.is_rx_auth_countermeasures++;
2006 if (vap->iv_state != IEEE80211_S_RUN) {
2007 vap->iv_stats.is_rx_mgtdiscard++;
2010 if (!IEEE80211_ADDR_EQ(wh->i_addr3, vap->iv_bss->ni_bssid)) {
2011 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
2013 vap->iv_stats.is_rx_assoc_bss++;
2023 if (ni == vap->iv_bss) {
2024 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ANY, wh->i_addr2,
2030 vap->iv_stats.is_rx_assoc_notauth++;
2087 else if (vap->iv_flags_ht & IEEE80211_FHT_HTCOMPAT) {
2100 IEEE80211_VERIFY_SSID(vap->iv_bss, ssid, return);
2121 if ((vap->iv_flags & IEEE80211_F_WPA) &&
2150 vap->iv_stats.is_rx_assoc_norate++;
2159 if ((vap->iv_flags & IEEE80211_F_PUREG) && rate < 48) {
2161 vap->iv_stats.is_rx_assoc_norate++;
2168 ni->ni_chan = vap->iv_bss->ni_chan;
2189 vap->iv_stats.is_ht_assoc_norate++;
2213 (((vap->iv_flags & IEEE80211_F_WPA) &&
2215 (vap->iv_flags & (IEEE80211_F_WPA|IEEE80211_F_PRIVACY)) == IEEE80211_F_PRIVACY)) {
2216 IEEE80211_NOTE(vap,
2226 vap->iv_stats.is_ht_assoc_downgrade++;
2231 if ((vap->iv_flags_ht & IEEE80211_FHT_PUREN) &&
2234 vap->iv_stats.is_ht_assoc_nohtcap++;
2241 ni->ni_fhdwell = vap->iv_bss->ni_fhdwell;
2242 ni->ni_fhindex = vap->iv_bss->ni_fhindex;
2298 if (vap->iv_state != IEEE80211_S_RUN ||
2300 !IEEE80211_ADDR_EQ(wh->i_addr1, vap->iv_myaddr)) {
2301 vap->iv_stats.is_rx_mgtdiscard++;
2311 vap->iv_stats.is_rx_deauth++;
2314 vap->iv_stats.is_rx_disassoc++;
2317 IEEE80211_NOTE(vap, IEEE80211_MSG_AUTH, ni,
2321 if (ni != vap->iv_bss)
2328 if (ni == vap->iv_bss) {
2329 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2331 vap->iv_stats.is_rx_mgtdiscard++;
2332 } else if (!IEEE80211_ADDR_EQ(vap->iv_myaddr, wh->i_addr1) &&
2334 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2336 vap->iv_stats.is_rx_mgtdiscard++;
2337 } else if (vap->iv_state != IEEE80211_S_RUN) {
2338 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2340 ieee80211_state_name[vap->iv_state]);
2341 vap->iv_stats.is_rx_mgtdiscard++;
2352 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2354 vap->iv_stats.is_rx_mgtdiscard++;
2358 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
2360 vap->iv_stats.is_rx_badsubtype++;
2384 struct ieee80211vap *vap = ni->ni_vap;
2385 struct ieee80211com *ic = vap->iv_ic;
2393 IEEE80211_DISCARD(vap,
2397 vap->iv_stats.is_ps_unassoc++;
2405 IEEE80211_DISCARD(vap,
2410 vap->iv_stats.is_ps_badaid++;
2425 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_POWER, wh->i_addr2,
2428 vap->iv_stats.is_ps_qempty++; /* XXX node stat */
2429 if (vap->iv_set_tim != NULL)
2430 vap->iv_set_tim(ni, 0); /* just in case */
2439 IEEE80211_NOTE(vap, IEEE80211_MSG_POWER, ni,
2443 IEEE80211_NOTE(vap, IEEE80211_MSG_POWER, ni,
2445 if (vap->iv_set_tim != NULL)
2446 vap->iv_set_tim(ni, 0);
2458 (void) ieee80211_vap_xmitpkt(vap, m);