mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-11-16 19:11:53 +02:00
mac80211: merge a client mode state handling fix, refresh patches
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33821 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
a825dd1c0e
commit
adcd2dbc79
@ -510,6 +510,29 @@
|
|||||||
|
|
||||||
ieee80211_bss_info_change_notify(sdata, changed);
|
ieee80211_bss_info_change_notify(sdata, changed);
|
||||||
}
|
}
|
||||||
|
@@ -3526,6 +3572,7 @@ int ieee80211_mgd_deauth(struct ieee8021
|
||||||
|
{
|
||||||
|
struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
|
||||||
|
u8 frame_buf[DEAUTH_DISASSOC_LEN];
|
||||||
|
+ bool tx = !req->local_state_change;
|
||||||
|
|
||||||
|
mutex_lock(&ifmgd->mtx);
|
||||||
|
|
||||||
|
@@ -3542,12 +3589,12 @@ int ieee80211_mgd_deauth(struct ieee8021
|
||||||
|
if (ifmgd->associated &&
|
||||||
|
ether_addr_equal(ifmgd->associated->bssid, req->bssid)) {
|
||||||
|
ieee80211_set_disassoc(sdata, IEEE80211_STYPE_DEAUTH,
|
||||||
|
- req->reason_code, true, frame_buf);
|
||||||
|
+ req->reason_code, tx, frame_buf);
|
||||||
|
} else {
|
||||||
|
drv_mgd_prepare_tx(sdata->local, sdata);
|
||||||
|
ieee80211_send_deauth_disassoc(sdata, req->bssid,
|
||||||
|
IEEE80211_STYPE_DEAUTH,
|
||||||
|
- req->reason_code, true,
|
||||||
|
+ req->reason_code, tx,
|
||||||
|
frame_buf);
|
||||||
|
}
|
||||||
|
|
||||||
--- a/net/mac80211/sta_info.c
|
--- a/net/mac80211/sta_info.c
|
||||||
+++ b/net/mac80211/sta_info.c
|
+++ b/net/mac80211/sta_info.c
|
||||||
@@ -674,7 +674,7 @@ int __must_check __sta_info_destroy(stru
|
@@ -674,7 +674,7 @@ int __must_check __sta_info_destroy(stru
|
||||||
@ -590,3 +613,39 @@
|
|||||||
|
|
||||||
if (local->user_power_level >= 0)
|
if (local->user_power_level >= 0)
|
||||||
power = min(power, local->user_power_level);
|
power = min(power, local->user_power_level);
|
||||||
|
--- a/include/net/cfg80211.h
|
||||||
|
+++ b/include/net/cfg80211.h
|
||||||
|
@@ -1218,6 +1218,7 @@ struct cfg80211_deauth_request {
|
||||||
|
const u8 *ie;
|
||||||
|
size_t ie_len;
|
||||||
|
u16 reason_code;
|
||||||
|
+ bool local_state_change;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
--- a/net/wireless/mlme.c
|
||||||
|
+++ b/net/wireless/mlme.c
|
||||||
|
@@ -457,20 +457,14 @@ int __cfg80211_mlme_deauth(struct cfg802
|
||||||
|
.reason_code = reason,
|
||||||
|
.ie = ie,
|
||||||
|
.ie_len = ie_len,
|
||||||
|
+ .local_state_change = local_state_change,
|
||||||
|
};
|
||||||
|
|
||||||
|
ASSERT_WDEV_LOCK(wdev);
|
||||||
|
|
||||||
|
- if (local_state_change) {
|
||||||
|
- if (wdev->current_bss &&
|
||||||
|
- ether_addr_equal(wdev->current_bss->pub.bssid, bssid)) {
|
||||||
|
- cfg80211_unhold_bss(wdev->current_bss);
|
||||||
|
- cfg80211_put_bss(&wdev->current_bss->pub);
|
||||||
|
- wdev->current_bss = NULL;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
+ if (local_state_change && (!wdev->current_bss ||
|
||||||
|
+ !ether_addr_equal(wdev->current_bss->pub.bssid, bssid)))
|
||||||
|
return 0;
|
||||||
|
- }
|
||||||
|
|
||||||
|
return rdev->ops->deauth(&rdev->wiphy, dev, &req);
|
||||||
|
}
|
||||||
|
@ -161,7 +161,7 @@
|
|||||||
CFG80211_TESTMODE_CMD(ieee80211_testmode_cmd)
|
CFG80211_TESTMODE_CMD(ieee80211_testmode_cmd)
|
||||||
--- a/include/net/cfg80211.h
|
--- a/include/net/cfg80211.h
|
||||||
+++ b/include/net/cfg80211.h
|
+++ b/include/net/cfg80211.h
|
||||||
@@ -1551,6 +1551,7 @@ struct cfg80211_gtk_rekey_data {
|
@@ -1552,6 +1552,7 @@ struct cfg80211_gtk_rekey_data {
|
||||||
* the power passed is in mBm, to get dBm use MBM_TO_DBM().
|
* the power passed is in mBm, to get dBm use MBM_TO_DBM().
|
||||||
* @get_tx_power: store the current TX power into the dbm variable;
|
* @get_tx_power: store the current TX power into the dbm variable;
|
||||||
* return 0 if successful
|
* return 0 if successful
|
||||||
@ -169,7 +169,7 @@
|
|||||||
*
|
*
|
||||||
* @set_wds_peer: set the WDS peer for a WDS interface
|
* @set_wds_peer: set the WDS peer for a WDS interface
|
||||||
*
|
*
|
||||||
@@ -1750,6 +1751,7 @@ struct cfg80211_ops {
|
@@ -1751,6 +1752,7 @@ struct cfg80211_ops {
|
||||||
int (*set_tx_power)(struct wiphy *wiphy,
|
int (*set_tx_power)(struct wiphy *wiphy,
|
||||||
enum nl80211_tx_power_setting type, int mbm);
|
enum nl80211_tx_power_setting type, int mbm);
|
||||||
int (*get_tx_power)(struct wiphy *wiphy, int *dbm);
|
int (*get_tx_power)(struct wiphy *wiphy, int *dbm);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
--- a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
|
--- a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
|
||||||
+++ b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
|
+++ b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
|
||||||
@@ -97,6 +97,7 @@ static struct bcma_device_id brcms_corei
|
@@ -97,6 +97,7 @@ static struct bcma_device_id brcms_corei
|
||||||
// BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 17, BCMA_ANY_CLASS),
|
BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 17, BCMA_ANY_CLASS),
|
||||||
BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 23, BCMA_ANY_CLASS),
|
BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 23, BCMA_ANY_CLASS),
|
||||||
BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 24, BCMA_ANY_CLASS),
|
BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 24, BCMA_ANY_CLASS),
|
||||||
+// BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 28, BCMA_ANY_CLASS),
|
+// BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 28, BCMA_ANY_CLASS),
|
||||||
|
Loading…
Reference in New Issue
Block a user