diff options
author | Simon Wunderlich <simon.wunderlich@s2003.tu-chemnitz.de> | 2013-07-08 10:55:52 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-07-16 02:58:05 -0400 |
commit | a5e70697d0c4836e69c60de92db27eac9ae71e05 (patch) | |
tree | a4af8f2f829b505a2e78aafb2aa9663e25709b7b /net/mac80211 | |
parent | 438b61b77082e70d2a408cc77b8c5faac312e940 (diff) |
mac80211: add radiotap flag and handling for 5/10 MHz
Wireshark already defines radiotap channel flags for 5 and 10 MHz, so
just use them in Linux radiotap too. Furthermore, add rx status flags to
allow drivers to report when they received data on 5 or 10 MHz channels.
Signed-off-by: Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
Signed-off-by: Mathias Kretschmer <mathias.kretschmer@fokus.fraunhofer.de>
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Diffstat (limited to 'net/mac80211')
-rw-r--r-- | net/mac80211/rx.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index c9f2ca43856a..deeeca1299bd 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -159,6 +159,7 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local, | |||
159 | __le32 *it_present; | 159 | __le32 *it_present; |
160 | u32 it_present_val; | 160 | u32 it_present_val; |
161 | u16 rx_flags = 0; | 161 | u16 rx_flags = 0; |
162 | u16 channel_flags = 0; | ||
162 | int mpdulen, chain; | 163 | int mpdulen, chain; |
163 | unsigned long chains = status->chains; | 164 | unsigned long chains = status->chains; |
164 | 165 | ||
@@ -243,20 +244,22 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local, | |||
243 | /* IEEE80211_RADIOTAP_CHANNEL */ | 244 | /* IEEE80211_RADIOTAP_CHANNEL */ |
244 | put_unaligned_le16(status->freq, pos); | 245 | put_unaligned_le16(status->freq, pos); |
245 | pos += 2; | 246 | pos += 2; |
247 | if (status->flag & RX_FLAG_10MHZ) | ||
248 | channel_flags |= IEEE80211_CHAN_HALF; | ||
249 | else if (status->flag & RX_FLAG_5MHZ) | ||
250 | channel_flags |= IEEE80211_CHAN_QUARTER; | ||
251 | |||
246 | if (status->band == IEEE80211_BAND_5GHZ) | 252 | if (status->band == IEEE80211_BAND_5GHZ) |
247 | put_unaligned_le16(IEEE80211_CHAN_OFDM | IEEE80211_CHAN_5GHZ, | 253 | channel_flags |= IEEE80211_CHAN_OFDM | IEEE80211_CHAN_5GHZ; |
248 | pos); | ||
249 | else if (status->flag & (RX_FLAG_HT | RX_FLAG_VHT)) | 254 | else if (status->flag & (RX_FLAG_HT | RX_FLAG_VHT)) |
250 | put_unaligned_le16(IEEE80211_CHAN_DYN | IEEE80211_CHAN_2GHZ, | 255 | channel_flags |= IEEE80211_CHAN_DYN | IEEE80211_CHAN_2GHZ; |
251 | pos); | ||
252 | else if (rate && rate->flags & IEEE80211_RATE_ERP_G) | 256 | else if (rate && rate->flags & IEEE80211_RATE_ERP_G) |
253 | put_unaligned_le16(IEEE80211_CHAN_OFDM | IEEE80211_CHAN_2GHZ, | 257 | channel_flags |= IEEE80211_CHAN_OFDM | IEEE80211_CHAN_2GHZ; |
254 | pos); | ||
255 | else if (rate) | 258 | else if (rate) |
256 | put_unaligned_le16(IEEE80211_CHAN_CCK | IEEE80211_CHAN_2GHZ, | 259 | channel_flags |= IEEE80211_CHAN_OFDM | IEEE80211_CHAN_2GHZ; |
257 | pos); | ||
258 | else | 260 | else |
259 | put_unaligned_le16(IEEE80211_CHAN_2GHZ, pos); | 261 | channel_flags |= IEEE80211_CHAN_2GHZ; |
262 | put_unaligned_le16(channel_flags, pos); | ||
260 | pos += 2; | 263 | pos += 2; |
261 | 264 | ||
262 | /* IEEE80211_RADIOTAP_DBM_ANTSIGNAL */ | 265 | /* IEEE80211_RADIOTAP_DBM_ANTSIGNAL */ |