mac80211: move mesh related station fields to own struct
There are now a fairly large number of mesh fields that really aren't needed in any other modes; move those into their own structure and allocate them separately. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
@@ -269,6 +269,48 @@ struct ieee80211_fast_tx {
|
||||
struct rcu_head rcu_head;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct mesh_sta - mesh STA information
|
||||
* @plink_lock: serialize access to plink fields
|
||||
* @llid: Local link ID
|
||||
* @plid: Peer link ID
|
||||
* @reason: Cancel reason on PLINK_HOLDING state
|
||||
* @plink_retries: Retries in establishment
|
||||
* @plink_state: peer link state
|
||||
* @plink_timeout: timeout of peer link
|
||||
* @plink_timer: peer link watch timer
|
||||
* @t_offset: timing offset relative to this host
|
||||
* @t_offset_setpoint: reference timing offset of this sta to be used when
|
||||
* calculating clockdrift
|
||||
* @local_pm: local link-specific power save mode
|
||||
* @peer_pm: peer-specific power save mode towards local STA
|
||||
* @nonpeer_pm: STA power save mode towards non-peer neighbors
|
||||
* @processed_beacon: set to true after peer rates and capabilities are
|
||||
* processed
|
||||
*/
|
||||
struct mesh_sta {
|
||||
struct timer_list plink_timer;
|
||||
|
||||
s64 t_offset;
|
||||
s64 t_offset_setpoint;
|
||||
|
||||
spinlock_t plink_lock;
|
||||
u16 llid;
|
||||
u16 plid;
|
||||
u16 reason;
|
||||
u8 plink_retries;
|
||||
|
||||
bool processed_beacon;
|
||||
|
||||
enum nl80211_plink_state plink_state;
|
||||
u32 plink_timeout;
|
||||
|
||||
/* mesh power save */
|
||||
enum nl80211_mesh_power_mode local_pm;
|
||||
enum nl80211_mesh_power_mode peer_pm;
|
||||
enum nl80211_mesh_power_mode nonpeer_pm;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct sta_info - STA information
|
||||
*
|
||||
@@ -330,20 +372,7 @@ struct ieee80211_fast_tx {
|
||||
* @tid_seq: per-TID sequence numbers for sending to this STA
|
||||
* @ampdu_mlme: A-MPDU state machine state
|
||||
* @timer_to_tid: identity mapping to ID timers
|
||||
* @plink_lock: serialize access to plink fields
|
||||
* @llid: Local link ID
|
||||
* @plid: Peer link ID
|
||||
* @reason: Cancel reason on PLINK_HOLDING state
|
||||
* @plink_retries: Retries in establishment
|
||||
* @plink_state: peer link state
|
||||
* @plink_timeout: timeout of peer link
|
||||
* @plink_timer: peer link watch timer
|
||||
* @t_offset: timing offset relative to this host
|
||||
* @t_offset_setpoint: reference timing offset of this sta to be used when
|
||||
* calculating clockdrift
|
||||
* @local_pm: local link-specific power save mode
|
||||
* @peer_pm: peer-specific power save mode towards local STA
|
||||
* @nonpeer_pm: STA power save mode towards non-peer neighbors
|
||||
* @mesh: mesh STA information
|
||||
* @debugfs: debug filesystem info
|
||||
* @dead: set to true when sta is unlinked
|
||||
* @uploaded: set to true when sta is uploaded to the driver
|
||||
@@ -371,8 +400,6 @@ struct ieee80211_fast_tx {
|
||||
* @rx_msdu: MSDUs received from this station, using IEEE80211_NUM_TID
|
||||
* entry for non-QoS frames
|
||||
* @fast_tx: TX fastpath information
|
||||
* @processed_beacon: set to true after peer rates and capabilities are
|
||||
* processed
|
||||
*/
|
||||
struct sta_info {
|
||||
/* General information, mostly static */
|
||||
@@ -392,6 +419,10 @@ struct sta_info {
|
||||
|
||||
struct ieee80211_fast_tx __rcu *fast_tx;
|
||||
|
||||
#ifdef CONFIG_MAC80211_MESH
|
||||
struct mesh_sta *mesh;
|
||||
#endif
|
||||
|
||||
struct work_struct drv_deliver_wk;
|
||||
|
||||
u16 listen_interval;
|
||||
@@ -457,29 +488,6 @@ struct sta_info {
|
||||
struct sta_ampdu_mlme ampdu_mlme;
|
||||
u8 timer_to_tid[IEEE80211_NUM_TIDS];
|
||||
|
||||
#ifdef CONFIG_MAC80211_MESH
|
||||
/*
|
||||
* Mesh peer link attributes, protected by plink_lock.
|
||||
* TODO: move to a sub-structure that is referenced with pointer?
|
||||
*/
|
||||
spinlock_t plink_lock;
|
||||
u16 llid;
|
||||
u16 plid;
|
||||
u16 reason;
|
||||
u8 plink_retries;
|
||||
enum nl80211_plink_state plink_state;
|
||||
u32 plink_timeout;
|
||||
struct timer_list plink_timer;
|
||||
|
||||
s64 t_offset;
|
||||
s64 t_offset_setpoint;
|
||||
/* mesh power save */
|
||||
enum nl80211_mesh_power_mode local_pm;
|
||||
enum nl80211_mesh_power_mode peer_pm;
|
||||
enum nl80211_mesh_power_mode nonpeer_pm;
|
||||
bool processed_beacon;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MAC80211_DEBUGFS
|
||||
struct sta_info_debugfsdentries {
|
||||
struct dentry *dir;
|
||||
@@ -507,7 +515,7 @@ struct sta_info {
|
||||
static inline enum nl80211_plink_state sta_plink_state(struct sta_info *sta)
|
||||
{
|
||||
#ifdef CONFIG_MAC80211_MESH
|
||||
return sta->plink_state;
|
||||
return sta->mesh->plink_state;
|
||||
#endif
|
||||
return NL80211_PLINK_LISTEN;
|
||||
}
|
||||
|
Reference in New Issue
Block a user