From dc721ec357f2c6882e31379f2b2d6c6d98077323 Mon Sep 17 00:00:00 2001 From: Jianmin Zhu Date: Tue, 26 Apr 2022 16:33:53 +0800 Subject: [PATCH] qcacld-3.0: Send broadcast probe rsp for 6G AP Certificate 4.70.1_6G need verify that the following conditions are true: a. APUT responds with a Probe Response frame with the Address 1 field set to the broadcast address when test bed STA to send Probe Request with SSID = as per Table 168, Address 1 = wildcard (broadcast). Change-Id: I44581eaf251b79f47e374d8294616c554a9acf10 CRs-Fixed: 3104288 --- .../src/pe/lim/lim_process_probe_req_frame.c | 40 +++++++++++++++++-- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/core/mac/src/pe/lim/lim_process_probe_req_frame.c b/core/mac/src/pe/lim/lim_process_probe_req_frame.c index 78d07c1568bb..7ba416be73e1 100644 --- a/core/mac/src/pe/lim/lim_process_probe_req_frame.c +++ b/core/mac/src/pe/lim/lim_process_probe_req_frame.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2012-2020 The Linux Foundation. All rights reserved. + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -222,6 +223,31 @@ static bool lim_check11b_rates(uint8_t rate) return false; } +#ifdef CONFIG_BAND_6GHZ +/** + * lim_need_broadcast_probe_rsp: check whether need broadcast probe rsp + * @session: a ponter to session entry + * @probe_req_da: probe request dst addr + * + * Return: bool + */ +static bool lim_need_broadcast_probe_rsp(struct pe_session *session, + tSirMacAddr probe_req_da) +{ + if (WLAN_REG_IS_6GHZ_CHAN_FREQ(session->curr_op_freq) && + QDF_IS_ADDR_BROADCAST(probe_req_da)) + return true; + else + return false; +} +#else +static bool lim_need_broadcast_probe_rsp(struct pe_session *session, + tSirMacAddr probe_req_da) +{ + return false; +} +#endif + /** * lim_process_probe_req_frame: to process probe req frame * @mac_ctx: Pointer to Global MAC structure @@ -253,6 +279,7 @@ lim_process_probe_req_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info, uint32_t frame_len; tSirProbeReq probe_req; tAniSSID ssid; + tSirMacAddr dst_mac; mac_hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info); if (LIM_IS_AP_ROLE(session)) { @@ -343,6 +370,11 @@ lim_process_probe_req_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info, qdf_mem_copy(ssid.ssId, session->ssId.ssId, session->ssId.length); + if (lim_need_broadcast_probe_rsp(session, mac_hdr->da)) + qdf_set_macaddr_broadcast((struct qdf_mac_addr *)dst_mac); + else + qdf_mem_copy(dst_mac, mac_hdr->sa, ETH_ALEN); + /* * Compare received SSID with current SSID. If they match, * reply with Probe Response @@ -355,7 +387,7 @@ lim_process_probe_req_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info, (uint8_t *) &(probe_req.ssId), (uint8_t) (ssid.length + 1))) { lim_send_probe_rsp_mgmt_frame(mac_ctx, - mac_hdr->sa, &ssid, + dst_mac, &ssid, session, probe_req.p2pIePresent); return; @@ -368,7 +400,7 @@ lim_process_probe_req_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info, (uint8_t *) &(probe_req.ssId.ssId), (uint8_t) (direct_ssid_len))) { lim_send_probe_rsp_mgmt_frame(mac_ctx, - mac_hdr->sa, + dst_mac, &ssid, session, probe_req.p2pIePresent); @@ -377,7 +409,7 @@ lim_process_probe_req_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info, } else { pe_debug("Ignore ProbeReq frm with unmatch SSID received from"); lim_print_mac_addr(mac_ctx, mac_hdr->sa, - LOGD); + LOGD); } } else { /* @@ -393,7 +425,7 @@ lim_process_probe_req_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info, * send the probe resp */ return; - lim_send_probe_rsp_mgmt_frame(mac_ctx, mac_hdr->sa, + lim_send_probe_rsp_mgmt_frame(mac_ctx, dst_mac, &ssid, session, probe_req.p2pIePresent);