diff options
Diffstat (limited to 'net/mac80211/tx.c')
-rw-r--r-- | net/mac80211/tx.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index acd9b61fbc07..9868cb72054e 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c | |||
@@ -2398,6 +2398,10 @@ static void ieee80211_update_csa(struct ieee80211_sub_if_data *sdata, | |||
2398 | beacon_data = beacon->head; | 2398 | beacon_data = beacon->head; |
2399 | beacon_data_len = beacon->head_len; | 2399 | beacon_data_len = beacon->head_len; |
2400 | break; | 2400 | break; |
2401 | case NL80211_IFTYPE_MESH_POINT: | ||
2402 | beacon_data = beacon->head; | ||
2403 | beacon_data_len = beacon->head_len; | ||
2404 | break; | ||
2401 | default: | 2405 | default: |
2402 | return; | 2406 | return; |
2403 | } | 2407 | } |
@@ -2454,6 +2458,15 @@ bool ieee80211_csa_is_complete(struct ieee80211_vif *vif) | |||
2454 | 2458 | ||
2455 | beacon_data = beacon->head; | 2459 | beacon_data = beacon->head; |
2456 | beacon_data_len = beacon->head_len; | 2460 | beacon_data_len = beacon->head_len; |
2461 | } else if (vif->type == NL80211_IFTYPE_MESH_POINT) { | ||
2462 | struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; | ||
2463 | |||
2464 | beacon = rcu_dereference(ifmsh->beacon); | ||
2465 | if (!beacon) | ||
2466 | goto out; | ||
2467 | |||
2468 | beacon_data = beacon->head; | ||
2469 | beacon_data_len = beacon->head_len; | ||
2457 | } else { | 2470 | } else { |
2458 | WARN_ON(1); | 2471 | WARN_ON(1); |
2459 | goto out; | 2472 | goto out; |
@@ -2559,6 +2572,9 @@ struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw, | |||
2559 | if (!bcn) | 2572 | if (!bcn) |
2560 | goto out; | 2573 | goto out; |
2561 | 2574 | ||
2575 | if (sdata->vif.csa_active) | ||
2576 | ieee80211_update_csa(sdata, bcn); | ||
2577 | |||
2562 | if (ifmsh->sync_ops) | 2578 | if (ifmsh->sync_ops) |
2563 | ifmsh->sync_ops->adjust_tbtt( | 2579 | ifmsh->sync_ops->adjust_tbtt( |
2564 | sdata); | 2580 | sdata); |