Lines Matching refs:vap

94 doprint(struct ieee80211vap *vap, int subtype)  in doprint()  argument
98 return (vap->iv_opmode == IEEE80211_M_IBSS); in doprint()
121 ieee80211_vap_pkt_send_dest(struct ieee80211vap *vap, struct mbuf *m, in ieee80211_vap_pkt_send_dest() argument
124 struct ieee80211com *ic = vap->iv_ic; in ieee80211_vap_pkt_send_dest()
125 struct ifnet *ifp = vap->iv_ifp; in ieee80211_vap_pkt_send_dest()
155 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_OUTPUT, in ieee80211_vap_pkt_send_dest()
158 vap->iv_stats.is_tx_classify++; in ieee80211_vap_pkt_send_dest()
190 (vap->iv_flags_ht & IEEE80211_FHT_AMPDU_TX)); in ieee80211_vap_pkt_send_dest()
193 (vap->iv_flags_ht & IEEE80211_FHT_AMSDU_TX)); in ieee80211_vap_pkt_send_dest()
197 (IEEE80211_ATH_CAP(vap, ni, IEEE80211_NODE_FF)); in ieee80211_vap_pkt_send_dest()
272 if (__predict_true((vap->iv_caps & IEEE80211_C_8023ENCAP) == 0)) { in ieee80211_vap_pkt_send_dest()
279 IEEE80211_DPRINTF(vap, IEEE80211_MSG_SUPERG, in ieee80211_vap_pkt_send_dest()
288 IEEE80211_DPRINTF(vap, IEEE80211_MSG_SUPERG, in ieee80211_vap_pkt_send_dest()
309 if (__predict_true((vap->iv_caps & IEEE80211_C_8023ENCAP) == 0)) { in ieee80211_vap_pkt_send_dest()
313 m = ieee80211_encap(vap, ni, m); in ieee80211_vap_pkt_send_dest()
345 ieee80211_start_pkt(struct ieee80211vap *vap, struct mbuf *m) in ieee80211_start_pkt() argument
347 #define IS_DWDS(vap) \ in ieee80211_start_pkt() argument
348 (vap->iv_opmode == IEEE80211_M_WDS && \ in ieee80211_start_pkt()
349 (vap->iv_flags_ext & IEEE80211_FEXT_WDSLEGACY) == 0) in ieee80211_start_pkt()
350 struct ieee80211com *ic = vap->iv_ic; in ieee80211_start_pkt()
351 struct ifnet *ifp = vap->iv_ifp; in ieee80211_start_pkt()
359 ieee80211_cancel_anyscan(vap); in ieee80211_start_pkt()
370 IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT, in ieee80211_start_pkt()
372 vap->iv_stats.is_tx_nobuf++; /* XXX */ in ieee80211_start_pkt()
378 if (IS_DWDS(vap)) { in ieee80211_start_pkt()
385 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_WDS, in ieee80211_start_pkt()
387 vap->iv_stats.is_dwds_mcast++; in ieee80211_start_pkt()
393 if (vap->iv_opmode == IEEE80211_M_HOSTAP) { in ieee80211_start_pkt()
398 ieee80211_dwds_mcast(vap, m); in ieee80211_start_pkt()
402 if (vap->iv_opmode != IEEE80211_M_MBSS) { in ieee80211_start_pkt()
404 ni = ieee80211_find_txnode(vap, eh->ether_dhost); in ieee80211_start_pkt()
414 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_OUTPUT, in ieee80211_start_pkt()
418 vap->iv_stats.is_tx_notassoc++; in ieee80211_start_pkt()
427 if (!IEEE80211_ADDR_EQ(eh->ether_shost, vap->iv_myaddr)) { in ieee80211_start_pkt()
431 if (!ieee80211_mesh_isproxyena(vap)) { in ieee80211_start_pkt()
432 IEEE80211_DISCARD_MAC(vap, in ieee80211_start_pkt()
437 vap->iv_stats.is_mesh_notproxy++; in ieee80211_start_pkt()
443 IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT, in ieee80211_start_pkt()
447 ieee80211_mesh_proxy_check(vap, eh->ether_shost); in ieee80211_start_pkt()
449 ni = ieee80211_mesh_discover(vap, eh->ether_dhost, m); in ieee80211_start_pkt()
466 if (vap->iv_state == IEEE80211_S_SLEEP) { in ieee80211_start_pkt()
475 ieee80211_new_state(vap, IEEE80211_S_RUN, 0); in ieee80211_start_pkt()
479 if (ieee80211_vap_pkt_send_dest(vap, m, ni) != 0) in ieee80211_start_pkt()
496 struct ieee80211vap *vap = ifp->if_softc; in ieee80211_vap_transmit() local
497 struct ieee80211com *ic = vap->iv_ic; in ieee80211_vap_transmit()
505 if (vap->iv_state != IEEE80211_S_RUN && in ieee80211_vap_transmit()
506 vap->iv_state != IEEE80211_S_SLEEP) { in ieee80211_vap_transmit()
509 if (vap->iv_state != IEEE80211_S_RUN && in ieee80211_vap_transmit()
510 vap->iv_state != IEEE80211_S_SLEEP) { in ieee80211_vap_transmit()
511 IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT, in ieee80211_vap_transmit()
513 __func__, ieee80211_state_name[vap->iv_state]); in ieee80211_vap_transmit()
514 vap->iv_stats.is_tx_badstate++; in ieee80211_vap_transmit()
539 return (ieee80211_start_pkt(vap, m)); in ieee80211_vap_transmit()
560 ieee80211_raw_output(struct ieee80211vap *vap, struct ieee80211_node *ni, in ieee80211_raw_output() argument
563 struct ieee80211com *ic = vap->iv_ic; in ieee80211_raw_output()
589 if_inc_counter(vap->iv_ifp, IFCOUNTER_OERRORS, 1); in ieee80211_raw_output()
750 struct ieee80211vap *vap; in ieee80211_output() local
767 vap = ifp->if_softc; in ieee80211_output()
768 ic = vap->iv_ic; in ieee80211_output()
774 return vap->iv_output(ifp, m, dst, ro); in ieee80211_output()
780 if (ieee80211_vap_ifp_check_is_monitor(vap)) in ieee80211_output()
784 if (vap->iv_state == IEEE80211_S_CAC) { in ieee80211_output()
785 IEEE80211_DPRINTF(vap, in ieee80211_output()
788 vap->iv_stats.is_tx_badstate++; in ieee80211_output()
790 } else if (vap->iv_state == IEEE80211_S_SCAN) in ieee80211_output()
813 ni = ieee80211_find_txnode(vap, wh->i_addr1); in ieee80211_output()
817 ni = ieee80211_find_txnode(vap, wh->i_addr3); in ieee80211_output()
829 ni = ieee80211_ref_node(vap->iv_bss); in ieee80211_output()
864 ret = ieee80211_raw_output(vap, ni, m, params); in ieee80211_output()
892 struct ieee80211vap *vap = ni->ni_vap; in ieee80211_send_setup() local
900 switch (vap->iv_opmode) { in ieee80211_send_setup()
923 IEEE80211_ADDR_COPY(wh->i_addr2, vap->iv_myaddr); in ieee80211_send_setup()
934 vap->iv_myaddr); in ieee80211_send_setup()
939 vap->iv_myaddr); in ieee80211_send_setup()
953 if (vap->iv_opmode == IEEE80211_M_MBSS) in ieee80211_send_setup()
997 struct ieee80211vap *vap = ni->ni_vap; in ieee80211_mgmt_output() local
1004 if (vap->iv_state == IEEE80211_S_CAC) { in ieee80211_mgmt_output()
1005 IEEE80211_NOTE(vap, IEEE80211_MSG_OUTPUT | IEEE80211_MSG_DOTH, in ieee80211_mgmt_output()
1008 vap->iv_stats.is_tx_badstate++; in ieee80211_mgmt_output()
1025 vap->iv_myaddr, ni->ni_macaddr, ni->ni_bssid); in ieee80211_mgmt_output()
1027 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_AUTH, wh->i_addr1, in ieee80211_mgmt_output()
1038 if ((ieee80211_msg_debug(vap) && doprint(vap, type)) || in ieee80211_mgmt_output()
1039 ieee80211_msg_dumppkts(vap)) { in ieee80211_mgmt_output()
1040 ieee80211_note(vap, "[%s] send %s on channel %u\n", in ieee80211_mgmt_output()
1048 ret = ieee80211_raw_output(vap, ni, m, params); in ieee80211_mgmt_output()
1057 struct ieee80211vap *vap = ni->ni_vap; in ieee80211_nulldata_transmitted() local
1059 wakeup(vap); in ieee80211_nulldata_transmitted()
1077 struct ieee80211vap *vap = ni->ni_vap; in ieee80211_send_nulldata() local
1085 if (vap->iv_state == IEEE80211_S_CAC) { in ieee80211_send_nulldata()
1086 IEEE80211_NOTE(vap, IEEE80211_MSG_OUTPUT | IEEE80211_MSG_DOTH, in ieee80211_send_nulldata()
1089 vap->iv_stats.is_tx_badstate++; in ieee80211_send_nulldata()
1098 if (vap->iv_opmode == IEEE80211_M_WDS) in ieee80211_send_nulldata()
1107 vap->iv_stats.is_tx_nobuf++; in ieee80211_send_nulldata()
1128 tid, vap->iv_myaddr, ni->ni_macaddr, ni->ni_bssid); in ieee80211_send_nulldata()
1130 if (vap->iv_opmode == IEEE80211_M_WDS) in ieee80211_send_nulldata()
1142 vap->iv_myaddr, ni->ni_macaddr, ni->ni_bssid); in ieee80211_send_nulldata()
1144 if (vap->iv_opmode != IEEE80211_M_WDS) { in ieee80211_send_nulldata()
1147 vap->iv_opmode != IEEE80211_M_HOSTAP) in ieee80211_send_nulldata()
1162 IEEE80211_NOTE(vap, IEEE80211_MSG_DEBUG | IEEE80211_MSG_DUMPPKTS, ni, in ieee80211_send_nulldata()
1168 ret = ieee80211_raw_output(vap, ni, m, NULL); in ieee80211_send_nulldata()
1331 ieee80211_mbuf_adjust(struct ieee80211vap *vap, int hdrsize, in ieee80211_mbuf_adjust() argument
1335 int needed_space = vap->iv_ic->ic_headroom + hdrsize; in ieee80211_mbuf_adjust()
1350 IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT, in ieee80211_mbuf_adjust()
1352 vap->iv_stats.is_tx_nobuf++; /* XXX new stat */ in ieee80211_mbuf_adjust()
1369 IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT, in ieee80211_mbuf_adjust()
1371 vap->iv_stats.is_tx_nobuf++; in ieee80211_mbuf_adjust()
1413 ieee80211_crypto_getucastkey(struct ieee80211vap *vap, in ieee80211_crypto_getucastkey() argument
1417 if (vap->iv_def_txkey == IEEE80211_KEYIX_NONE || in ieee80211_crypto_getucastkey()
1418 IEEE80211_KEY_UNDEFINED(&vap->iv_nw_keys[vap->iv_def_txkey])) in ieee80211_crypto_getucastkey()
1420 return &vap->iv_nw_keys[vap->iv_def_txkey]; in ieee80211_crypto_getucastkey()
1432 ieee80211_crypto_getmcastkey(struct ieee80211vap *vap, in ieee80211_crypto_getmcastkey() argument
1435 if (vap->iv_def_txkey == IEEE80211_KEYIX_NONE || in ieee80211_crypto_getmcastkey()
1436 IEEE80211_KEY_UNDEFINED(&vap->iv_nw_keys[vap->iv_def_txkey])) in ieee80211_crypto_getmcastkey()
1438 return &vap->iv_nw_keys[vap->iv_def_txkey]; in ieee80211_crypto_getmcastkey()
1451 ieee80211_encap(struct ieee80211vap *vap, struct ieee80211_node *ni, in ieee80211_encap() argument
1458 struct ieee80211_mesh_state *ms = vap->iv_mesh; in ieee80211_encap()
1496 if (vap->iv_flags & IEEE80211_F_PRIVACY) { in ieee80211_encap()
1497 if (vap->iv_opmode == IEEE80211_M_STA || in ieee80211_encap()
1499 (vap->iv_opmode == IEEE80211_M_WDS && in ieee80211_encap()
1500 (vap->iv_flags_ext & IEEE80211_FEXT_WDSLEGACY))) { in ieee80211_encap()
1501 key = ieee80211_crypto_getucastkey(vap, ni); in ieee80211_encap()
1502 } else if ((vap->iv_opmode == IEEE80211_M_WDS) && in ieee80211_encap()
1503 (! (vap->iv_flags_ext & IEEE80211_FEXT_WDSLEGACY))) { in ieee80211_encap()
1517 key = ieee80211_crypto_getucastkey(vap, ni); in ieee80211_encap()
1519 key = ieee80211_crypto_getmcastkey(vap, ni); in ieee80211_encap()
1522 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_CRYPTO, in ieee80211_encap()
1525 __func__, vap->iv_def_txkey); in ieee80211_encap()
1526 vap->iv_stats.is_tx_nodefkey++; in ieee80211_encap()
1547 (vap->iv_opmode == IEEE80211_M_MBSS)) && in ieee80211_encap()
1555 if (vap->iv_opmode == IEEE80211_M_MBSS) { in ieee80211_encap()
1572 rt = ieee80211_mesh_rt_find(vap, eh.ether_dhost); in ieee80211_encap()
1578 vap->iv_myaddr)) { in ieee80211_encap()
1579 IEEE80211_NOTE_MAC(vap, in ieee80211_encap()
1595 if (!IEEE80211_ADDR_EQ(eh.ether_shost, vap->iv_myaddr)) { in ieee80211_encap()
1614 is4addr = vap->iv_opmode == IEEE80211_M_WDS || in ieee80211_encap()
1615 ((vap->iv_flags_ext & IEEE80211_FEXT_4ADDR) && in ieee80211_encap()
1616 !IEEE80211_ADDR_EQ(eh.ether_shost, vap->iv_myaddr)); in ieee80211_encap()
1635 m = ieee80211_mbuf_adjust(vap, hdrspace + meshhdrsize, key, m); in ieee80211_encap()
1658 IEEE80211_DPRINTF(vap, IEEE80211_MSG_SUPERG, "%s: called; M_FF\n", __func__); in ieee80211_encap()
1660 m = ieee80211_amsdu_encap(vap, m, hdrspace + meshhdrsize, key); in ieee80211_encap()
1663 m = ieee80211_ff_encap(vap, m, hdrspace + meshhdrsize, key); in ieee80211_encap()
1673 vap->iv_stats.is_tx_nobuf++; in ieee80211_encap()
1683 IEEE80211_ADDR_COPY(wh->i_addr2, vap->iv_myaddr); in ieee80211_encap()
1686 } else switch (vap->iv_opmode) { in ieee80211_encap()
1702 IEEE80211_ADDR_COPY(wh->i_addr3, vap->iv_bss->ni_bssid); in ieee80211_encap()
1723 vap->iv_myaddr); in ieee80211_encap()
1735 vap->iv_myaddr); in ieee80211_encap()
1745 IEEE80211_ADDR_COPY(wh->i_addr2, vap->iv_myaddr); in ieee80211_encap()
1746 IEEE80211_ADDR_COPY(wh->i_addr3, vap->iv_myaddr); in ieee80211_encap()
1755 IEEE80211_ADDR_COPY(wh->i_addr2, vap->iv_myaddr); in ieee80211_encap()
1757 IEEE80211_ADDR_COPY(WH4(wh)->i_addr4, vap->iv_myaddr); in ieee80211_encap()
1784 } else if (vap->iv_opmode != IEEE80211_M_MBSS) in ieee80211_encap()
1793 if (vap->iv_opmode == IEEE80211_M_MBSS) in ieee80211_encap()
1837 net80211_vap_printf(vap, in ieee80211_encap()
1855 txfrag = (m->m_pkthdr.len > vap->iv_fragthreshold && in ieee80211_encap()
1857 (vap->iv_caps & IEEE80211_C_TXFRAG) && in ieee80211_encap()
1866 ((vap->iv_flags & IEEE80211_F_WPA) && in ieee80211_encap()
1867 (vap->iv_opmode == IEEE80211_M_STA ? in ieee80211_encap()
1871 if (!ieee80211_crypto_enmic(vap, key, m, txfrag)) { in ieee80211_encap()
1872 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_OUTPUT, in ieee80211_encap()
1875 vap->iv_stats.is_crypto_enmicfail++; in ieee80211_encap()
1880 if (txfrag && !ieee80211_fragment(vap, m, hdrsize, in ieee80211_encap()
1881 key != NULL ? key->wk_cipher->ic_header : 0, vap->iv_fragthreshold)) in ieee80211_encap()
1963 ieee80211_fragment(struct ieee80211vap *vap, struct mbuf *m0, in ieee80211_fragment() argument
1966 struct ieee80211com *ic = vap->iv_ic; in ieee80211_fragment()
2010 if (vap->iv_opmode == IEEE80211_M_MBSS) in ieee80211_fragment()
2043 vap->iv_stats.is_tx_fragframes++; in ieee80211_fragment()
2044 vap->iv_stats.is_tx_frags += fragno-1; in ieee80211_fragment()
2106 ieee80211_add_erp(uint8_t *frm, struct ieee80211vap *vap) in ieee80211_add_erp() argument
2108 struct ieee80211com *ic = vap->iv_ic; in ieee80211_add_erp()
2185 struct ieee80211vap *vap = ni->ni_vap; in ieee80211_add_wme_info() local
2195 switch (vap->iv_opmode) { in ieee80211_add_wme_info()
2198 if (vap->iv_flags_ext & IEEE80211_FEXT_UAPSD) in ieee80211_add_wme_info()
2207 *frm++ = vap->iv_uapsdinfo; in ieee80211_add_wme_info()
2270 ieee80211_add_powerconstraint(uint8_t *frm, struct ieee80211vap *vap) in ieee80211_add_powerconstraint() argument
2272 const struct ieee80211_channel *c = vap->iv_bss->ni_chan; in ieee80211_add_powerconstraint()
2274 int8_t limit = vap->iv_ic->ic_txpowlimit / 2; in ieee80211_add_powerconstraint()
2314 ieee80211_add_quiet(uint8_t *frm, struct ieee80211vap *vap, int update) in ieee80211_add_quiet() argument
2326 if (vap->iv_quiet_count_value == 1) in ieee80211_add_quiet()
2327 vap->iv_quiet_count_value = vap->iv_quiet_count; in ieee80211_add_quiet()
2328 else if (vap->iv_quiet_count_value > 1) in ieee80211_add_quiet()
2329 vap->iv_quiet_count_value--; in ieee80211_add_quiet()
2332 if (vap->iv_quiet_count_value == 0) { in ieee80211_add_quiet()
2334 vap->iv_quiet_count_value = 1; in ieee80211_add_quiet()
2337 quiet->tbttcount = vap->iv_quiet_count_value; in ieee80211_add_quiet()
2338 quiet->period = vap->iv_quiet_period; in ieee80211_add_quiet()
2339 quiet->duration = htole16(vap->iv_quiet_duration); in ieee80211_add_quiet()
2340 quiet->offset = htole16(vap->iv_quiet_offset); in ieee80211_add_quiet()
2351 ieee80211_add_csa(uint8_t *frm, struct ieee80211vap *vap) in ieee80211_add_csa() argument
2353 struct ieee80211com *ic = vap->iv_ic; in ieee80211_add_csa()
2360 csa->csa_count = ic->ic_csa_count - vap->iv_csa_count; in ieee80211_add_csa()
2389 ieee80211_add_wpa(uint8_t *frm, const struct ieee80211vap *vap) in ieee80211_add_wpa() argument
2391 if (vap->iv_flags & IEEE80211_F_WPA1 && vap->iv_wpa_ie != NULL) in ieee80211_add_wpa()
2392 return (add_ie(frm, vap->iv_wpa_ie)); in ieee80211_add_wpa()
2400 ieee80211_add_rsn(uint8_t *frm, const struct ieee80211vap *vap) in ieee80211_add_rsn() argument
2402 if (vap->iv_flags & IEEE80211_F_WPA2 && vap->iv_rsn_ie != NULL) in ieee80211_add_rsn()
2403 return (add_ie(frm, vap->iv_rsn_ie)); in ieee80211_add_rsn()
2428 ieee80211_probereq_ie_len(struct ieee80211vap *vap, struct ieee80211com *ic) in ieee80211_probereq_ie_len() argument
2448 + (((vap->iv_opmode == IEEE80211_M_IBSS) && in ieee80211_probereq_ie_len()
2449 (vap->iv_flags_ht & IEEE80211_FHT_HT)) ? in ieee80211_probereq_ie_len()
2455 + ((vap->iv_flags & IEEE80211_F_WPA1 && vap->iv_wpa_ie != NULL) ? in ieee80211_probereq_ie_len()
2456 vap->iv_wpa_ie[1] : 0) in ieee80211_probereq_ie_len()
2457 + (vap->iv_appie_probereq != NULL ? in ieee80211_probereq_ie_len()
2458 vap->iv_appie_probereq->ie_len : 0) in ieee80211_probereq_ie_len()
2463 ieee80211_probereq_ie(struct ieee80211vap *vap, struct ieee80211com *ic, in ieee80211_probereq_ie() argument
2474 len = ieee80211_probereq_ie_len(vap, ic); in ieee80211_probereq_ie()
2503 if ((vap->iv_opmode == IEEE80211_M_IBSS) && in ieee80211_probereq_ie()
2504 (vap->iv_flags_ht & IEEE80211_FHT_HT)) { in ieee80211_probereq_ie()
2512 vap->iv_flags_ht); in ieee80211_probereq_ie()
2513 frm = ieee80211_add_htcap_ch(frm, vap, c); in ieee80211_probereq_ie()
2521 if (vap->iv_vht_flags & IEEE80211_FVHT_VHT) { in ieee80211_probereq_ie()
2525 vap->iv_flags_ht); in ieee80211_probereq_ie()
2526 c = ieee80211_vht_adjust_channel(ic, c, vap->iv_vht_flags); in ieee80211_probereq_ie()
2527 frm = ieee80211_add_vhtcap_ch(frm, vap, c); in ieee80211_probereq_ie()
2531 frm = ieee80211_add_wpa(frm, vap); in ieee80211_probereq_ie()
2532 if (vap->iv_appie_probereq != NULL) in ieee80211_probereq_ie()
2533 frm = add_appie(frm, vap->iv_appie_probereq); in ieee80211_probereq_ie()
2550 struct ieee80211vap *vap = ni->ni_vap; in ieee80211_send_probereq() local
2560 bss = ieee80211_ref_node(vap->iv_bss); in ieee80211_send_probereq()
2562 if (vap->iv_state == IEEE80211_S_CAC) { in ieee80211_send_probereq()
2563 IEEE80211_NOTE(vap, IEEE80211_MSG_OUTPUT, ni, in ieee80211_send_probereq()
2565 vap->iv_stats.is_tx_badstate++; in ieee80211_send_probereq()
2575 IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE, in ieee80211_send_probereq()
2583 frmlen = ieee80211_probereq_ie_len(vap, ic); in ieee80211_send_probereq()
2587 vap->iv_stats.is_tx_nobuf++; in ieee80211_send_probereq()
2593 ret = ieee80211_probereq_ie(vap, ic, &frm, &frmlen, ssid, ssidlen, in ieee80211_send_probereq()
2621 IEEE80211_DPRINTF(vap, IEEE80211_MSG_DEBUG | IEEE80211_MSG_DUMPPKTS, in ieee80211_send_probereq()
2631 tp = &vap->iv_txparms[ieee80211_chan2mode(ic->ic_curchan)]; in ieee80211_send_probereq()
2639 ret = ieee80211_raw_output(vap, ni, m, &params); in ieee80211_send_probereq()
2655 ieee80211_getcapinfo(struct ieee80211vap *vap, struct ieee80211_channel *chan) in ieee80211_getcapinfo() argument
2659 KASSERT(vap->iv_opmode != IEEE80211_M_STA, ("station mode")); in ieee80211_getcapinfo()
2661 if (vap->iv_opmode == IEEE80211_M_HOSTAP) in ieee80211_getcapinfo()
2663 else if (vap->iv_opmode == IEEE80211_M_IBSS) in ieee80211_getcapinfo()
2667 if (vap->iv_flags & IEEE80211_F_PRIVACY) in ieee80211_getcapinfo()
2669 if ((vap->iv_flags & IEEE80211_F_SHPREAMBLE) && in ieee80211_getcapinfo()
2672 if (vap->iv_flags & IEEE80211_F_SHSLOT) in ieee80211_getcapinfo()
2674 if (IEEE80211_IS_CHAN_5GHZ(chan) && (vap->iv_flags & IEEE80211_F_DOTH)) in ieee80211_getcapinfo()
2688 #define senderr(_x, _v) do { vap->iv_stats._v++; ret = _x; goto bad; } while (0) in ieee80211_send_mgmt()
2689 struct ieee80211vap *vap = ni->ni_vap; in ieee80211_send_mgmt() local
2691 struct ieee80211_node *bss = vap->iv_bss; in ieee80211_send_mgmt()
2705 IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE, in ieee80211_send_mgmt()
2756 IEEE80211_NOTE(vap, IEEE80211_MSG_AUTH, ni, in ieee80211_send_mgmt()
2770 if (vap->iv_opmode == IEEE80211_M_STA) in ieee80211_send_mgmt()
2772 (void *) vap->iv_state); in ieee80211_send_mgmt()
2776 IEEE80211_NOTE(vap, IEEE80211_MSG_AUTH, ni, in ieee80211_send_mgmt()
2829 + (vap->iv_appie_wpa != NULL ? in ieee80211_send_mgmt()
2830 vap->iv_appie_wpa->ie_len : 0) in ieee80211_send_mgmt()
2831 + (vap->iv_appie_assocreq != NULL ? in ieee80211_send_mgmt()
2832 vap->iv_appie_assocreq->ie_len : 0) in ieee80211_send_mgmt()
2837 KASSERT(vap->iv_opmode == IEEE80211_M_STA, in ieee80211_send_mgmt()
2838 ("wrong mode %u", vap->iv_opmode)); in ieee80211_send_mgmt()
2840 if (vap->iv_flags & IEEE80211_F_PRIVACY) in ieee80211_send_mgmt()
2846 if ((vap->iv_flags & IEEE80211_F_SHPREAMBLE) && in ieee80211_send_mgmt()
2853 (vap->iv_flags & IEEE80211_F_DOTH)) in ieee80211_send_mgmt()
2870 frm = ieee80211_add_rsn(frm, vap); in ieee80211_send_mgmt()
2883 if ((vap->iv_flags_ht & IEEE80211_FHT_HT) && in ieee80211_send_mgmt()
2890 if ((vap->iv_vht_flags & IEEE80211_FVHT_VHT) && in ieee80211_send_mgmt()
2897 frm = ieee80211_add_wpa(frm, vap); in ieee80211_send_mgmt()
2898 if ((vap->iv_flags & IEEE80211_F_WME) && in ieee80211_send_mgmt()
2906 if ((vap->iv_flags_ht & IEEE80211_FHT_HT) && in ieee80211_send_mgmt()
2913 if (IEEE80211_ATH_CAP(vap, ni, IEEE80211_F_ATHEROS)) { in ieee80211_send_mgmt()
2915 IEEE80211_ATH_CAP(vap, ni, IEEE80211_F_ATHEROS), in ieee80211_send_mgmt()
2916 ((vap->iv_flags & IEEE80211_F_WPA) == 0 && in ieee80211_send_mgmt()
2918 vap->iv_def_txkey : IEEE80211_KEYIX_NONE); in ieee80211_send_mgmt()
2921 if (vap->iv_appie_assocreq != NULL) in ieee80211_send_mgmt()
2922 frm = add_appie(frm, vap->iv_appie_assocreq); in ieee80211_send_mgmt()
2926 (void *) vap->iv_state); in ieee80211_send_mgmt()
2963 + (vap->iv_appie_assocresp != NULL ? in ieee80211_send_mgmt()
2964 vap->iv_appie_assocresp->ie_len : 0) in ieee80211_send_mgmt()
2969 capinfo = ieee80211_getcapinfo(vap, bss->ni_chan); in ieee80211_send_mgmt()
2990 if ((vap->iv_flags & IEEE80211_F_WME) && in ieee80211_send_mgmt()
2993 !! (vap->iv_flags_ext & IEEE80211_FEXT_UAPSD)); in ieee80211_send_mgmt()
3003 if (IEEE80211_ATH_CAP(vap, ni, IEEE80211_F_ATHEROS)) in ieee80211_send_mgmt()
3005 IEEE80211_ATH_CAP(vap, ni, IEEE80211_F_ATHEROS), in ieee80211_send_mgmt()
3006 ((vap->iv_flags & IEEE80211_F_WPA) == 0 && in ieee80211_send_mgmt()
3008 vap->iv_def_txkey : IEEE80211_KEYIX_NONE); in ieee80211_send_mgmt()
3010 if (vap->iv_appie_assocresp != NULL) in ieee80211_send_mgmt()
3011 frm = add_appie(frm, vap->iv_appie_assocresp); in ieee80211_send_mgmt()
3016 IEEE80211_NOTE(vap, IEEE80211_MSG_ASSOC, ni, in ieee80211_send_mgmt()
3032 IEEE80211_NOTE(vap, IEEE80211_MSG_ANY, ni, in ieee80211_send_mgmt()
3060 struct ieee80211vap *vap = bss->ni_vap; in ieee80211_alloc_proberesp() local
3125 + (vap->iv_appie_proberesp != NULL ? in ieee80211_alloc_proberesp()
3126 vap->iv_appie_proberesp->ie_len : 0) in ieee80211_alloc_proberesp()
3129 vap->iv_stats.is_tx_nobuf++; in ieee80211_alloc_proberesp()
3137 capinfo = ieee80211_getcapinfo(vap, bss->ni_chan); in ieee80211_alloc_proberesp()
3161 if (vap->iv_opmode == IEEE80211_M_IBSS) { in ieee80211_alloc_proberesp()
3166 if ((vap->iv_flags & IEEE80211_F_DOTH) || in ieee80211_alloc_proberesp()
3167 (vap->iv_flags_ext & IEEE80211_FEXT_DOTD)) in ieee80211_alloc_proberesp()
3169 if (vap->iv_flags & IEEE80211_F_DOTH) { in ieee80211_alloc_proberesp()
3171 frm = ieee80211_add_powerconstraint(frm, vap); in ieee80211_alloc_proberesp()
3173 frm = ieee80211_add_csa(frm, vap); in ieee80211_alloc_proberesp()
3175 if (vap->iv_flags & IEEE80211_F_DOTH) { in ieee80211_alloc_proberesp()
3177 (vap->iv_flags_ext & IEEE80211_FEXT_DFS)) { in ieee80211_alloc_proberesp()
3178 if (vap->iv_quiet) in ieee80211_alloc_proberesp()
3179 frm = ieee80211_add_quiet(frm, vap, 0); in ieee80211_alloc_proberesp()
3183 frm = ieee80211_add_erp(frm, vap); in ieee80211_alloc_proberesp()
3185 frm = ieee80211_add_rsn(frm, vap); in ieee80211_alloc_proberesp()
3202 frm = ieee80211_add_wpa(frm, vap); in ieee80211_alloc_proberesp()
3203 if (vap->iv_flags & IEEE80211_F_WME) in ieee80211_alloc_proberesp()
3205 !! (vap->iv_flags_ext & IEEE80211_FEXT_UAPSD)); in ieee80211_alloc_proberesp()
3207 (vap->iv_flags_ht & IEEE80211_FHT_HTCOMPAT) && in ieee80211_alloc_proberesp()
3213 if ((vap->iv_flags & IEEE80211_F_ATHEROS) && in ieee80211_alloc_proberesp()
3217 if (vap->iv_appie_proberesp != NULL) in ieee80211_alloc_proberesp()
3218 frm = add_appie(frm, vap->iv_appie_proberesp); in ieee80211_alloc_proberesp()
3220 if (vap->iv_opmode == IEEE80211_M_MBSS) { in ieee80211_alloc_proberesp()
3221 frm = ieee80211_add_meshid(frm, vap); in ieee80211_alloc_proberesp()
3222 frm = ieee80211_add_meshconf(frm, vap); in ieee80211_alloc_proberesp()
3237 ieee80211_send_proberesp(struct ieee80211vap *vap, in ieee80211_send_proberesp() argument
3240 struct ieee80211_node *bss = vap->iv_bss; in ieee80211_send_proberesp()
3241 struct ieee80211com *ic = vap->iv_ic; in ieee80211_send_proberesp()
3245 if (vap->iv_state == IEEE80211_S_CAC) { in ieee80211_send_proberesp()
3246 IEEE80211_NOTE(vap, IEEE80211_MSG_OUTPUT, bss, in ieee80211_send_proberesp()
3248 vap->iv_stats.is_tx_badstate++; in ieee80211_send_proberesp()
3257 IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE, in ieee80211_send_proberesp()
3275 IEEE80211_NONQOS_TID, vap->iv_myaddr, da, bss->ni_bssid); in ieee80211_send_proberesp()
3281 IEEE80211_DPRINTF(vap, IEEE80211_MSG_DEBUG | IEEE80211_MSG_DUMPPKTS, in ieee80211_send_proberesp()
3287 ret = ieee80211_raw_output(vap, bss, m, NULL); in ieee80211_send_proberesp()
3353 struct ieee80211vap *vap = ni->ni_vap; in ieee80211_alloc_prot() local
3365 isshort = (vap->iv_flags & IEEE80211_F_SHPREAMBLE) != 0; in ieee80211_alloc_prot()
3374 mprot = ieee80211_alloc_cts(ic, vap->iv_myaddr, dur); in ieee80211_alloc_prot()
3382 struct ieee80211vap *vap = arg; in ieee80211_tx_mgt_timeout() local
3384 IEEE80211_DPRINTF(vap, IEEE80211_MSG_STATE | IEEE80211_MSG_DEBUG, in ieee80211_tx_mgt_timeout()
3385 "vap %p mode %s state %s flags %#x & %#x\n", vap, in ieee80211_tx_mgt_timeout()
3386 ieee80211_opmode_name[vap->iv_opmode], in ieee80211_tx_mgt_timeout()
3387 ieee80211_state_name[vap->iv_state], in ieee80211_tx_mgt_timeout()
3388 vap->iv_ic->ic_flags, IEEE80211_F_SCAN); in ieee80211_tx_mgt_timeout()
3390 IEEE80211_LOCK(vap->iv_ic); in ieee80211_tx_mgt_timeout()
3391 if (vap->iv_state != IEEE80211_S_INIT && in ieee80211_tx_mgt_timeout()
3392 (vap->iv_ic->ic_flags & IEEE80211_F_SCAN) == 0) { in ieee80211_tx_mgt_timeout()
3397 ieee80211_new_state_locked(vap, IEEE80211_S_SCAN, in ieee80211_tx_mgt_timeout()
3400 IEEE80211_UNLOCK(vap->iv_ic); in ieee80211_tx_mgt_timeout()
3420 struct ieee80211vap *vap = ni->ni_vap; in ieee80211_tx_mgt_cb() local
3434 if (vap->iv_state == ostate) { in ieee80211_tx_mgt_cb()
3435 IEEE80211_DPRINTF(vap, IEEE80211_MSG_STATE | IEEE80211_MSG_DEBUG, in ieee80211_tx_mgt_cb()
3437 ieee80211_opmode_name[vap->iv_opmode], in ieee80211_tx_mgt_cb()
3438 ieee80211_state_name[vap->iv_state], arg, status); in ieee80211_tx_mgt_cb()
3440 callout_reset(&vap->iv_mgtsend, in ieee80211_tx_mgt_cb()
3442 ieee80211_tx_mgt_timeout, vap); in ieee80211_tx_mgt_cb()
3450 struct ieee80211vap *vap = ni->ni_vap; in ieee80211_beacon_construct() local
3451 struct ieee80211_beacon_offsets *bo = &vap->iv_bcn_off; in ieee80211_beacon_construct()
3519 capinfo = ieee80211_getcapinfo(vap, ni->ni_chan); in ieee80211_beacon_construct()
3524 if ((vap->iv_flags & IEEE80211_F_HIDESSID) == 0) { in ieee80211_beacon_construct()
3541 if (vap->iv_opmode == IEEE80211_M_IBSS) { in ieee80211_beacon_construct()
3546 } else if (vap->iv_opmode == IEEE80211_M_HOSTAP || in ieee80211_beacon_construct()
3547 vap->iv_opmode == IEEE80211_M_MBSS) { in ieee80211_beacon_construct()
3554 tie->tim_period = vap->iv_dtim_period; /* DTIM period */ in ieee80211_beacon_construct()
3561 if ((vap->iv_flags & IEEE80211_F_DOTH) || in ieee80211_beacon_construct()
3562 (vap->iv_flags_ext & IEEE80211_FEXT_DOTD)) in ieee80211_beacon_construct()
3564 if (vap->iv_flags & IEEE80211_F_DOTH) { in ieee80211_beacon_construct()
3566 frm = ieee80211_add_powerconstraint(frm, vap); in ieee80211_beacon_construct()
3569 frm = ieee80211_add_csa(frm, vap); in ieee80211_beacon_construct()
3574 if (vap->iv_flags & IEEE80211_F_DOTH) { in ieee80211_beacon_construct()
3576 (vap->iv_flags_ext & IEEE80211_FEXT_DFS) && in ieee80211_beacon_construct()
3577 (vap->iv_quiet == 1)) { in ieee80211_beacon_construct()
3584 if (vap->iv_quiet) { in ieee80211_beacon_construct()
3586 frm = ieee80211_add_quiet(frm,vap, 0); in ieee80211_beacon_construct()
3593 frm = ieee80211_add_erp(frm, vap); in ieee80211_beacon_construct()
3596 frm = ieee80211_add_rsn(frm, vap); in ieee80211_beacon_construct()
3612 frm = ieee80211_add_wpa(frm, vap); in ieee80211_beacon_construct()
3613 if (vap->iv_flags & IEEE80211_F_WME) { in ieee80211_beacon_construct()
3616 !! (vap->iv_flags_ext & IEEE80211_FEXT_UAPSD)); in ieee80211_beacon_construct()
3619 (vap->iv_flags_ht & IEEE80211_FHT_HTCOMPAT)) { in ieee80211_beacon_construct()
3625 if (vap->iv_flags & IEEE80211_F_ATHEROS) { in ieee80211_beacon_construct()
3631 if (vap->iv_caps & IEEE80211_C_TDMA) { in ieee80211_beacon_construct()
3633 frm = ieee80211_add_tdma(frm, vap); in ieee80211_beacon_construct()
3636 if (vap->iv_appie_beacon != NULL) { in ieee80211_beacon_construct()
3638 bo->bo_appie_len = vap->iv_appie_beacon->ie_len; in ieee80211_beacon_construct()
3639 frm = add_appie(frm, vap->iv_appie_beacon); in ieee80211_beacon_construct()
3644 if (vap->iv_opmode == IEEE80211_M_MBSS) { in ieee80211_beacon_construct()
3645 frm = ieee80211_add_meshid(frm, vap); in ieee80211_beacon_construct()
3647 frm = ieee80211_add_meshconf(frm, vap); in ieee80211_beacon_construct()
3661 struct ieee80211vap *vap = ni->ni_vap; in ieee80211_beacon_alloc() local
3671 if (vap->iv_quiet == 1) in ieee80211_beacon_alloc()
3672 vap->iv_flags_ext |= IEEE80211_FEXT_QUIET_IE; in ieee80211_beacon_alloc()
3673 else if (vap->iv_quiet == 0) in ieee80211_beacon_alloc()
3674 vap->iv_flags_ext &= ~IEEE80211_FEXT_QUIET_IE; in ieee80211_beacon_alloc()
3718 + 2 + 4 + vap->iv_tim_len /* DTIM/IBSSPARMS */ in ieee80211_beacon_alloc()
3725 + (vap->iv_caps & IEEE80211_C_WPA ? /* WPA 1+2 */ in ieee80211_beacon_alloc()
3732 + (vap->iv_caps & IEEE80211_C_WME ? /* WME */ in ieee80211_beacon_alloc()
3738 + (vap->iv_caps & IEEE80211_C_TDMA ? /* TDMA */ in ieee80211_beacon_alloc()
3750 IEEE80211_DPRINTF(vap, IEEE80211_MSG_ANY, in ieee80211_beacon_alloc()
3752 vap->iv_stats.is_tx_nobuf++; in ieee80211_beacon_alloc()
3765 ieee80211_vap_get_broadcast_address(vap)); in ieee80211_beacon_alloc()
3766 IEEE80211_ADDR_COPY(wh->i_addr2, vap->iv_myaddr); in ieee80211_beacon_alloc()
3779 struct ieee80211vap *vap = ni->ni_vap; in ieee80211_beacon_update() local
3780 struct ieee80211_beacon_offsets *bo = &vap->iv_bcn_off; in ieee80211_beacon_update()
3794 vap->iv_csa_count == ic->ic_csa_count) { in ieee80211_beacon_update()
3795 vap->iv_csa_count = 0; in ieee80211_beacon_update()
3823 if ((vap->iv_flags_ext & IEEE80211_FEXT_QUIET_IE) && in ieee80211_beacon_update()
3824 (vap->iv_quiet == 0)) { in ieee80211_beacon_update()
3829 vap->iv_flags_ext &= ~IEEE80211_FEXT_QUIET_IE; in ieee80211_beacon_update()
3837 if (((vap->iv_flags_ext & IEEE80211_FEXT_QUIET_IE) == 0) && in ieee80211_beacon_update()
3838 (vap->iv_quiet == 1)) { in ieee80211_beacon_update()
3843 vap->iv_flags_ext |= IEEE80211_FEXT_QUIET_IE; in ieee80211_beacon_update()
3862 capinfo = ieee80211_getcapinfo(vap, ni->ni_chan); in ieee80211_beacon_update()
3865 if (vap->iv_flags & IEEE80211_F_WME) { in ieee80211_beacon_update()
3878 IEEE80211_DPRINTF(vap, IEEE80211_MSG_WME, in ieee80211_beacon_update()
3882 ieee80211_wme_updateparams_locked(vap); in ieee80211_beacon_update()
3890 IEEE80211_DPRINTF(vap, IEEE80211_MSG_WME, in ieee80211_beacon_update()
3894 ieee80211_wme_updateparams_locked(vap); in ieee80211_beacon_update()
3902 vap->iv_flags_ext & IEEE80211_FEXT_UAPSD); in ieee80211_beacon_update()
3908 ieee80211_ht_update_beacon(vap, bo); in ieee80211_beacon_update()
3912 if (vap->iv_caps & IEEE80211_C_TDMA) { in ieee80211_beacon_update()
3916 ieee80211_tdma_update_beacon(vap, bo); in ieee80211_beacon_update()
3920 if (vap->iv_opmode == IEEE80211_M_MBSS) in ieee80211_beacon_update()
3921 ieee80211_mesh_update_beacon(vap, bo); in ieee80211_beacon_update()
3924 if (vap->iv_opmode == IEEE80211_M_HOSTAP || in ieee80211_beacon_update()
3925 vap->iv_opmode == IEEE80211_M_MBSS) { /* NB: no IBSS support*/ in ieee80211_beacon_update()
3946 if (vap->iv_ps_pending != 0) { in ieee80211_beacon_update()
3948 for (i = 0; i < vap->iv_tim_len; i++) in ieee80211_beacon_update()
3949 if (vap->iv_tim_bitmap[i]) { in ieee80211_beacon_update()
3954 for (i = vap->iv_tim_len-1; i >= timoff; i--) in ieee80211_beacon_update()
3955 if (vap->iv_tim_bitmap[i]) in ieee80211_beacon_update()
3997 memcpy(tie->tim_bitmap, vap->iv_tim_bitmap + timoff, in ieee80211_beacon_update()
4002 IEEE80211_DPRINTF(vap, IEEE80211_MSG_POWER, in ieee80211_beacon_update()
4004 __func__, vap->iv_ps_pending, timoff, timlen); in ieee80211_beacon_update()
4027 if (vap->iv_csa_count == 0) { in ieee80211_beacon_update()
4049 ieee80211_add_csa(bo->bo_csa, vap); in ieee80211_beacon_update()
4052 vap->iv_csa_count++; in ieee80211_beacon_update()
4061 (vap->iv_flags_ext & IEEE80211_FEXT_DFS)) { in ieee80211_beacon_update()
4062 if (vap->iv_quiet && in ieee80211_beacon_update()
4063 (vap->iv_flags_ext & IEEE80211_FEXT_QUIET_IE)) { in ieee80211_beacon_update()
4064 ieee80211_add_quiet(bo->bo_quiet, vap, 1); in ieee80211_beacon_update()
4071 (void) ieee80211_add_erp(bo->bo_erp, vap); in ieee80211_beacon_update()
4082 const struct ieee80211_appie *aie = vap->iv_appie_beacon; in ieee80211_beacon_update()
4118 ieee80211_ff_encap1(struct ieee80211vap *vap, struct mbuf *m, in ieee80211_ff_encap1() argument
4137 IEEE80211_DPRINTF(vap, IEEE80211_MSG_SUPERG, in ieee80211_ff_encap1()
4139 vap->iv_stats.is_tx_nobuf++; in ieee80211_ff_encap1()