Search Linux Wireless

Re: [PATCH] mac80211: inform userspace of probe/auth/assoc timeout

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Oct 19, 2008 at 9:18 PM, Kalle Valo <kalle.valo@xxxxxxxxx> wrote:
> From: Johannes Berg <johannes@xxxxxxxxxxxxxxxx>
>
> I noticed that when for some reason [1] the probe or auth times
> out, wpa_supplicant doesn't realise this and only tries the next
> AP when it runs into its own timeout, which is ten seconds, and
> that's quite long. Fix this by making mac80211 notify userspace
> that it didn't associate.
>
> [1] my wrt350n in mixed B/G/HT mode often runs into this, maybe
> it's because one of the antennas is broken off and for whatever
> reason it decides to use that antenna to transmit the response
> frames (auth, probe); I do see beacons fine so it's not totally
> broken. Works fine in pure-G mode.
>
> kvalo: backported to 2.6.27
>
> Signed-off-by: Johannes Berg <johannes@xxxxxxxxxxxxxxxx>
> Signed-off-by: Kalle Valo <kalle.valo@xxxxxxxxx>
> ---
>
> Here's a backport of Johannes' patch for 2.6.27

and one function of mine :)
Ack
Tomas

in case anyone
> considers this for stable releases.
and

>  net/mac80211/mlme.c |   23 +++++++++++++++++------
>  1 files changed, 17 insertions(+), 6 deletions(-)
>
> diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
> index 902cac1..ca80acd 100644
> --- a/net/mac80211/mlme.c
> +++ b/net/mac80211/mlme.c
> @@ -475,6 +475,17 @@ int ieee80211_ht_addt_info_ie_to_ht_bss_info(
>        return 0;
>  }
>
> +static void ieee80211_sta_send_apinfo(struct ieee80211_sub_if_data *sdata,
> +                                     struct ieee80211_if_sta *ifsta)
> +{
> +       union iwreq_data wrqu;
> +       memset(&wrqu, 0, sizeof(wrqu));
> +       if (ifsta->flags & IEEE80211_STA_ASSOCIATED)
> +               memcpy(wrqu.ap_addr.sa_data, sdata->u.sta.bssid, ETH_ALEN);
> +       wrqu.ap_addr.sa_family = ARPHRD_ETHER;
> +       wireless_send_event(sdata->dev, SIOCGIWAP, &wrqu, NULL);
> +}
> +
>  static void ieee80211_sta_send_associnfo(struct net_device *dev,
>                                         struct ieee80211_if_sta *ifsta)
>  {
> @@ -533,7 +544,6 @@ static void ieee80211_set_associated(struct net_device *dev,
>        struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
>        struct ieee80211_local *local = sdata->local;
>        struct ieee80211_conf *conf = &local_to_hw(local)->conf;
> -       union iwreq_data wrqu;
>        u32 changed = BSS_CHANGED_ASSOC;
>
>        if (assoc) {
> @@ -567,7 +577,6 @@ static void ieee80211_set_associated(struct net_device *dev,
>
>                ifsta->flags |= IEEE80211_STA_PREV_BSSID_SET;
>                memcpy(ifsta->prev_bssid, sdata->u.sta.bssid, ETH_ALEN);
> -               memcpy(wrqu.ap_addr.sa_data, sdata->u.sta.bssid, ETH_ALEN);
>                ieee80211_sta_send_associnfo(dev, ifsta);
>        } else {
>                netif_carrier_off(dev);
> @@ -578,8 +587,6 @@ static void ieee80211_set_associated(struct net_device *dev,
>                sdata->bss_conf.assoc_ht = 0;
>                sdata->bss_conf.ht_conf = NULL;
>                sdata->bss_conf.ht_bss_conf = NULL;
> -
> -               memset(wrqu.ap_addr.sa_data, 0, ETH_ALEN);
>        }
>        ifsta->last_probe = jiffies;
>        ieee80211_led_assoc(local, assoc);
> @@ -590,8 +597,7 @@ static void ieee80211_set_associated(struct net_device *dev,
>        if (assoc)
>                netif_carrier_on(dev);
>
> -       wrqu.ap_addr.sa_family = ARPHRD_ETHER;
> -       wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL);
> +       ieee80211_sta_send_apinfo(sdata, ifsta);
>  }
>
>  static void ieee80211_set_disassoc(struct net_device *dev,
> @@ -662,6 +668,7 @@ static void ieee80211_send_auth(struct net_device *dev,
>  static void ieee80211_authenticate(struct net_device *dev,
>                                   struct ieee80211_if_sta *ifsta)
>  {
> +       struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
>        DECLARE_MAC_BUF(mac);
>
>        ifsta->auth_tries++;
> @@ -670,6 +677,7 @@ static void ieee80211_authenticate(struct net_device *dev,
>                       " timed out\n",
>                       dev->name, print_mac(mac, ifsta->bssid));
>                ifsta->state = IEEE80211_DISABLED;
> +               ieee80211_sta_send_apinfo(sdata, ifsta);
>                return;
>        }
>
> @@ -1003,6 +1011,7 @@ static int ieee80211_privacy_mismatch(struct net_device *dev,
>  static void ieee80211_associate(struct net_device *dev,
>                                struct ieee80211_if_sta *ifsta)
>  {
> +       struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
>        DECLARE_MAC_BUF(mac);
>
>        ifsta->assoc_tries++;
> @@ -1011,6 +1020,7 @@ static void ieee80211_associate(struct net_device *dev,
>                       " timed out\n",
>                       dev->name, print_mac(mac, ifsta->bssid));
>                ifsta->state = IEEE80211_DISABLED;
> +               ieee80211_sta_send_apinfo(sdata, ifsta);
>                return;
>        }
>
> @@ -1021,6 +1031,7 @@ static void ieee80211_associate(struct net_device *dev,
>                printk(KERN_DEBUG "%s: mismatch in privacy configuration and "
>                       "mixed-cell disabled - abort association\n", dev->name);
>                ifsta->state = IEEE80211_DISABLED;
> +               ieee80211_sta_send_apinfo(sdata, ifsta);
>                return;
>        }
>
> --
> 1.5.6.5
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux