Commit 056cdd59 authored by Johannes Berg's avatar Johannes Berg Committed by John W. Linville

mac80211: reorder fields to make some structures smaller

This patch reorders some fields in various structures to have
less padding within the structures, making them smaller. It
doesn't yet make any type adjustments, but often size_t is used
for example for IE lengths which is total overkill since size_t
will be 8 bytes long on 64-bit yet the length can at most fill
a u8.
Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 8dd62822
...@@ -73,11 +73,12 @@ struct ieee80211_fragment_entry { ...@@ -73,11 +73,12 @@ struct ieee80211_fragment_entry {
struct ieee80211_sta_bss { struct ieee80211_sta_bss {
struct list_head list; struct list_head list;
struct ieee80211_sta_bss *hnext; struct ieee80211_sta_bss *hnext;
size_t ssid_len;
atomic_t users; atomic_t users;
u8 bssid[ETH_ALEN]; u8 bssid[ETH_ALEN];
u8 ssid[IEEE80211_MAX_SSID_LEN]; u8 ssid[IEEE80211_MAX_SSID_LEN];
size_t ssid_len;
u16 capability; /* host byte order */ u16 capability; /* host byte order */
enum ieee80211_band band; enum ieee80211_band band;
int freq; int freq;
...@@ -98,8 +99,8 @@ struct ieee80211_sta_bss { ...@@ -98,8 +99,8 @@ struct ieee80211_sta_bss {
#define IEEE80211_MAX_SUPP_RATES 32 #define IEEE80211_MAX_SUPP_RATES 32
u8 supp_rates[IEEE80211_MAX_SUPP_RATES]; u8 supp_rates[IEEE80211_MAX_SUPP_RATES];
size_t supp_rates_len; size_t supp_rates_len;
int beacon_int;
u64 timestamp; u64 timestamp;
int beacon_int;
int probe_resp; int probe_resp;
unsigned long last_update; unsigned long last_update;
...@@ -154,9 +155,7 @@ struct ieee80211_tx_data { ...@@ -154,9 +155,7 @@ struct ieee80211_tx_data {
struct ieee80211_local *local; struct ieee80211_local *local;
struct ieee80211_sub_if_data *sdata; struct ieee80211_sub_if_data *sdata;
struct sta_info *sta; struct sta_info *sta;
u16 fc, ethertype;
struct ieee80211_key *key; struct ieee80211_key *key;
unsigned int flags;
struct ieee80211_tx_control *control; struct ieee80211_tx_control *control;
struct ieee80211_channel *channel; struct ieee80211_channel *channel;
...@@ -168,8 +167,11 @@ struct ieee80211_tx_data { ...@@ -168,8 +167,11 @@ struct ieee80211_tx_data {
/* Extra fragments (in addition to the first fragment /* Extra fragments (in addition to the first fragment
* in skb) */ * in skb) */
int num_extra_frag;
struct sk_buff **extra_frag; struct sk_buff **extra_frag;
int num_extra_frag;
u16 fc, ethertype;
unsigned int flags;
}; };
...@@ -192,12 +194,12 @@ struct ieee80211_rx_data { ...@@ -192,12 +194,12 @@ struct ieee80211_rx_data {
struct ieee80211_local *local; struct ieee80211_local *local;
struct ieee80211_sub_if_data *sdata; struct ieee80211_sub_if_data *sdata;
struct sta_info *sta; struct sta_info *sta;
u16 fc, ethertype;
struct ieee80211_key *key; struct ieee80211_key *key;
unsigned int flags;
struct ieee80211_rx_status *status; struct ieee80211_rx_status *status;
struct ieee80211_rate *rate; struct ieee80211_rate *rate;
u16 fc, ethertype;
unsigned int flags;
int sent_ps_buffered; int sent_ps_buffered;
int queue; int queue;
int load; int load;
...@@ -222,9 +224,9 @@ struct ieee80211_tx_packet_data { ...@@ -222,9 +224,9 @@ struct ieee80211_tx_packet_data {
struct ieee80211_tx_stored_packet { struct ieee80211_tx_stored_packet {
struct ieee80211_tx_control control; struct ieee80211_tx_control control;
struct sk_buff *skb; struct sk_buff *skb;
int num_extra_frag;
struct sk_buff **extra_frag; struct sk_buff **extra_frag;
struct ieee80211_rate *last_frag_rate; struct ieee80211_rate *last_frag_rate;
int num_extra_frag;
unsigned int last_frag_rate_ctrl_probe; unsigned int last_frag_rate_ctrl_probe;
}; };
...@@ -246,8 +248,8 @@ struct ieee80211_if_ap { ...@@ -246,8 +248,8 @@ struct ieee80211_if_ap {
* bitmap_empty :) * bitmap_empty :)
* NB: don't touch this bitmap, use sta_info_{set,clear}_tim_bit */ * NB: don't touch this bitmap, use sta_info_{set,clear}_tim_bit */
u8 tim[sizeof(unsigned long) * BITS_TO_LONGS(IEEE80211_MAX_AID + 1)]; u8 tim[sizeof(unsigned long) * BITS_TO_LONGS(IEEE80211_MAX_AID + 1)];
atomic_t num_sta_ps; /* number of stations in PS mode */
struct sk_buff_head ps_bc_buf; struct sk_buff_head ps_bc_buf;
atomic_t num_sta_ps; /* number of stations in PS mode */
int dtim_count; int dtim_count;
int force_unicast_rateidx; /* forced TX rateidx for unicast frames */ int force_unicast_rateidx; /* forced TX rateidx for unicast frames */
int max_ratectrl_rateidx; /* max TX rateidx for rate control */ int max_ratectrl_rateidx; /* max TX rateidx for rate control */
...@@ -255,8 +257,8 @@ struct ieee80211_if_ap { ...@@ -255,8 +257,8 @@ struct ieee80211_if_ap {
}; };
struct ieee80211_if_wds { struct ieee80211_if_wds {
u8 remote_addr[ETH_ALEN];
struct sta_info *sta; struct sta_info *sta;
u8 remote_addr[ETH_ALEN];
}; };
struct ieee80211_if_vlan { struct ieee80211_if_vlan {
...@@ -290,12 +292,12 @@ struct mesh_config { ...@@ -290,12 +292,12 @@ struct mesh_config {
u8 dot11MeshTTL; u8 dot11MeshTTL;
bool auto_open_plinks; bool auto_open_plinks;
/* HWMP parameters */ /* HWMP parameters */
u32 dot11MeshHWMPactivePathTimeout;
u16 dot11MeshHWMPpreqMinInterval;
u16 dot11MeshHWMPnetDiameterTraversalTime;
u8 dot11MeshHWMPmaxPREQretries; u8 dot11MeshHWMPmaxPREQretries;
u32 path_refresh_time; u32 path_refresh_time;
u16 min_discovery_timeout; u16 min_discovery_timeout;
u32 dot11MeshHWMPactivePathTimeout;
u16 dot11MeshHWMPpreqMinInterval;
u16 dot11MeshHWMPnetDiameterTraversalTime;
}; };
...@@ -314,23 +316,22 @@ struct mesh_config { ...@@ -314,23 +316,22 @@ struct mesh_config {
#define IEEE80211_STA_AUTO_CHANNEL_SEL BIT(12) #define IEEE80211_STA_AUTO_CHANNEL_SEL BIT(12)
#define IEEE80211_STA_PRIVACY_INVOKED BIT(13) #define IEEE80211_STA_PRIVACY_INVOKED BIT(13)
struct ieee80211_if_sta { struct ieee80211_if_sta {
struct timer_list timer;
struct work_struct work;
u8 bssid[ETH_ALEN], prev_bssid[ETH_ALEN];
u8 ssid[IEEE80211_MAX_SSID_LEN];
enum { enum {
IEEE80211_DISABLED, IEEE80211_AUTHENTICATE, IEEE80211_DISABLED, IEEE80211_AUTHENTICATE,
IEEE80211_ASSOCIATE, IEEE80211_ASSOCIATED, IEEE80211_ASSOCIATE, IEEE80211_ASSOCIATED,
IEEE80211_IBSS_SEARCH, IEEE80211_IBSS_JOINED, IEEE80211_IBSS_SEARCH, IEEE80211_IBSS_JOINED,
IEEE80211_MESH_UP IEEE80211_MESH_UP
} state; } state;
struct timer_list timer;
struct work_struct work;
u8 bssid[ETH_ALEN], prev_bssid[ETH_ALEN];
u8 ssid[IEEE80211_MAX_SSID_LEN];
size_t ssid_len; size_t ssid_len;
u8 scan_ssid[IEEE80211_MAX_SSID_LEN]; u8 scan_ssid[IEEE80211_MAX_SSID_LEN];
size_t scan_ssid_len; size_t scan_ssid_len;
#ifdef CONFIG_MAC80211_MESH #ifdef CONFIG_MAC80211_MESH
struct timer_list mesh_path_timer; struct timer_list mesh_path_timer;
u8 mesh_id[IEEE80211_MAX_MESH_ID_LEN]; u8 mesh_id[IEEE80211_MAX_MESH_ID_LEN];
bool accepting_plinks;
size_t mesh_id_len; size_t mesh_id_len;
/* Active Path Selection Protocol Identifier */ /* Active Path Selection Protocol Identifier */
u8 mesh_pp_id[4]; u8 mesh_pp_id[4];
...@@ -354,6 +355,7 @@ struct ieee80211_if_sta { ...@@ -354,6 +355,7 @@ struct ieee80211_if_sta {
struct mesh_stats mshstats; struct mesh_stats mshstats;
struct mesh_config mshcfg; struct mesh_config mshcfg;
u8 mesh_seqnum[3]; u8 mesh_seqnum[3];
bool accepting_plinks;
#endif #endif
u16 aid; u16 aid;
u16 ap_capab, capab; u16 ap_capab, capab;
...@@ -364,16 +366,18 @@ struct ieee80211_if_sta { ...@@ -364,16 +366,18 @@ struct ieee80211_if_sta {
u8 *assocreq_ies, *assocresp_ies; u8 *assocreq_ies, *assocresp_ies;
size_t assocreq_ies_len, assocresp_ies_len; size_t assocreq_ies_len, assocresp_ies_len;
struct sk_buff_head skb_queue;
int auth_tries, assoc_tries; int auth_tries, assoc_tries;
unsigned long request;
unsigned long last_probe;
unsigned int flags; unsigned int flags;
#define IEEE80211_STA_REQ_SCAN 0 #define IEEE80211_STA_REQ_SCAN 0
#define IEEE80211_STA_REQ_AUTH 1 #define IEEE80211_STA_REQ_AUTH 1
#define IEEE80211_STA_REQ_RUN 2 #define IEEE80211_STA_REQ_RUN 2
unsigned long request;
struct sk_buff_head skb_queue;
unsigned long last_probe;
#define IEEE80211_AUTH_ALG_OPEN BIT(0) #define IEEE80211_AUTH_ALG_OPEN BIT(0)
#define IEEE80211_AUTH_ALG_SHARED_KEY BIT(1) #define IEEE80211_AUTH_ALG_SHARED_KEY BIT(1)
......
...@@ -81,20 +81,20 @@ struct tid_ampdu_tx { ...@@ -81,20 +81,20 @@ struct tid_ampdu_tx {
/** /**
* struct tid_ampdu_rx - TID aggregation information (Rx). * struct tid_ampdu_rx - TID aggregation information (Rx).
* *
* @head_seq_num: head sequence number in reordering buffer.
* @stored_mpdu_num: number of MPDUs in reordering buffer
* @reorder_buf: buffer to reorder incoming aggregated MPDUs * @reorder_buf: buffer to reorder incoming aggregated MPDUs
* @session_timer: check if peer keeps Tx-ing on the TID (by timeout value) * @session_timer: check if peer keeps Tx-ing on the TID (by timeout value)
* @head_seq_num: head sequence number in reordering buffer.
* @stored_mpdu_num: number of MPDUs in reordering buffer
* @ssn: Starting Sequence Number expected to be aggregated. * @ssn: Starting Sequence Number expected to be aggregated.
* @buf_size: buffer size for incoming A-MPDUs * @buf_size: buffer size for incoming A-MPDUs
* @timeout: reset timer value. * @timeout: reset timer value.
* @dialog_token: dialog token for aggregation session * @dialog_token: dialog token for aggregation session
*/ */
struct tid_ampdu_rx { struct tid_ampdu_rx {
u16 head_seq_num;
u16 stored_mpdu_num;
struct sk_buff **reorder_buf; struct sk_buff **reorder_buf;
struct timer_list session_timer; struct timer_list session_timer;
u16 head_seq_num;
u16 stored_mpdu_num;
u16 ssn; u16 ssn;
u16 buf_size; u16 buf_size;
u16 timeout; u16 timeout;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment