mac80211: Send Layer 2 Update frame on reassociation
PATCH 1/1 mac80211: Send Layer 2 Update frame on reassociation
When a STA roams back to the same AP before the previous STA entry has expired, a new STA entry is not added in mac80211. However, a Layer 2 Update frame still needs to be transmitted to update layer 2 devices about the new location for the STA. Without this, switches may continue to forward frames to the previous (now incorrect) port when STA roams between APs.
Signed-off-by Jouni Malinen <[email protected]>
--- net/mac80211/cfg.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
net/mac80211/cfg.c +11 -2
@@ -663,6 +663,7 @@ static int ieee80211_add_station(structstruct sta_info *sta;struct ieee80211_sub_if_data *sdata;int err; +int layer2_update;/* Prevent a race with changing the rate control algorithm */ if (!netif_running (dev))
@@ -693,17 +694,25 @@ static int ieee80211_add_station(structrate_control_rate_init (sta); + layer2_update = sdata->vif.type ==NL80211_IFTYPE_AP_VLAN || + sdata->vif.type ==NL80211_IFTYPE_AP ; +rcu_read_lock (); err =sta_info_insert (sta);if (err) {/* STA has been freed */ +if (err == -EEXIST && layer2_update) { +/* Need to update layer 2 devices on reassociation */ + sta =sta_info_get (local, mac); +if (sta) +ieee80211_send_layer2_update (sta); + }rcu_read_unlock ();return err; } -if (sdata->vif.type ==NL80211_IFTYPE_AP_VLAN || - sdata->vif.type ==NL80211_IFTYPE_AP ) +if (layer2_update)ieee80211_send_layer2_update (sta);rcu_read_unlock ();
Signature · 1 line
Jouni Malinen PGP id EFC895FA