Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
This commit is contained in:
@@ -2783,28 +2783,20 @@ static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata,
|
||||
struct ieee802_11_elems *elems)
|
||||
{
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
int freq;
|
||||
struct ieee80211_bss *bss;
|
||||
struct ieee80211_channel *channel;
|
||||
|
||||
sdata_assert_lock(sdata);
|
||||
|
||||
if (elems->ds_params)
|
||||
freq = ieee80211_channel_to_frequency(elems->ds_params[0],
|
||||
rx_status->band);
|
||||
else
|
||||
freq = rx_status->freq;
|
||||
|
||||
channel = ieee80211_get_channel(local->hw.wiphy, freq);
|
||||
|
||||
if (!channel || channel->flags & IEEE80211_CHAN_DISABLED)
|
||||
channel = ieee80211_get_channel(local->hw.wiphy, rx_status->freq);
|
||||
if (!channel)
|
||||
return;
|
||||
|
||||
bss = ieee80211_bss_info_update(local, rx_status, mgmt, len, elems,
|
||||
channel);
|
||||
if (bss) {
|
||||
ieee80211_rx_bss_put(local, bss);
|
||||
sdata->vif.bss_conf.beacon_rate = bss->beacon_rate;
|
||||
ieee80211_rx_bss_put(local, bss);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3599,6 +3591,32 @@ static void ieee80211_restart_sta_timer(struct ieee80211_sub_if_data *sdata)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
void ieee80211_mgd_quiesce(struct ieee80211_sub_if_data *sdata)
|
||||
{
|
||||
struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
|
||||
u8 frame_buf[IEEE80211_DEAUTH_FRAME_LEN];
|
||||
|
||||
sdata_lock(sdata);
|
||||
|
||||
if (ifmgd->auth_data) {
|
||||
/*
|
||||
* If we are trying to authenticate while suspending, cfg80211
|
||||
* won't know and won't actually abort those attempts, thus we
|
||||
* need to do that ourselves.
|
||||
*/
|
||||
ieee80211_send_deauth_disassoc(sdata,
|
||||
ifmgd->auth_data->bss->bssid,
|
||||
IEEE80211_STYPE_DEAUTH,
|
||||
WLAN_REASON_DEAUTH_LEAVING,
|
||||
false, frame_buf);
|
||||
ieee80211_destroy_auth_data(sdata, false);
|
||||
cfg80211_tx_mlme_mgmt(sdata->dev, frame_buf,
|
||||
IEEE80211_DEAUTH_FRAME_LEN);
|
||||
}
|
||||
|
||||
sdata_unlock(sdata);
|
||||
}
|
||||
|
||||
void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata)
|
||||
{
|
||||
struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
|
||||
@@ -4417,37 +4435,41 @@ int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata,
|
||||
struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
|
||||
u8 frame_buf[IEEE80211_DEAUTH_FRAME_LEN];
|
||||
bool tx = !req->local_state_change;
|
||||
bool report_frame = false;
|
||||
|
||||
sdata_info(sdata,
|
||||
"deauthenticating from %pM by local choice (Reason: %u=%s)\n",
|
||||
req->bssid, req->reason_code, ieee80211_get_reason_code_string(req->reason_code));
|
||||
if (ifmgd->auth_data &&
|
||||
ether_addr_equal(ifmgd->auth_data->bss->bssid, req->bssid)) {
|
||||
sdata_info(sdata,
|
||||
"aborting authentication with %pM by local choice (Reason: %u=%s)\n",
|
||||
req->bssid, req->reason_code,
|
||||
ieee80211_get_reason_code_string(req->reason_code));
|
||||
|
||||
if (ifmgd->auth_data) {
|
||||
drv_mgd_prepare_tx(sdata->local, sdata);
|
||||
ieee80211_send_deauth_disassoc(sdata, req->bssid,
|
||||
IEEE80211_STYPE_DEAUTH,
|
||||
req->reason_code, tx,
|
||||
frame_buf);
|
||||
ieee80211_destroy_auth_data(sdata, false);
|
||||
cfg80211_tx_mlme_mgmt(sdata->dev, frame_buf,
|
||||
IEEE80211_DEAUTH_FRAME_LEN);
|
||||
|
||||
report_frame = true;
|
||||
goto out;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ifmgd->associated &&
|
||||
ether_addr_equal(ifmgd->associated->bssid, req->bssid)) {
|
||||
sdata_info(sdata,
|
||||
"deauthenticating from %pM by local choice (Reason: %u=%s)\n",
|
||||
req->bssid, req->reason_code,
|
||||
ieee80211_get_reason_code_string(req->reason_code));
|
||||
|
||||
ieee80211_set_disassoc(sdata, IEEE80211_STYPE_DEAUTH,
|
||||
req->reason_code, tx, frame_buf);
|
||||
report_frame = true;
|
||||
}
|
||||
|
||||
out:
|
||||
if (report_frame)
|
||||
cfg80211_tx_mlme_mgmt(sdata->dev, frame_buf,
|
||||
IEEE80211_DEAUTH_FRAME_LEN);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return -ENOTCONN;
|
||||
}
|
||||
|
||||
int ieee80211_mgd_disassoc(struct ieee80211_sub_if_data *sdata,
|
||||
|
Reference in New Issue
Block a user