Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dc721ec3 authored by Jianmin Zhu's avatar Jianmin Zhu Committed by Madan Koyyalamudi
Browse files

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
parent 63c6a974
Loading
Loading
Loading
Loading
+36 −4
Original line number Diff line number Diff line
/*
 * 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);
@@ -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);