Lines Matching full:ni

68 static	int hostap_input(struct ieee80211_node *ni, struct mbuf *m,
106 sta_disassoc(void *arg, struct ieee80211_node *ni) in sta_disassoc() argument
109 if (ni->ni_associd != 0) { in sta_disassoc()
110 IEEE80211_SEND_MGMT(ni, IEEE80211_FC0_SUBTYPE_DISASSOC, in sta_disassoc()
112 ieee80211_node_leave(ni); in sta_disassoc()
117 sta_csa(void *arg, struct ieee80211_node *ni) in sta_csa() argument
119 struct ieee80211vap *vap = ni->ni_vap; in sta_csa()
121 if (ni->ni_associd != 0) in sta_csa()
122 if (ni->ni_inact > vap->iv_inact_init) { in sta_csa()
123 ni->ni_inact = vap->iv_inact_init; in sta_csa()
124 IEEE80211_NOTE(vap, IEEE80211_MSG_INACT, ni, in sta_csa()
125 "%s: inact %u", __func__, ni->ni_inact); in sta_csa()
130 sta_drop(void *arg, struct ieee80211_node *ni) in sta_drop() argument
133 if (ni->ni_associd != 0) in sta_drop()
134 ieee80211_node_leave(ni); in sta_drop()
306 struct ieee80211_node *ni = vap->iv_bss; in hostap_newstate() local
309 ether_sprintf(ni->ni_bssid)); in hostap_newstate()
310 ieee80211_print_essid(ni->ni_essid, in hostap_newstate()
311 ni->ni_esslen); in hostap_newstate()
314 ieee80211_node_get_txrate_kbit(ni) / 1000); in hostap_newstate()
354 struct ieee80211_node *ni, struct mbuf *m) in hostap_deliver_data() argument
369 IEEE80211_NODE_STAT(ni, rx_data); in hostap_deliver_data()
370 IEEE80211_NODE_STAT_ADD(ni, rx_bytes, m->m_pkthdr.len); in hostap_deliver_data()
373 IEEE80211_NODE_STAT(ni, rx_mcast); in hostap_deliver_data()
375 IEEE80211_NODE_STAT(ni, rx_ucast); in hostap_deliver_data()
432 if (ni->ni_vlan != 0) { in hostap_deliver_data()
434 m->m_pkthdr.ether_vtag = ni->ni_vlan; in hostap_deliver_data()
472 hostap_input(struct ieee80211_node *ni, struct mbuf *m, in hostap_input() argument
475 struct ieee80211vap *vap = ni->ni_vap; in hostap_input()
476 struct ieee80211com *ic = ni->ni_ic; in hostap_input()
512 KASSERT(ni != NULL, ("null node")); in hostap_input()
513 ni->ni_inact = ni->ni_inact_reload; in hostap_input()
519 ni->ni_macaddr, NULL, in hostap_input()
534 ni->ni_macaddr, NULL, "wrong version, fc %02x:%02x", in hostap_input()
551 IEEE80211_MSG_ANY, ni->ni_macaddr, in hostap_input()
573 IEEE80211_RSSI_LPF(ni->ni_avgrssi, rssi); in hostap_input()
574 ni->ni_noise = nf; in hostap_input()
580 if (! ieee80211_check_rxseq(ni, wh, bssid, rxs)) in hostap_input()
591 ni->ni_macaddr, NULL, in hostap_input()
614 if (ni == vap->iv_bss) { in hostap_input()
617 ieee80211_send_error(ni, wh->i_addr2, in hostap_input()
623 if (ni->ni_associd == 0) { in hostap_input()
626 IEEE80211_SEND_MGMT(ni, in hostap_input()
638 (ni->ni_flags & IEEE80211_NODE_PWR_MGT))) in hostap_input()
639 vap->iv_node_ps(ni, in hostap_input()
646 if (dir == IEEE80211_FC1_DIR_DSTODS && ni->ni_wdsvap == NULL) { in hostap_input()
647 if (!ieee80211_node_is_authorized(ni)) { in hostap_input()
654 IEEE80211_NODE_STAT(ni, rx_unauth); in hostap_input()
657 ieee80211_dwds_discover(ni, m); in hostap_input()
668 ieee80211_ampdu_reorder(ni, m, rxs) != 0) { in hostap_input()
690 IEEE80211_NODE_STAT(ni, rx_noprivacy); in hostap_input()
693 if (ieee80211_crypto_decap(ni, m, hdrspace, &key) == 0) { in hostap_input()
695 IEEE80211_NODE_STAT(ni, rx_wepfail); in hostap_input()
718 m = ieee80211_defrag(ni, m, hdrspace, has_decrypted); in hostap_input()
731 ni->ni_macaddr, "data", "%s", "demic error"); in hostap_input()
733 IEEE80211_NODE_STAT(ni, rx_demicfail); in hostap_input()
751 ni->ni_macaddr, "data", "%s", "decap error"); in hostap_input()
753 IEEE80211_NODE_STAT(ni, rx_decap); in hostap_input()
760 if (!ieee80211_node_is_authorized(ni)) { in hostap_input()
772 ni->ni_macaddr, "data", "unauthorized or " in hostap_input()
777 IEEE80211_NODE_STAT(ni, rx_unauth); in hostap_input()
794 IEEE80211_NODE_STAT(ni, rx_unencrypted); in hostap_input()
800 m = ieee80211_decap_amsdu(ni, m); in hostap_input()
805 m = ieee80211_decap_fastframe(vap, ni, m); in hostap_input()
810 if (dir == IEEE80211_FC1_DIR_DSTODS && ni->ni_wdsvap != NULL) in hostap_input()
811 ieee80211_deliver_data(ni->ni_wdsvap, ni, m); in hostap_input()
813 hostap_deliver_data(vap, ni, m); in hostap_input()
818 IEEE80211_NODE_STAT(ni, rx_mgmt); in hostap_input()
827 ni->ni_macaddr, "mgt", "too short: len %u", in hostap_input()
870 if (ieee80211_crypto_decap(ni, m, hdrspace, &key) == 0) { in hostap_input()
886 vap->iv_recv_mgmt(ni, m, subtype, rxs, rssi, nf); in hostap_input()
891 IEEE80211_NODE_STAT(ni, rx_ctrl); in hostap_input()
892 vap->iv_recv_ctl(ni, m, subtype); in hostap_input()
912 hostap_auth_open(struct ieee80211_node *ni, struct ieee80211_frame *wh, in hostap_auth_open() argument
915 struct ieee80211vap *vap = ni->ni_vap; in hostap_auth_open()
919 if (ni->ni_authmode == IEEE80211_AUTH_SHARED) { in hostap_auth_open()
921 ni->ni_macaddr, "open auth", in hostap_auth_open()
922 "bad sta auth mode %u", ni->ni_authmode); in hostap_auth_open()
929 if (ni->ni_challenge != NULL) { in hostap_auth_open()
930 IEEE80211_FREE(ni->ni_challenge, M_80211_NODE); in hostap_auth_open()
931 ni->ni_challenge = NULL; in hostap_auth_open()
934 ieee80211_send_error(ni, wh->i_addr2, in hostap_auth_open()
944 if (ni == vap->iv_bss) { in hostap_auth_open()
945 ni = ieee80211_dup_bss(vap, wh->i_addr2); in hostap_auth_open()
946 if (ni == NULL) in hostap_auth_open()
948 } else if ((ni->ni_flags & IEEE80211_NODE_AREF) == 0) in hostap_auth_open()
949 (void) ieee80211_ref_node(ni); in hostap_auth_open()
955 ni->ni_flags |= IEEE80211_NODE_AREF; in hostap_auth_open()
960 ni->ni_flags |= IEEE80211_NODE_ASSOCID; in hostap_auth_open()
972 IEEE80211_MSG_AUTH | IEEE80211_MSG_ACL, ni->ni_macaddr, in hostap_auth_open()
974 ieee80211_notify_node_auth(ni); in hostap_auth_open()
976 IEEE80211_SEND_MGMT(ni, IEEE80211_FC0_SUBTYPE_AUTH, seq + 1); in hostap_auth_open()
978 IEEE80211_MSG_DEBUG | IEEE80211_MSG_AUTH, ni->ni_macaddr, in hostap_auth_open()
984 if (ni->ni_authmode != IEEE80211_AUTH_8021X) in hostap_auth_open()
985 ieee80211_node_authorize(ni); in hostap_auth_open()
990 hostap_auth_shared(struct ieee80211_node *ni, struct ieee80211_frame *wh, in hostap_auth_shared() argument
994 struct ieee80211vap *vap = ni->ni_vap; in hostap_auth_shared()
1010 ni->ni_macaddr, "shared key auth", in hostap_auth_shared()
1020 if (ni->ni_authmode != IEEE80211_AUTH_AUTO && in hostap_auth_shared()
1021 ni->ni_authmode != IEEE80211_AUTH_SHARED) { in hostap_auth_shared()
1023 ni->ni_macaddr, "shared key auth", in hostap_auth_shared()
1024 "bad sta auth mode %u", ni->ni_authmode); in hostap_auth_shared()
1034 ni->ni_macaddr, "shared key auth", in hostap_auth_shared()
1050 ni->ni_macaddr, "shared key auth", in hostap_auth_shared()
1058 ni->ni_macaddr, "shared key auth", in hostap_auth_shared()
1074 if (ni == vap->iv_bss) { in hostap_auth_shared()
1075 ni = ieee80211_dup_bss(vap, wh->i_addr2); in hostap_auth_shared()
1076 if (ni == NULL) { in hostap_auth_shared()
1084 if ((ni->ni_flags & IEEE80211_NODE_AREF) == 0) in hostap_auth_shared()
1085 (void) ieee80211_ref_node(ni); in hostap_auth_shared()
1095 ni->ni_flags |= IEEE80211_NODE_AREF; in hostap_auth_shared()
1100 ni->ni_flags |= IEEE80211_NODE_ASSOCID; in hostap_auth_shared()
1101 IEEE80211_RSSI_LPF(ni->ni_avgrssi, rssi); in hostap_auth_shared()
1102 ni->ni_noise = nf; in hostap_auth_shared()
1103 if (!ieee80211_alloc_challenge(ni)) { in hostap_auth_shared()
1107 net80211_get_random_bytes(ni->ni_challenge, in hostap_auth_shared()
1110 ni, "shared key %sauth request", allocbs ? "" : "re"); in hostap_auth_shared()
1122 ni->ni_macaddr, in hostap_auth_shared()
1124 ieee80211_notify_node_auth(ni); in hostap_auth_shared()
1130 if (ni == vap->iv_bss) { in hostap_auth_shared()
1132 ni->ni_macaddr, "shared key response", in hostap_auth_shared()
1137 if (ni->ni_challenge == NULL) { in hostap_auth_shared()
1139 ni->ni_macaddr, "shared key response", in hostap_auth_shared()
1145 if (memcmp(ni->ni_challenge, &challenge[2], in hostap_auth_shared()
1148 ni->ni_macaddr, "shared key response", in hostap_auth_shared()
1155 ni, "%s", "station authenticated (shared key)"); in hostap_auth_shared()
1156 ieee80211_node_authorize(ni); in hostap_auth_shared()
1160 ni->ni_macaddr, "shared key auth", in hostap_auth_shared()
1166 IEEE80211_SEND_MGMT(ni, IEEE80211_FC0_SUBTYPE_AUTH, seq + 1); in hostap_auth_shared()
1173 ieee80211_send_error(ni, wh->i_addr2, in hostap_auth_shared()
1560 wpa_assocreq(struct ieee80211_node *ni, struct ieee80211_rsnparms *rsnparms, in wpa_assocreq() argument
1564 struct ieee80211vap *vap = ni->ni_vap; in wpa_assocreq()
1568 ni->ni_flags &= ~(IEEE80211_NODE_WPS|IEEE80211_NODE_TSN); in wpa_assocreq()
1576 ni->ni_flags |= IEEE80211_NODE_WPS; in wpa_assocreq()
1585 ni->ni_flags |= IEEE80211_NODE_TSN; in wpa_assocreq()
1628 IEEE80211_NOTE(vap, IEEE80211_MSG_ASSOC | IEEE80211_MSG_WPA, ni, in wpa_assocreq()
1637 ieee80211_node_deauth(ni, reason); in wpa_assocreq()
1656 ieee80211_deliver_l2uf(struct ieee80211_node *ni) in ieee80211_deliver_l2uf() argument
1658 struct ieee80211vap *vap = ni->ni_vap; in ieee80211_deliver_l2uf()
1666 IEEE80211_NOTE(vap, IEEE80211_MSG_ASSOC, ni, in ieee80211_deliver_l2uf()
1676 IEEE80211_ADDR_COPY(eh->ether_shost, ni->ni_macaddr); in ieee80211_deliver_l2uf()
1687 hostap_deliver_data(vap, ni, m); in ieee80211_deliver_l2uf()
1691 ratesetmismatch(struct ieee80211_node *ni, const struct ieee80211_frame *wh, in ratesetmismatch() argument
1694 IEEE80211_NOTE_MAC(ni->ni_vap, IEEE80211_MSG_ANY, wh->i_addr2, in ratesetmismatch()
1697 IEEE80211_SEND_MGMT(ni, resp, IEEE80211_STATUS_BASIC_RATE); in ratesetmismatch()
1698 ieee80211_node_leave(ni); in ratesetmismatch()
1702 capinfomismatch(struct ieee80211_node *ni, const struct ieee80211_frame *wh, in capinfomismatch() argument
1705 struct ieee80211vap *vap = ni->ni_vap; in capinfomismatch()
1710 IEEE80211_SEND_MGMT(ni, resp, IEEE80211_STATUS_CAPINFO); in capinfomismatch()
1711 ieee80211_node_leave(ni); in capinfomismatch()
1716 htcapmismatch(struct ieee80211_node *ni, const struct ieee80211_frame *wh, in htcapmismatch() argument
1719 IEEE80211_NOTE_MAC(ni->ni_vap, IEEE80211_MSG_ANY, wh->i_addr2, in htcapmismatch()
1722 IEEE80211_SEND_MGMT(ni, resp, IEEE80211_STATUS_MISSING_HT_CAPS); in htcapmismatch()
1723 ieee80211_node_leave(ni); in htcapmismatch()
1727 authalgreject(struct ieee80211_node *ni, const struct ieee80211_frame *wh, in authalgreject() argument
1730 struct ieee80211vap *vap = ni->ni_vap; in authalgreject()
1735 ieee80211_send_error(ni, wh->i_addr2, IEEE80211_FC0_SUBTYPE_AUTH, in authalgreject()
1789 hostap_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m0, in hostap_recv_mgmt() argument
1792 struct ieee80211vap *vap = ni->ni_vap; in hostap_recv_mgmt()
1793 struct ieee80211com *ic = ni->ni_ic; in hostap_recv_mgmt()
1821 if (ieee80211_parse_beacon(ni, m0, ic->ic_curchan, &scan) &~ IEEE80211_BPARSE_OFFCHAN) in hostap_recv_mgmt()
1828 IEEE80211_NODE_STAT(ni, rx_beacons); in hostap_recv_mgmt()
1830 IEEE80211_NODE_STAT(ni, rx_proberesp); in hostap_recv_mgmt()
2006 ieee80211_send_error(ni, wh->i_addr2, in hostap_recv_mgmt()
2016 ieee80211_send_error(ni, wh->i_addr2, in hostap_recv_mgmt()
2022 hostap_auth_shared(ni, wh, frm + 6, efrm, rssi, nf, in hostap_recv_mgmt()
2025 hostap_auth_open(ni, wh, rssi, nf, seq, status); in hostap_recv_mgmt()
2027 authalgreject(ni, wh, algo, in hostap_recv_mgmt()
2040 authalgreject(ni, wh, algo, in hostap_recv_mgmt()
2069 if (ni == vap->iv_bss) { in hostap_recv_mgmt()
2073 ieee80211_send_error(ni, wh->i_addr2, in hostap_recv_mgmt()
2168 !wpa_assocreq(ni, &rsnparms, wh, wpa, rsn, capinfo)) in hostap_recv_mgmt()
2171 if (ni->ni_challenge != NULL) { in hostap_recv_mgmt()
2172 IEEE80211_FREE(ni->ni_challenge, M_80211_NODE); in hostap_recv_mgmt()
2173 ni->ni_challenge = NULL; in hostap_recv_mgmt()
2177 capinfomismatch(ni, wh, reassoc, resp, in hostap_recv_mgmt()
2184 if (ni->ni_associd != 0 && in hostap_recv_mgmt()
2186 ((ni->ni_capinfo ^ capinfo) & IEEE80211_CAPINFO_SHORT_SLOTTIME)) { in hostap_recv_mgmt()
2187 capinfomismatch(ni, wh, reassoc, resp, in hostap_recv_mgmt()
2191 rate = ieee80211_setup_rates(ni, rates, xrates, in hostap_recv_mgmt()
2195 ratesetmismatch(ni, wh, reassoc, resp, "legacy", rate); in hostap_recv_mgmt()
2206 ratesetmismatch(ni, wh, reassoc, resp, "11g", rate); in hostap_recv_mgmt()
2214 ni->ni_chan = vap->iv_bss->ni_chan; in hostap_recv_mgmt()
2217 if (IEEE80211_IS_CHAN_VHT(ni->ni_chan) && in hostap_recv_mgmt()
2222 ieee80211_vht_node_init(ni); in hostap_recv_mgmt()
2223 ieee80211_vht_update_cap(ni, vhtcap, vhtinfo); in hostap_recv_mgmt()
2224 } else if (ni->ni_flags & IEEE80211_NODE_VHT) in hostap_recv_mgmt()
2225 ieee80211_vht_node_cleanup(ni); in hostap_recv_mgmt()
2228 if (IEEE80211_IS_CHAN_HT(ni->ni_chan) && htcap != NULL) { in hostap_recv_mgmt()
2229 rate = ieee80211_setup_htrates(ni, htcap, in hostap_recv_mgmt()
2233 ratesetmismatch(ni, wh, reassoc, resp, in hostap_recv_mgmt()
2238 ieee80211_ht_node_init(ni); in hostap_recv_mgmt()
2239 ieee80211_ht_updatehtcap(ni, htcap); in hostap_recv_mgmt()
2240 } else if (ni->ni_flags & IEEE80211_NODE_HT) in hostap_recv_mgmt()
2241 ieee80211_ht_node_cleanup(ni); in hostap_recv_mgmt()
2244 if (IEEE80211_IS_CHAN_HT(ni->ni_chan) && htcap != NULL) { in hostap_recv_mgmt()
2245 ieee80211_ht_updatehtcap_final(ni); in hostap_recv_mgmt()
2250 ieee80211_ff_node_cleanup(ni); in hostap_recv_mgmt()
2261 if ((ni->ni_flags & IEEE80211_NODE_HT) && in hostap_recv_mgmt()
2266 IEEE80211_MSG_ASSOC | IEEE80211_MSG_11N, ni, in hostap_recv_mgmt()
2270 ieee80211_ht_node_cleanup(ni); in hostap_recv_mgmt()
2273 ieee80211_ff_node_cleanup(ni); in hostap_recv_mgmt()
2281 (ni->ni_flags & IEEE80211_NODE_HT) == 0) { in hostap_recv_mgmt()
2282 htcapmismatch(ni, wh, reassoc, resp); in hostap_recv_mgmt()
2286 IEEE80211_RSSI_LPF(ni->ni_avgrssi, rssi); in hostap_recv_mgmt()
2287 ni->ni_noise = nf; in hostap_recv_mgmt()
2288 ni->ni_intval = lintval; in hostap_recv_mgmt()
2289 ni->ni_capinfo = capinfo; in hostap_recv_mgmt()
2290 ni->ni_fhdwell = vap->iv_bss->ni_fhdwell; in hostap_recv_mgmt()
2291 ni->ni_fhindex = vap->iv_bss->ni_fhindex; in hostap_recv_mgmt()
2296 if (ieee80211_ies_init(&ni->ni_ies, sfrm, efrm - sfrm)) { in hostap_recv_mgmt()
2297 #define setie(_ie, _off) ieee80211_ies_setie(ni->ni_ies, _ie, _off) in hostap_recv_mgmt()
2309 ni->ni_flags |= IEEE80211_NODE_QOS; in hostap_recv_mgmt()
2310 if (ieee80211_parse_wmeie(wme, wh, ni) > 0) { in hostap_recv_mgmt()
2311 if (ni->ni_uapsd != 0) in hostap_recv_mgmt()
2312 ni->ni_flags |= in hostap_recv_mgmt()
2315 ni->ni_flags &= in hostap_recv_mgmt()
2319 ni->ni_flags &= in hostap_recv_mgmt()
2328 ieee80211_parse_ath(ni, ni->ni_ies.ath_ie); in hostap_recv_mgmt()
2331 ni->ni_ath_flags = 0; in hostap_recv_mgmt()
2334 ni->ni_flags &= ~IEEE80211_NODE_QOS; in hostap_recv_mgmt()
2335 ni->ni_flags &= ~IEEE80211_NODE_UAPSD; in hostap_recv_mgmt()
2336 ni->ni_ath_flags = 0; in hostap_recv_mgmt()
2338 ieee80211_node_join(ni, resp); in hostap_recv_mgmt()
2339 ieee80211_deliver_l2uf(ni); in hostap_recv_mgmt()
2365 IEEE80211_NODE_STAT(ni, rx_deauth); in hostap_recv_mgmt()
2368 IEEE80211_NODE_STAT(ni, rx_disassoc); in hostap_recv_mgmt()
2370 IEEE80211_NOTE(vap, IEEE80211_MSG_AUTH, ni, in hostap_recv_mgmt()
2374 if (ni != vap->iv_bss) in hostap_recv_mgmt()
2375 ieee80211_node_leave(ni); in hostap_recv_mgmt()
2381 if (ni == vap->iv_bss) { in hostap_recv_mgmt()
2396 if (ieee80211_parse_action(ni, m0) == 0) in hostap_recv_mgmt()
2397 (void)ic->ic_recv_action(ni, wh, frm, efrm); in hostap_recv_mgmt()
2419 hostap_recv_ctl(struct ieee80211_node *ni, struct mbuf *m, int subtype) in hostap_recv_ctl() argument
2423 ni->ni_vap->iv_recv_pspoll(ni, m); in hostap_recv_ctl()
2426 ieee80211_recv_bar(ni, m); in hostap_recv_ctl()
2435 ieee80211_recv_pspoll(struct ieee80211_node *ni, struct mbuf *m0) in ieee80211_recv_pspoll() argument
2437 struct ieee80211vap *vap = ni->ni_vap; in ieee80211_recv_pspoll()
2445 if (ni->ni_associd == 0) { in ieee80211_recv_pspoll()
2451 IEEE80211_SEND_MGMT(ni, IEEE80211_FC0_SUBTYPE_DEAUTH, in ieee80211_recv_pspoll()
2457 if (aid != ni->ni_associd) { in ieee80211_recv_pspoll()
2462 ni->ni_associd, aid); in ieee80211_recv_pspoll()
2476 m = ieee80211_node_psq_dequeue(ni, &qlen); in ieee80211_recv_pspoll()
2480 ieee80211_send_nulldata(ieee80211_ref_node(ni)); in ieee80211_recv_pspoll()
2483 vap->iv_set_tim(ni, 0); /* just in case */ in ieee80211_recv_pspoll()
2492 IEEE80211_NOTE(vap, IEEE80211_MSG_POWER, ni, in ieee80211_recv_pspoll()
2496 IEEE80211_NOTE(vap, IEEE80211_MSG_POWER, ni, in ieee80211_recv_pspoll()
2499 vap->iv_set_tim(ni, 0); in ieee80211_recv_pspoll()