mac80211: mesh: Allow following CSA to DFS channels if userspace handles it
If userspace has flagged support for DFS earlier, then we can follow CSA to DFS channels. So instead of rejecting the switch, allow it to happen if the flag has been set during mesh setup. Signed-off-by: Benjamin Berg <benjamin@sipsolutions.net> Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
8d9de16f80
commit
0ab2e55d33
|
@ -1874,6 +1874,7 @@ static int copy_mesh_setup(struct ieee80211_if_mesh *ifmsh,
|
|||
ifmsh->user_mpm = setup->user_mpm;
|
||||
ifmsh->mesh_auth_id = setup->auth_id;
|
||||
ifmsh->security = IEEE80211_MESH_SEC_NONE;
|
||||
ifmsh->userspace_handles_dfs = setup->userspace_handles_dfs;
|
||||
if (setup->is_authenticated)
|
||||
ifmsh->security |= IEEE80211_MESH_SEC_AUTHED;
|
||||
if (setup->is_secure)
|
||||
|
|
|
@ -643,6 +643,8 @@ struct ieee80211_if_mesh {
|
|||
unsigned long wrkq_flags;
|
||||
unsigned long mbss_changed;
|
||||
|
||||
bool userspace_handles_dfs;
|
||||
|
||||
u8 mesh_id[IEEE80211_MAX_MESH_ID_LEN];
|
||||
size_t mesh_id_len;
|
||||
/* Active Path Selection Protocol Identifier */
|
||||
|
|
|
@ -978,7 +978,9 @@ ieee80211_mesh_process_chnswitch(struct ieee80211_sub_if_data *sdata,
|
|||
params.count = csa_ie.count;
|
||||
|
||||
if (!cfg80211_chandef_usable(sdata->local->hw.wiphy, ¶ms.chandef,
|
||||
IEEE80211_CHAN_DISABLED)) {
|
||||
IEEE80211_CHAN_DISABLED) ||
|
||||
!cfg80211_reg_can_beacon(sdata->local->hw.wiphy, ¶ms.chandef,
|
||||
NL80211_IFTYPE_MESH_POINT)) {
|
||||
sdata_info(sdata,
|
||||
"mesh STA %pM switches to unsupported channel (%d MHz, width:%d, CF1/2: %d/%d MHz), aborting\n",
|
||||
sdata->vif.addr,
|
||||
|
@ -994,9 +996,16 @@ ieee80211_mesh_process_chnswitch(struct ieee80211_sub_if_data *sdata,
|
|||
NL80211_IFTYPE_MESH_POINT);
|
||||
if (err < 0)
|
||||
return false;
|
||||
if (err > 0)
|
||||
/* TODO: DFS not (yet) supported */
|
||||
if (err > 0 && !ifmsh->userspace_handles_dfs) {
|
||||
sdata_info(sdata,
|
||||
"mesh STA %pM switches to channel requiring DFS (%d MHz, width:%d, CF1/2: %d/%d MHz), aborting\n",
|
||||
sdata->vif.addr,
|
||||
params.chandef.chan->center_freq,
|
||||
params.chandef.width,
|
||||
params.chandef.center_freq1,
|
||||
params.chandef.center_freq2);
|
||||
return false;
|
||||
}
|
||||
|
||||
params.radar_required = err;
|
||||
|
||||
|
|
Loading…
Reference in New Issue