2019-07-03 13:19:15

by Shay Bar

[permalink] [raw]
Subject: [PATCH] mac80211: HE STA disassoc due to QOS NULL not sent

In case of HE AP-STA link, ieee80211_send_nullfunc() will not send the QOS NULL packet to check if AP is still associated.
In this case, probe_send_count will be non zero and ieee80211_sta_work() will later disassociate the AP.
(although it didn't really send a test QOS NULL packet).
Fix is to decrement probe_send_count and not call ieee80211_send_nullfunc() in case of HE link.

Signed-off-by: Shay Bar <[email protected]>
---
Hope I solved all the SMTP server problems and patch is better now :)

net/mac80211/mlme.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 379d2ab6d327..bc5ed2dbe69b 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -2511,7 +2511,10 @@ static void ieee80211_mgd_probe_ap_send(struct ieee80211_sub_if_data *sdata)

if (ieee80211_hw_check(&sdata->local->hw, REPORTS_TX_ACK_STATUS)) {
ifmgd->nullfunc_failed = false;
- ieee80211_send_nullfunc(sdata->local, sdata, false);
+ if (!(ifmgd->flags & IEEE80211_STA_DISABLE_HE))
+ ifmgd->probe_send_count--;
+ else
+ ieee80211_send_nullfunc(sdata->local, sdata, false);
} else {
int ssid_len;

--
2.22.0


2019-07-31 08:54:56

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH] mac80211: HE STA disassoc due to QOS NULL not sent

On Wed, 2019-07-03 at 16:18 +0300, Shay Bar wrote:
> In case of HE AP-STA link, ieee80211_send_nullfunc() will not send the QOS NULL packet to check if AP is still associated.
> In this case, probe_send_count will be non zero and ieee80211_sta_work() will later disassociate the AP.
> (although it didn't really send a test QOS NULL packet).
> Fix is to decrement probe_send_count and not call ieee80211_send_nullfunc() in case of HE link.
>
> Signed-off-by: Shay Bar <[email protected]>
> ---
> Hope I solved all the SMTP server problems and patch is better now :)

Yep, thanks.

> if (ieee80211_hw_check(&sdata->local->hw, REPORTS_TX_ACK_STATUS)) {
> ifmgd->nullfunc_failed = false;
> - ieee80211_send_nullfunc(sdata->local, sdata, false);
> + if (!(ifmgd->flags & IEEE80211_STA_DISABLE_HE))
> + ifmgd->probe_send_count--;
> + else
> + ieee80211_send_nullfunc(sdata->local, sdata, false);

Not sure that makes sense though.

Why go through all the motions of doing the counting and all, and the
run_again() etc. when all that will happen is that we'll disconnect
anyway?

johannes

2019-07-31 11:16:56

by Shay Bar

[permalink] [raw]
Subject: RE: [PATCH] mac80211: HE STA disassoc due to QOS NULL not sent

Hi Johannes,
Station may receive a beacon from the AP that will rearm the bcn_mon_timer.
If it will not get a beacon within the timeout, it will disconnect.
In my test case, beacon arrived later (within the timeout).
Without this patch, STA (wrongly) kicked out the AP without even sending QOS NULL.
With this patch, STA keeps AP associated and will only disassoc if beacon timeout will pass.

Thanks,
Shay

-----Original Message-----
From: [email protected] <[email protected]> On Behalf Of Johannes Berg
Sent: Wednesday, 31 July 2019 11:54
To: Shay Bar <[email protected]>
Cc: [email protected]
Subject: Re: [PATCH] mac80211: HE STA disassoc due to QOS NULL not sent

External Email


On Wed, 2019-07-03 at 16:18 +0300, Shay Bar wrote:
> In case of HE AP-STA link, ieee80211_send_nullfunc() will not send the QOS NULL packet to check if AP is still associated.
> In this case, probe_send_count will be non zero and ieee80211_sta_work() will later disassociate the AP.
> (although it didn't really send a test QOS NULL packet).
> Fix is to decrement probe_send_count and not call ieee80211_send_nullfunc() in case of HE link.
>
> Signed-off-by: Shay Bar <[email protected]>
> ---
> Hope I solved all the SMTP server problems and patch is better now :)

Yep, thanks.

> if (ieee80211_hw_check(&sdata->local->hw, REPORTS_TX_ACK_STATUS)) {
> ifmgd->nullfunc_failed = false;
> - ieee80211_send_nullfunc(sdata->local, sdata, false);
> + if (!(ifmgd->flags & IEEE80211_STA_DISABLE_HE))
> + ifmgd->probe_send_count--;
> + else
> + ieee80211_send_nullfunc(sdata->local, sdata, false);

Not sure that makes sense though.

Why go through all the motions of doing the counting and all, and the
run_again() etc. when all that will happen is that we'll disconnect
anyway?

johannes


----------

This email has been scanned for spam and viruses by Proofpoint Essentials. Visit the following link to report this email as spam:
https://eu1.proofpointessentials.com/index01.php?mod_id=11&mod_option=logitem&mail_id=1564563252-6zoAqEa3QRRO&r_address=shay.bar%40celeno.com&report=1
________________________________
The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential and/or privileged material. Any retransmission, dissemination, copying or other use of, or taking of any action in reliance upon this information is prohibited. If you received this in error, please contact the sender and delete the material from any computer. Nothing contained herein shall be deemed as a representation, warranty or a commitment by Celeno. No warranties are expressed or implied, including, but not limited to, any implied warranties of non-infringement, merchantability and fitness for a particular purpose.
________________________________

2019-07-31 11:24:56

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH] mac80211: HE STA disassoc due to QOS NULL not sent

On Wed, 2019-07-31 at 10:12 +0000, Shay Bar wrote:
> Hi Johannes,
> Station may receive a beacon from the AP that will rearm the bcn_mon_timer.
> If it will not get a beacon within the timeout, it will disconnect.
> In my test case, beacon arrived later (within the timeout).
> Without this patch, STA (wrongly) kicked out the AP without even sending QOS NULL.
> With this patch, STA keeps AP associated and will only disassoc if beacon timeout will pass.

Ah, we still need the timeout, right.

johannes