mac80211: remove BSS from cfg80211 list when leaving IBSS
Remove BSS from cfg80211 BSS list if we are only member in IBSS when leaving it. Signed-off-by: Teemu Paasikivi <ext-teemu.3.paasikivi@nokia.com> Acked-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
392cfdb10d
commit
5ea096c0c8
|
@ -917,6 +917,31 @@ int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata,
|
||||||
int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata)
|
int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata)
|
||||||
{
|
{
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
|
struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
|
||||||
|
struct ieee80211_local *local = sdata->local;
|
||||||
|
struct cfg80211_bss *cbss;
|
||||||
|
u16 capability;
|
||||||
|
int active_ibss = 0;
|
||||||
|
|
||||||
|
active_ibss = ieee80211_sta_active_ibss(sdata);
|
||||||
|
|
||||||
|
if (!active_ibss && !is_zero_ether_addr(ifibss->bssid)) {
|
||||||
|
capability = WLAN_CAPABILITY_IBSS;
|
||||||
|
|
||||||
|
if (ifibss->privacy)
|
||||||
|
capability |= WLAN_CAPABILITY_PRIVACY;
|
||||||
|
|
||||||
|
cbss = cfg80211_get_bss(local->hw.wiphy, ifibss->channel,
|
||||||
|
ifibss->bssid, ifibss->ssid,
|
||||||
|
ifibss->ssid_len, WLAN_CAPABILITY_IBSS |
|
||||||
|
WLAN_CAPABILITY_PRIVACY,
|
||||||
|
capability);
|
||||||
|
|
||||||
|
if (cbss) {
|
||||||
|
cfg80211_unlink_bss(local->hw.wiphy, cbss);
|
||||||
|
cfg80211_put_bss(cbss);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
del_timer_sync(&sdata->u.ibss.timer);
|
del_timer_sync(&sdata->u.ibss.timer);
|
||||||
clear_bit(IEEE80211_IBSS_REQ_RUN, &sdata->u.ibss.request);
|
clear_bit(IEEE80211_IBSS_REQ_RUN, &sdata->u.ibss.request);
|
||||||
|
|
Loading…
Reference in New Issue