cfg80211: allow users to request removing a BSS
This patch introduces cfg80211_unlink_bss, a function to allow a driver to remove a BSS from the internal list and make it not show up in scan results any more -- this is to be used when the driver detects that the BSS is no longer available. 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
78c1c7e109
commit
d491af19db
@@ -791,5 +791,16 @@ struct cfg80211_bss *cfg80211_get_mesh(struct wiphy *wiphy,
|
|||||||
const u8 *meshid, size_t meshidlen,
|
const u8 *meshid, size_t meshidlen,
|
||||||
const u8 *meshcfg);
|
const u8 *meshcfg);
|
||||||
void cfg80211_put_bss(struct cfg80211_bss *bss);
|
void cfg80211_put_bss(struct cfg80211_bss *bss);
|
||||||
|
/**
|
||||||
|
* cfg80211_unlink_bss - unlink BSS from internal data structures
|
||||||
|
* @wiphy: the wiphy
|
||||||
|
* @bss: the bss to remove
|
||||||
|
*
|
||||||
|
* This function removes the given BSS from the internal data structures
|
||||||
|
* thereby making it no longer show up in scan results etc. Use this
|
||||||
|
* function when you detect a BSS is gone. Normally BSSes will also time
|
||||||
|
* out, so it is not necessary to use this function at all.
|
||||||
|
*/
|
||||||
|
void cfg80211_unlink_bss(struct wiphy *wiphy, struct cfg80211_bss *bss);
|
||||||
|
|
||||||
#endif /* __NET_CFG80211_H */
|
#endif /* __NET_CFG80211_H */
|
||||||
|
@@ -432,6 +432,27 @@ void cfg80211_put_bss(struct cfg80211_bss *pub)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(cfg80211_put_bss);
|
EXPORT_SYMBOL(cfg80211_put_bss);
|
||||||
|
|
||||||
|
void cfg80211_unlink_bss(struct wiphy *wiphy, struct cfg80211_bss *pub)
|
||||||
|
{
|
||||||
|
struct cfg80211_registered_device *dev = wiphy_to_dev(wiphy);
|
||||||
|
struct cfg80211_internal_bss *bss;
|
||||||
|
|
||||||
|
if (WARN_ON(!pub))
|
||||||
|
return;
|
||||||
|
|
||||||
|
bss = container_of(pub, struct cfg80211_internal_bss, pub);
|
||||||
|
|
||||||
|
spin_lock_bh(&dev->bss_lock);
|
||||||
|
|
||||||
|
list_del(&bss->list);
|
||||||
|
rb_erase(&bss->rbn, &dev->bss_tree);
|
||||||
|
|
||||||
|
spin_unlock_bh(&dev->bss_lock);
|
||||||
|
|
||||||
|
kref_put(&bss->ref, bss_release);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(cfg80211_unlink_bss);
|
||||||
|
|
||||||
#ifdef CONFIG_WIRELESS_EXT
|
#ifdef CONFIG_WIRELESS_EXT
|
||||||
int cfg80211_wext_siwscan(struct net_device *dev,
|
int cfg80211_wext_siwscan(struct net_device *dev,
|
||||||
struct iw_request_info *info,
|
struct iw_request_info *info,
|
||||||
|
Reference in New Issue
Block a user