diff options
3 files changed, 42 insertions, 10 deletions
diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch index 0ffa61d4d..79d8277ed 100644 --- a/package/mac80211/patches/300-pending_work.patch +++ b/package/mac80211/patches/300-pending_work.patch @@ -814,13 +814,38 @@   		 ATH9K_RXERR_KEYMISS));  --- a/net/mac80211/cfg.c  +++ b/net/mac80211/cfg.c -@@ -1023,6 +1023,10 @@ static int ieee80211_change_station(stru +@@ -1005,6 +1005,9 @@ static int ieee80211_change_station(stru + 	} +  + 	if (params->vlan && params->vlan != sta->sdata->dev) { ++		bool prev_4addr = false; ++		bool new_4addr = false; ++ + 		vlansdata = IEEE80211_DEV_TO_SUB_IF(params->vlan); +  + 		if (vlansdata->vif.type != NL80211_IFTYPE_AP_VLAN && +@@ -1020,9 +1023,25 @@ static int ieee80211_change_station(stru + 			} +  + 			rcu_assign_pointer(vlansdata->u.vlan.sta, sta); ++			new_4addr = true; ++		} ++ ++		if (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && ++		    sta->sdata->u.vlan.sta) { ++			rcu_assign_pointer(sta->sdata->u.vlan.sta, NULL); ++			prev_4addr = true;   		}   		sta->sdata = vlansdata;  + -+		if (sta->sta_state == IEEE80211_STA_AUTHORIZED) -+			atomic_dec(&sta->sdata->u.ap.num_mcast_sta); ++		if (sta->sta_state == IEEE80211_STA_AUTHORIZED && ++		    prev_4addr != new_4addr) { ++			if (new_4addr) ++				atomic_dec(&sta->sdata->bss->num_mcast_sta); ++			else ++				atomic_inc(&sta->sdata->bss->num_mcast_sta); ++		}  +   		ieee80211_send_layer2_update(sta);   	} @@ -858,20 +883,27 @@   };  --- a/net/mac80211/sta_info.c  +++ b/net/mac80211/sta_info.c -@@ -1418,14 +1418,14 @@ int sta_info_move_state(struct sta_info  +@@ -1417,15 +1417,19 @@ int sta_info_move_state(struct sta_info  + 		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) +-			if (sta->sdata->vif.type == NL80211_IFTYPE_AP)  -				atomic_dec(&sta->sdata->u.ap.num_sta_authorized); -+				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) +-			if (sta->sdata->vif.type == NL80211_IFTYPE_AP)  -				atomic_inc(&sta->sdata->u.ap.num_sta_authorized); -+				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; diff --git a/package/mac80211/patches/520-mac80211_cur_txpower.patch b/package/mac80211/patches/520-mac80211_cur_txpower.patch index 66dadf81f..f1bd0bc6e 100644 --- a/package/mac80211/patches/520-mac80211_cur_txpower.patch +++ b/package/mac80211/patches/520-mac80211_cur_txpower.patch @@ -11,7 +11,7 @@   	u16 listen_interval;  --- a/net/mac80211/cfg.c  +++ b/net/mac80211/cfg.c -@@ -1742,7 +1742,7 @@ static int ieee80211_get_tx_power(struct +@@ -1757,7 +1757,7 @@ static int ieee80211_get_tx_power(struct   {   	struct ieee80211_local *local = wiphy_priv(wiphy); diff --git a/package/mac80211/patches/550-mac80211_optimize_mcs_rate_mask.patch b/package/mac80211/patches/550-mac80211_optimize_mcs_rate_mask.patch index 972262a78..a7e1fc1b6 100644 --- a/package/mac80211/patches/550-mac80211_optimize_mcs_rate_mask.patch +++ b/package/mac80211/patches/550-mac80211_optimize_mcs_rate_mask.patch @@ -11,7 +11,7 @@   	union {  --- a/net/mac80211/cfg.c  +++ b/net/mac80211/cfg.c -@@ -1918,9 +1918,20 @@ static int ieee80211_set_bitrate_mask(st +@@ -1933,9 +1933,20 @@ static int ieee80211_set_bitrate_mask(st   	}   	for (i = 0; i < IEEE80211_NUM_BANDS; i++) {  | 
