2018-02-08 11:46:53

by Timothy Redaelli

[permalink] [raw]
Subject: [PATCH] ath9k: fix DFS detector synchronization

The code currently syncronize the DFS region only if curchan != 0, but hostapd
launch DFS before the channel is set and so set_dfs_domain is never executed.

CC: Felix Fietkau <[email protected]>
Signed-off-by: Timothy Redaelli <[email protected]>
---
drivers/net/wireless/ath/ath9k/init.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
index e479fae5aab9..b71b16715f6a 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -257,6 +257,11 @@ static void ath9k_reg_notifier(struct wiphy *wiphy,

ath_reg_notifier_apply(wiphy, request, reg);

+ /* synchronize DFS detector if regulatory domain changed */
+ if (sc->dfs_detector != NULL)
+ sc->dfs_detector->set_dfs_domain(sc->dfs_detector,
+ request->dfs_region);
+
/* Set tx power */
if (!ah->curchan)
return;
@@ -267,10 +272,6 @@ static void ath9k_reg_notifier(struct wiphy *wiphy,
ath9k_cmn_update_txpow(ah, sc->cur_chan->cur_txpower,
sc->cur_chan->txpower,
&sc->cur_chan->cur_txpower);
- /* synchronize DFS detector if regulatory domain changed */
- if (sc->dfs_detector != NULL)
- sc->dfs_detector->set_dfs_domain(sc->dfs_detector,
- request->dfs_region);
ath9k_ps_restore(sc);
}

--
2.14.3


2018-02-09 14:33:13

by Timothy Redaelli

[permalink] [raw]
Subject: Re: [PATCH] ath9k: fix DFS detector synchronization

On Fri, 09 Feb 2018 10:01:09 +0200
Kalle Valo <[email protected]> wrote:

> Timothy Redaelli <[email protected]> writes:
>
> > The code currently syncronize the DFS region only if curchan != 0,
> > but hostapd launch DFS before the channel is set and so
> > set_dfs_domain is never executed.
> >
> > CC: Felix Fietkau <[email protected]>
> > Signed-off-by: Timothy Redaelli <[email protected]>
>
> What kind of bug does this fix? Please describe the symptoms from
> user's point of view.

With the current code radar detection (CAC) doesn't work on ath9k
since "dpd_set_domain" is only called once with NL80211_DFS_UNSET (0) as
region and so "dpd_add_pulse" always returns true (radar detected)
without doing a real scan.

You can test it easily with a kernel built with
CONFIG_ATH9K_DFS_CERTIFIED and by using a simple hostapd configuration:

interface=wlp1s0
hw_mode=a
channel=acs_survey
chanlist=100 104 108 112 116 120 124 128 132 136 140
ieee80211d=1
ieee80211h=1
country_code=US
ieee80211n=1
wmm_enabled=1
ssid=testwifi

2018-02-09 08:01:14

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH] ath9k: fix DFS detector synchronization

Timothy Redaelli <[email protected]> writes:

> The code currently syncronize the DFS region only if curchan != 0, but hostapd
> launch DFS before the channel is set and so set_dfs_domain is never executed.
>
> CC: Felix Fietkau <[email protected]>
> Signed-off-by: Timothy Redaelli <[email protected]>

What kind of bug does this fix? Please describe the symptoms from user's
point of view.

--
Kalle Valo

2018-02-12 12:44:24

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH] ath9k: fix DFS detector synchronization

Timothy Redaelli <[email protected]> writes:

> On Fri, 09 Feb 2018 10:01:09 +0200
> Kalle Valo <[email protected]> wrote:
>
>> Timothy Redaelli <[email protected]> writes:
>>
>> > The code currently syncronize the DFS region only if curchan != 0,
>> > but hostapd launch DFS before the channel is set and so
>> > set_dfs_domain is never executed.
>> >
>> > CC: Felix Fietkau <[email protected]>
>> > Signed-off-by: Timothy Redaelli <[email protected]>
>>
>> What kind of bug does this fix? Please describe the symptoms from
>> user's point of view.
>
> With the current code radar detection (CAC) doesn't work on ath9k
> since "dpd_set_domain" is only called once with NL80211_DFS_UNSET (0) as
> region and so "dpd_add_pulse" always returns true (radar detected)
> without doing a real scan.
>
> You can test it easily with a kernel built with
> CONFIG_ATH9K_DFS_CERTIFIED and by using a simple hostapd configuration:
>
> interface=wlp1s0
> hw_mode=a
> channel=acs_survey
> chanlist=100 104 108 112 116 120 124 128 132 136 140
> ieee80211d=1
> ieee80211h=1
> country_code=US
> ieee80211n=1
> wmm_enabled=1
> ssid=testwifi

Any ideas what broke this? Or has it never worked with FCC (US)?

Anyway, please add this info to the commit log and submit v2.

--
Kalle Valo

2018-02-12 15:27:06

by Zefir Kurtisi

[permalink] [raw]
Subject: Re: [PATCH] ath9k: fix DFS detector synchronization

On 02/12/2018 01:44 PM, Kalle Valo wrote:
> Timothy Redaelli <[email protected]> writes:
>
>> On Fri, 09 Feb 2018 10:01:09 +0200
>> Kalle Valo <[email protected]> wrote:
>>
>>> Timothy Redaelli <[email protected]> writes:
>>>
>>>> The code currently syncronize the DFS region only if curchan != 0,
>>>> but hostapd launch DFS before the channel is set and so
>>>> set_dfs_domain is never executed.
>>>>
>>>> CC: Felix Fietkau <[email protected]>
>>>> Signed-off-by: Timothy Redaelli <[email protected]>
>>>
>>> What kind of bug does this fix? Please describe the symptoms from
>>> user's point of view.
>>
>> With the current code radar detection (CAC) doesn't work on ath9k
>> since "dpd_set_domain" is only called once with NL80211_DFS_UNSET (0) as
>> region and so "dpd_add_pulse" always returns true (radar detected)
>> without doing a real scan.
>>
>> You can test it easily with a kernel built with
>> CONFIG_ATH9K_DFS_CERTIFIED and by using a simple hostapd configuration:
>>
>> interface=wlp1s0
>> hw_mode=a
>> channel=acs_survey
>> chanlist=100 104 108 112 116 120 124 128 132 136 140
>> ieee80211d=1
>> ieee80211h=1
>> country_code=US
>> ieee80211n=1
>> wmm_enabled=1
>> ssid=testwifi
>
> Any ideas what broke this? Or has it never worked with FCC (US)?
>
> Anyway, please add this info to the commit log and submit v2.
>

Hi,

the idea / reasoning behind setting the DFS detector's initial regulatory domain
to UNSET is a fail-safe mechanism to ensure a proper countrycode is set before the
CAC is initiated.

It used to work for a long time, but might broke when the regdb was moved into the
kernel and with that the initialization order between channel and regulatory
domain changed.


Not tested, but patch looks sane.

2018-02-12 18:40:37

by Felix Fietkau

[permalink] [raw]
Subject: Re: [PATCH] ath9k: fix DFS detector synchronization

On 2018-02-08 12:46, Timothy Redaelli wrote:
> The code currently syncronize the DFS region only if curchan != 0, but hostapd
> launch DFS before the channel is set and so set_dfs_domain is never executed.
>
> CC: Felix Fietkau <[email protected]>
> Signed-off-by: Timothy Redaelli <[email protected]>
Acked-by: Felix Fietkau <[email protected]>