aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/cfg.c
diff options
context:
space:
mode:
authorThomas Pedersen <thomas@cozybit.com>2013-02-14 14:20:13 -0500
committerJohannes Berg <johannes.berg@intel.com>2013-02-15 03:41:40 -0500
commit2b5e19677592c167d012c2d129407f39d2bdeb8d (patch)
treedb898021baebc1b462b78d00048d0cf9ef3f0aa8 /net/mac80211/cfg.c
parent4a3cb702b05868f67c4ee3da3380461c5b90b4ca (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.c9
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
1838static int ieee80211_leave_mesh(struct wiphy *wiphy, struct net_device *dev) 1835static int ieee80211_leave_mesh(struct wiphy *wiphy, struct net_device *dev)