Lines Matching +full:mic +full:- +full:max +full:- +full:freq
2 * Driver interaction with Linux nl80211/cfg80211 - Event processing
3 * Copyright (c) 2002-2017, Jouni Malinen <j@w1.fi>
5 * Copyright (c) 2009-2010, Atheros Communications
16 #include "common/qca-vendor.h"
17 #include "common/qca-vendor-attr.h"
203 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_SME) &&
204 drv->force_connect_cmd) {
216 if (len < 24 + sizeof(mgmt->u.auth)) {
222 os_memcpy(drv->auth_bssid, mgmt->sa, ETH_ALEN);
223 os_memset(drv->auth_attempt_bssid, 0, ETH_ALEN);
225 os_memcpy(event.auth.peer, mgmt->sa, ETH_ALEN);
226 event.auth.auth_type = le_to_host16(mgmt->u.auth.auth_alg);
228 le_to_host16(mgmt->u.auth.auth_transaction);
229 event.auth.status_code = le_to_host16(mgmt->u.auth.status_code);
230 if (len > 24 + sizeof(mgmt->u.auth)) {
231 event.auth.ies = mgmt->u.auth.variable;
232 event.auth.ies_len = len - 24 - sizeof(mgmt->u.auth);
235 wpa_supplicant_event(drv->ctx, EVENT_AUTH, &event);
253 wmm_params->uapsd_queues =
255 wmm_params->info_bitmap |= WMM_PARAMS_UAPSD_QUEUES_INFO;
268 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_SME) &&
269 drv->force_connect_cmd) {
281 if (len < 24 + sizeof(mgmt->u.assoc_resp)) {
287 status = le_to_host16(mgmt->u.assoc_resp.status_code);
290 event.assoc_reject.bssid = mgmt->bssid;
291 if (len > 24 + sizeof(mgmt->u.assoc_resp)) {
293 (u8 *) mgmt->u.assoc_resp.variable;
295 len - 24 - sizeof(mgmt->u.assoc_resp);
299 wpa_supplicant_event(drv->ctx, EVENT_ASSOC_REJECT, &event);
303 drv->associated = 1;
304 os_memcpy(drv->bssid, mgmt->sa, ETH_ALEN);
305 os_memcpy(drv->prev_bssid, mgmt->sa, ETH_ALEN);
310 if (len > 24 + sizeof(mgmt->u.assoc_resp)) {
311 event.assoc_info.resp_ies = (u8 *) mgmt->u.assoc_resp.variable;
313 len - 24 - sizeof(mgmt->u.assoc_resp);
322 * drv->ssid needs to be set here to satisfy later checking. */
323 ssid_len = nl80211_get_assoc_ssid(drv, drv->ssid);
325 drv->ssid_len = ssid_len;
327 "nl80211: Set drv->ssid based on scan res info to '%s'",
328 wpa_ssid_txt(drv->ssid, drv->ssid_len));
331 event.assoc_info.freq = drv->assoc_freq;
332 drv->first_bss->flink->freq = drv->assoc_freq;
336 wpa_supplicant_event(drv->ctx, EVENT_ASSOC, &event);
395 ret, strerror(-ret));
445 if (!drv->sta_mlo_info.valid_links ||
446 !ether_addr_equal(drv->sta_mlo_info.ap_mld_addr, ap_mld)) {
447 if (drv->pending_link_reconfig_data == data) {
450 os_free(drv->pending_link_reconfig_data);
451 drv->pending_link_reconfig_data = NULL;
457 if (drv->pending_link_reconfig_data) {
459 os_free(drv->pending_link_reconfig_data);
461 drv->pending_link_reconfig_data = os_memdup(data, len);
462 if (!drv->pending_link_reconfig_data)
464 drv->pending_link_reconfig_data_len = len;
473 drv->sta_mlo_info.valid_links &= ~removed_links;
479 if (removed_links & BIT(drv->sta_mlo_info.assoc_link_id)) {
480 for_each_link(drv->sta_mlo_info.valid_links, i) {
481 os_memcpy(drv->bssid, drv->sta_mlo_info.links[i].bssid,
483 drv->sta_mlo_info.assoc_link_id = i;
491 wpa_supplicant_event(drv->ctx, EVENT_LINK_RECONFIG, NULL);
518 mlo->valid_links |= BIT(link_id);
519 os_memcpy(mlo->links[link_id].addr,
522 os_memcpy(mlo->links[link_id].bssid,
527 link_id, MAC2STR(mlo->links[link_id].addr),
528 MAC2STR(mlo->links[link_id].bssid));
558 mlo->req_links |= BIT(link_id);
561 mlo->valid_links |= BIT(link_id);
563 mlo->valid_links |= BIT(link_id);
566 os_memcpy(mlo->links[link_id].addr,
568 os_memcpy(mlo->links[link_id].bssid,
572 link_id, MAC2STR(mlo->links[link_id].addr),
573 MAC2STR(mlo->links[link_id].bssid));
579 /* bitmap of link IDs in Per-STA profile subelements */
592 mle_len - MULTI_LINK_CONTROL_LEN < mle[MULTI_LINK_CONTROL_LEN])
597 rem_len = mle_len -
624 info->non_assoc_links |= BIT(link_id);
625 os_memcpy(info->addr[link_id],
631 rem_len -= ie_len;
648 return -1;
657 return -1;
664 "nl80211: MLO: Basic Multi-Link element not found in Association Request");
665 return -1;
676 "nl80211: MLO: Basic Multi-Link element not found in Association Response");
677 return -1;
689 return -1;
692 mlo->req_links = BIT(mlo->assoc_link_id) | req_info.non_assoc_links;
693 if ((mlo->req_links & mlo->valid_links) != mlo->valid_links) {
696 mlo->req_links, mlo->valid_links,
697 req_info.non_assoc_links, BIT(mlo->assoc_link_id));
698 return -1;
702 for_each_link((mlo->req_links & ~mlo->valid_links), i) {
703 os_memcpy(mlo->links[i].bssid, resp_info.addr[i], ETH_ALEN);
704 os_memcpy(mlo->links[i].addr, req_info.addr[i], ETH_ALEN);
716 return -1;
720 return -1;
723 (2 + /* Multi-Link Control field */ \
727 return -1;
741 struct driver_sta_mlo_info *mlo = &drv->sta_mlo_info;
752 res = nl80211_get_assoc_link_id(&ml_ie[3], ml_ie[1] - 1);
759 drv->sta_mlo_info.assoc_link_id = res;
761 os_memcpy(mlo->ap_mld_addr, nla_data(addr), ETH_ALEN);
763 MAC2STR(mlo->ap_mld_addr));
772 if (!(mlo->valid_links & BIT(mlo->assoc_link_id)) ||
773 (!mlo->req_links &&
776 mlo->valid_links = 0;
780 os_memcpy(drv->bssid, mlo->links[drv->sta_mlo_info.assoc_link_id].bssid,
782 os_memcpy(drv->prev_bssid, drv->bssid, ETH_ALEN);
808 if (!drv->sta_mlo_info.valid_links ||
809 !ether_addr_equal(drv->sta_mlo_info.ap_mld_addr, ap_mld)) {
810 if (drv->pending_t2lm_data == data) {
812 "nl80211: Drop pending TID-to-link mapping event since AP MLD not matched even after new connect/roam event");
813 os_free(drv->pending_t2lm_data);
814 drv->pending_t2lm_data = NULL;
818 "nl80211: Cache new TID-to-link map event until the next connect/roam event");
819 if (drv->pending_t2lm_data) {
821 "nl80211: Override old TID-to-link map event data");
822 os_free(drv->pending_t2lm_data);
824 drv->pending_t2lm_data = os_memdup(data, len);
825 if (!drv->pending_t2lm_data)
827 drv->pending_t2lm_data_len = len;
832 wpa_printf(MSG_DEBUG, "nl80211: Default TID-to-link map");
849 "nl80211: TID-to-link: nla_parse_nested() failed");
855 "nl80211: TID-to-link: uplink not present for tid: %d",
863 "nl80211: TID-to-link: downlink not present for tid: %d",
870 "nl80211: TID-to-link: Received uplink %x downlink %x",
872 for_each_link(drv->sta_mlo_info.valid_links, i) {
885 drv->sta_mlo_info.default_map = event.t2l_map_info.default_map;
887 event.t2l_map_info.valid_links = drv->sta_mlo_info.valid_links;
888 for (i = 0; i < MAX_NUM_MLD_LINKS && !drv->sta_mlo_info.default_map;
890 if (!(drv->sta_mlo_info.valid_links & BIT(i)))
893 drv->sta_mlo_info.links[i].t2lmap.uplink =
895 drv->sta_mlo_info.links[i].t2lmap.downlink =
899 wpa_supplicant_event(drv->ctx, EVENT_TID_LINK_MAP, &event);
926 if (drv->capa.flags & WPA_DRIVER_FLAGS_SME) {
936 drv->connect_reassoc = 0;
943 status_code, drv->ignore_next_local_disconnect);
952 if (drv->ignore_next_local_disconnect) {
953 drv->ignore_next_local_disconnect = 0;
956 drv->auth_attempt_bssid)) {
996 if (drv->get_sta_info_vendor_cmd_avail) {
1005 wpa_supplicant_event(drv->ctx, EVENT_ASSOC_REJECT, &event);
1009 drv->associated = 1;
1010 os_memset(&drv->sta_mlo_info, 0, sizeof(drv->sta_mlo_info));
1013 if (!drv->sta_mlo_info.valid_links && addr) {
1014 os_memcpy(drv->bssid, nla_data(addr), ETH_ALEN);
1015 os_memcpy(drv->prev_bssid, drv->bssid, ETH_ALEN);
1027 drv->ssid_len = ssid[1];
1028 os_memcpy(drv->ssid, ssid + 2, ssid[1]);
1030 "nl80211: Set drv->ssid based on req_ie to '%s'",
1031 wpa_ssid_txt(drv->ssid,
1032 drv->ssid_len));
1041 event.assoc_info.freq = nl80211_get_assoc_freq(drv);
1042 drv->first_bss->flink->freq = drv->assoc_freq;
1045 (ssid_len = nl80211_get_assoc_ssid(drv, drv->ssid)) > 0) {
1047 * drv->ssid needs to be set here to satisfy later checking. */
1048 drv->ssid_len = ssid_len;
1050 "nl80211: Set drv->ssid based on scan res info to '%s'",
1051 wpa_ssid_txt(drv->ssid, drv->ssid_len));
1094 wpa_supplicant_event(drv->ctx, EVENT_ASSOC, &event);
1101 drv->ignore_next_local_disconnect = 0;
1104 if (drv->pending_t2lm_data)
1105 qca_nl80211_tid_to_link_map_event(drv, drv->pending_t2lm_data,
1106 drv->pending_t2lm_data_len);
1108 drv->sta_mlo_info.default_map = true;
1110 if (drv->pending_link_reconfig_data)
1112 drv, drv->pending_link_reconfig_data,
1113 drv->pending_link_reconfig_data_len);
1125 if (drv->capa.flags & WPA_DRIVER_FLAGS_SME) {
1135 if (drv->ignore_next_local_disconnect) {
1136 drv->ignore_next_local_disconnect = 0;
1153 wpa_supplicant_event(drv->ctx, EVENT_DEAUTH, &data);
1157 static int calculate_chan_offset(int width, int freq, int cf1, int cf2)
1166 freq1 = cf1 - 10;
1169 freq1 = cf1 - 30;
1172 freq1 = cf1 - 70;
1175 freq1 = cf1 - 30;
1178 freq1 = cf1 - 150;
1189 return (abs(freq - freq1) / 20) % 2 == 0 ? 1 : -1;
1195 struct nlattr *freq, struct nlattr *type,
1210 if (!freq)
1235 chan_offset = -1;
1241 nla_get_u32(freq),
1247 wpa_printf(MSG_WARNING, "nl80211: Unknown secondary channel information - following channel definition calculations may fail");
1251 data.ch_switch.freq = nla_get_u32(freq);
1274 mld_link->freq = data.ch_switch.freq;
1276 mld_link->bandwidth = channel_width_to_int(
1279 bss->flink->freq = data.ch_switch.freq;
1281 bss->flink->bandwidth = channel_width_to_int(
1286 if (link && is_sta_interface(drv->nlmode)) {
1290 drv->sta_mlo_info.valid_links & BIT(link_id)) {
1291 drv->sta_mlo_info.links[link_id].freq =
1292 data.ch_switch.freq;
1294 bss->ctx,
1299 if (link_id != drv->sta_mlo_info.assoc_link_id)
1303 drv->assoc_freq = data.ch_switch.freq;
1305 wpa_supplicant_event(bss->ctx, finished ?
1331 wpa_supplicant_event(drv->ctx, ev, &event);
1336 struct nlattr *freq, struct nlattr *sig,
1340 struct wpa_driver_nl80211_data *drv = bss->drv;
1354 fc = le_to_host16(mgmt->frame_control);
1361 if (freq) {
1362 event.rx_mgmt.freq = nla_get_u32(freq);
1363 rx_freq = drv->last_mgmt_freq = event.rx_mgmt.freq;
1367 " freq=%d ssi_signal=%d fc=0x%x seq_ctrl=0x%x stype=%u (%s) len=%u",
1368 MAC2STR(mgmt->da), MAC2STR(mgmt->sa), MAC2STR(mgmt->bssid),
1370 le_to_host16(mgmt->seq_ctrl), stype, fc2str(fc),
1376 event.rx_mgmt.ctx = bss->ctx;
1379 wpa_supplicant_event(drv->ctx, EVENT_RX_MGMT, &event);
1389 struct wpa_driver_nl80211_data *drv = bss->drv;
1390 u16 fc = le_to_host16(hdr->frame_control);
1398 MAC2STR(hdr->addr1),
1399 WLAN_FC_GET_TYPE(fc) != WLAN_FC_TYPE_MGMT ? "not-mgmt " : "",
1403 if (cookie_val && cookie_val == drv->eapol_tx_cookie &&
1416 if (!is_ap_interface(drv->nlmode) &&
1424 cookie_val == drv->send_frame_cookie ?
1426 if (cookie_val != drv->send_frame_cookie)
1428 } else if (!is_ap_interface(drv->nlmode) &&
1438 event.tx_status.dst = hdr->addr1;
1442 event.tx_status.link_id = cookie_val == drv->send_frame_cookie ?
1443 drv->send_frame_link_id : NL80211_DRV_LINK_ID_NA;
1444 wpa_supplicant_event(bss->ctx, EVENT_TX_STATUS, &event);
1464 bssid = mgmt->bssid;
1466 if ((drv->capa.flags & WPA_DRIVER_FLAGS_SME) &&
1467 !drv->associated &&
1468 !ether_addr_equal(bssid, drv->auth_bssid) &&
1469 !ether_addr_equal(bssid, drv->auth_attempt_bssid) &&
1470 ether_addr_equal(bssid, drv->prev_bssid)) {
1479 if (ether_addr_equal(mgmt->sa, drv->first_bss->addr) ||
1480 (!is_zero_ether_addr(drv->first_bss->prev_addr) &&
1481 ether_addr_equal(mgmt->sa,
1482 drv->first_bss->prev_addr))) {
1485 drv->ignore_next_local_deauth = 0;
1490 MAC2STR(drv->auth_attempt_bssid));
1495 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_SME) &&
1496 drv->connect_reassoc && drv->associated &&
1497 ether_addr_equal(bssid, drv->prev_bssid) &&
1498 !ether_addr_equal(bssid, drv->auth_attempt_bssid)) {
1509 MAC2STR(drv->auth_attempt_bssid));
1513 if (drv->associated != 0 &&
1514 !ether_addr_equal(bssid, drv->bssid) &&
1515 !ether_addr_equal(bssid, drv->auth_bssid)) {
1522 "from Unknown BSSID " MACSTR " -- ignoring",
1532 if (len >= 24 + sizeof(mgmt->u.deauth))
1533 reason_code = le_to_host16(mgmt->u.deauth.reason_code);
1537 ether_addr_equal(mgmt->sa, drv->first_bss->addr);
1540 if (frame + len > mgmt->u.disassoc.variable) {
1541 event.disassoc_info.ie = mgmt->u.disassoc.variable;
1542 event.disassoc_info.ie_len = frame + len -
1543 mgmt->u.disassoc.variable;
1547 ether_addr_equal(mgmt->sa, drv->first_bss->addr);
1548 if (drv->ignore_deauth_event) {
1549 wpa_printf(MSG_DEBUG, "nl80211: Ignore deauth event due to previous forced deauth-during-auth");
1550 drv->ignore_deauth_event = 0;
1552 drv->ignore_next_local_deauth = 0;
1555 if (drv->ignore_next_local_deauth) {
1556 drv->ignore_next_local_deauth = 0;
1565 if (frame + len > mgmt->u.deauth.variable) {
1566 event.deauth_info.ie = mgmt->u.deauth.variable;
1567 event.deauth_info.ie_len = frame + len -
1568 mgmt->u.deauth.variable;
1572 wpa_supplicant_event(drv->ctx, type, &event);
1596 if (len >= 24 + sizeof(mgmt->u.deauth))
1597 reason_code = le_to_host16(mgmt->u.deauth.reason_code);
1600 event.unprot_disassoc.sa = mgmt->sa;
1601 event.unprot_disassoc.da = mgmt->da;
1604 event.unprot_deauth.sa = mgmt->sa;
1605 event.unprot_deauth.da = mgmt->da;
1609 wpa_supplicant_event(drv->ctx, type, &event);
1625 event.unprot_beacon.sa = mgmt->sa;
1626 wpa_supplicant_event(drv->ctx, EVENT_UNPROT_BEACON, &event);
1631 nl80211_get_link_id_by_freq(struct i802_bss *bss, unsigned int freq)
1635 for_each_link(bss->valid_links, i) {
1636 if ((unsigned int) bss->links[i].freq == freq)
1647 struct nlattr *freq, struct nlattr *ack,
1652 struct wpa_driver_nl80211_data *drv = bss->drv;
1656 int link_id = -1;
1675 else if (freq)
1676 link_id = nl80211_get_link_id_by_freq(bss, nla_get_u32(freq));
1678 if (nl80211_link_valid(bss->valid_links, link_id))
1685 MACSTR ") - too short",
1686 cmd, nl80211_command_to_string(cmd), bss->ifname,
1687 MAC2STR(bss->addr));
1692 nl80211_command_to_string(cmd), bss->ifname,
1693 MAC2STR(bss->addr), MAC2STR(data + 4),
1704 fc = le_to_host16(mgmt->frame_control);
1706 auth_type = le_to_host16(mgmt->u.auth.auth_alg);
1713 bss->ifname);
1716 !ether_addr_equal(bss->addr, data + 4) &&
1717 (is_zero_ether_addr(bss->rand_addr) ||
1718 !ether_addr_equal(bss->rand_addr, data + 4)) &&
1719 !ether_addr_equal(bss->addr, data + 4 + ETH_ALEN) &&
1720 (is_zero_ether_addr(drv->first_bss->prev_addr) ||
1721 !ether_addr_equal(bss->prev_addr, data + 4 + ETH_ALEN)) &&
1723 !ether_addr_equal(mld_link->addr, data + 4))) {
1725 "for foreign address", bss->ifname);
1748 mlme_event_mgmt(bss, freq, sig, nla_data(frame),
1777 wpa_printf(MSG_DEBUG, "nl80211: MLME event Michael MIC failure");
1804 wpa_supplicant_event(bss->ctx, EVENT_MICHAEL_MIC_FAILURE, &data);
1811 unsigned int freq;
1819 os_memcpy(drv->bssid, nla_data(tb[NL80211_ATTR_MAC]), ETH_ALEN);
1821 drv->associated = 1;
1823 MAC2STR(drv->bssid));
1825 freq = nl80211_get_assoc_freq(drv);
1826 if (freq) {
1828 freq);
1829 drv->first_bss->flink->freq = freq;
1833 event.assoc_info.freq = freq;
1835 wpa_supplicant_event(drv->ctx, EVENT_ASSOC, &event);
1842 unsigned int freq, chan_type, duration;
1847 freq = nla_get_u32(tb[NL80211_ATTR_WIPHY_FREQ]);
1849 freq = 0;
1866 wpa_printf(MSG_DEBUG, "nl80211: Remain-on-channel event (cancel=%d "
1867 "freq=%u channel_type=%u duration=%u cookie=0x%llx (%s))",
1868 cancel_event, freq, chan_type, duration,
1870 cookie == drv->remain_on_chan_cookie ? "match" : "unknown");
1872 if (cookie != drv->remain_on_chan_cookie)
1876 drv->pending_remain_on_chan = 0;
1879 data.remain_on_channel.freq = freq;
1881 wpa_supplicant_event(drv->ctx, cancel_event ?
1911 wpa_supplicant_event(drv->ctx, EVENT_FT_RESPONSE, &data);
1921 int assoc_link_id = -1;
1923 if (!is_ap_interface(drv->nlmode))
1931 if (!bss->valid_links &&
1935 "nl80211: Link info not expected for DH event for non-MLD AP");
1961 wpa_printf(MSG_DEBUG, "nl80211: DH event - peer " MACSTR,
1964 wpa_supplicant_event(bss->ctx, EVENT_UPDATE_DH, &data);
1979 if (!external_scan && drv->scan_for_auth) {
1980 drv->scan_for_auth = 0;
1989 info->aborted = aborted;
1990 info->external_scan = external_scan;
1991 info->nl_scan_event = 1;
1996 &info->ssids[info->num_ssids];
1997 s->ssid = nla_data(nl);
1998 s->ssid_len = nla_len(nl);
2000 wpa_ssid_txt(s->ssid, s->ssid_len));
2001 info->num_ssids++;
2002 if (info->num_ssids == WPAS_MAX_SCAN_SSIDS)
2017 res = os_snprintf(pos, end - pos, " %d",
2019 if (!os_snprintf_error(end - pos, res))
2025 info->freqs = freqs;
2026 info->num_freqs = num_freqs;
2027 msg[sizeof(msg) - 1] = '\0';
2034 info->scan_start_tsf =
2036 os_memcpy(info->scan_start_tsf_bssid,
2041 wpa_supplicant_event(drv->ctx, EVENT_SCAN_RESULTS, &event);
2082 wpa_supplicant_event(drv->ctx, EVENT_STATION_LOW_ACK, &ed);
2088 wpa_supplicant_event(drv->ctx, EVENT_BEACON_LOSS, NULL);
2131 res = nl80211_get_link_signal(drv, drv->bssid, &ed.signal_change.data);
2150 wpa_supplicant_event(drv->ctx, EVENT_SIGNAL_CHANGE, &ed);
2160 if (drv->nlmode != NL80211_IFTYPE_MESH_POINT ||
2172 wpa_supplicant_event(drv->ctx, EVENT_NEW_PEER_CANDIDATE, &data);
2189 if (is_ap_interface(drv->nlmode) && drv->device_ap_sme) {
2191 int assoc_link_id = -1;
2195 if (!bss->valid_links &&
2199 "nl80211: MLO info not expected for new station event for non-MLD AP");
2231 drv_event_assoc(bss->ctx, peer_addr, req_ies, req_ies_len,
2237 if (drv->nlmode != NL80211_IFTYPE_ADHOC)
2242 wpa_supplicant_event(bss->ctx, EVENT_IBSS_RSN_START, &data);
2259 if (is_ap_interface(drv->nlmode) && drv->device_ap_sme) {
2260 drv_event_disassoc(bss->ctx, addr);
2264 if (drv->nlmode != NL80211_IFTYPE_ADHOC)
2269 wpa_supplicant_event(bss->ctx, EVENT_IBSS_PEER_LOST, &data);
2306 wpa_hexdump(MSG_DEBUG, "nl80211: Rekey offload - Replay Counter",
2308 wpa_supplicant_event(drv->ctx, EVENT_DRIVER_GTK_REKEY, &data);
2342 wpa_supplicant_event(drv->ctx, EVENT_PMKID_CANDIDATE, &data);
2367 wpa_supplicant_event(drv->ctx, EVENT_DRIVER_CLIENT_POLL_OK, &data);
2410 wpa_supplicant_event(drv->ctx, EVENT_TDLS, &data);
2417 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_UNAVAILABLE, NULL);
2439 wpa_printf(MSG_DEBUG, "nl80211: Max client reached");
2454 wpa_supplicant_event(drv->ctx, EVENT_CONNECT_FAILED_REASON, &data);
2469 data.dfs_event.freq = nla_get_u32(tb[NL80211_ATTR_WIPHY_FREQ]);
2475 } else if (data.dfs_event.freq) {
2477 nl80211_get_link_id_by_freq(drv->first_bss,
2478 data.dfs_event.freq);
2496 data.dfs_event.chan_offset = -1;
2512 "nl80211: DFS event on freq %d MHz, ht: %d, offset: %d, width: %d, cf1: %dMHz, cf2: %dMHz, link_id=%d",
2513 data.dfs_event.freq, data.dfs_event.ht_enabled,
2520 wpa_supplicant_event(drv->ctx, EVENT_DFS_RADAR_DETECTED, &data);
2523 wpa_supplicant_event(drv->ctx, EVENT_DFS_CAC_FINISHED, &data);
2526 wpa_supplicant_event(drv->ctx, EVENT_DFS_CAC_ABORTED, &data);
2529 wpa_supplicant_event(drv->ctx, EVENT_DFS_NOP_FINISHED, &data);
2532 wpa_supplicant_event(drv->ctx, EVENT_DFS_PRE_CAC_EXPIRED,
2536 wpa_supplicant_event(drv->ctx, EVENT_DFS_CAC_STARTED, &data);
2549 struct wpa_driver_nl80211_data *drv = bss->drv;
2556 event.rx_from_unknown.bssid = bss->addr;
2560 wpa_supplicant_event(drv->ctx, EVENT_RX_FROM_UNKNOWN, &event);
2575 if (len < sizeof(freq_range->count))
2578 count = freq_range->count;
2579 if (len < sizeof(freq_range->count) +
2595 range[idx].min = freq_range->range[i].start_freq;
2596 range[idx].max = freq_range->range[i].end_freq;
2597 wpa_printf(MSG_DEBUG, "nl80211: Avoid frequency range: %u-%u",
2598 range[idx].min, range[idx].max);
2599 if (range[idx].min > range[idx].max) {
2607 wpa_supplicant_event(drv->ctx, EVENT_AVOID_FREQUENCIES, &event);
2642 modes = nl80211_get_hw_feature_data(drv->first_bss, &num_modes,
2753 event.acs_selected_channels.link_id = -1;
2769 wpa_supplicant_event(drv->ctx, EVENT_ACS_CHANNEL_SELECTED, &event);
2823 if (!drv->roam_indication_done) {
2827 os_free(drv->pending_roam_data);
2828 drv->pending_roam_data = os_memdup(data, len);
2829 if (!drv->pending_roam_data)
2831 drv->pending_roam_data_len = len;
2834 drv->roam_indication_done = false;
2859 data.dfs_event.freq = nla_get_u32(tb[NL80211_ATTR_WIPHY_FREQ]);
2865 } else if (data.dfs_event.freq) {
2867 nl80211_get_link_id_by_freq(drv->first_bss,
2868 data.dfs_event.freq);
2871 wpa_printf(MSG_DEBUG, "nl80211: DFS event on freq %d MHz, link=%d",
2872 data.dfs_event.freq, data.dfs_event.link_id);
2889 data.dfs_event.chan_offset = -1;
2904 wpa_printf(MSG_DEBUG, "nl80211: DFS event on freq %d MHz, ht: %d, "
2906 data.dfs_event.freq, data.dfs_event.ht_enabled,
2912 wpa_supplicant_event(drv->ctx, EVENT_DFS_RADAR_DETECTED, &data);
2915 wpa_supplicant_event(drv->ctx, EVENT_DFS_CAC_STARTED, &data);
2918 wpa_supplicant_event(drv->ctx, EVENT_DFS_CAC_FINISHED, &data);
2921 wpa_supplicant_event(drv->ctx, EVENT_DFS_CAC_ABORTED, &data);
2924 wpa_supplicant_event(drv->ctx, EVENT_DFS_NOP_FINISHED, &data);
2949 if (cookie != drv->vendor_scan_cookie) {
2957 info->external_scan = 0;
2958 info->nl_scan_event = 0;
2960 drv->scan_state = SCAN_STARTED;
2961 wpa_supplicant_event(drv->ctx, EVENT_SCAN_STARTED, &event);
2978 info->aborted = aborted;
2979 info->external_scan = external_scan;
2980 info->scan_cookie = nla_get_u64(tb[QCA_WLAN_VENDOR_ATTR_SCAN_COOKIE]);
2986 &info->ssids[info->num_ssids];
2987 s->ssid = nla_data(nl);
2988 s->ssid_len = nla_len(nl);
2991 wpa_ssid_txt(s->ssid, s->ssid_len));
2992 info->num_ssids++;
2993 if (info->num_ssids == WPAS_MAX_SCAN_SSIDS)
3010 res = os_snprintf(pos, end - pos, " %d",
3012 if (!os_snprintf_error(end - pos, res))
3015 if (num_freqs == MAX_REPORT_FREQS - 1)
3019 info->freqs = freqs;
3020 info->num_freqs = num_freqs;
3024 wpa_supplicant_event(drv->ctx, EVENT_SCAN_RESULTS, &event);
3047 if (cookie != drv->vendor_scan_cookie) {
3053 drv->scan_state = SCAN_COMPLETED;
3055 drv->scan_state = SCAN_ABORTED;
3058 drv->ctx);
3059 drv->vendor_scan_cookie = 0;
3060 drv->last_scan_cmd = 0;
3089 wpa_supplicant_event(drv->ctx, EVENT_P2P_LO_STOP, &event);
3098 int ret = -EINVAL;
3163 wpa_supplicant_event(drv->ctx, EVENT_PASN_AUTH, &event);
3278 wpa_supplicant_event(drv->ctx, EVENT_ACS_CHANNEL_SELECTED, &event);
3333 wiphy_idx = nl80211_get_wiphy_index(drv->first_bss);
3344 * qca_nl80211_key_mgmt_auth() and drv->pending_roam_data). */
3427 wpa_supplicant_event(drv->ctx, EVENT_CHANNEL_LIST_CHANGED, &data);
3442 u32 freq = 0, max_tx_power = 0;
3448 freq = nla_get_u32(tb[NL80211_FREQUENCY_ATTR_FREQ]);
3454 "nl80211: Channel (%s): freq=%u max_tx_power=%u%s%s%s",
3455 title, freq, max_tx_power,
3457 tb[NL80211_FREQUENCY_ATTR_NO_IR] ? " no-IR" : "",
3460 attrs->freq = freq;
3461 attrs->max_tx_power = max_tx_power;
3463 attrs->disabled = true;
3465 attrs->no_ir = true;
3467 attrs->radar = true;
3489 wpa_supplicant_event(drv->ctx, EVENT_CHANNEL_LIST_CHANGED, &data);
3544 wpa_supplicant_event(drv->ctx, EVENT_EXTERNAL_AUTH, &event);
3564 if (is_ap_interface(drv->nlmode) && drv->device_ap_sme) {
3569 } else if (is_sta_interface(drv->nlmode)) {
3572 connected_addr = drv->sta_mlo_info.valid_links ?
3573 drv->sta_mlo_info.ap_mld_addr : drv->bssid;
3592 wpa_supplicant_event(drv->ctx, EVENT_PORT_AUTHORIZED, &event);
3665 wpa_supplicant_event(drv->ctx, EVENT_STATION_OPMODE_CHANGED, &ed);
3689 link_id = -1;
3693 wpa_printf(MSG_INFO, "nl80211: Got pre-auth frame from "
3698 drv_event_eapol_rx2(bss->ctx, src_addr,
3718 struct wpa_driver_nl80211_data *drv = bss->drv;
3731 event.eapol_tx_status.data_len = len - ETH_HLEN;
3734 nla_get_u64(cookie) == drv->eapol_tx_cookie ?
3735 drv->eapol_tx_link_id : NL80211_DRV_LINK_ID_NA;
3737 wpa_supplicant_event(bss->ctx, EVENT_EAPOL_TX_STATUS, &event);
3752 for (i = 0; i < drv->num_send_frame_cookies; i++) {
3753 if (cookie == drv->send_frame_cookies[i]) {
3762 drv->send_frame_cookie == cookie ? " (match-saved)" : "");
3763 if (drv->send_frame_cookie == cookie) {
3764 drv->send_frame_cookie = (u64) -1;
3771 if (i < drv->num_send_frame_cookies - 1)
3772 os_memmove(&drv->send_frame_cookies[i],
3773 &drv->send_frame_cookies[i + 1],
3774 (drv->num_send_frame_cookies - i - 1) * sizeof(u64));
3775 drv->num_send_frame_cookies--;
3778 wpa_supplicant_event(drv->ctx, EVENT_TX_WAIT_EXPIRE, NULL);
3813 "nl80211: BSS color collision - bitmap %08llx",
3838 if (!nl80211_link_valid(bss->valid_links,
3846 wpa_printf(MSG_DEBUG, "nl80211: BSS color event - Link ID %d",
3850 wpa_supplicant_event(bss->ctx, event_type, &data);
3859 struct wpa_driver_nl80211_data *drv = bss->drv;
3864 cmd, nl80211_command_to_string(cmd), bss->ifname);
3868 (drv->capa.flags & WPA_DRIVER_FLAGS_KEY_MGMT_OFFLOAD)) {
3869 if (drv->pending_roam_data) {
3872 qca_nl80211_key_mgmt_auth(drv, drv->pending_roam_data,
3873 drv->pending_roam_data_len);
3874 os_free(drv->pending_roam_data);
3875 drv->pending_roam_data = NULL;
3882 drv->roam_indication_done = true;
3890 if (drv->ap_scan_as_station != NL80211_IFTYPE_UNSPECIFIED &&
3897 wpa_dbg(drv->ctx, MSG_DEBUG, "nl80211: Scan trigger");
3898 drv->scan_state = SCAN_STARTED;
3899 if (drv->scan_for_auth) {
3906 wpa_printf(MSG_DEBUG, "nl80211: Do not indicate scan-start event due to internal scan_for_auth");
3909 wpa_supplicant_event(drv->ctx, EVENT_SCAN_STARTED, NULL);
3912 wpa_dbg(drv->ctx, MSG_DEBUG, "nl80211: Sched scan started");
3913 drv->scan_state = SCHED_SCAN_STARTED;
3916 wpa_dbg(drv->ctx, MSG_DEBUG, "nl80211: Sched scan stopped");
3917 drv->scan_state = SCHED_SCAN_STOPPED;
3918 wpa_supplicant_event(drv->ctx, EVENT_SCHED_SCAN_STOPPED, NULL);
3921 wpa_dbg(drv->ctx, MSG_DEBUG,
3923 if (drv->last_scan_cmd != NL80211_CMD_VENDOR)
3924 drv->scan_state = SCAN_COMPLETED;
3925 drv->scan_complete_events = 1;
3926 if (drv->last_scan_cmd == NL80211_CMD_TRIGGER_SCAN) {
3928 drv, drv->ctx);
3929 drv->last_scan_cmd = 0;
3936 wpa_dbg(drv->ctx, MSG_DEBUG,
3938 drv->scan_state = SCHED_SCAN_RESULTS;
3942 wpa_dbg(drv->ctx, MSG_DEBUG, "nl80211: Scan aborted");
3943 if (drv->last_scan_cmd != NL80211_CMD_VENDOR)
3944 drv->scan_state = SCAN_ABORTED;
3945 if (drv->last_scan_cmd == NL80211_CMD_TRIGGER_SCAN) {
3951 drv, drv->ctx);
3952 drv->last_scan_cmd = 0;
4118 wpa_supplicant_event(drv->ctx, EVENT_LINK_RECONFIG, NULL);
4121 wpa_dbg(drv->ctx, MSG_DEBUG, "nl80211: Ignored unknown event "
4133 dl_list_for_each(tmp, &global->interfaces,
4149 int ifidx = -1, wiphy_idx = -1, wiphy_idx_rx = -1;
4157 if (gnlh->cmd == NL80211_CMD_GET_PROTOCOL_FEATURES) {
4158 u32 seq = nlmsg_hdr(msg)->nlmsg_seq;
4160 dl_list_for_each_safe(drv, tmp, &global->interfaces,
4162 if (drv->ignore_next_local_deauth > 0 &&
4163 drv->ignore_next_local_deauth <= seq) {
4166 drv->ignore_next_local_deauth = 0;
4169 if (drv->ignore_next_local_disconnect > 0 &&
4170 drv->ignore_next_local_disconnect <= seq) {
4173 drv->ignore_next_local_disconnect = 0;
4193 dl_list_for_each_safe(drv, tmp, &global->interfaces,
4195 for (bss = drv->first_bss; bss; bss = bss->next) {
4198 if ((ifidx == -1 && !wiphy_idx_set && !wdev_id_set) ||
4199 ifidx == bss->ifindex ||
4201 (wdev_id_set && bss->wdev_id_set &&
4202 wdev_id == bss->wdev_id)) {
4204 do_process_drv_event(bss, gnlh->cmd, tb);
4222 gnlh->cmd, nl80211_command_to_string(gnlh->cmd),
4239 gnlh->cmd, nl80211_command_to_string(gnlh->cmd),
4240 bss->ifname);
4242 switch (gnlh->cmd) {
4245 mlme_event(bss, gnlh->cmd, tb[NL80211_ATTR_FRAME],
4260 nl80211_external_auth(bss->drv, tb);
4267 "(cmd=%d)", gnlh->cmd);