qcacmn: Do not drop beacons for channels present in NOL

Currently, during scanning, while parsing the received beacons,
the beacon IEs are checked to verify whether the channel
present in the beacon is invalid. If the channel is found to be
invalid, the corresponding beacons are dropped. This check treats
the channels in the NOL list as invalid channels.

Consider a case of a repeater with RCSA enabled; when the RE
detects a radar, the RE adds the radar detected channels to
NOL and sends an RCSA action frame to the Root AP to intimate
the Root about the radar detection. The RE will also wait for the
Root to send CSA to RE. But in this case, the RE will not parse
the CSA IE received from the Root, as the beacons from the Root
AP are dropped, as the channel present in the beacon is
considered invalid.

The purpose of the channel validity check in the beacon parsing is
to avoid receiving beacons from an invalid channel, that is, the
channels that are not supported by the device. Since NOL channels
are valid, we can parse the beacons received from an NOL channel.
Therefore, to fix this issue, use the regulatory API
'wlan_reg_is_freq_enabled' instead of the API
'wlan_reg_is_disable_for_pwrmode' to check if the channel is
invalid.

The API 'wlan_reg_is_freq_enabled' treats NOL channels as valid
channels.

Change-Id: Iad502363c0ad15be2a009480c49bffcf8e004943
CRs-Fixed: 3513560
This commit is contained in:
Thirusenthil Kumaran J
2023-06-12 19:10:22 +05:30
committed by Rahul Choudhary
parent eae87639ca
commit 9c6e306ffd
2 changed files with 10 additions and 11 deletions

View File

@@ -1213,10 +1213,9 @@ QDF_STATUS __scm_handle_bcn_probe(struct scan_bcn_probe_event *bcn)
}
/* Do not add invalid channel entry as kernel will reject it */
if (scan_obj->drop_bcn_on_invalid_freq &&
wlan_reg_is_disable_for_pwrmode(
pdev,
scan_entry->channel.chan_freq,
REG_BEST_PWR_MODE)) {
!wlan_reg_is_freq_enabled(pdev,
scan_entry->channel.chan_freq,
REG_BEST_PWR_MODE)) {
scm_nofl_debug(QDF_MAC_ADDR_FMT ": Drop frame(%d) for invalid freq %d seq %d RSSI %d",
QDF_MAC_ADDR_REF(
scan_entry->bssid.bytes),

View File

@@ -552,8 +552,7 @@ util_scan_get_chan_from_he_6g_params(struct wlan_objmgr_pdev *pdev,
he_6g_params->primary_channel,
band_mask);
if (scan_obj->drop_bcn_on_invalid_freq &&
wlan_reg_is_disable_for_pwrmode(pdev, *chan_freq,
REG_BEST_PWR_MODE)) {
!wlan_reg_is_freq_enabled(pdev, *chan_freq, REG_BEST_PWR_MODE)) {
scm_debug_rl(QDF_MAC_ADDR_FMT": Drop as invalid channel %d freq %d in HE 6Ghz params",
QDF_MAC_ADDR_REF(scan_params->bssid.bytes),
he_6g_params->primary_channel, *chan_freq);
@@ -1481,8 +1480,9 @@ util_scan_populate_bcn_ie_list(struct wlan_objmgr_pdev *pdev,
band_mask);
/* Drop if invalid freq */
if (scan_obj->drop_bcn_on_invalid_freq &&
!wlan_reg_is_freq_present_in_cur_chan_list(pdev,
*chan_freq)) {
!wlan_reg_is_freq_enabled(pdev,
*chan_freq,
REG_CURRENT_PWR_MODE)) {
scm_debug(QDF_MAC_ADDR_FMT": Drop as invalid chan %d in DS IE, freq %d, band_mask %d",
QDF_MAC_ADDR_REF(
scan_params->bssid.bytes),
@@ -1580,9 +1580,9 @@ util_scan_populate_bcn_ie_list(struct wlan_objmgr_pdev *pdev,
band_mask);
/* Drop if invalid freq */
if (scan_obj->drop_bcn_on_invalid_freq &&
wlan_reg_is_disable_for_pwrmode(
pdev, *chan_freq,
REG_CURRENT_PWR_MODE)) {
!wlan_reg_is_freq_enabled(pdev,
*chan_freq,
REG_CURRENT_PWR_MODE)) {
scm_debug_rl(QDF_MAC_ADDR_FMT": Drop as invalid channel %d freq %d in HT_INFO IE",
QDF_MAC_ADDR_REF(scan_params->bssid.bytes),
chan_idx, *chan_freq);