@ -27,7 +27,8 @@
# include "ieee80211softmac_priv.h"
# include <net/iw_handler.h>
/* for is_broadcast_ether_addr and is_zero_ether_addr */
# include <linux/etherdevice.h>
int
ieee80211softmac_wx_trigger_scan ( struct net_device * net_dev ,
@ -83,7 +84,6 @@ ieee80211softmac_wx_set_essid(struct net_device *net_dev,
sm - > associnfo . static_essid = 1 ;
}
}
sm - > associnfo . scan_retry = IEEE80211SOFTMAC_ASSOC_SCAN_RETRY_LIMIT ;
/* set our requested ESSID length.
* If applicable , we have already copied the data in */
@ -310,8 +310,6 @@ ieee80211softmac_wx_set_wap(struct net_device *net_dev,
char * extra )
{
struct ieee80211softmac_device * mac = ieee80211_priv ( net_dev ) ;
static const unsigned char any [ ] = { 0xff , 0xff , 0xff , 0xff , 0xff , 0xff } ;
static const unsigned char off [ ] = { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } ;
unsigned long flags ;
/* sanity check */
@ -320,10 +318,17 @@ ieee80211softmac_wx_set_wap(struct net_device *net_dev,
}
spin_lock_irqsave ( & mac - > lock , flags ) ;
if ( ! memcmp ( any , data - > ap_addr . sa_data , ETH_ALEN ) | |
! memcmp ( off , data - > ap_addr . sa_data , ETH_ALEN ) ) {
schedule_work ( & mac - > associnfo . work ) ;
goto out ;
if ( is_broadcast_ether_addr ( data - > ap_addr . sa_data ) ) {
/* the bssid we have is not to be fixed any longer,
* and we should reassociate to the best AP . */
mac - > associnfo . bssfixed = 0 ;
/* force reassociation */
mac - > associnfo . bssvalid = 0 ;
if ( mac - > associated )
schedule_work ( & mac - > associnfo . work ) ;
} else if ( is_zero_ether_addr ( data - > ap_addr . sa_data ) ) {
/* the bssid we have is no longer fixed */
mac - > associnfo . bssfixed = 0 ;
} else {
if ( ! memcmp ( mac - > associnfo . bssid , data - > ap_addr . sa_data , ETH_ALEN ) ) {
if ( mac - > associnfo . associating | | mac - > associated ) {
@ -333,12 +338,14 @@ ieee80211softmac_wx_set_wap(struct net_device *net_dev,
} else {
/* copy new value in data->ap_addr.sa_data to bssid */
memcpy ( mac - > associnfo . bssid , data - > ap_addr . sa_data , ETH_ALEN ) ;
}
}
/* tell the other code that this bssid should be used no matter what */
mac - > associnfo . bssfixed = 1 ;
/* queue associate if new bssid or (old one again and not associated) */
schedule_work ( & mac - > associnfo . work ) ;
}
out :
out :
spin_unlock_irqrestore ( & mac - > lock , flags ) ;
return 0 ;
}