From 47baf1d3053981fb731cc772e80c5fdc7bc80220 Mon Sep 17 00:00:00 2001 From: Daniel Drake Date: Fri, 27 Jul 2007 15:43:23 +0200 Subject: [PATCH] --- yaml --- r: 66231 b: refs/heads/master c: 8a69aa93d54cb56017159b08512c80ede2263060 h: refs/heads/master i: 66229: 92ea24a563a12708271bb5529d8aecc35aa1a496 66227: a69f2a56025545b674208111a721d5cd8b34150d 66223: b99beedbe9d116f5b2e9223084e501a4c2634ed4 v: v3 --- [refs] | 2 +- trunk/net/mac80211/ieee80211.c | 13 +++++++++++++ trunk/net/mac80211/ieee80211_sta.c | 6 ++++-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index e514601fa859..19a36e33bcff 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: be8755e1804d6f60e6a96a46ac6bc46ce6dfca53 +refs/heads/master: 8a69aa93d54cb56017159b08512c80ede2263060 diff --git a/trunk/net/mac80211/ieee80211.c b/trunk/net/mac80211/ieee80211.c index 566bdca32b86..f811a260ee9c 100644 --- a/trunk/net/mac80211/ieee80211.c +++ b/trunk/net/mac80211/ieee80211.c @@ -375,6 +375,18 @@ static void ieee80211_start_hard_monitor(struct ieee80211_local *local) } } +static void ieee80211_if_open(struct net_device *dev) +{ + struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); + + switch (sdata->type) { + case IEEE80211_IF_TYPE_STA: + case IEEE80211_IF_TYPE_IBSS: + sdata->u.sta.prev_bssid_set = 0; + break; + } +} + static int ieee80211_open(struct net_device *dev) { struct ieee80211_sub_if_data *sdata, *nsdata; @@ -408,6 +420,7 @@ static int ieee80211_open(struct net_device *dev) local->hw.conf.flags |= IEEE80211_CONF_RADIOTAP; return 0; } + ieee80211_if_open(dev); ieee80211_start_soft_monitor(local); conf.if_id = dev->ifindex; diff --git a/trunk/net/mac80211/ieee80211_sta.c b/trunk/net/mac80211/ieee80211_sta.c index 9aee1abae127..8e6548974a9f 100644 --- a/trunk/net/mac80211/ieee80211_sta.c +++ b/trunk/net/mac80211/ieee80211_sta.c @@ -1187,8 +1187,10 @@ static void ieee80211_rx_mgmt_assoc_resp(struct net_device *dev, if (status_code != WLAN_STATUS_SUCCESS) { printk(KERN_DEBUG "%s: AP denied association (code=%d)\n", dev->name, status_code); - if (status_code == WLAN_STATUS_REASSOC_NO_ASSOC) - ifsta->prev_bssid_set = 0; + /* if this was a reassociation, ensure we try a "full" + * association next time. This works around some broken APs + * which do not correctly reject reassociation requests. */ + ifsta->prev_bssid_set = 0; return; }