cfg80211: keep track of BSSes
In order to avoid problems with BSS structs going away while they're in use, I've long wanted to make cfg80211 keep track of them. Without the SME, that wasn't doable but now that we have the SME we can do this too. It can keep track of up to four separate authentications and one association, regardless of whether it's controlled by the cfg80211 SME or the userspace SME. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:

committed by
John W. Linville

parent
517357c685
commit
19957bb399
@@ -33,11 +33,11 @@ void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, gfp_t gfp)
|
||||
|
||||
if (wdev->current_bss) {
|
||||
cfg80211_unhold_bss(wdev->current_bss);
|
||||
cfg80211_put_bss(wdev->current_bss);
|
||||
cfg80211_put_bss(&wdev->current_bss->pub);
|
||||
}
|
||||
|
||||
cfg80211_hold_bss(bss);
|
||||
wdev->current_bss = bss;
|
||||
cfg80211_hold_bss(bss_from_pub(bss));
|
||||
wdev->current_bss = bss_from_pub(bss);
|
||||
|
||||
nl80211_send_ibss_bssid(wiphy_to_dev(wdev->wiphy), dev, bssid, gfp);
|
||||
#ifdef CONFIG_WIRELESS_EXT
|
||||
@@ -78,7 +78,7 @@ void cfg80211_clear_ibss(struct net_device *dev, bool nowext)
|
||||
|
||||
if (wdev->current_bss) {
|
||||
cfg80211_unhold_bss(wdev->current_bss);
|
||||
cfg80211_put_bss(wdev->current_bss);
|
||||
cfg80211_put_bss(&wdev->current_bss->pub);
|
||||
}
|
||||
|
||||
wdev->current_bss = NULL;
|
||||
@@ -212,7 +212,7 @@ int cfg80211_ibss_wext_giwfreq(struct net_device *dev,
|
||||
return -EINVAL;
|
||||
|
||||
if (wdev->current_bss)
|
||||
chan = wdev->current_bss->channel;
|
||||
chan = wdev->current_bss->pub.channel;
|
||||
else if (wdev->wext.ibss.channel)
|
||||
chan = wdev->wext.ibss.channel;
|
||||
|
||||
@@ -352,7 +352,7 @@ int cfg80211_ibss_wext_giwap(struct net_device *dev,
|
||||
ap_addr->sa_family = ARPHRD_ETHER;
|
||||
|
||||
if (wdev->current_bss)
|
||||
memcpy(ap_addr->sa_data, wdev->current_bss->bssid, ETH_ALEN);
|
||||
memcpy(ap_addr->sa_data, wdev->current_bss->pub.bssid, ETH_ALEN);
|
||||
else
|
||||
memcpy(ap_addr->sa_data, wdev->wext.ibss.bssid, ETH_ALEN);
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user