Lines Matching refs:vap
73 ieee80211_ioctl_getkey(u_long cmd, struct ieee80211vap *vap, in ieee80211_ioctl_getkey() argument
76 struct ieee80211com *ic = vap->iv_ic; in ieee80211_ioctl_getkey()
91 ni = ieee80211_find_vap_node(&ic->ic_sta, vap, ik.ik_macaddr); in ieee80211_ioctl_getkey()
98 wk = &vap->iv_nw_keys[kid]; in ieee80211_ioctl_getkey()
99 IEEE80211_ADDR_COPY(&ik.ik_macaddr, vap->iv_bss->ni_macaddr); in ieee80211_ioctl_getkey()
106 if (wk->wk_keyix == vap->iv_def_txkey) in ieee80211_ioctl_getkey()
108 if (ieee80211_priv_check_vap_getkey(cmd, vap, NULL) == 0) { in ieee80211_ioctl_getkey()
130 ieee80211_ioctl_getchanlist(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_getchanlist() argument
132 struct ieee80211com *ic = vap->iv_ic; in ieee80211_ioctl_getchanlist()
140 ieee80211_ioctl_getchaninfo(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_getchaninfo() argument
142 struct ieee80211com *ic = vap->iv_ic; in ieee80211_ioctl_getchaninfo()
154 ieee80211_ioctl_getwpaie(struct ieee80211vap *vap, in ieee80211_ioctl_getwpaie() argument
170 ni = ieee80211_find_vap_node(&vap->iv_ic->ic_sta, vap, wpaie->wpa_macaddr); in ieee80211_ioctl_getwpaie()
210 ieee80211_ioctl_getstastats(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_getstastats() argument
222 ni = ieee80211_find_vap_node(&vap->iv_ic->ic_sta, vap, macaddr); in ieee80211_ioctl_getstastats()
315 ieee80211_ioctl_getscanresults(struct ieee80211vap *vap, in ieee80211_ioctl_getscanresults() argument
326 ieee80211_scan_iterate(vap, get_scan_space, &req); in ieee80211_ioctl_getscanresults()
340 ieee80211_scan_iterate(vap, get_scan_result, &req); in ieee80211_ioctl_getscanresults()
380 struct ieee80211vap *vap = ni->ni_vap; in get_sta_info() local
385 if (vap->iv_opmode == IEEE80211_M_HOSTAP && in get_sta_info()
401 vap->iv_ic->ic_node_getsignal(ni, &si->isi_rssi, &si->isi_noise); in get_sta_info()
402 vap->iv_ic->ic_node_getmimoinfo(ni, &si->isi_mimo); in get_sta_info()
434 si->isi_inact = vap->iv_inact_run; in get_sta_info()
436 (vap->iv_opmode == IEEE80211_M_WDS && in get_sta_info()
437 (vap->iv_flags_ext & IEEE80211_FEXT_WDSLEGACY))) in get_sta_info()
438 si->isi_inact = vap->iv_inact_auth; in get_sta_info()
440 si->isi_inact = vap->iv_inact_init; in get_sta_info()
456 getstainfo_common(struct ieee80211vap *vap, struct ieee80211req *ireq, in getstainfo_common() argument
459 struct ieee80211com *ic = vap->iv_ic; in getstainfo_common()
468 ieee80211_iterate_nodes_vap(&ic->ic_sta, vap, get_sta_space, in getstainfo_common()
485 ieee80211_iterate_nodes_vap(&ic->ic_sta, vap, in getstainfo_common()
501 ieee80211_ioctl_getstainfo(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_getstainfo() argument
514 ieee80211_vap_get_broadcast_address(vap))) { in ieee80211_ioctl_getstainfo()
517 ni = ieee80211_find_vap_node(&vap->iv_ic->ic_sta, vap, macaddr); in ieee80211_ioctl_getstainfo()
521 return getstainfo_common(vap, ireq, ni, off); in ieee80211_ioctl_getstainfo()
525 ieee80211_ioctl_getstatxpow(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_getstatxpow() argument
536 ni = ieee80211_find_vap_node(&vap->iv_ic->ic_sta, vap, txpow.it_macaddr); in ieee80211_ioctl_getstatxpow()
546 ieee80211_ioctl_getwmeparam(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_getwmeparam() argument
548 struct ieee80211com *ic = vap->iv_ic; in ieee80211_ioctl_getwmeparam()
589 ieee80211_ioctl_getmaccmd(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_getmaccmd() argument
591 const struct ieee80211_aclator *acl = vap->iv_acl; in ieee80211_ioctl_getmaccmd()
593 return (acl == NULL ? EINVAL : acl->iac_getioctl(vap, ireq)); in ieee80211_ioctl_getmaccmd()
597 ieee80211_ioctl_getcurchan(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_getcurchan() argument
599 struct ieee80211com *ic = vap->iv_ic; in ieee80211_ioctl_getcurchan()
609 if (vap->iv_state == IEEE80211_S_RUN || vap->iv_state == IEEE80211_S_SLEEP) in ieee80211_ioctl_getcurchan()
610 c = vap->iv_bss->ni_chan; in ieee80211_ioctl_getcurchan()
628 ieee80211_ioctl_getappie(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_getappie() argument
638 return getappie(vap->iv_appie_beacon, ireq); in ieee80211_ioctl_getappie()
640 return getappie(vap->iv_appie_proberesp, ireq); in ieee80211_ioctl_getappie()
642 return getappie(vap->iv_appie_assocresp, ireq); in ieee80211_ioctl_getappie()
644 return getappie(vap->iv_appie_probereq, ireq); in ieee80211_ioctl_getappie()
646 return getappie(vap->iv_appie_assocreq, ireq); in ieee80211_ioctl_getappie()
648 return getappie(vap->iv_appie_wpa, ireq); in ieee80211_ioctl_getappie()
654 ieee80211_ioctl_getregdomain(struct ieee80211vap *vap, in ieee80211_ioctl_getregdomain() argument
657 struct ieee80211com *ic = vap->iv_ic; in ieee80211_ioctl_getregdomain()
666 ieee80211_ioctl_getroam(struct ieee80211vap *vap, in ieee80211_ioctl_getroam() argument
671 if (len > sizeof(vap->iv_roamparms)) in ieee80211_ioctl_getroam()
672 len = sizeof(vap->iv_roamparms); in ieee80211_ioctl_getroam()
673 return copyout(vap->iv_roamparms, ireq->i_data, len); in ieee80211_ioctl_getroam()
677 ieee80211_ioctl_gettxparams(struct ieee80211vap *vap, in ieee80211_ioctl_gettxparams() argument
682 if (len > sizeof(vap->iv_txparms)) in ieee80211_ioctl_gettxparams()
683 len = sizeof(vap->iv_txparms); in ieee80211_ioctl_gettxparams()
684 return copyout(vap->iv_txparms, ireq->i_data, len); in ieee80211_ioctl_gettxparams()
727 ieee80211_ioctl_getstavlan(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_getstavlan() argument
739 ni = ieee80211_find_vap_node(&vap->iv_ic->ic_sta, vap, in ieee80211_ioctl_getstavlan()
744 ni = ieee80211_ref_node(vap->iv_bss); in ieee80211_ioctl_getstavlan()
755 dummy_ioctl_get(struct ieee80211vap *vap, struct ieee80211req *ireq) in dummy_ioctl_get() argument
762 ieee80211_ioctl_getdefault(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_getdefault() argument
768 error = (*get)(vap, ireq); in ieee80211_ioctl_getdefault()
776 ieee80211_ioctl_get80211(struct ieee80211vap *vap, u_long cmd, in ieee80211_ioctl_get80211() argument
779 struct ieee80211com *ic = vap->iv_ic; in ieee80211_ioctl_get80211()
794 switch (vap->iv_state) { in ieee80211_ioctl_get80211()
797 ireq->i_len = vap->iv_des_ssid[0].len; in ieee80211_ioctl_get80211()
798 memcpy(tmpssid, vap->iv_des_ssid[0].ssid, ireq->i_len); in ieee80211_ioctl_get80211()
801 ireq->i_len = vap->iv_bss->ni_esslen; in ieee80211_ioctl_get80211()
802 memcpy(tmpssid, vap->iv_bss->ni_essid, ireq->i_len); in ieee80211_ioctl_get80211()
811 if ((vap->iv_flags & IEEE80211_F_PRIVACY) == 0) in ieee80211_ioctl_get80211()
813 else if (vap->iv_flags & IEEE80211_F_DROPUNENC) in ieee80211_ioctl_get80211()
822 len = (u_int) vap->iv_nw_keys[kid].wk_keylen; in ieee80211_ioctl_get80211()
824 if (ieee80211_priv_check_vap_getkey(cmd, vap, NULL) == 0) { in ieee80211_ioctl_get80211()
825 bcopy(vap->iv_nw_keys[kid].wk_key, tmpkey, len); in ieee80211_ioctl_get80211()
836 ireq->i_val = vap->iv_def_txkey; in ieee80211_ioctl_get80211()
839 if (vap->iv_flags & IEEE80211_F_WPA) in ieee80211_ioctl_get80211()
842 ireq->i_val = vap->iv_bss->ni_authmode; in ieee80211_ioctl_get80211()
848 if (vap->iv_flags & IEEE80211_F_PMGTON) in ieee80211_ioctl_get80211()
857 ireq->i_val = vap->iv_rtsthreshold; in ieee80211_ioctl_get80211()
860 ireq->i_val = vap->iv_protmode; in ieee80211_ioctl_get80211()
877 switch (vap->iv_flags & IEEE80211_F_WPA) { in ieee80211_ioctl_get80211()
893 error = ieee80211_ioctl_getchanlist(vap, ireq); in ieee80211_ioctl_get80211()
896 ireq->i_val = vap->iv_roaming; in ieee80211_ioctl_get80211()
899 ireq->i_val = (vap->iv_flags & IEEE80211_F_PRIVACY) != 0; in ieee80211_ioctl_get80211()
902 ireq->i_val = (vap->iv_flags & IEEE80211_F_DROPUNENC) != 0; in ieee80211_ioctl_get80211()
905 ireq->i_val = (vap->iv_flags & IEEE80211_F_COUNTERM) != 0; in ieee80211_ioctl_get80211()
908 ireq->i_val = (vap->iv_flags & IEEE80211_F_WME) != 0; in ieee80211_ioctl_get80211()
911 ireq->i_val = (vap->iv_flags & IEEE80211_F_HIDESSID) != 0; in ieee80211_ioctl_get80211()
914 ireq->i_val = (vap->iv_flags & IEEE80211_F_NOBRIDGE) == 0; in ieee80211_ioctl_get80211()
917 error = ieee80211_ioctl_getkey(cmd, vap, ireq); in ieee80211_ioctl_get80211()
920 error = ieee80211_ioctl_getchaninfo(vap, ireq); in ieee80211_ioctl_get80211()
925 if (vap->iv_state == IEEE80211_S_RUN || vap->iv_state == IEEE80211_S_SLEEP) { in ieee80211_ioctl_get80211()
926 error = copyout(vap->iv_opmode == IEEE80211_M_WDS ? in ieee80211_ioctl_get80211()
927 vap->iv_bss->ni_macaddr : vap->iv_bss->ni_bssid, in ieee80211_ioctl_get80211()
930 error = copyout(vap->iv_des_bssid, ireq->i_data, in ieee80211_ioctl_get80211()
935 error = ieee80211_ioctl_getwpaie(vap, ireq, ireq->i_type); in ieee80211_ioctl_get80211()
938 error = ieee80211_ioctl_getscanresults(vap, ireq); in ieee80211_ioctl_get80211()
941 error = ieee80211_ioctl_getstastats(vap, ireq); in ieee80211_ioctl_get80211()
944 ireq->i_val = vap->iv_bss->ni_txpower; in ieee80211_ioctl_get80211()
947 error = ieee80211_ioctl_getstatxpow(vap, ireq); in ieee80211_ioctl_get80211()
950 error = ieee80211_ioctl_getstainfo(vap, ireq); in ieee80211_ioctl_get80211()
958 error = ieee80211_ioctl_getwmeparam(vap, ireq); in ieee80211_ioctl_get80211()
961 ireq->i_val = vap->iv_dtim_period; in ieee80211_ioctl_get80211()
965 ireq->i_val = vap->iv_bss->ni_intval; in ieee80211_ioctl_get80211()
968 ireq->i_val = (vap->iv_flags & IEEE80211_F_PUREG) != 0; in ieee80211_ioctl_get80211()
971 ireq->i_val = vap->iv_quiet; in ieee80211_ioctl_get80211()
974 ireq->i_val = vap->iv_quiet_count; in ieee80211_ioctl_get80211()
977 ireq->i_val = vap->iv_quiet_period; in ieee80211_ioctl_get80211()
980 ireq->i_val = vap->iv_quiet_duration; in ieee80211_ioctl_get80211()
983 ireq->i_val = vap->iv_quiet_offset; in ieee80211_ioctl_get80211()
986 ireq->i_val = (vap->iv_flags & IEEE80211_F_BGSCAN) != 0; in ieee80211_ioctl_get80211()
989 ireq->i_val = vap->iv_bgscanidle*hz/1000; /* ms */ in ieee80211_ioctl_get80211()
992 ireq->i_val = vap->iv_bgscanintvl/hz; /* seconds */ in ieee80211_ioctl_get80211()
995 ireq->i_val = vap->iv_scanvalid/hz; /* seconds */ in ieee80211_ioctl_get80211()
998 ireq->i_val = vap->iv_fragthreshold; in ieee80211_ioctl_get80211()
1001 error = ieee80211_ioctl_getmaccmd(vap, ireq); in ieee80211_ioctl_get80211()
1004 ireq->i_val = (vap->iv_flags & IEEE80211_F_BURST) != 0; in ieee80211_ioctl_get80211()
1007 ireq->i_val = vap->iv_bmissthreshold; in ieee80211_ioctl_get80211()
1010 error = ieee80211_ioctl_getcurchan(vap, ireq); in ieee80211_ioctl_get80211()
1014 if (vap->iv_flags_ht & IEEE80211_FHT_SHORTGI20) in ieee80211_ioctl_get80211()
1016 if (vap->iv_flags_ht & IEEE80211_FHT_SHORTGI40) in ieee80211_ioctl_get80211()
1021 if (vap->iv_flags_ht & IEEE80211_FHT_AMPDU_TX) in ieee80211_ioctl_get80211()
1023 if (vap->iv_flags_ht & IEEE80211_FHT_AMPDU_RX) in ieee80211_ioctl_get80211()
1028 if (vap->iv_opmode == IEEE80211_M_HOSTAP) in ieee80211_ioctl_get80211()
1029 ireq->i_val = vap->iv_ampdu_rxmax; in ieee80211_ioctl_get80211()
1030 else if (vap->iv_state == IEEE80211_S_RUN || vap->iv_state == IEEE80211_S_SLEEP) in ieee80211_ioctl_get80211()
1035 ireq->i_val = _IEEE80211_MASKSHIFT( vap->iv_bss->ni_htparam, in ieee80211_ioctl_get80211()
1038 ireq->i_val = vap->iv_ampdu_limit; in ieee80211_ioctl_get80211()
1042 if (vap->iv_opmode == IEEE80211_M_STA && in ieee80211_ioctl_get80211()
1043 (vap->iv_state == IEEE80211_S_RUN || vap->iv_state == IEEE80211_S_SLEEP)) in ieee80211_ioctl_get80211()
1048 ireq->i_val = _IEEE80211_MASKSHIFT(vap->iv_bss->ni_htparam, in ieee80211_ioctl_get80211()
1051 ireq->i_val = vap->iv_ampdu_density; in ieee80211_ioctl_get80211()
1055 if (vap->iv_flags_ht & IEEE80211_FHT_AMSDU_TX) in ieee80211_ioctl_get80211()
1057 if (vap->iv_flags_ht & IEEE80211_FHT_AMSDU_RX) in ieee80211_ioctl_get80211()
1061 ireq->i_val = vap->iv_amsdu_limit; /* XXX truncation? */ in ieee80211_ioctl_get80211()
1064 ireq->i_val = (vap->iv_flags_ht & IEEE80211_FHT_PUREN) != 0; in ieee80211_ioctl_get80211()
1067 ireq->i_val = (vap->iv_flags & IEEE80211_F_DOTH) != 0; in ieee80211_ioctl_get80211()
1070 error = ieee80211_ioctl_getregdomain(vap, ireq); in ieee80211_ioctl_get80211()
1073 error = ieee80211_ioctl_getroam(vap, ireq); in ieee80211_ioctl_get80211()
1076 error = ieee80211_ioctl_gettxparams(vap, ireq); in ieee80211_ioctl_get80211()
1079 ireq->i_val = (vap->iv_flags_ht & IEEE80211_FHT_HTCOMPAT) != 0; in ieee80211_ioctl_get80211()
1082 ireq->i_val = (vap->iv_flags & IEEE80211_F_DWDS) != 0; in ieee80211_ioctl_get80211()
1085 ireq->i_val = (vap->iv_flags_ext & IEEE80211_FEXT_INACT) != 0; in ieee80211_ioctl_get80211()
1088 error = ieee80211_ioctl_getappie(vap, ireq); in ieee80211_ioctl_get80211()
1091 ireq->i_val = (vap->iv_flags_ext & IEEE80211_FEXT_WPS) != 0; in ieee80211_ioctl_get80211()
1094 ireq->i_val = (vap->iv_flags_ext & IEEE80211_FEXT_TSN) != 0; in ieee80211_ioctl_get80211()
1097 ireq->i_val = (vap->iv_flags_ext & IEEE80211_FEXT_DFS) != 0; in ieee80211_ioctl_get80211()
1100 ireq->i_val = (vap->iv_flags_ext & IEEE80211_FEXT_DOTD) != 0; in ieee80211_ioctl_get80211()
1106 ireq->i_val = vap->iv_htprotmode; in ieee80211_ioctl_get80211()
1109 if (vap->iv_flags_ht & IEEE80211_FHT_HT) { in ieee80211_ioctl_get80211()
1111 if (vap->iv_flags_ht & IEEE80211_FHT_USEHT40) in ieee80211_ioctl_get80211()
1117 error = ieee80211_ioctl_getstavlan(vap, ireq); in ieee80211_ioctl_get80211()
1120 if (vap->iv_opmode == IEEE80211_M_STA && in ieee80211_ioctl_get80211()
1121 (vap->iv_state == IEEE80211_S_RUN || vap->iv_state == IEEE80211_S_SLEEP)) { in ieee80211_ioctl_get80211()
1122 if (vap->iv_bss->ni_flags & IEEE80211_NODE_MIMO_RTS) in ieee80211_ioctl_get80211()
1124 else if (vap->iv_bss->ni_flags & IEEE80211_NODE_MIMO_PS) in ieee80211_ioctl_get80211()
1129 ireq->i_val = vap->iv_htcaps & IEEE80211_HTCAP_SMPS; in ieee80211_ioctl_get80211()
1132 if (vap->iv_opmode == IEEE80211_M_STA && in ieee80211_ioctl_get80211()
1133 (vap->iv_state == IEEE80211_S_RUN || vap->iv_state == IEEE80211_S_SLEEP)) in ieee80211_ioctl_get80211()
1135 (vap->iv_bss->ni_flags & IEEE80211_NODE_RIFS) != 0; in ieee80211_ioctl_get80211()
1138 (vap->iv_flags_ht & IEEE80211_FHT_RIFS) != 0; in ieee80211_ioctl_get80211()
1142 if (vap->iv_flags_ht & IEEE80211_FHT_STBC_TX) in ieee80211_ioctl_get80211()
1144 if (vap->iv_flags_ht & IEEE80211_FHT_STBC_RX) in ieee80211_ioctl_get80211()
1149 if (vap->iv_flags_ht & IEEE80211_FHT_LDPC_TX) in ieee80211_ioctl_get80211()
1151 if (vap->iv_flags_ht & IEEE80211_FHT_LDPC_RX) in ieee80211_ioctl_get80211()
1156 if (vap->iv_flags_ext & IEEE80211_FEXT_UAPSD) in ieee80211_ioctl_get80211()
1160 ireq->i_val = vap->iv_vht_flags & IEEE80211_FVHT_MASK; in ieee80211_ioctl_get80211()
1163 error = ieee80211_ioctl_getdefault(vap, ireq); in ieee80211_ioctl_get80211()
1170 ieee80211_ioctl_setkey(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_setkey() argument
1192 if (vap->iv_opmode == IEEE80211_M_STA) { in ieee80211_ioctl_setkey()
1193 ni = ieee80211_ref_node(vap->iv_bss); in ieee80211_ioctl_setkey()
1199 ni = ieee80211_find_vap_node(&vap->iv_ic->ic_sta, vap, in ieee80211_ioctl_setkey()
1208 wk = &vap->iv_nw_keys[kid]; in ieee80211_ioctl_setkey()
1218 ieee80211_key_update_begin(vap); in ieee80211_ioctl_setkey()
1219 if (ieee80211_crypto_newkey(vap, ik.ik_type, ik.ik_flags, wk)) { in ieee80211_ioctl_setkey()
1231 if (!ieee80211_crypto_setkey(vap, wk)) in ieee80211_ioctl_setkey()
1242 ieee80211_crypto_set_deftxkey(vap, kid); in ieee80211_ioctl_setkey()
1245 ieee80211_key_update_end(vap); in ieee80211_ioctl_setkey()
1252 ieee80211_ioctl_delkey(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_delkey() argument
1267 if (vap->iv_opmode == IEEE80211_M_STA) { in ieee80211_ioctl_delkey()
1268 ni = ieee80211_ref_node(vap->iv_bss); in ieee80211_ioctl_delkey()
1274 ni = ieee80211_find_vap_node(&vap->iv_ic->ic_sta, vap, in ieee80211_ioctl_delkey()
1286 ieee80211_crypto_delkey(vap, &vap->iv_nw_keys[kid]); in ieee80211_ioctl_delkey()
1292 struct ieee80211vap *vap; member
1298 mlmedebug(struct ieee80211vap *vap, const uint8_t mac[IEEE80211_ADDR_LEN], in mlmedebug() argument
1320 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_IOCTL | in mlmedebug()
1326 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ANY, mac, in mlmedebug()
1330 IEEE80211_NOTE_MAC(vap, ops[op].mask, mac, in mlmedebug()
1333 IEEE80211_NOTE_MAC(vap, ops[op].mask, mac, in mlmedebug()
1344 struct ieee80211vap *vap = ni->ni_vap; in domlme() local
1346 if (vap != mop->vap) in domlme()
1355 mlmedebug(vap, ni->ni_macaddr, mop->op, mop->reason); in domlme()
1367 setmlme_dropsta(struct ieee80211vap *vap, in setmlme_dropsta() argument
1370 struct ieee80211_node_table *nt = &vap->iv_ic->ic_sta; in setmlme_dropsta()
1376 ieee80211_vap_get_broadcast_address(vap))) { in setmlme_dropsta()
1397 setmlme_common(struct ieee80211vap *vap, int op, in setmlme_common() argument
1400 struct ieee80211com *ic = vap->iv_ic; in setmlme_common()
1410 switch (vap->iv_opmode) { in setmlme_common()
1412 mlmedebug(vap, vap->iv_bss->ni_macaddr, op, reason); in setmlme_common()
1414 ieee80211_new_state(vap, IEEE80211_S_INIT, reason); in setmlme_common()
1417 mlmeop.vap = vap; in setmlme_common()
1420 error = setmlme_dropsta(vap, mac, &mlmeop); in setmlme_common()
1430 if (!IEEE80211_ADDR_EQ(mac, vap->iv_bss->ni_macaddr)) { in setmlme_common()
1435 mlmedebug(vap, vap->iv_bss->ni_macaddr, op, reason); in setmlme_common()
1436 ni = ieee80211_ref_node(vap->iv_bss); in setmlme_common()
1464 if (vap->iv_opmode != IEEE80211_M_HOSTAP && in setmlme_common()
1465 vap->iv_opmode != IEEE80211_M_WDS) { in setmlme_common()
1470 ni = ieee80211_find_vap_node_locked(nt, vap, mac); in setmlme_common()
1478 mlmedebug(vap, mac, op, reason); in setmlme_common()
1488 if (vap->iv_opmode != IEEE80211_M_HOSTAP) { in setmlme_common()
1493 ni = ieee80211_find_vap_node_locked(nt, vap, mac); in setmlme_common()
1501 mlmedebug(vap, mac, op, reason); in setmlme_common()
1515 vap->iv_stats.is_rx_acl++; in setmlme_common()
1570 setmlme_assoc_sta(struct ieee80211vap *vap, in setmlme_assoc_sta() argument
1577 KASSERT(vap->iv_opmode == IEEE80211_M_STA, in setmlme_assoc_sta()
1579 ieee80211_opmode_name[vap->iv_opmode])); in setmlme_assoc_sta()
1587 ieee80211_scan_iterate(vap, mlmelookup, &lookup); in setmlme_assoc_sta()
1590 mlmedebug(vap, mac, IEEE80211_MLME_ASSOC, 0); in setmlme_assoc_sta()
1591 rv = ieee80211_sta_join(vap, lookup.se.se_chan, &lookup.se); in setmlme_assoc_sta()
1599 setmlme_assoc_adhoc(struct ieee80211vap *vap, in setmlme_assoc_adhoc() argument
1606 KASSERT(vap->iv_opmode == IEEE80211_M_IBSS || in setmlme_assoc_adhoc()
1607 vap->iv_opmode == IEEE80211_M_AHDEMO, in setmlme_assoc_adhoc()
1609 ieee80211_opmode_name[vap->iv_opmode])); in setmlme_assoc_adhoc()
1620 memset(vap->iv_des_ssid[0].ssid, 0, IEEE80211_NWID_LEN); in setmlme_assoc_adhoc()
1621 vap->iv_des_ssid[0].len = ssid_len; in setmlme_assoc_adhoc()
1622 memcpy(vap->iv_des_ssid[0].ssid, ssid, ssid_len); in setmlme_assoc_adhoc()
1623 vap->iv_des_nssid = 1; in setmlme_assoc_adhoc()
1631 error = ieee80211_scanreq(vap, sr); in setmlme_assoc_adhoc()
1638 ieee80211_ioctl_setmlme(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_setmlme() argument
1648 if (vap->iv_opmode == IEEE80211_M_STA && in ieee80211_ioctl_setmlme()
1650 return setmlme_assoc_sta(vap, mlme.im_macaddr, in ieee80211_ioctl_setmlme()
1651 vap->iv_des_ssid[0].len, vap->iv_des_ssid[0].ssid); in ieee80211_ioctl_setmlme()
1652 else if ((vap->iv_opmode == IEEE80211_M_IBSS || in ieee80211_ioctl_setmlme()
1653 vap->iv_opmode == IEEE80211_M_AHDEMO) && in ieee80211_ioctl_setmlme()
1655 return setmlme_assoc_adhoc(vap, mlme.im_macaddr, in ieee80211_ioctl_setmlme()
1658 return setmlme_common(vap, mlme.im_op, in ieee80211_ioctl_setmlme()
1663 ieee80211_ioctl_macmac(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_macmac() argument
1666 const struct ieee80211_aclator *acl = vap->iv_acl; in ieee80211_ioctl_macmac()
1676 if (acl == NULL || !acl->iac_attach(vap)) in ieee80211_ioctl_macmac()
1678 vap->iv_acl = acl; in ieee80211_ioctl_macmac()
1681 acl->iac_add(vap, mac); in ieee80211_ioctl_macmac()
1683 acl->iac_remove(vap, mac); in ieee80211_ioctl_macmac()
1688 ieee80211_ioctl_setmaccmd(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_setmaccmd() argument
1690 const struct ieee80211_aclator *acl = vap->iv_acl; in ieee80211_ioctl_setmaccmd()
1699 if (acl == NULL || !acl->iac_attach(vap)) in ieee80211_ioctl_setmaccmd()
1701 vap->iv_acl = acl; in ieee80211_ioctl_setmaccmd()
1703 acl->iac_setpolicy(vap, ireq->i_val); in ieee80211_ioctl_setmaccmd()
1707 acl->iac_flush(vap); in ieee80211_ioctl_setmaccmd()
1712 vap->iv_acl = NULL; in ieee80211_ioctl_setmaccmd()
1713 acl->iac_detach(vap); in ieee80211_ioctl_setmaccmd()
1720 return acl->iac_setioctl(vap, ireq); in ieee80211_ioctl_setmaccmd()
1726 ieee80211_ioctl_setchanlist(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_setchanlist() argument
1728 struct ieee80211com *ic = vap->iv_ic; in ieee80211_ioctl_setchanlist()
1766 ieee80211_scan_flush(vap); in ieee80211_ioctl_setchanlist()
1772 ieee80211_ioctl_setstastats(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_setstastats() argument
1788 ni = ieee80211_find_vap_node(&vap->iv_ic->ic_sta, vap, macaddr); in ieee80211_ioctl_setstastats()
1798 ieee80211_ioctl_setstatxpow(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_setstatxpow() argument
1809 ni = ieee80211_find_vap_node(&vap->iv_ic->ic_sta, vap, txpow.it_macaddr); in ieee80211_ioctl_setstatxpow()
1818 ieee80211_ioctl_setwmeparam(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_setwmeparam() argument
1820 struct ieee80211com *ic = vap->iv_ic; in ieee80211_ioctl_setwmeparam()
1871 ieee80211_wme_updateparams(vap); in ieee80211_ioctl_setwmeparam()
2000 setcurchan(struct ieee80211vap *vap, struct ieee80211_channel *c) in setcurchan() argument
2002 struct ieee80211com *ic = vap->iv_ic; in setcurchan()
2008 if (vap->iv_opmode == IEEE80211_M_HOSTAP) { in setcurchan()
2011 if (!check_mode_consistency(c, vap->iv_des_mode)) in setcurchan()
2013 } else if (vap->iv_opmode == IEEE80211_M_IBSS) { in setcurchan()
2017 if ((vap->iv_state == IEEE80211_S_RUN || vap->iv_state == IEEE80211_S_SLEEP) && in setcurchan()
2018 vap->iv_bss->ni_chan == c) in setcurchan()
2021 vap->iv_des_chan = c; in setcurchan()
2024 if (vap->iv_opmode == IEEE80211_M_MONITOR && in setcurchan()
2025 vap->iv_des_chan != IEEE80211_CHAN_ANYC) { in setcurchan()
2029 if (IFNET_IS_UP_RUNNING(vap->iv_ifp)) { in setcurchan()
2031 ieee80211_setcurchan(ic, vap->iv_des_chan); in setcurchan()
2032 vap->iv_bss->ni_chan = ic->ic_curchan; in setcurchan()
2034 ic->ic_curchan = vap->iv_des_chan; in setcurchan()
2043 if (IS_UP_AUTO(vap)) in setcurchan()
2044 ieee80211_new_state(vap, IEEE80211_S_SCAN, 0); in setcurchan()
2045 else if (vap->iv_des_chan != IEEE80211_CHAN_ANYC) { in setcurchan()
2051 ic->ic_curchan = vap->iv_des_chan; in setcurchan()
2063 ieee80211_ioctl_setchannel(struct ieee80211vap *vap, in ieee80211_ioctl_setchannel() argument
2066 struct ieee80211com *ic = vap->iv_ic; in ieee80211_ioctl_setchannel()
2076 c = findchannel(ic, ireq->i_val, vap->iv_des_mode); in ieee80211_ioctl_setchannel()
2099 switch (vap->iv_des_mode) { in ieee80211_ioctl_setchannel()
2148 return setcurchan(vap, c); in ieee80211_ioctl_setchannel()
2157 ieee80211_ioctl_setcurchan(struct ieee80211vap *vap, in ieee80211_ioctl_setcurchan() argument
2160 struct ieee80211com *ic = vap->iv_ic; in ieee80211_ioctl_setcurchan()
2178 return setcurchan(vap, c); in ieee80211_ioctl_setcurchan()
2182 ieee80211_ioctl_setregdomain(struct ieee80211vap *vap, in ieee80211_ioctl_setregdomain() argument
2191 IEEE80211_DPRINTF(vap, IEEE80211_MSG_IOCTL, in ieee80211_ioctl_setregdomain()
2200 IEEE80211_DPRINTF(vap, IEEE80211_MSG_IOCTL, in ieee80211_ioctl_setregdomain()
2208 IEEE80211_DPRINTF(vap, IEEE80211_MSG_IOCTL, in ieee80211_ioctl_setregdomain()
2213 error = ieee80211_setregdomain(vap, reg); in ieee80211_ioctl_setregdomain()
2250 ieee80211_ioctl_setroam(struct ieee80211vap *vap, in ieee80211_ioctl_setroam() argument
2253 struct ieee80211com *ic = vap->iv_ic; in ieee80211_ioctl_setroam()
2260 if (ireq->i_len != sizeof(vap->iv_roamparms)) in ieee80211_ioctl_setroam()
2280 dst = &vap->iv_roamparms[mode]; in ieee80211_ioctl_setroam()
2305 vap->iv_roamparms[mode] = parms->params[mode]; in ieee80211_ioctl_setroam()
2308 if (vap->iv_roaming == IEEE80211_ROAMING_DEVICE) in ieee80211_ioctl_setroam()
2317 ieee80211_ioctl_settxparams(struct ieee80211vap *vap, in ieee80211_ioctl_settxparams() argument
2320 struct ieee80211com *ic = vap->iv_ic; in ieee80211_ioctl_settxparams()
2340 dst = &vap->iv_txparms[mode]; in ieee80211_ioctl_settxparams()
2373 vap->iv_txparms[mode] = parms.params[mode]; in ieee80211_ioctl_settxparams()
2428 setwparsnie(struct ieee80211vap *vap, uint8_t *ie, int space) in setwparsnie() argument
2434 vap->iv_wpa_ie = ie; in setwparsnie()
2436 vap->iv_rsn_ie = ie; in setwparsnie()
2440 ieee80211_ioctl_setappie_locked(struct ieee80211vap *vap, in ieee80211_ioctl_setappie_locked() argument
2445 IEEE80211_LOCK_ASSERT(vap->iv_ic); in ieee80211_ioctl_setappie_locked()
2449 if (vap->iv_opmode != IEEE80211_M_HOSTAP && in ieee80211_ioctl_setappie_locked()
2450 vap->iv_opmode != IEEE80211_M_IBSS) { in ieee80211_ioctl_setappie_locked()
2454 error = setappie(&vap->iv_appie_beacon, ireq); in ieee80211_ioctl_setappie_locked()
2456 ieee80211_beacon_notify(vap, IEEE80211_BEACON_APPIE); in ieee80211_ioctl_setappie_locked()
2459 error = setappie(&vap->iv_appie_proberesp, ireq); in ieee80211_ioctl_setappie_locked()
2462 if (vap->iv_opmode == IEEE80211_M_HOSTAP) in ieee80211_ioctl_setappie_locked()
2463 error = setappie(&vap->iv_appie_assocresp, ireq); in ieee80211_ioctl_setappie_locked()
2468 error = setappie(&vap->iv_appie_probereq, ireq); in ieee80211_ioctl_setappie_locked()
2471 if (vap->iv_opmode == IEEE80211_M_STA) in ieee80211_ioctl_setappie_locked()
2472 error = setappie(&vap->iv_appie_assocreq, ireq); in ieee80211_ioctl_setappie_locked()
2477 error = setappie(&vap->iv_appie_wpa, ireq); in ieee80211_ioctl_setappie_locked()
2485 vap->iv_wpa_ie = NULL; in ieee80211_ioctl_setappie_locked()
2486 vap->iv_rsn_ie = NULL; in ieee80211_ioctl_setappie_locked()
2487 if (vap->iv_appie_wpa != NULL) { in ieee80211_ioctl_setappie_locked()
2489 vap->iv_appie_wpa; in ieee80211_ioctl_setappie_locked()
2493 setwparsnie(vap, data, appie->ie_len); in ieee80211_ioctl_setappie_locked()
2494 setwparsnie(vap, data + 2 + data[1], in ieee80211_ioctl_setappie_locked()
2497 if (vap->iv_opmode == IEEE80211_M_HOSTAP || in ieee80211_ioctl_setappie_locked()
2498 vap->iv_opmode == IEEE80211_M_IBSS) { in ieee80211_ioctl_setappie_locked()
2518 ieee80211_ioctl_setappie(struct ieee80211vap *vap, in ieee80211_ioctl_setappie() argument
2521 struct ieee80211com *ic = vap->iv_ic; in ieee80211_ioctl_setappie()
2530 error = ieee80211_ioctl_setappie_locked(vap, ireq, fc0); in ieee80211_ioctl_setappie()
2536 ieee80211_ioctl_chanswitch(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_chanswitch() argument
2538 struct ieee80211com *ic = vap->iv_ic; in ieee80211_ioctl_chanswitch()
2549 if (vap->iv_opmode != IEEE80211_M_HOSTAP || in ieee80211_ioctl_chanswitch()
2550 (vap->iv_flags & IEEE80211_F_DOTH) == 0) in ieee80211_ioctl_chanswitch()
2568 ieee80211_scanreq(struct ieee80211vap *vap, struct ieee80211_scan_req *sr) in ieee80211_scanreq() argument
2576 struct ieee80211com *ic = vap->iv_ic; in ieee80211_scanreq()
2608 if ((vap->iv_caps & IEEE80211_C_BGSCAN) == 0 || in ieee80211_scanreq()
2609 (vap->iv_flags & IEEE80211_F_BGSCAN) == 0 || in ieee80211_scanreq()
2610 vap->iv_opmode != IEEE80211_M_STA) in ieee80211_scanreq()
2619 if ((vap->iv_ifp->if_flags & IFF_UP) == 0) in ieee80211_scanreq()
2622 IEEE80211_DPRINTF(vap, IEEE80211_MSG_SCAN, in ieee80211_scanreq()
2625 __func__, vap, vap->iv_state, ieee80211_state_name[vap->iv_state], in ieee80211_scanreq()
2627 (vap->iv_ifp->if_flags & IFF_UP) == 0 ? " (!IFF_UP)" : "", in ieee80211_scanreq()
2646 if (vap->iv_state == IEEE80211_S_INIT) { in ieee80211_scanreq()
2648 vap->iv_scanreq_flags = sr->sr_flags; in ieee80211_scanreq()
2649 vap->iv_scanreq_duration = sr->sr_duration; in ieee80211_scanreq()
2650 vap->iv_scanreq_nssid = sr->sr_nssid; in ieee80211_scanreq()
2652 vap->iv_scanreq_ssid[i].len = sr->sr_ssid[i].len; in ieee80211_scanreq()
2653 memcpy(vap->iv_scanreq_ssid[i].ssid, in ieee80211_scanreq()
2656 vap->iv_flags_ext |= IEEE80211_FEXT_SCANREQ; in ieee80211_scanreq()
2658 ieee80211_new_state(vap, IEEE80211_S_SCAN, 0); in ieee80211_scanreq()
2660 vap->iv_flags_ext &= ~IEEE80211_FEXT_SCANREQ; in ieee80211_scanreq()
2663 error = ieee80211_check_scan(vap, sr->sr_flags, in ieee80211_scanreq()
2669 error = ieee80211_start_scan(vap, sr->sr_flags, in ieee80211_scanreq()
2683 ieee80211_ioctl_scanreq(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_scanreq() argument
2697 error = ieee80211_scanreq(vap, sr); in ieee80211_ioctl_scanreq()
2704 ieee80211_ioctl_setstavlan(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_setstavlan() argument
2716 ni = ieee80211_find_vap_node(&vap->iv_ic->ic_sta, vap, in ieee80211_ioctl_setstavlan()
2721 ni = ieee80211_ref_node(vap->iv_bss); in ieee80211_ioctl_setstavlan()
2728 isvap11g(const struct ieee80211vap *vap) in isvap11g() argument
2730 const struct ieee80211_node *bss = vap->iv_bss; in isvap11g()
2736 isvapht(const struct ieee80211vap *vap) in isvapht() argument
2738 const struct ieee80211_node *bss = vap->iv_bss; in isvapht()
2747 dummy_ioctl_set(struct ieee80211vap *vap, struct ieee80211req *ireq) in dummy_ioctl_set() argument
2754 ieee80211_ioctl_setdefault(struct ieee80211vap *vap, struct ieee80211req *ireq) in ieee80211_ioctl_setdefault() argument
2760 error = (*set)(vap, ireq); in ieee80211_ioctl_setdefault()
2768 ieee80211_ioctl_set80211(struct ieee80211vap *vap, u_long cmd, struct ieee80211req *ireq) in ieee80211_ioctl_set80211() argument
2770 struct ieee80211com *ic = vap->iv_ic; in ieee80211_ioctl_set80211()
2789 memset(vap->iv_des_ssid[0].ssid, 0, IEEE80211_NWID_LEN); in ieee80211_ioctl_set80211()
2790 vap->iv_des_ssid[0].len = ireq->i_len; in ieee80211_ioctl_set80211()
2791 memcpy(vap->iv_des_ssid[0].ssid, tmpssid, ireq->i_len); in ieee80211_ioctl_set80211()
2792 vap->iv_des_nssid = (ireq->i_len > 0); in ieee80211_ioctl_set80211()
2798 vap->iv_flags &= ~IEEE80211_F_PRIVACY; in ieee80211_ioctl_set80211()
2799 vap->iv_flags &= ~IEEE80211_F_DROPUNENC; in ieee80211_ioctl_set80211()
2802 vap->iv_flags |= IEEE80211_F_PRIVACY; in ieee80211_ioctl_set80211()
2803 vap->iv_flags |= IEEE80211_F_DROPUNENC; in ieee80211_ioctl_set80211()
2806 vap->iv_flags |= IEEE80211_F_PRIVACY; in ieee80211_ioctl_set80211()
2807 vap->iv_flags &= ~IEEE80211_F_DROPUNENC; in ieee80211_ioctl_set80211()
2816 k = &vap->iv_nw_keys[kid]; in ieee80211_ioctl_set80211()
2819 (void) ieee80211_crypto_delkey(vap, k); in ieee80211_ioctl_set80211()
2828 ieee80211_key_update_begin(vap); in ieee80211_ioctl_set80211()
2830 if (ieee80211_crypto_newkey(vap, IEEE80211_CIPHER_WEP, in ieee80211_ioctl_set80211()
2834 IEEE80211_ADDR_COPY(k->wk_macaddr, vap->iv_myaddr); in ieee80211_ioctl_set80211()
2835 if (!ieee80211_crypto_setkey(vap, k)) in ieee80211_ioctl_set80211()
2839 ieee80211_key_update_end(vap); in ieee80211_ioctl_set80211()
2854 ieee80211_key_update_begin(vap); in ieee80211_ioctl_set80211()
2855 ieee80211_crypto_set_deftxkey(vap, kid); in ieee80211_ioctl_set80211()
2856 ieee80211_key_update_end(vap); in ieee80211_ioctl_set80211()
2874 vap->iv_flags |= IEEE80211_F_PRIVACY; in ieee80211_ioctl_set80211()
2878 vap->iv_flags &= ~(IEEE80211_F_WPA|IEEE80211_F_PRIVACY); in ieee80211_ioctl_set80211()
2882 vap->iv_flags &= ~IEEE80211_F_WPA; in ieee80211_ioctl_set80211()
2884 vap->iv_flags |= IEEE80211_F_PRIVACY; in ieee80211_ioctl_set80211()
2887 vap->iv_flags &= ~IEEE80211_F_WPA; in ieee80211_ioctl_set80211()
2893 vap->iv_bss->ni_authmode = ireq->i_val; in ieee80211_ioctl_set80211()
2895 vap->iv_auth = auth; in ieee80211_ioctl_set80211()
2899 error = ieee80211_ioctl_setchannel(vap, ireq); in ieee80211_ioctl_set80211()
2904 if (vap->iv_flags & IEEE80211_F_PMGTON) { in ieee80211_ioctl_set80211()
2905 ieee80211_syncflag(vap, -IEEE80211_F_PMGTON); in ieee80211_ioctl_set80211()
2910 if ((vap->iv_caps & IEEE80211_C_PMGT) == 0) in ieee80211_ioctl_set80211()
2912 else if ((vap->iv_flags & IEEE80211_F_PMGTON) == 0) { in ieee80211_ioctl_set80211()
2913 ieee80211_syncflag(vap, IEEE80211_F_PMGTON); in ieee80211_ioctl_set80211()
2932 vap->iv_rtsthreshold = ireq->i_val; in ieee80211_ioctl_set80211()
2938 vap->iv_protmode = (enum ieee80211_protmode)ireq->i_val; in ieee80211_ioctl_set80211()
2944 ieee80211_vap_update_erp_protmode(vap); in ieee80211_ioctl_set80211()
2959 vap->iv_roaming = (enum ieee80211_roamingmode)ireq->i_val; in ieee80211_ioctl_set80211()
2965 vap->iv_flags |= IEEE80211_F_PRIVACY; in ieee80211_ioctl_set80211()
2967 vap->iv_flags &= ~IEEE80211_F_PRIVACY; in ieee80211_ioctl_set80211()
2972 vap->iv_flags |= IEEE80211_F_DROPUNENC; in ieee80211_ioctl_set80211()
2974 vap->iv_flags &= ~IEEE80211_F_DROPUNENC; in ieee80211_ioctl_set80211()
2978 error = ieee80211_ioctl_setkey(vap, ireq); in ieee80211_ioctl_set80211()
2981 error = ieee80211_ioctl_delkey(vap, ireq); in ieee80211_ioctl_set80211()
2984 error = ieee80211_ioctl_setmlme(vap, ireq); in ieee80211_ioctl_set80211()
2988 if ((vap->iv_flags & IEEE80211_F_WPA) == 0) in ieee80211_ioctl_set80211()
2990 vap->iv_flags |= IEEE80211_F_COUNTERM; in ieee80211_ioctl_set80211()
2992 vap->iv_flags &= ~IEEE80211_F_COUNTERM; in ieee80211_ioctl_set80211()
2999 flags = vap->iv_flags & ~IEEE80211_F_WPA; in ieee80211_ioctl_set80211()
3005 if (!(vap->iv_caps & IEEE80211_C_WPA1)) in ieee80211_ioctl_set80211()
3010 if (!(vap->iv_caps & IEEE80211_C_WPA2)) in ieee80211_ioctl_set80211()
3015 if ((vap->iv_caps & IEEE80211_C_WPA) != IEEE80211_C_WPA) in ieee80211_ioctl_set80211()
3022 vap->iv_flags = flags; in ieee80211_ioctl_set80211()
3027 if ((vap->iv_caps & IEEE80211_C_WME) == 0) in ieee80211_ioctl_set80211()
3029 ieee80211_syncflag(vap, IEEE80211_F_WME); in ieee80211_ioctl_set80211()
3031 ieee80211_syncflag(vap, -IEEE80211_F_WME); in ieee80211_ioctl_set80211()
3036 vap->iv_flags |= IEEE80211_F_HIDESSID; in ieee80211_ioctl_set80211()
3038 vap->iv_flags &= ~IEEE80211_F_HIDESSID; in ieee80211_ioctl_set80211()
3043 vap->iv_flags |= IEEE80211_F_NOBRIDGE; in ieee80211_ioctl_set80211()
3045 vap->iv_flags &= ~IEEE80211_F_NOBRIDGE; in ieee80211_ioctl_set80211()
3053 IEEE80211_ADDR_COPY(vap->iv_des_bssid, tmpbssid); in ieee80211_ioctl_set80211()
3054 if (IEEE80211_ADDR_EQ(vap->iv_des_bssid, zerobssid)) in ieee80211_ioctl_set80211()
3055 vap->iv_flags &= ~IEEE80211_F_DESBSSID; in ieee80211_ioctl_set80211()
3057 vap->iv_flags |= IEEE80211_F_DESBSSID; in ieee80211_ioctl_set80211()
3061 error = ieee80211_ioctl_setchanlist(vap, ireq); in ieee80211_ioctl_set80211()
3066 IEEE80211_DPRINTF(vap, IEEE80211_MSG_SCAN, in ieee80211_ioctl_set80211()
3075 if (vap->iv_state == IEEE80211_S_INIT) in ieee80211_ioctl_set80211()
3076 ieee80211_new_state(vap, IEEE80211_S_SCAN, 0); in ieee80211_ioctl_set80211()
3078 (void) ieee80211_start_scan(vap, in ieee80211_ioctl_set80211()
3084 vap->iv_des_nssid, vap->iv_des_ssid); in ieee80211_ioctl_set80211()
3088 error = ieee80211_ioctl_scanreq(vap, ireq); in ieee80211_ioctl_set80211()
3091 IEEE80211_DPRINTF(vap, IEEE80211_MSG_SCAN, in ieee80211_ioctl_set80211()
3093 ieee80211_cancel_scan(vap); in ieee80211_ioctl_set80211()
3097 ieee80211_syncflag_ht(vap, IEEE80211_FHT_HT); in ieee80211_ioctl_set80211()
3099 ieee80211_syncflag_ht(vap, -IEEE80211_FHT_HT); in ieee80211_ioctl_set80211()
3101 ieee80211_syncflag_ht(vap, IEEE80211_FHT_USEHT40); in ieee80211_ioctl_set80211()
3103 ieee80211_syncflag_ht(vap, -IEEE80211_FHT_USEHT40); in ieee80211_ioctl_set80211()
3108 error = ieee80211_ioctl_macmac(vap, ireq); in ieee80211_ioctl_set80211()
3111 error = ieee80211_ioctl_setmaccmd(vap, ireq); in ieee80211_ioctl_set80211()
3114 error = ieee80211_ioctl_setstastats(vap, ireq); in ieee80211_ioctl_set80211()
3117 error = ieee80211_ioctl_setstatxpow(vap, ireq); in ieee80211_ioctl_set80211()
3125 error = ieee80211_ioctl_setwmeparam(vap, ireq); in ieee80211_ioctl_set80211()
3128 if (vap->iv_opmode != IEEE80211_M_HOSTAP && in ieee80211_ioctl_set80211()
3129 vap->iv_opmode != IEEE80211_M_MBSS && in ieee80211_ioctl_set80211()
3130 vap->iv_opmode != IEEE80211_M_IBSS) in ieee80211_ioctl_set80211()
3134 vap->iv_dtim_period = ireq->i_val; in ieee80211_ioctl_set80211()
3140 if (vap->iv_opmode != IEEE80211_M_HOSTAP && in ieee80211_ioctl_set80211()
3141 vap->iv_opmode != IEEE80211_M_MBSS && in ieee80211_ioctl_set80211()
3142 vap->iv_opmode != IEEE80211_M_IBSS) in ieee80211_ioctl_set80211()
3153 vap->iv_flags |= IEEE80211_F_PUREG; in ieee80211_ioctl_set80211()
3155 vap->iv_flags &= ~IEEE80211_F_PUREG; in ieee80211_ioctl_set80211()
3157 if (isvap11g(vap)) in ieee80211_ioctl_set80211()
3161 vap->iv_quiet= ireq->i_val; in ieee80211_ioctl_set80211()
3164 vap->iv_quiet_count=ireq->i_val; in ieee80211_ioctl_set80211()
3167 vap->iv_quiet_period=ireq->i_val; in ieee80211_ioctl_set80211()
3170 vap->iv_quiet_offset=ireq->i_val; in ieee80211_ioctl_set80211()
3173 if(ireq->i_val < vap->iv_bss->ni_intval) in ieee80211_ioctl_set80211()
3174 vap->iv_quiet_duration = ireq->i_val; in ieee80211_ioctl_set80211()
3180 if ((vap->iv_caps & IEEE80211_C_BGSCAN) == 0) in ieee80211_ioctl_set80211()
3182 vap->iv_flags |= IEEE80211_F_BGSCAN; in ieee80211_ioctl_set80211()
3184 vap->iv_flags &= ~IEEE80211_F_BGSCAN; in ieee80211_ioctl_set80211()
3188 vap->iv_bgscanidle = ireq->i_val*hz/1000; in ieee80211_ioctl_set80211()
3194 vap->iv_bgscanintvl = ireq->i_val*hz; in ieee80211_ioctl_set80211()
3200 vap->iv_scanvalid = ireq->i_val*hz; in ieee80211_ioctl_set80211()
3205 if ((vap->iv_caps & IEEE80211_C_TXFRAG) == 0 && in ieee80211_ioctl_set80211()
3211 vap->iv_fragthreshold = ireq->i_val; in ieee80211_ioctl_set80211()
3216 if ((vap->iv_caps & IEEE80211_C_BURST) == 0) in ieee80211_ioctl_set80211()
3218 ieee80211_syncflag(vap, IEEE80211_F_BURST); in ieee80211_ioctl_set80211()
3220 ieee80211_syncflag(vap, -IEEE80211_F_BURST); in ieee80211_ioctl_set80211()
3227 vap->iv_bmissthreshold = ireq->i_val; in ieee80211_ioctl_set80211()
3231 error = ieee80211_ioctl_setcurchan(vap, ireq); in ieee80211_ioctl_set80211()
3237 if (((ireq->i_val ^ vap->iv_htcaps) & IEEE80211_HTCAP_SHORTGI) != 0) in ieee80211_ioctl_set80211()
3240 vap->iv_flags_ht |= IEEE80211_FHT_SHORTGI20; in ieee80211_ioctl_set80211()
3242 vap->iv_flags_ht |= IEEE80211_FHT_SHORTGI40; in ieee80211_ioctl_set80211()
3245 vap->iv_flags_ht &= in ieee80211_ioctl_set80211()
3250 if (ireq->i_val && (vap->iv_htcaps & IEEE80211_HTC_AMPDU) == 0) in ieee80211_ioctl_set80211()
3253 vap->iv_flags_ht |= IEEE80211_FHT_AMPDU_TX; in ieee80211_ioctl_set80211()
3255 vap->iv_flags_ht &= ~IEEE80211_FHT_AMPDU_TX; in ieee80211_ioctl_set80211()
3257 vap->iv_flags_ht |= IEEE80211_FHT_AMPDU_RX; in ieee80211_ioctl_set80211()
3259 vap->iv_flags_ht &= ~IEEE80211_FHT_AMPDU_RX; in ieee80211_ioctl_set80211()
3261 if (isvapht(vap)) in ieee80211_ioctl_set80211()
3269 if (vap->iv_opmode == IEEE80211_M_HOSTAP) in ieee80211_ioctl_set80211()
3270 vap->iv_ampdu_rxmax = ireq->i_val; in ieee80211_ioctl_set80211()
3272 vap->iv_ampdu_limit = ireq->i_val; in ieee80211_ioctl_set80211()
3279 vap->iv_ampdu_density = ireq->i_val; in ieee80211_ioctl_set80211()
3283 if (ireq->i_val && (vap->iv_htcaps & IEEE80211_HTC_AMSDU) == 0) in ieee80211_ioctl_set80211()
3286 vap->iv_flags_ht |= IEEE80211_FHT_AMSDU_TX; in ieee80211_ioctl_set80211()
3288 vap->iv_flags_ht &= ~IEEE80211_FHT_AMSDU_TX; in ieee80211_ioctl_set80211()
3290 vap->iv_flags_ht |= IEEE80211_FHT_AMSDU_RX; in ieee80211_ioctl_set80211()
3292 vap->iv_flags_ht &= ~IEEE80211_FHT_AMSDU_RX; in ieee80211_ioctl_set80211()
3294 if (isvapht(vap)) in ieee80211_ioctl_set80211()
3299 vap->iv_amsdu_limit = ireq->i_val; /* XXX truncation? */ in ieee80211_ioctl_set80211()
3303 if ((vap->iv_flags_ht & IEEE80211_FHT_HT) == 0) in ieee80211_ioctl_set80211()
3305 vap->iv_flags_ht |= IEEE80211_FHT_PUREN; in ieee80211_ioctl_set80211()
3307 vap->iv_flags_ht &= ~IEEE80211_FHT_PUREN; in ieee80211_ioctl_set80211()
3309 if (isvapht(vap)) in ieee80211_ioctl_set80211()
3316 if ((vap->iv_caps & IEEE80211_C_DOTH) == 0) in ieee80211_ioctl_set80211()
3319 vap->iv_flags |= IEEE80211_F_DOTH; in ieee80211_ioctl_set80211()
3321 vap->iv_flags &= ~IEEE80211_F_DOTH; in ieee80211_ioctl_set80211()
3325 error = ieee80211_ioctl_setregdomain(vap, ireq); in ieee80211_ioctl_set80211()
3328 error = ieee80211_ioctl_setroam(vap, ireq); in ieee80211_ioctl_set80211()
3331 error = ieee80211_ioctl_settxparams(vap, ireq); in ieee80211_ioctl_set80211()
3335 if ((vap->iv_flags_ht & IEEE80211_FHT_HT) == 0) in ieee80211_ioctl_set80211()
3337 vap->iv_flags_ht |= IEEE80211_FHT_HTCOMPAT; in ieee80211_ioctl_set80211()
3339 vap->iv_flags_ht &= ~IEEE80211_FHT_HTCOMPAT; in ieee80211_ioctl_set80211()
3341 if (isvapht(vap)) in ieee80211_ioctl_set80211()
3350 if (vap->iv_opmode != IEEE80211_M_HOSTAP && in ieee80211_ioctl_set80211()
3351 vap->iv_opmode != IEEE80211_M_STA) in ieee80211_ioctl_set80211()
3353 vap->iv_flags |= IEEE80211_F_DWDS; in ieee80211_ioctl_set80211()
3354 if (vap->iv_opmode == IEEE80211_M_STA) in ieee80211_ioctl_set80211()
3355 vap->iv_flags_ext |= IEEE80211_FEXT_4ADDR; in ieee80211_ioctl_set80211()
3357 vap->iv_flags &= ~IEEE80211_F_DWDS; in ieee80211_ioctl_set80211()
3358 if (vap->iv_opmode == IEEE80211_M_STA) in ieee80211_ioctl_set80211()
3359 vap->iv_flags_ext &= ~IEEE80211_FEXT_4ADDR; in ieee80211_ioctl_set80211()
3364 vap->iv_flags_ext |= IEEE80211_FEXT_INACT; in ieee80211_ioctl_set80211()
3366 vap->iv_flags_ext &= ~IEEE80211_FEXT_INACT; in ieee80211_ioctl_set80211()
3369 error = ieee80211_ioctl_setappie(vap, ireq); in ieee80211_ioctl_set80211()
3373 if ((vap->iv_caps & IEEE80211_C_WPA) == 0) in ieee80211_ioctl_set80211()
3375 vap->iv_flags_ext |= IEEE80211_FEXT_WPS; in ieee80211_ioctl_set80211()
3377 vap->iv_flags_ext &= ~IEEE80211_FEXT_WPS; in ieee80211_ioctl_set80211()
3381 if ((vap->iv_caps & IEEE80211_C_WPA) == 0) in ieee80211_ioctl_set80211()
3383 vap->iv_flags_ext |= IEEE80211_FEXT_TSN; in ieee80211_ioctl_set80211()
3385 vap->iv_flags_ext &= ~IEEE80211_FEXT_TSN; in ieee80211_ioctl_set80211()
3388 error = ieee80211_ioctl_chanswitch(vap, ireq); in ieee80211_ioctl_set80211()
3392 if ((vap->iv_caps & IEEE80211_C_DFS) == 0) in ieee80211_ioctl_set80211()
3395 if ((vap->iv_flags & IEEE80211_F_DOTH) == 0) in ieee80211_ioctl_set80211()
3397 vap->iv_flags_ext |= IEEE80211_FEXT_DFS; in ieee80211_ioctl_set80211()
3399 vap->iv_flags_ext &= ~IEEE80211_FEXT_DFS; in ieee80211_ioctl_set80211()
3403 vap->iv_flags_ext |= IEEE80211_FEXT_DOTD; in ieee80211_ioctl_set80211()
3405 vap->iv_flags_ext &= ~IEEE80211_FEXT_DOTD; in ieee80211_ioctl_set80211()
3406 if (vap->iv_opmode == IEEE80211_M_STA) in ieee80211_ioctl_set80211()
3412 vap->iv_htprotmode = ireq->i_val ? in ieee80211_ioctl_set80211()
3415 if (isvapht(vap)) in ieee80211_ioctl_set80211()
3418 ieee80211_vap_update_ht_protmode(vap); in ieee80211_ioctl_set80211()
3421 error = ieee80211_ioctl_setstavlan(vap, ireq); in ieee80211_ioctl_set80211()
3428 (vap->iv_htcaps & IEEE80211_HTC_SMPS) == 0) in ieee80211_ioctl_set80211()
3430 vap->iv_htcaps = (vap->iv_htcaps &~ IEEE80211_HTCAP_SMPS) | in ieee80211_ioctl_set80211()
3433 if (isvapht(vap)) in ieee80211_ioctl_set80211()
3438 if ((vap->iv_htcaps & IEEE80211_HTC_RIFS) == 0) in ieee80211_ioctl_set80211()
3440 vap->iv_flags_ht |= IEEE80211_FHT_RIFS; in ieee80211_ioctl_set80211()
3442 vap->iv_flags_ht &= ~IEEE80211_FHT_RIFS; in ieee80211_ioctl_set80211()
3444 if (isvapht(vap)) in ieee80211_ioctl_set80211()
3450 ((vap->iv_htcaps & IEEE80211_HTCAP_TXSTBC) == 0)) in ieee80211_ioctl_set80211()
3453 ((vap->iv_htcaps & IEEE80211_HTCAP_RXSTBC) == 0)) in ieee80211_ioctl_set80211()
3458 vap->iv_flags_ht |= IEEE80211_FHT_STBC_TX; in ieee80211_ioctl_set80211()
3460 vap->iv_flags_ht &= ~IEEE80211_FHT_STBC_TX; in ieee80211_ioctl_set80211()
3464 vap->iv_flags_ht |= IEEE80211_FHT_STBC_RX; in ieee80211_ioctl_set80211()
3466 vap->iv_flags_ht &= ~IEEE80211_FHT_STBC_RX; in ieee80211_ioctl_set80211()
3469 if (isvapht(vap)) in ieee80211_ioctl_set80211()
3475 (vap->iv_htcaps & IEEE80211_HTC_TXLDPC) == 0) in ieee80211_ioctl_set80211()
3478 (vap->iv_htcaps & IEEE80211_HTCAP_LDPC) == 0) in ieee80211_ioctl_set80211()
3483 vap->iv_flags_ht |= IEEE80211_FHT_LDPC_TX; in ieee80211_ioctl_set80211()
3485 vap->iv_flags_ht &= ~IEEE80211_FHT_LDPC_TX; in ieee80211_ioctl_set80211()
3489 vap->iv_flags_ht |= IEEE80211_FHT_LDPC_RX; in ieee80211_ioctl_set80211()
3491 vap->iv_flags_ht &= ~IEEE80211_FHT_LDPC_RX; in ieee80211_ioctl_set80211()
3494 if (isvapht(vap)) in ieee80211_ioctl_set80211()
3498 if ((vap->iv_caps & IEEE80211_C_UAPSD) == 0) in ieee80211_ioctl_set80211()
3501 vap->iv_flags_ext &= ~IEEE80211_FEXT_UAPSD; in ieee80211_ioctl_set80211()
3503 vap->iv_flags_ext |= IEEE80211_FEXT_UAPSD; in ieee80211_ioctl_set80211()
3511 ieee80211_syncflag_vht(vap, IEEE80211_FVHT_VHT); in ieee80211_ioctl_set80211()
3513 ieee80211_syncflag_vht(vap, -IEEE80211_FVHT_VHT); in ieee80211_ioctl_set80211()
3516 ieee80211_syncflag_vht(vap, IEEE80211_FVHT_USEVHT40); in ieee80211_ioctl_set80211()
3518 ieee80211_syncflag_vht(vap, -IEEE80211_FVHT_USEVHT40); in ieee80211_ioctl_set80211()
3521 ieee80211_syncflag_vht(vap, IEEE80211_FVHT_USEVHT80); in ieee80211_ioctl_set80211()
3523 ieee80211_syncflag_vht(vap, -IEEE80211_FVHT_USEVHT80); in ieee80211_ioctl_set80211()
3526 ieee80211_syncflag_vht(vap, IEEE80211_FVHT_USEVHT160); in ieee80211_ioctl_set80211()
3528 ieee80211_syncflag_vht(vap, -IEEE80211_FVHT_USEVHT160); in ieee80211_ioctl_set80211()
3531 ieee80211_syncflag_vht(vap, IEEE80211_FVHT_USEVHT80P80); in ieee80211_ioctl_set80211()
3533 ieee80211_syncflag_vht(vap, -IEEE80211_FVHT_USEVHT80P80); in ieee80211_ioctl_set80211()
3537 ((vap->iv_vht_cap.vht_cap_info & IEEE80211_VHTCAP_TXSTBC) == 0)) in ieee80211_ioctl_set80211()
3540 ((vap->iv_vht_cap.vht_cap_info & IEEE80211_VHTCAP_RXSTBC_MASK) == 0)) in ieee80211_ioctl_set80211()
3545 ieee80211_syncflag_vht(vap, IEEE80211_FVHT_STBC_TX); in ieee80211_ioctl_set80211()
3547 ieee80211_syncflag_vht(vap, -IEEE80211_FVHT_STBC_TX); in ieee80211_ioctl_set80211()
3551 ieee80211_syncflag_vht(vap, IEEE80211_FVHT_STBC_RX); in ieee80211_ioctl_set80211()
3553 ieee80211_syncflag_vht(vap, -IEEE80211_FVHT_STBC_RX); in ieee80211_ioctl_set80211()
3559 error = ieee80211_ioctl_setdefault(vap, ireq); in ieee80211_ioctl_set80211()
3576 error = IFNET_IS_UP_RUNNING(vap->iv_ifp) ? in ieee80211_ioctl_set80211()
3577 vap->iv_reset(vap, ireq->i_type) : 0; in ieee80211_ioctl_set80211()
3580 if (IS_UP_AUTO(vap)) in ieee80211_ioctl_set80211()
3581 ieee80211_init(vap); in ieee80211_ioctl_set80211()
3590 struct ieee80211vap *vap = ifp->if_softc; in ieee80211_ioctl() local
3591 struct ieee80211com *ic = vap->iv_ic; in ieee80211_ioctl()
3597 if (ic_used && (error = ieee80211_com_vincref(vap)) != 0) in ieee80211_ioctl()
3603 if ((ifp->if_flags ^ vap->iv_ifflags) & IFF_PROMISC) { in ieee80211_ioctl()
3612 vap->iv_opmode == IEEE80211_M_MONITOR || in ieee80211_ioctl()
3613 (vap->iv_opmode == IEEE80211_M_AHDEMO && in ieee80211_ioctl()
3614 (vap->iv_caps & IEEE80211_C_TDMA) == 0)) { in ieee80211_ioctl()
3615 ieee80211_promisc(vap, in ieee80211_ioctl()
3617 vap->iv_ifflags ^= IFF_PROMISC; in ieee80211_ioctl()
3620 if ((ifp->if_flags ^ vap->iv_ifflags) & IFF_ALLMULTI) { in ieee80211_ioctl()
3621 ieee80211_allmulti(vap, ifp->if_flags & IFF_ALLMULTI); in ieee80211_ioctl()
3622 vap->iv_ifflags ^= IFF_ALLMULTI; in ieee80211_ioctl()
3631 if (vap->iv_state == IEEE80211_S_INIT) { in ieee80211_ioctl()
3634 ieee80211_start_locked(vap); in ieee80211_ioctl()
3636 } else if (ieee80211_vap_ifp_check_is_running(vap)) { in ieee80211_ioctl()
3643 ieee80211_stop_locked(vap); in ieee80211_ioctl()
3649 ieee80211_vap_sync_mac_address(vap); in ieee80211_ioctl()
3659 error = ifmedia_ioctl(ifp, ifr, &vap->iv_media, cmd); in ieee80211_ioctl()
3662 error = ieee80211_ioctl_get80211(vap, cmd, in ieee80211_ioctl()
3666 error = ieee80211_priv_check_vap_manage(cmd, vap, ifp); in ieee80211_ioctl()
3668 error = ieee80211_ioctl_set80211(vap, cmd, in ieee80211_ioctl()
3673 error = copyout(&vap->iv_stats, ifr_data_get_ptr(ifr), in ieee80211_ioctl()
3674 sizeof(vap->iv_stats)); in ieee80211_ioctl()
3712 error = ieee80211_priv_check_vap_setmac(cmd, vap, ifp); in ieee80211_ioctl()
3729 ieee80211_com_vdecref(vap); in ieee80211_ioctl()