]> err.no Git - linux-2.6/blobdiff - net/mac80211/mlme.c
Blackfin RTC Driver: dont let RTC programming in bootloaders randomly cause ~5 second...
[linux-2.6] / net / mac80211 / mlme.c
index 779affd8b8fec7ecf6f3bd132ec3748cdc07b662..1e97fb9fb34bde3f88988e42cd546b43d95a5b6e 100644 (file)
@@ -2103,6 +2103,8 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata,
                        rcu_read_unlock();
                        return;
                }
+               /* update new sta with its last rx activity */
+               sta->last_rx = jiffies;
        }
 
        /*
@@ -3663,11 +3665,21 @@ static int ieee80211_sta_find_ibss(struct net_device *dev,
                       "%s\n", print_mac(mac, bssid),
                       print_mac(mac2, ifsta->bssid));
 #endif /* CONFIG_MAC80211_IBSS_DEBUG */
-       if (found && memcmp(ifsta->bssid, bssid, ETH_ALEN) != 0 &&
-           (bss = ieee80211_rx_bss_get(dev, bssid,
-                                       local->hw.conf.channel->center_freq,
-                                       ifsta->ssid, ifsta->ssid_len))) {
+
+       if (found && memcmp(ifsta->bssid, bssid, ETH_ALEN) != 0) {
                int ret;
+               int search_freq;
+
+               if (ifsta->flags & IEEE80211_STA_AUTO_CHANNEL_SEL)
+                       search_freq = bss->freq;
+               else
+                       search_freq = local->hw.conf.channel->center_freq;
+
+               bss = ieee80211_rx_bss_get(dev, bssid, search_freq,
+                                          ifsta->ssid, ifsta->ssid_len);
+               if (!bss)
+                       goto dont_join;
+
                printk(KERN_DEBUG "%s: Selected IBSS BSSID %s"
                       " based on configured SSID\n",
                       dev->name, print_mac(mac, bssid));
@@ -3675,6 +3687,8 @@ static int ieee80211_sta_find_ibss(struct net_device *dev,
                ieee80211_rx_bss_put(local, bss);
                return ret;
        }
+
+dont_join:
 #ifdef CONFIG_MAC80211_IBSS_DEBUG
        printk(KERN_DEBUG "   did not try to join ibss\n");
 #endif /* CONFIG_MAC80211_IBSS_DEBUG */
@@ -3908,7 +3922,7 @@ done:
        if (sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
                struct ieee80211_if_sta *ifsta = &sdata->u.sta;
                if (!(ifsta->flags & IEEE80211_STA_BSSID_SET) ||
-                   (!ifsta->state == IEEE80211_IBSS_JOINED &&
+                   (!(ifsta->state == IEEE80211_IBSS_JOINED) &&
                    !ieee80211_sta_active_ibss(dev)))
                        ieee80211_sta_find_ibss(dev, ifsta);
        }