diff --git a/core/hdd/src/wlan_hdd_ioctl.c b/core/hdd/src/wlan_hdd_ioctl.c index b08bd02030f5..6fc55c587922 100644 --- a/core/hdd/src/wlan_hdd_ioctl.c +++ b/core/hdd/src/wlan_hdd_ioctl.c @@ -5300,6 +5300,12 @@ static int drv_cmd_tdls_off_channel(hdd_adapter_t *adapter, if (ret != 1) return -EINVAL; + if (CDS_IS_DFS_CH(set_value)) { + hdd_err("DFS channel %d is passed for hdd_set_tdls_offchannel", + set_value); + return -EINVAL; + } + hddLog(LOG1, FL("Tdls offchannel num: %d"), set_value); ret = hdd_set_tdls_offchannel(hdd_ctx, set_value); diff --git a/core/hdd/src/wlan_hdd_tdls.c b/core/hdd/src/wlan_hdd_tdls.c index 903fbfff4a73..3fd99256c057 100644 --- a/core/hdd/src/wlan_hdd_tdls.c +++ b/core/hdd/src/wlan_hdd_tdls.c @@ -4015,6 +4015,14 @@ int wlan_hdd_tdls_extctrl_config_peer(hdd_adapter_t *pAdapter, MAC_ADDR_ARRAY(peer)); return -EINVAL; } + + /* validate if off channel is DFS channel */ + if (CDS_IS_DFS_CH(chan)) { + hdd_err("Resetting TDLS off-channel from %d to %d", + chan, CFG_TDLS_PREFERRED_OFF_CHANNEL_NUM_DEFAULT); + chan = CFG_TDLS_PREFERRED_OFF_CHANNEL_NUM_DEFAULT; + } + if (0 != wlan_hdd_tdls_set_extctrl_param(pAdapter, peer, chan, max_latency, op_class, min_bandwidth)) { @@ -4265,6 +4273,16 @@ static int __wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, pTdlsPeer-> op_class_for_pref_off_chan; + if (CDS_IS_DFS_CH(smeTdlsPeerStateParams. + peerCap.prefOffChanNum)) { + hdd_err("Resetting TDLS off-channel from %d to %d", + smeTdlsPeerStateParams.peerCap. + prefOffChanNum, + CFG_TDLS_PREFERRED_OFF_CHANNEL_NUM_DEFAULT); + smeTdlsPeerStateParams.peerCap.prefOffChanNum = + CFG_TDLS_PREFERRED_OFF_CHANNEL_NUM_DEFAULT; + } + CDF_TRACE(CDF_MODULE_ID_HDD, CDF_TRACE_LEVEL_INFO, "%s: Peer " MAC_ADDRESS_STR