Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2b50c245 authored by Ulrich Kunitz's avatar Ulrich Kunitz Committed by John W. Linville
Browse files

[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: default avatarUlrich Kunitz <kune@deine-taler.de>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent e6e3f12a
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -427,6 +427,17 @@ ieee80211softmac_handle_assoc_response(struct net_device * dev,
	return 0;
}

void
ieee80211softmac_try_reassoc(struct ieee80211softmac_device *mac)
{
	unsigned long flags;

	spin_lock_irqsave(&mac->lock, flags);
	mac->associnfo.associating = 1;
	schedule_work(&mac->associnfo.work);
	spin_unlock_irqrestore(&mac->lock, flags);
}

int
ieee80211softmac_handle_disassoc(struct net_device * dev,
				 struct ieee80211_disassoc *disassoc)
@@ -445,8 +456,7 @@ ieee80211softmac_handle_disassoc(struct net_device * dev,
	dprintk(KERN_INFO PFX "got disassoc frame\n");
	ieee80211softmac_disassoc(mac);

	/* try to reassociate */
	schedule_work(&mac->associnfo.work);
	ieee80211softmac_try_reassoc(mac);

	return 0;
}
+2 −0
Original line number Diff line number Diff line
@@ -334,6 +334,8 @@ ieee80211softmac_deauth_from_net(struct ieee80211softmac_device *mac,
	/* can't transmit data right now... */
	netif_carrier_off(mac->dev);
	spin_unlock_irqrestore(&mac->lock, flags);

	ieee80211softmac_try_reassoc(mac);
}

/* 
+2 −0
Original line number Diff line number Diff line
@@ -238,4 +238,6 @@ void ieee80211softmac_call_events_locked(struct ieee80211softmac_device *mac, in
int ieee80211softmac_notify_internal(struct ieee80211softmac_device *mac,
	int event, void *event_context, notify_function_ptr fun, void *context, gfp_t gfp_mask);

void ieee80211softmac_try_reassoc(struct ieee80211softmac_device *mac);

#endif /* IEEE80211SOFTMAC_PRIV_H_ */