You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
mac80211: fix num_mcast_sta counting issues
Moving a STA to an AP VLAN prevents num_mcast_sta from being decremented once the STA leaves, because sta->sdata changes. Fix this by checking for AP VLANs as well. Also exclude 4-addr VLAN stations from num_mcast_sta - remote 4-addr stations ignore 3-address multicast frames anyway. In a typical bridge configuration they receive the same packets as 4-address unicast. This patch also fixes clearing the sdata->u.vlan.sta pointer when the STA is removed from a 4-addr VLAN. Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
030ef8f8a5
commit
7e3ed02c6e
@@ -1417,15 +1417,19 @@ int sta_info_move_state(struct sta_info *sta,
|
||||
if (sta->sta_state == IEEE80211_STA_AUTH) {
|
||||
set_bit(WLAN_STA_ASSOC, &sta->_flags);
|
||||
} else if (sta->sta_state == IEEE80211_STA_AUTHORIZED) {
|
||||
if (sta->sdata->vif.type == NL80211_IFTYPE_AP)
|
||||
atomic_dec(&sta->sdata->u.ap.num_mcast_sta);
|
||||
if (sta->sdata->vif.type == NL80211_IFTYPE_AP ||
|
||||
(sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
|
||||
!sta->sdata->u.vlan.sta))
|
||||
atomic_dec(&sta->sdata->bss->num_mcast_sta);
|
||||
clear_bit(WLAN_STA_AUTHORIZED, &sta->_flags);
|
||||
}
|
||||
break;
|
||||
case IEEE80211_STA_AUTHORIZED:
|
||||
if (sta->sta_state == IEEE80211_STA_ASSOC) {
|
||||
if (sta->sdata->vif.type == NL80211_IFTYPE_AP)
|
||||
atomic_inc(&sta->sdata->u.ap.num_mcast_sta);
|
||||
if (sta->sdata->vif.type == NL80211_IFTYPE_AP ||
|
||||
(sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
|
||||
!sta->sdata->u.vlan.sta))
|
||||
atomic_inc(&sta->sdata->bss->num_mcast_sta);
|
||||
set_bit(WLAN_STA_AUTHORIZED, &sta->_flags);
|
||||
}
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user