|
@@ -164,12 +164,15 @@ no_sync:
|
|
rcu_read_unlock();
|
|
rcu_read_unlock();
|
|
}
|
|
}
|
|
|
|
|
|
-static void mesh_sync_offset_adjust_tbtt(struct ieee80211_sub_if_data *sdata)
|
|
|
|
|
|
+static void mesh_sync_offset_adjust_tbtt(struct ieee80211_sub_if_data *sdata,
|
|
|
|
+ struct beacon_data *beacon)
|
|
{
|
|
{
|
|
struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
|
|
struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
|
|
|
|
+ u8 cap;
|
|
|
|
|
|
WARN_ON(ifmsh->mesh_sp_id != IEEE80211_SYNC_METHOD_NEIGHBOR_OFFSET);
|
|
WARN_ON(ifmsh->mesh_sp_id != IEEE80211_SYNC_METHOD_NEIGHBOR_OFFSET);
|
|
BUG_ON(!rcu_read_lock_held());
|
|
BUG_ON(!rcu_read_lock_held());
|
|
|
|
+ cap = beacon->meshconf->meshconf_cap;
|
|
|
|
|
|
spin_lock_bh(&ifmsh->sync_offset_lock);
|
|
spin_lock_bh(&ifmsh->sync_offset_lock);
|
|
|
|
|
|
@@ -194,6 +197,10 @@ static void mesh_sync_offset_adjust_tbtt(struct ieee80211_sub_if_data *sdata)
|
|
ifmsh->adjusting_tbtt = false;
|
|
ifmsh->adjusting_tbtt = false;
|
|
}
|
|
}
|
|
spin_unlock_bh(&ifmsh->sync_offset_lock);
|
|
spin_unlock_bh(&ifmsh->sync_offset_lock);
|
|
|
|
+
|
|
|
|
+ beacon->meshconf->meshconf_cap = ifmsh->adjusting_tbtt ?
|
|
|
|
+ IEEE80211_MESHCONF_CAPAB_TBTT_ADJUSTING | cap :
|
|
|
|
+ ~IEEE80211_MESHCONF_CAPAB_TBTT_ADJUSTING & cap;
|
|
}
|
|
}
|
|
|
|
|
|
static const struct sync_method sync_methods[] = {
|
|
static const struct sync_method sync_methods[] = {
|