aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlrich Kunitz <kune@deine-taler.de>2006-12-03 10:32:00 -0500
committerJohn W. Linville <linville@tuxdriver.com>2006-12-05 19:31:33 -0500
commit2b50c24554d31c2db2f93b1151b5991e62f96594 (patch)
tree82e45711b6da33aa390981e2336c1d13a1b72241
parente6e3f12ad713fb878baa8e8b5456874a7ac714d3 (diff)
[PATCH] softmac: Fixed handling of deassociation from AP
In 2.6.19 a deauthentication from the AP doesn't start a reassociation by the softmac code. It appears that mac->associnfo.associating must be set and the ieee80211softmac_assoc_work function must be scheduled. This patch fixes that. Signed-off-by: Ulrich Kunitz <kune@deine-taler.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--net/ieee80211/softmac/ieee80211softmac_assoc.c14
-rw-r--r--net/ieee80211/softmac/ieee80211softmac_auth.c2
-rw-r--r--net/ieee80211/softmac/ieee80211softmac_priv.h2
3 files changed, 16 insertions, 2 deletions
diff --git a/net/ieee80211/softmac/ieee80211softmac_assoc.c b/net/ieee80211/softmac/ieee80211softmac_assoc.c
index cf51c87a971d..614aa8d32985 100644
--- a/net/ieee80211/softmac/ieee80211softmac_assoc.c
+++ b/net/ieee80211/softmac/ieee80211softmac_assoc.c
@@ -427,6 +427,17 @@ ieee80211softmac_handle_assoc_response(struct net_device * dev,
427 return 0; 427 return 0;
428} 428}
429 429
430void
431ieee80211softmac_try_reassoc(struct ieee80211softmac_device *mac)
432{
433 unsigned long flags;
434
435 spin_lock_irqsave(&mac->lock, flags);
436 mac->associnfo.associating = 1;
437 schedule_work(&mac->associnfo.work);
438 spin_unlock_irqrestore(&mac->lock, flags);
439}
440
430int 441int
431ieee80211softmac_handle_disassoc(struct net_device * dev, 442ieee80211softmac_handle_disassoc(struct net_device * dev,
432 struct ieee80211_disassoc *disassoc) 443 struct ieee80211_disassoc *disassoc)
@@ -445,8 +456,7 @@ ieee80211softmac_handle_disassoc(struct net_device * dev,
445 dprintk(KERN_INFO PFX "got disassoc frame\n"); 456 dprintk(KERN_INFO PFX "got disassoc frame\n");
446 ieee80211softmac_disassoc(mac); 457 ieee80211softmac_disassoc(mac);
447 458
448 /* try to reassociate */ 459 ieee80211softmac_try_reassoc(mac);
449 schedule_work(&mac->associnfo.work);
450 460
451 return 0; 461 return 0;
452} 462}
diff --git a/net/ieee80211/softmac/ieee80211softmac_auth.c b/net/ieee80211/softmac/ieee80211softmac_auth.c
index 0612015f1c78..ec449009c3cb 100644
--- a/net/ieee80211/softmac/ieee80211softmac_auth.c
+++ b/net/ieee80211/softmac/ieee80211softmac_auth.c
@@ -334,6 +334,8 @@ ieee80211softmac_deauth_from_net(struct ieee80211softmac_device *mac,
334 /* can't transmit data right now... */ 334 /* can't transmit data right now... */
335 netif_carrier_off(mac->dev); 335 netif_carrier_off(mac->dev);
336 spin_unlock_irqrestore(&mac->lock, flags); 336 spin_unlock_irqrestore(&mac->lock, flags);
337
338 ieee80211softmac_try_reassoc(mac);
337} 339}
338 340
339/* 341/*
diff --git a/net/ieee80211/softmac/ieee80211softmac_priv.h b/net/ieee80211/softmac/ieee80211softmac_priv.h
index 0642e090b8a7..3ae894f0c8f7 100644
--- a/net/ieee80211/softmac/ieee80211softmac_priv.h
+++ b/net/ieee80211/softmac/ieee80211softmac_priv.h
@@ -238,4 +238,6 @@ void ieee80211softmac_call_events_locked(struct ieee80211softmac_device *mac, in
238int ieee80211softmac_notify_internal(struct ieee80211softmac_device *mac, 238int ieee80211softmac_notify_internal(struct ieee80211softmac_device *mac,
239 int event, void *event_context, notify_function_ptr fun, void *context, gfp_t gfp_mask); 239 int event, void *event_context, notify_function_ptr fun, void *context, gfp_t gfp_mask);
240 240
241void ieee80211softmac_try_reassoc(struct ieee80211softmac_device *mac);
242
241#endif /* IEEE80211SOFTMAC_PRIV_H_ */ 243#endif /* IEEE80211SOFTMAC_PRIV_H_ */