From: Johannes Berg <johannes@sipsolutions.net>
To: Maxim Levitsky <maximlevitsky@gmail.com>
Cc: linux-wireless <linux-wireless@vger.kernel.org>,
linville <linville@tuxdriver.com>,
Reinette Chatre <reinette.chatre@intel.com>
Subject: Re: [PATCH 001/002] [MAC80211] Retry probe request few times
Date: Fri, 31 Jul 2009 18:21:03 +0200 [thread overview]
Message-ID: <1249057263.25587.10.camel@johannes.local> (raw)
In-Reply-To: <1249056896.20593.3.camel@maxim-laptop>
[-- Attachment #1: Type: text/plain, Size: 4446 bytes --]
On Fri, 2009-07-31 at 19:14 +0300, Maxim Levitsky wrote:
> >From 0bf5749f2878f9245b8fb1b64456386374205225 Mon Sep 17 00:00:00 2001
> From: Maxim Levitsky <maximlevitsky@gmail.com>
> Date: Fri, 31 Jul 2009 18:54:12 +0300
> Subject: [PATCH] [MAC80211] Retry probe request few times
>
> Retry 5 times (chosen arbitary ), before assuming
> that station is out of range.
>
> Fixes frequent disassociations while connected to weak,
> and sometimes even strong access points.
Looks good, thanks.
Acked-by: Johannes Berg <johannes@sipsolutions.net>
> Signed-off-by: Maxim Levitky <maximlevitsky@gmail.com>
> ---
> net/mac80211/ieee80211_i.h | 1 +
> net/mac80211/mlme.c | 42 ++++++++++++++++++++++++++++++------------
> 2 files changed, 31 insertions(+), 12 deletions(-)
>
> diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
> index aec6853..bca7b60 100644
> --- a/net/mac80211/ieee80211_i.h
> +++ b/net/mac80211/ieee80211_i.h
> @@ -280,6 +280,7 @@ struct ieee80211_if_managed {
> struct work_struct beacon_loss_work;
>
> unsigned long probe_timeout;
> + int probe_send_count;
>
> struct mutex mtx;
> struct ieee80211_bss *associated;
> diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
> index ee83125..1d8640a 100644
> --- a/net/mac80211/mlme.c
> +++ b/net/mac80211/mlme.c
> @@ -31,6 +31,7 @@
> #define IEEE80211_AUTH_MAX_TRIES 3
> #define IEEE80211_ASSOC_TIMEOUT (HZ / 5)
> #define IEEE80211_ASSOC_MAX_TRIES 3
> +#define IEEE80211_MAX_PROBE_TRIES 5
>
> /*
> * beacon loss detection timeout
> @@ -1156,11 +1157,24 @@ void ieee80211_sta_rx_notify(struct ieee80211_sub_if_data *sdata,
> round_jiffies_up(jiffies + IEEE80211_CONNECTION_IDLE_TIME));
> }
>
> +static void ieee80211_mgd_probe_ap_send(struct ieee80211_sub_if_data *sdata)
> +{
> + struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
> + const u8 *ssid;
> +
> + ssid = ieee80211_bss_get_ie(&ifmgd->associated->cbss, WLAN_EID_SSID);
> + ieee80211_send_probe_req(sdata, ifmgd->associated->cbss.bssid,
> + ssid + 2, ssid[1], NULL, 0);
> +
> + ifmgd->probe_send_count++;
> + ifmgd->probe_timeout = jiffies + IEEE80211_PROBE_WAIT;
> + run_again(ifmgd, ifmgd->probe_timeout);
> +}
> +
> static void ieee80211_mgd_probe_ap(struct ieee80211_sub_if_data *sdata,
> bool beacon)
> {
> struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
> - const u8 *ssid;
> bool already = false;
>
> if (!netif_running(sdata->dev))
> @@ -1203,18 +1217,12 @@ static void ieee80211_mgd_probe_ap(struct ieee80211_sub_if_data *sdata,
> if (already)
> goto out;
>
> - ifmgd->probe_timeout = jiffies + IEEE80211_PROBE_WAIT;
> -
> mutex_lock(&sdata->local->iflist_mtx);
> ieee80211_recalc_ps(sdata->local, -1);
> mutex_unlock(&sdata->local->iflist_mtx);
>
> - ssid = ieee80211_bss_get_ie(&ifmgd->associated->cbss, WLAN_EID_SSID);
> - ieee80211_send_probe_req(sdata, ifmgd->associated->cbss.bssid,
> - ssid + 2, ssid[1], NULL, 0);
> -
> - run_again(ifmgd, ifmgd->probe_timeout);
> -
> + ifmgd->probe_send_count = 0;
> + ieee80211_mgd_probe_ap_send(sdata);
> out:
> mutex_unlock(&ifmgd->mtx);
> }
> @@ -2072,17 +2080,27 @@ static void ieee80211_sta_work(struct work_struct *work)
> if (ifmgd->flags & (IEEE80211_STA_BEACON_POLL |
> IEEE80211_STA_CONNECTION_POLL) &&
> ifmgd->associated) {
> + u8 bssid[ETH_ALEN];
> +
> + memcpy(bssid, ifmgd->associated->cbss.bssid, ETH_ALEN);
> if (time_is_after_jiffies(ifmgd->probe_timeout))
> run_again(ifmgd, ifmgd->probe_timeout);
> - else {
> - u8 bssid[ETH_ALEN];
> +
> + else if (ifmgd->probe_send_count < IEEE80211_MAX_PROBE_TRIES) {
> +#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
> + printk(KERN_DEBUG "No probe response from AP %pM"
> + " after %dms, try %d\n", bssid,
> + (1000 * IEEE80211_PROBE_WAIT)/HZ,
> + ifmgd->probe_send_count);
> +#endif
> + ieee80211_mgd_probe_ap_send(sdata);
> + } else {
> /*
> * We actually lost the connection ... or did we?
> * Let's make sure!
> */
> ifmgd->flags &= ~(IEEE80211_STA_CONNECTION_POLL |
> IEEE80211_STA_BEACON_POLL);
> - memcpy(bssid, ifmgd->associated->cbss.bssid, ETH_ALEN);
> printk(KERN_DEBUG "No probe response from AP %pM"
> " after %dms, disconnecting.\n",
> bssid, (1000 * IEEE80211_PROBE_WAIT)/HZ);
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
next prev parent reply other threads:[~2009-07-31 16:21 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-31 16:13 [PATCH 000/002] Fix frequent reconnects caused by new conection monitor Maxim Levitsky
2009-07-31 16:14 ` [PATCH 001/002] [MAC80211] Retry probe request few times Maxim Levitsky
2009-07-31 16:21 ` Johannes Berg [this message]
2009-08-05 2:22 ` Marcel Holtmann
2009-08-05 5:29 ` Maxim Levitsky
2009-08-05 5:33 ` Johannes Berg
2009-08-05 5:50 ` Gábor Stefanik
2009-08-05 5:51 ` Johannes Berg
2009-08-05 5:53 ` Gábor Stefanik
2009-08-05 5:58 ` Johannes Berg
2009-08-05 15:45 ` Marcel Holtmann
2009-07-31 16:17 ` [PATCH 002/002] [MAC80211] Increase timeouts for station polling Maxim Levitsky
2009-07-31 16:21 ` Johannes Berg
2009-07-31 18:52 ` [PATCH 000/002] Fix frequent reconnects caused by new conection monitor reinette chatre
2009-07-31 19:08 ` Maxim Levitsky
2009-07-31 19:27 ` Marcel Holtmann
2009-07-31 20:05 ` Maxim Levitsky
2009-08-01 15:25 ` Marcel Holtmann
2009-08-03 22:33 ` Maxim Levitsky
2009-08-03 23:58 ` Marcel Holtmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1249057263.25587.10.camel@johannes.local \
--to=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
--cc=maximlevitsky@gmail.com \
--cc=reinette.chatre@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).