Thread (5 messages) 5 messages, 3 authors, 2006-11-29

Re: [PATCH] d80211: Reset assoc and auth retry counters

From: Jiri Benc <hidden>
Date: 2006-11-29 14:09:31

On Tue, 28 Nov 2006 20:56:05 +0100, Ivo van Doorn wrote:
After a succesfull authentication and association the matching retry counter
must be reset to 0.
Failure to do so will result in failure to authenticate after the interface
has been deauthenticated. This does not always happen after the first
deauthentication, but after the interface has been several times been
deauthenticated it will refuse to authenticate.
Thanks for spotting this, but your fix makes statistics about
authentication/association exported via sysfs useless. The counters
should be reset before a new authentication/association attempt (as is
done in ieee80211_sta_new_auth).

I think this is a more correct fix:

Signed-off-by: Jiri Benc <redacted>

---
 net/d80211/ieee80211_sta.c |   18 +++++++++++++-----
 1 files changed, 13 insertions(+), 5 deletions(-)
--- dscape.orig/net/d80211/ieee80211_sta.c
+++ dscape/net/d80211/ieee80211_sta.c
@@ -382,6 +382,14 @@ static void ieee80211_set_associated(str
 	ifsta->last_probe = jiffies;
 }
 
+static void ieee80211_set_disassoc(struct net_device *dev,
+				   struct ieee80211_if_sta *ifsta, int deauth)
+{
+	if (deauth)
+		ifsta->auth_tries = 0;
+	ifsta->assoc_tries = 0;
+	ieee80211_set_associated(dev, ifsta, 0);
+}
 
 static void ieee80211_sta_tx(struct net_device *dev, struct sk_buff *skb,
 			     int encrypt, int probe_resp)
@@ -1023,7 +1031,7 @@ static void ieee80211_rx_mgmt_deauth(str
 				      IEEE80211_RETRY_AUTH_INTERVAL);
 	}
 
-	ieee80211_set_associated(dev, ifsta, 0);
+	ieee80211_set_disassoc(dev, ifsta, 1);
 	ifsta->authenticated = 0;
 }
 
@@ -1066,7 +1074,7 @@ static void ieee80211_rx_mgmt_disassoc(s
 				      IEEE80211_RETRY_AUTH_INTERVAL);
 	}
 
-	ieee80211_set_associated(dev, ifsta, 0);
+	ieee80211_set_disassoc(dev, ifsta, 0);
 }
 
 
@@ -1882,7 +1890,7 @@ void ieee80211_sta_work(void *ptr)
 		       "mixed-cell disabled - disassociate\n", dev->name);
 
 		ieee80211_send_disassoc(dev, ifsta, WLAN_REASON_UNSPECIFIED);
-		ieee80211_set_associated(dev, ifsta, 0);
+		ieee80211_set_disassoc(dev, ifsta, 0);
 	}
 }
 
@@ -2858,7 +2866,7 @@ int ieee80211_sta_deauthenticate(struct 
 		return -EINVAL;
 
 	ieee80211_send_deauth(dev, ifsta, reason);
-	ieee80211_set_associated(dev, ifsta, 0);
+	ieee80211_set_disassoc(dev, ifsta, 1);
 	return 0;
 }
 
@@ -2878,6 +2886,6 @@ int ieee80211_sta_disassociate(struct ne
 		return -1;
 
 	ieee80211_send_disassoc(dev, ifsta, reason);
-	ieee80211_set_associated(dev, ifsta, 0);
+	ieee80211_set_disassoc(dev, ifsta, 1);
 	return 0;
 }

-- 
Jiri Benc
SUSE Labs
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help