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
This commit is contained in:
Jianmin Zhu 2022-04-26 16:33:53 +08:00 • committed by Madan Koyyalamudi
commit dc721ec357

View file

@ -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);