diff options
author | Thomas Pedersen <thomas@cozybit.com> | 2013-02-14 14:20:13 -0500 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-02-15 03:41:40 -0500 |
commit | 2b5e19677592c167d012c2d129407f39d2bdeb8d (patch) | |
tree | db898021baebc1b462b78d00048d0cf9ef3f0aa8 /net/mac80211/cfg.c | |
parent | 4a3cb702b05868f67c4ee3da3380461c5b90b4ca (diff) |
mac80211: cache mesh beacon
Previously, the entire mesh beacon would be generated each
time the beacon timer fired. Instead generate a beacon
head and tail (so the TIM can easily be inserted when mesh
power save is on) when starting a mesh or the MBSS
parameters change.
Also add a mutex for protecting beacon updates and
preventing leaks.
Signed-off-by: Thomas Pedersen <thomas@cozybit.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/cfg.c')
-rw-r--r-- | net/mac80211/cfg.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index c3869ba42343..0800fb331ce5 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c | |||
@@ -1800,11 +1800,10 @@ static int ieee80211_update_mesh_config(struct wiphy *wiphy, | |||
1800 | conf->power_mode = nconf->power_mode; | 1800 | conf->power_mode = nconf->power_mode; |
1801 | ieee80211_mps_local_status_update(sdata); | 1801 | ieee80211_mps_local_status_update(sdata); |
1802 | } | 1802 | } |
1803 | if (_chg_mesh_attr(NL80211_MESHCONF_AWAKE_WINDOW, mask)) { | 1803 | if (_chg_mesh_attr(NL80211_MESHCONF_AWAKE_WINDOW, mask)) |
1804 | conf->dot11MeshAwakeWindowDuration = | 1804 | conf->dot11MeshAwakeWindowDuration = |
1805 | nconf->dot11MeshAwakeWindowDuration; | 1805 | nconf->dot11MeshAwakeWindowDuration; |
1806 | ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON); | 1806 | ieee80211_mbss_info_change_notify(sdata, BSS_CHANGED_BEACON); |
1807 | } | ||
1808 | return 0; | 1807 | return 0; |
1809 | } | 1808 | } |
1810 | 1809 | ||
@@ -1830,9 +1829,7 @@ static int ieee80211_join_mesh(struct wiphy *wiphy, struct net_device *dev, | |||
1830 | if (err) | 1829 | if (err) |
1831 | return err; | 1830 | return err; |
1832 | 1831 | ||
1833 | ieee80211_start_mesh(sdata); | 1832 | return ieee80211_start_mesh(sdata); |
1834 | |||
1835 | return 0; | ||
1836 | } | 1833 | } |
1837 | 1834 | ||
1838 | static int ieee80211_leave_mesh(struct wiphy *wiphy, struct net_device *dev) | 1835 | static int ieee80211_leave_mesh(struct wiphy *wiphy, struct net_device *dev) |