Skip to content

Commit

Permalink
mac80211: ibss: disable beaconing before freeing beacon
Browse files Browse the repository at this point in the history
If we don't disable beaconing, the driver might attempt
to continue, but would fail to request a beacon. That's
strange, so disable beaconing first.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  • Loading branch information
Johannes Berg committed Mar 25, 2013
1 parent 8bf2429 commit 1852d40
Showing 1 changed file with 12 additions and 9 deletions.
21 changes: 12 additions & 9 deletions net/mac80211/ibss.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,25 +58,28 @@ static void __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
/* Reset own TSF to allow time synchronization work. */
drv_reset_tsf(local, sdata);

skb = ifibss->skb;
RCU_INIT_POINTER(ifibss->presp, NULL);
synchronize_rcu();
skb->data = skb->head;
skb->len = 0;
skb_reset_tail_pointer(skb);
skb_reserve(skb, sdata->local->hw.extra_tx_headroom);

if (!ether_addr_equal(ifibss->bssid, bssid))
sta_info_flush(sdata);

/* if merging, indicate to driver that we leave the old IBSS */
if (sdata->vif.bss_conf.ibss_joined) {
sdata->vif.bss_conf.ibss_joined = false;
sdata->vif.bss_conf.ibss_creator = false;
sdata->vif.bss_conf.enable_beacon = false;
netif_carrier_off(sdata->dev);
ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_IBSS);
ieee80211_bss_info_change_notify(sdata,
BSS_CHANGED_IBSS |
BSS_CHANGED_BEACON_ENABLED);
}

skb = ifibss->skb;
RCU_INIT_POINTER(ifibss->presp, NULL);
synchronize_rcu();
skb->data = skb->head;
skb->len = 0;
skb_reset_tail_pointer(skb);
skb_reserve(skb, sdata->local->hw.extra_tx_headroom);

sdata->drop_unencrypted = capability & WLAN_CAPABILITY_PRIVACY ? 1 : 0;

cfg80211_chandef_create(&chandef, chan, ifibss->channel_type);
Expand Down

0 comments on commit 1852d40

Please sign in to comment.