Lines Matching defs:vap

94 doprint(struct ieee80211vap *vap, int subtype)
98 return (vap->iv_opmode == IEEE80211_M_IBSS);
121 ieee80211_vap_pkt_send_dest(struct ieee80211vap *vap, struct mbuf *m,
124 struct ieee80211com *ic = vap->iv_ic;
125 struct ifnet *ifp = vap->iv_ifp;
141 * XXX lose WDS vap linkage?
155 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_OUTPUT,
158 vap->iv_stats.is_tx_classify++;
181 * A-MPDU depends upon vap/node config.
182 * A-MSDU depends upon vap/node config.
183 * FF depends upon vap config, IE and whether
190 (vap->iv_flags_ht & IEEE80211_FHT_AMPDU_TX));
193 (vap->iv_flags_ht & IEEE80211_FHT_AMSDU_TX));
197 (IEEE80211_ATH_CAP(vap, ni, IEEE80211_NODE_FF));
272 if (__predict_true((vap->iv_caps & IEEE80211_C_8023ENCAP) == 0)) {
279 IEEE80211_DPRINTF(vap, IEEE80211_MSG_SUPERG,
288 IEEE80211_DPRINTF(vap, IEEE80211_MSG_SUPERG,
309 if (__predict_true((vap->iv_caps & IEEE80211_C_8023ENCAP) == 0)) {
313 m = ieee80211_encap(vap, ni, m);
335 * Send the given mbuf through the given vap.
345 ieee80211_start_pkt(struct ieee80211vap *vap, struct mbuf *m)
347 #define IS_DWDS(vap) \
348 (vap->iv_opmode == IEEE80211_M_WDS && \
349 (vap->iv_flags_ext & IEEE80211_FEXT_WDSLEGACY) == 0)
350 struct ieee80211com *ic = vap->iv_ic;
351 struct ifnet *ifp = vap->iv_ifp;
359 ieee80211_cancel_anyscan(vap);
370 IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT,
372 vap->iv_stats.is_tx_nobuf++; /* XXX */
378 if (IS_DWDS(vap)) {
383 * the AP vap (see below).
385 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_WDS,
387 vap->iv_stats.is_dwds_mcast++;
393 if (vap->iv_opmode == IEEE80211_M_HOSTAP) {
395 * Spam DWDS vap's w/ multicast traffic.
398 ieee80211_dwds_mcast(vap, m);
402 if (vap->iv_opmode != IEEE80211_M_MBSS) {
404 ni = ieee80211_find_txnode(vap, eh->ether_dhost);
414 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_OUTPUT,
418 vap->iv_stats.is_tx_notassoc++;
427 if (!IEEE80211_ADDR_EQ(eh->ether_shost, vap->iv_myaddr)) {
431 if (!ieee80211_mesh_isproxyena(vap)) {
432 IEEE80211_DISCARD_MAC(vap,
437 vap->iv_stats.is_mesh_notproxy++;
443 IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT,
447 ieee80211_mesh_proxy_check(vap, eh->ether_shost);
449 ni = ieee80211_mesh_discover(vap, eh->ether_dhost, m);
466 if (vap->iv_state == IEEE80211_S_SLEEP) {
475 ieee80211_new_state(vap, IEEE80211_S_RUN, 0);
479 if (ieee80211_vap_pkt_send_dest(vap, m, ni) != 0)
486 * Start method for vap's. All packets from the stack come
496 struct ieee80211vap *vap = ifp->if_softc;
497 struct ieee80211com *ic = vap->iv_ic;
505 if (vap->iv_state != IEEE80211_S_RUN &&
506 vap->iv_state != IEEE80211_S_SLEEP) {
509 if (vap->iv_state != IEEE80211_S_RUN &&
510 vap->iv_state != IEEE80211_S_SLEEP) {
511 IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT,
513 __func__, ieee80211_state_name[vap->iv_state]);
514 vap->iv_stats.is_tx_badstate++;
539 return (ieee80211_start_pkt(vap, m));
560 ieee80211_raw_output(struct ieee80211vap *vap, struct ieee80211_node *ni,
563 struct ieee80211com *ic = vap->iv_ic;
589 if_inc_counter(vap->iv_ifp, IFCOUNTER_OERRORS, 1);
750 struct ieee80211vap *vap;
758 * Short-circuit requests if the vap is marked OACTIVE
760 * ieee80211_start before the vap entered RUN state in
767 vap = ifp->if_softc;
768 ic = vap->iv_ic;
774 return vap->iv_output(ifp, m, dst, ro);
784 if (vap->iv_state == IEEE80211_S_CAC) {
785 IEEE80211_DPRINTF(vap,
788 vap->iv_stats.is_tx_badstate++;
790 } else if (vap->iv_state == IEEE80211_S_SCAN)
813 ni = ieee80211_find_txnode(vap, wh->i_addr1);
817 ni = ieee80211_find_txnode(vap, wh->i_addr3);
829 ni = ieee80211_ref_node(vap->iv_bss);
864 ret = ieee80211_raw_output(vap, ni, m, params);
892 struct ieee80211vap *vap = ni->ni_vap;
901 switch (vap->iv_opmode) {
924 IEEE80211_ADDR_COPY(wh->i_addr2, vap->iv_myaddr);
935 vap->iv_myaddr);
940 vap->iv_myaddr);
954 if (vap->iv_opmode == IEEE80211_M_MBSS)
1015 struct ieee80211vap *vap = ni->ni_vap;
1022 if (vap->iv_state == IEEE80211_S_CAC) {
1023 IEEE80211_NOTE(vap, IEEE80211_MSG_OUTPUT | IEEE80211_MSG_DOTH,
1026 vap->iv_stats.is_tx_badstate++;
1043 vap->iv_myaddr, ni->ni_macaddr, ni->ni_bssid);
1045 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_AUTH, wh->i_addr1,
1056 if ((ieee80211_msg_debug(vap) && doprint(vap, type)) ||
1057 ieee80211_msg_dumppkts(vap)) {
1058 ieee80211_note(vap, "[%s] send %s on channel %u\n",
1066 ret = ieee80211_raw_output(vap, ni, m, params);
1075 struct ieee80211vap *vap = ni->ni_vap;
1077 wakeup(vap);
1095 struct ieee80211vap *vap = ni->ni_vap;
1103 if (vap->iv_state == IEEE80211_S_CAC) {
1104 IEEE80211_NOTE(vap, IEEE80211_MSG_OUTPUT | IEEE80211_MSG_DOTH,
1107 vap->iv_stats.is_tx_badstate++;
1115 /* NB: only WDS vap's get 4-address frames */
1116 if (vap->iv_opmode == IEEE80211_M_WDS)
1125 vap->iv_stats.is_tx_nobuf++;
1146 tid, vap->iv_myaddr, ni->ni_macaddr, ni->ni_bssid);
1148 if (vap->iv_opmode == IEEE80211_M_WDS)
1160 vap->iv_myaddr, ni->ni_macaddr, ni->ni_bssid);
1162 if (vap->iv_opmode != IEEE80211_M_WDS) {
1165 vap->iv_opmode != IEEE80211_M_HOSTAP)
1180 IEEE80211_NOTE(vap, IEEE80211_MSG_DEBUG | IEEE80211_MSG_DUMPPKTS, ni,
1186 ret = ieee80211_raw_output(vap, ni, m, NULL);
1349 ieee80211_mbuf_adjust(struct ieee80211vap *vap, int hdrsize,
1353 int needed_space = vap->iv_ic->ic_headroom + hdrsize;
1368 IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT,
1370 vap->iv_stats.is_tx_nobuf++; /* XXX new stat */
1387 IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT,
1389 vap->iv_stats.is_tx_nobuf++;
1431 ieee80211_crypto_getucastkey(struct ieee80211vap *vap,
1435 if (vap->iv_def_txkey == IEEE80211_KEYIX_NONE ||
1436 IEEE80211_KEY_UNDEFINED(&vap->iv_nw_keys[vap->iv_def_txkey]))
1438 return &vap->iv_nw_keys[vap->iv_def_txkey];
1450 ieee80211_crypto_getmcastkey(struct ieee80211vap *vap,
1453 if (vap->iv_def_txkey == IEEE80211_KEYIX_NONE ||
1454 IEEE80211_KEY_UNDEFINED(&vap->iv_nw_keys[vap->iv_def_txkey]))
1456 return &vap->iv_nw_keys[vap->iv_def_txkey];
1469 ieee80211_encap(struct ieee80211vap *vap, struct ieee80211_node *ni,
1476 struct ieee80211_mesh_state *ms = vap->iv_mesh;
1515 if (vap->iv_flags & IEEE80211_F_PRIVACY) {
1516 if (vap->iv_opmode == IEEE80211_M_STA ||
1518 (vap->iv_opmode == IEEE80211_M_WDS &&
1519 (vap->iv_flags_ext & IEEE80211_FEXT_WDSLEGACY))) {
1520 key = ieee80211_crypto_getucastkey(vap, ni);
1521 } else if ((vap->iv_opmode == IEEE80211_M_WDS) &&
1522 (! (vap->iv_flags_ext & IEEE80211_FEXT_WDSLEGACY))) {
1536 key = ieee80211_crypto_getucastkey(vap, ni);
1538 key = ieee80211_crypto_getmcastkey(vap, ni);
1541 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_CRYPTO,
1544 __func__, vap->iv_def_txkey);
1545 vap->iv_stats.is_tx_nodefkey++;
1566 (vap->iv_opmode == IEEE80211_M_MBSS)) &&
1574 if (vap->iv_opmode == IEEE80211_M_MBSS) {
1591 rt = ieee80211_mesh_rt_find(vap, eh.ether_dhost);
1597 vap->iv_myaddr)) {
1598 IEEE80211_NOTE_MAC(vap,
1614 if (!IEEE80211_ADDR_EQ(eh.ether_shost, vap->iv_myaddr)) {
1629 * o packets sent through a WDS vap (IEEE80211_M_WDS)
1630 * o packets sent through a vap marked for relaying
1633 is4addr = vap->iv_opmode == IEEE80211_M_WDS ||
1634 ((vap->iv_flags_ext & IEEE80211_FEXT_4ADDR) &&
1635 !IEEE80211_ADDR_EQ(eh.ether_shost, vap->iv_myaddr));
1654 m = ieee80211_mbuf_adjust(vap, hdrspace + meshhdrsize, key, m);
1677 IEEE80211_DPRINTF(vap, IEEE80211_MSG_SUPERG, "%s: called; M_FF\n", __func__);
1679 m = ieee80211_amsdu_encap(vap, m, hdrspace + meshhdrsize, key);
1682 m = ieee80211_ff_encap(vap, m, hdrspace + meshhdrsize, key);
1692 vap->iv_stats.is_tx_nobuf++;
1702 IEEE80211_ADDR_COPY(wh->i_addr2, vap->iv_myaddr);
1705 } else switch (vap->iv_opmode) {
1721 IEEE80211_ADDR_COPY(wh->i_addr3, vap->iv_bss->ni_bssid);
1742 vap->iv_myaddr);
1754 vap->iv_myaddr);
1764 IEEE80211_ADDR_COPY(wh->i_addr2, vap->iv_myaddr);
1765 IEEE80211_ADDR_COPY(wh->i_addr3, vap->iv_myaddr);
1774 IEEE80211_ADDR_COPY(wh->i_addr2, vap->iv_myaddr);
1776 IEEE80211_ADDR_COPY(WH4(wh)->i_addr4, vap->iv_myaddr);
1803 } else if (vap->iv_opmode != IEEE80211_M_MBSS)
1812 if (vap->iv_opmode == IEEE80211_M_MBSS)
1896 txfrag = (m->m_pkthdr.len > vap->iv_fragthreshold &&
1898 (vap->iv_caps & IEEE80211_C_TXFRAG) &&
1907 ((vap->iv_flags & IEEE80211_F_WPA) &&
1908 (vap->iv_opmode == IEEE80211_M_STA ?
1912 if (!ieee80211_crypto_enmic(vap, key, m, txfrag)) {
1913 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_OUTPUT,
1916 vap->iv_stats.is_crypto_enmicfail++;
1921 if (txfrag && !ieee80211_fragment(vap, m, hdrsize,
1922 key != NULL ? key->wk_cipher->ic_header : 0, vap->iv_fragthreshold))
1968 ieee80211_fragment(struct ieee80211vap *vap, struct mbuf *m0,
1971 struct ieee80211com *ic = vap->iv_ic;
2015 if (vap->iv_opmode == IEEE80211_M_MBSS)
2048 vap->iv_stats.is_tx_fragframes++;
2049 vap->iv_stats.is_tx_frags += fragno-1;
2111 ieee80211_add_erp(uint8_t *frm, struct ieee80211vap *vap)
2113 struct ieee80211com *ic = vap->iv_ic;
2136 * on the vap or ic flags, but instead on a combination
2190 struct ieee80211vap *vap = ni->ni_vap;
2200 switch (vap->iv_opmode) {
2203 if (vap->iv_flags_ext & IEEE80211_FEXT_UAPSD)
2212 *frm++ = vap->iv_uapsdinfo;
2275 ieee80211_add_powerconstraint(uint8_t *frm, struct ieee80211vap *vap)
2277 const struct ieee80211_channel *c = vap->iv_bss->ni_chan;
2278 /* XXX per-vap tx power limit? */
2279 int8_t limit = vap->iv_ic->ic_txpowlimit / 2;
2319 ieee80211_add_quiet(uint8_t *frm, struct ieee80211vap *vap, int update)
2331 if (vap->iv_quiet_count_value == 1)
2332 vap->iv_quiet_count_value = vap->iv_quiet_count;
2333 else if (vap->iv_quiet_count_value > 1)
2334 vap->iv_quiet_count_value--;
2337 if (vap->iv_quiet_count_value == 0) {
2339 vap->iv_quiet_count_value = 1;
2342 quiet->tbttcount = vap->iv_quiet_count_value;
2343 quiet->period = vap->iv_quiet_period;
2344 quiet->duration = htole16(vap->iv_quiet_duration);
2345 quiet->offset = htole16(vap->iv_quiet_offset);
2351 * Note that we use the per-vap CSA count to adjust the global
2356 ieee80211_add_csa(uint8_t *frm, struct ieee80211vap *vap)
2358 struct ieee80211com *ic = vap->iv_ic;
2365 csa->csa_count = ic->ic_csa_count - vap->iv_csa_count;
2394 ieee80211_add_wpa(uint8_t *frm, const struct ieee80211vap *vap)
2396 if (vap->iv_flags & IEEE80211_F_WPA1 && vap->iv_wpa_ie != NULL)
2397 return (add_ie(frm, vap->iv_wpa_ie));
2405 ieee80211_add_rsn(uint8_t *frm, const struct ieee80211vap *vap)
2407 if (vap->iv_flags & IEEE80211_F_WPA2 && vap->iv_rsn_ie != NULL)
2408 return (add_ie(frm, vap->iv_rsn_ie));
2433 ieee80211_probereq_ie_len(struct ieee80211vap *vap, struct ieee80211com *ic)
2453 + (((vap->iv_opmode == IEEE80211_M_IBSS) &&
2454 (vap->iv_flags_ht & IEEE80211_FHT_HT)) ?
2460 + ((vap->iv_flags & IEEE80211_F_WPA1 && vap->iv_wpa_ie != NULL) ?
2461 vap->iv_wpa_ie[1] : 0)
2462 + (vap->iv_appie_probereq != NULL ?
2463 vap->iv_appie_probereq->ie_len : 0)
2468 ieee80211_probereq_ie(struct ieee80211vap *vap, struct ieee80211com *ic,
2479 len = ieee80211_probereq_ie_len(vap, ic);
2508 if ((vap->iv_opmode == IEEE80211_M_IBSS) &&
2509 (vap->iv_flags_ht & IEEE80211_FHT_HT)) {
2517 vap->iv_flags_ht);
2518 frm = ieee80211_add_htcap_ch(frm, vap, c);
2526 if (vap->iv_vht_flags & IEEE80211_FVHT_VHT) {
2530 vap->iv_flags_ht);
2531 c = ieee80211_vht_adjust_channel(ic, c, vap->iv_vht_flags);
2532 frm = ieee80211_add_vhtcap_ch(frm, vap, c);
2536 frm = ieee80211_add_wpa(frm, vap);
2537 if (vap->iv_appie_probereq != NULL)
2538 frm = add_appie(frm, vap->iv_appie_probereq);
2555 struct ieee80211vap *vap = ni->ni_vap;
2565 bss = ieee80211_ref_node(vap->iv_bss);
2567 if (vap->iv_state == IEEE80211_S_CAC) {
2568 IEEE80211_NOTE(vap, IEEE80211_MSG_OUTPUT, ni,
2570 vap->iv_stats.is_tx_badstate++;
2580 IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE,
2588 frmlen = ieee80211_probereq_ie_len(vap, ic);
2592 vap->iv_stats.is_tx_nobuf++;
2598 ret = ieee80211_probereq_ie(vap, ic, &frm, &frmlen, ssid, ssidlen,
2626 IEEE80211_DPRINTF(vap, IEEE80211_MSG_DEBUG | IEEE80211_MSG_DUMPPKTS,
2636 tp = &vap->iv_txparms[ieee80211_chan2mode(ic->ic_curchan)];
2644 ret = ieee80211_raw_output(vap, ni, m, &params);
2654 ieee80211_getcapinfo(struct ieee80211vap *vap, struct ieee80211_channel *chan)
2658 KASSERT(vap->iv_opmode != IEEE80211_M_STA, ("station mode"));
2660 if (vap->iv_opmode == IEEE80211_M_HOSTAP)
2662 else if (vap->iv_opmode == IEEE80211_M_IBSS)
2666 if (vap->iv_flags & IEEE80211_F_PRIVACY)
2668 if ((vap->iv_flags & IEEE80211_F_SHPREAMBLE) &&
2671 if (vap->iv_flags & IEEE80211_F_SHSLOT)
2673 if (IEEE80211_IS_CHAN_5GHZ(chan) && (vap->iv_flags & IEEE80211_F_DOTH))
2687 #define senderr(_x, _v) do { vap->iv_stats._v++; ret = _x; goto bad; } while (0)
2688 struct ieee80211vap *vap = ni->ni_vap;
2690 struct ieee80211_node *bss = vap->iv_bss;
2704 IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE,
2755 IEEE80211_NOTE(vap, IEEE80211_MSG_AUTH, ni,
2769 if (vap->iv_opmode == IEEE80211_M_STA)
2771 (void *) vap->iv_state);
2775 IEEE80211_NOTE(vap, IEEE80211_MSG_AUTH, ni,
2828 + (vap->iv_appie_wpa != NULL ?
2829 vap->iv_appie_wpa->ie_len : 0)
2830 + (vap->iv_appie_assocreq != NULL ?
2831 vap->iv_appie_assocreq->ie_len : 0)
2836 KASSERT(vap->iv_opmode == IEEE80211_M_STA,
2837 ("wrong mode %u", vap->iv_opmode));
2839 if (vap->iv_flags & IEEE80211_F_PRIVACY)
2845 if ((vap->iv_flags & IEEE80211_F_SHPREAMBLE) &&
2852 (vap->iv_flags & IEEE80211_F_DOTH))
2869 frm = ieee80211_add_rsn(frm, vap);
2882 if ((vap->iv_flags_ht & IEEE80211_FHT_HT) &&
2889 if ((vap->iv_vht_flags & IEEE80211_FVHT_VHT) &&
2896 frm = ieee80211_add_wpa(frm, vap);
2897 if ((vap->iv_flags & IEEE80211_F_WME) &&
2905 if ((vap->iv_flags_ht & IEEE80211_FHT_HT) &&
2912 if (IEEE80211_ATH_CAP(vap, ni, IEEE80211_F_ATHEROS)) {
2914 IEEE80211_ATH_CAP(vap, ni, IEEE80211_F_ATHEROS),
2915 ((vap->iv_flags & IEEE80211_F_WPA) == 0 &&
2917 vap->iv_def_txkey : IEEE80211_KEYIX_NONE);
2920 if (vap->iv_appie_assocreq != NULL)
2921 frm = add_appie(frm, vap->iv_appie_assocreq);
2925 (void *) vap->iv_state);
2962 + (vap->iv_appie_assocresp != NULL ?
2963 vap->iv_appie_assocresp->ie_len : 0)
2968 capinfo = ieee80211_getcapinfo(vap, bss->ni_chan);
2989 if ((vap->iv_flags & IEEE80211_F_WME) &&
2992 !! (vap->iv_flags_ext & IEEE80211_FEXT_UAPSD));
3002 if (IEEE80211_ATH_CAP(vap, ni, IEEE80211_F_ATHEROS))
3004 IEEE80211_ATH_CAP(vap, ni, IEEE80211_F_ATHEROS),
3005 ((vap->iv_flags & IEEE80211_F_WPA) == 0 &&
3007 vap->iv_def_txkey : IEEE80211_KEYIX_NONE);
3009 if (vap->iv_appie_assocresp != NULL)
3010 frm = add_appie(frm, vap->iv_appie_assocresp);
3015 IEEE80211_NOTE(vap, IEEE80211_MSG_ASSOC, ni,
3031 IEEE80211_NOTE(vap, IEEE80211_MSG_ANY, ni,
3059 struct ieee80211vap *vap = bss->ni_vap;
3124 + (vap->iv_appie_proberesp != NULL ?
3125 vap->iv_appie_proberesp->ie_len : 0)
3128 vap->iv_stats.is_tx_nobuf++;
3136 capinfo = ieee80211_getcapinfo(vap, bss->ni_chan);
3160 if (vap->iv_opmode == IEEE80211_M_IBSS) {
3165 if ((vap->iv_flags & IEEE80211_F_DOTH) ||
3166 (vap->iv_flags_ext & IEEE80211_FEXT_DOTD))
3168 if (vap->iv_flags & IEEE80211_F_DOTH) {
3170 frm = ieee80211_add_powerconstraint(frm, vap);
3172 frm = ieee80211_add_csa(frm, vap);
3174 if (vap->iv_flags & IEEE80211_F_DOTH) {
3176 (vap->iv_flags_ext & IEEE80211_FEXT_DFS)) {
3177 if (vap->iv_quiet)
3178 frm = ieee80211_add_quiet(frm, vap, 0);
3182 frm = ieee80211_add_erp(frm, vap);
3184 frm = ieee80211_add_rsn(frm, vap);
3201 frm = ieee80211_add_wpa(frm, vap);
3202 if (vap->iv_flags & IEEE80211_F_WME)
3204 !! (vap->iv_flags_ext & IEEE80211_FEXT_UAPSD));
3206 (vap->iv_flags_ht & IEEE80211_FHT_HTCOMPAT) &&
3212 if ((vap->iv_flags & IEEE80211_F_ATHEROS) &&
3216 if (vap->iv_appie_proberesp != NULL)
3217 frm = add_appie(frm, vap->iv_appie_proberesp);
3219 if (vap->iv_opmode == IEEE80211_M_MBSS) {
3220 frm = ieee80211_add_meshid(frm, vap);
3221 frm = ieee80211_add_meshconf(frm, vap);
3236 ieee80211_send_proberesp(struct ieee80211vap *vap,
3239 struct ieee80211_node *bss = vap->iv_bss;
3240 struct ieee80211com *ic = vap->iv_ic;
3244 if (vap->iv_state == IEEE80211_S_CAC) {
3245 IEEE80211_NOTE(vap, IEEE80211_MSG_OUTPUT, bss,
3247 vap->iv_stats.is_tx_badstate++;
3256 IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE,
3274 IEEE80211_NONQOS_TID, vap->iv_myaddr, da, bss->ni_bssid);
3280 IEEE80211_DPRINTF(vap, IEEE80211_MSG_DEBUG | IEEE80211_MSG_DUMPPKTS,
3286 ret = ieee80211_raw_output(vap, bss, m, NULL);
3352 struct ieee80211vap *vap = ni->ni_vap;
3364 isshort = (vap->iv_flags & IEEE80211_F_SHPREAMBLE) != 0;
3373 mprot = ieee80211_alloc_cts(ic, vap->iv_myaddr, dur);
3381 struct ieee80211vap *vap = arg;
3383 IEEE80211_DPRINTF(vap, IEEE80211_MSG_STATE | IEEE80211_MSG_DEBUG,
3384 "vap %p mode %s state %s flags %#x & %#x\n", vap,
3385 ieee80211_opmode_name[vap->iv_opmode],
3386 ieee80211_state_name[vap->iv_state],
3387 vap->iv_ic->ic_flags, IEEE80211_F_SCAN);
3389 IEEE80211_LOCK(vap->iv_ic);
3390 if (vap->iv_state != IEEE80211_S_INIT &&
3391 (vap->iv_ic->ic_flags & IEEE80211_F_SCAN) == 0) {
3396 ieee80211_new_state_locked(vap, IEEE80211_S_SCAN,
3399 IEEE80211_UNLOCK(vap->iv_ic);
3419 struct ieee80211vap *vap = ni->ni_vap;
3433 if (vap->iv_state == ostate) {
3434 IEEE80211_DPRINTF(vap, IEEE80211_MSG_STATE | IEEE80211_MSG_DEBUG,
3436 ieee80211_opmode_name[vap->iv_opmode],
3437 ieee80211_state_name[vap->iv_state], arg, status);
3439 callout_reset(&vap->iv_mgtsend,
3441 ieee80211_tx_mgt_timeout, vap);
3449 struct ieee80211vap *vap = ni->ni_vap;
3450 struct ieee80211_beacon_offsets *bo = &vap->iv_bcn_off;
3518 capinfo = ieee80211_getcapinfo(vap, ni->ni_chan);
3523 if ((vap->iv_flags & IEEE80211_F_HIDESSID) == 0) {
3540 if (vap->iv_opmode == IEEE80211_M_IBSS) {
3545 } else if (vap->iv_opmode == IEEE80211_M_HOSTAP ||
3546 vap->iv_opmode == IEEE80211_M_MBSS) {
3553 tie->tim_period = vap->iv_dtim_period; /* DTIM period */
3560 if ((vap->iv_flags & IEEE80211_F_DOTH) ||
3561 (vap->iv_flags_ext & IEEE80211_FEXT_DOTD))
3563 if (vap->iv_flags & IEEE80211_F_DOTH) {
3565 frm = ieee80211_add_powerconstraint(frm, vap);
3568 frm = ieee80211_add_csa(frm, vap);
3573 if (vap->iv_flags & IEEE80211_F_DOTH) {
3575 (vap->iv_flags_ext & IEEE80211_FEXT_DFS) &&
3576 (vap->iv_quiet == 1)) {
3583 if (vap->iv_quiet) {
3585 frm = ieee80211_add_quiet(frm,vap, 0);
3592 frm = ieee80211_add_erp(frm, vap);
3595 frm = ieee80211_add_rsn(frm, vap);
3611 frm = ieee80211_add_wpa(frm, vap);
3612 if (vap->iv_flags & IEEE80211_F_WME) {
3615 !! (vap->iv_flags_ext & IEEE80211_FEXT_UAPSD));
3618 (vap->iv_flags_ht & IEEE80211_FHT_HTCOMPAT)) {
3624 if (vap->iv_flags & IEEE80211_F_ATHEROS) {
3630 if (vap->iv_caps & IEEE80211_C_TDMA) {
3632 frm = ieee80211_add_tdma(frm, vap);
3635 if (vap->iv_appie_beacon != NULL) {
3637 bo->bo_appie_len = vap->iv_appie_beacon->ie_len;
3638 frm = add_appie(frm, vap->iv_appie_beacon);
3643 if (vap->iv_opmode == IEEE80211_M_MBSS) {
3644 frm = ieee80211_add_meshid(frm, vap);
3646 frm = ieee80211_add_meshconf(frm, vap);
3660 struct ieee80211vap *vap = ni->ni_vap;
3662 struct ifnet *ifp = vap->iv_ifp;
3671 if (vap->iv_quiet == 1)
3672 vap->iv_flags_ext |= IEEE80211_FEXT_QUIET_IE;
3673 else if (vap->iv_quiet == 0)
3674 vap->iv_flags_ext &= ~IEEE80211_FEXT_QUIET_IE;
3718 + 2 + 4 + vap->iv_tim_len /* DTIM/IBSSPARMS */
3725 + (vap->iv_caps & IEEE80211_C_WPA ? /* WPA 1+2 */
3732 + (vap->iv_caps & IEEE80211_C_WME ? /* WME */
3738 + (vap->iv_caps & IEEE80211_C_TDMA ? /* TDMA */
3750 IEEE80211_DPRINTF(vap, IEEE80211_MSG_ANY,
3752 vap->iv_stats.is_tx_nobuf++;
3765 IEEE80211_ADDR_COPY(wh->i_addr2, vap->iv_myaddr);
3778 struct ieee80211vap *vap = ni->ni_vap;
3779 struct ieee80211_beacon_offsets *bo = &vap->iv_bcn_off;
3791 * vap that reaches this point; subsequent vaps just update
3795 vap->iv_csa_count == ic->ic_csa_count) {
3796 vap->iv_csa_count = 0;
3824 if ((vap->iv_flags_ext & IEEE80211_FEXT_QUIET_IE) &&
3825 (vap->iv_quiet == 0)) {
3830 vap->iv_flags_ext &= ~IEEE80211_FEXT_QUIET_IE;
3838 if (((vap->iv_flags_ext & IEEE80211_FEXT_QUIET_IE) == 0) &&
3839 (vap->iv_quiet == 1)) {
3844 vap->iv_flags_ext |= IEEE80211_FEXT_QUIET_IE;
3868 capinfo = ieee80211_getcapinfo(vap, ni->ni_chan);
3871 if (vap->iv_flags & IEEE80211_F_WME) {
3884 IEEE80211_DPRINTF(vap, IEEE80211_MSG_WME,
3888 ieee80211_wme_updateparams_locked(vap);
3896 IEEE80211_DPRINTF(vap, IEEE80211_MSG_WME,
3900 ieee80211_wme_updateparams_locked(vap);
3908 vap->iv_flags_ext & IEEE80211_FEXT_UAPSD);
3914 ieee80211_ht_update_beacon(vap, bo);
3918 if (vap->iv_caps & IEEE80211_C_TDMA) {
3922 ieee80211_tdma_update_beacon(vap, bo);
3926 if (vap->iv_opmode == IEEE80211_M_MBSS)
3927 ieee80211_mesh_update_beacon(vap, bo);
3930 if (vap->iv_opmode == IEEE80211_M_HOSTAP ||
3931 vap->iv_opmode == IEEE80211_M_MBSS) { /* NB: no IBSS support*/
3952 if (vap->iv_ps_pending != 0) {
3954 for (i = 0; i < vap->iv_tim_len; i++)
3955 if (vap->iv_tim_bitmap[i]) {
3960 for (i = vap->iv_tim_len-1; i >= timoff; i--)
3961 if (vap->iv_tim_bitmap[i])
4003 memcpy(tie->tim_bitmap, vap->iv_tim_bitmap + timoff,
4008 IEEE80211_DPRINTF(vap, IEEE80211_MSG_POWER,
4010 __func__, vap->iv_ps_pending, timoff, timlen);
4031 * when the vap's count reaches the target count.
4033 if (vap->iv_csa_count == 0) {
4055 ieee80211_add_csa(bo->bo_csa, vap);
4058 vap->iv_csa_count++;
4067 (vap->iv_flags_ext & IEEE80211_FEXT_DFS)) {
4068 if (vap->iv_quiet &&
4069 (vap->iv_flags_ext & IEEE80211_FEXT_QUIET_IE)) {
4070 ieee80211_add_quiet(bo->bo_quiet, vap, 1);
4077 (void) ieee80211_add_erp(bo->bo_erp, vap);
4088 const struct ieee80211_appie *aie = vap->iv_appie_beacon;
4124 ieee80211_ff_encap1(struct ieee80211vap *vap, struct mbuf *m,
4143 IEEE80211_DPRINTF(vap, IEEE80211_MSG_SUPERG,
4145 vap->iv_stats.is_tx_nobuf++;
4188 "ni %p vap %p mode %s state %s m %p status %d\n", ni, ni->ni_vap,