Search Linux Wireless

Re: [PATCH v2] mac80211: Remove bss information of the current AP when it goes out of range

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2009-02-03 at 10:09 +0530, Vasanthakumar Thiagarajan wrote:
> There is no point having the bss information of currently associated AP
> when the AP is detected to be out of range.

Seems sane to me. There are a few other places I think where we hold on
to the bss info way too long, in fact, we hold on to it _forever_ most
of the time.

> Signed-off-by: Vasanthakumar Thiagarajan <vasanth@xxxxxxxxxxx>
> ---
>  net/mac80211/mlme.c |   18 ++++++++++++++++--
>  1 files changed, 16 insertions(+), 2 deletions(-)
> 
> diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
> index 9d51e27..945c10d 100644
> --- a/net/mac80211/mlme.c
> +++ b/net/mac80211/mlme.c
> @@ -1042,6 +1042,7 @@ static void ieee80211_associated(struct ieee80211_sub_if_data *sdata,
>  	struct ieee80211_local *local = sdata->local;
>  	struct sta_info *sta;
>  	int disassoc;
> +	bool remove_bss = false;
>  
>  	/* TODO: start monitoring current AP signal quality and number of
>  	 * missed beacons. Scan other channels every now and then and search
> @@ -1067,6 +1068,7 @@ static void ieee80211_associated(struct ieee80211_sub_if_data *sdata,
>  				       "range\n",
>  				       sdata->dev->name, ifsta->bssid);
>  				disassoc = 1;
> +				remove_bss = true;
>  			} else
>  				ieee80211_send_probe_req(sdata, ifsta->bssid,
>  							 ifsta->ssid,
> @@ -1086,12 +1088,24 @@ static void ieee80211_associated(struct ieee80211_sub_if_data *sdata,
>  
>  	rcu_read_unlock();
>  
> -	if (disassoc)
> +	if (disassoc) {
>  		ieee80211_set_disassoc(sdata, ifsta, true, true,
>  					WLAN_REASON_PREV_AUTH_NOT_VALID);
> -	else
> +		if (remove_bss) {
> +			struct ieee80211_bss *bss;
> +
> +			bss = ieee80211_rx_bss_get(local, ifsta->bssid,
> +					local->hw.conf.channel->center_freq,
> +					ifsta->ssid, ifsta->ssid_len);
> +			if (bss) {
> +				atomic_dec(&bss->users);
> +				ieee80211_rx_bss_put(local, bss);
> +			}
> +		}
> +	} else {
>  		mod_timer(&ifsta->timer, jiffies +
>  				      IEEE80211_MONITORING_INTERVAL);
> +	}
>  }
>  
> 

Attachment: signature.asc
Description: This is a digitally signed message part


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux