diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-03-13 07:52:10 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-03-27 20:12:52 -0400 |
commit | aae89831df03e5282a8f5c0ee46432cfb677fc5c (patch) | |
tree | 1073ba993a206fb3df68d5addaa67eebb96068cf | |
parent | 25420604c8967ff24f087dd7b9cd4b278567d39a (diff) |
wireless: radiotap updates
Radiotap was updated to include a "bad PLCP" flag and standardise
the "bad FCS" flag in the "flags" rather than "RX flags" field,
this patch updates Linux to that standard.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/libertas/radiotap.h | 10 | ||||
-rw-r--r-- | drivers/net/wireless/libertas/rx.c | 12 | ||||
-rw-r--r-- | include/net/ieee80211_radiotap.h | 4 | ||||
-rw-r--r-- | net/mac80211/rx.c | 7 |
4 files changed, 9 insertions, 24 deletions
diff --git a/drivers/net/wireless/libertas/radiotap.h b/drivers/net/wireless/libertas/radiotap.h index f8eb9097ff0a..d16b26416e82 100644 --- a/drivers/net/wireless/libertas/radiotap.h +++ b/drivers/net/wireless/libertas/radiotap.h | |||
@@ -33,22 +33,12 @@ struct rx_radiotap_hdr { | |||
33 | struct ieee80211_radiotap_header hdr; | 33 | struct ieee80211_radiotap_header hdr; |
34 | u8 flags; | 34 | u8 flags; |
35 | u8 rate; | 35 | u8 rate; |
36 | u16 chan_freq; | ||
37 | u16 chan_flags; | ||
38 | u8 antenna; | ||
39 | u8 antsignal; | 36 | u8 antsignal; |
40 | u16 rx_flags; | ||
41 | #if 0 | ||
42 | u8 pad[IEEE80211_RADIOTAP_HDRLEN - 18]; | ||
43 | #endif | ||
44 | } __attribute__ ((packed)); | 37 | } __attribute__ ((packed)); |
45 | 38 | ||
46 | #define RX_RADIOTAP_PRESENT ( \ | 39 | #define RX_RADIOTAP_PRESENT ( \ |
47 | (1 << IEEE80211_RADIOTAP_FLAGS) | \ | 40 | (1 << IEEE80211_RADIOTAP_FLAGS) | \ |
48 | (1 << IEEE80211_RADIOTAP_RATE) | \ | 41 | (1 << IEEE80211_RADIOTAP_RATE) | \ |
49 | (1 << IEEE80211_RADIOTAP_CHANNEL) | \ | ||
50 | (1 << IEEE80211_RADIOTAP_ANTENNA) | \ | ||
51 | (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL) |\ | 42 | (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL) |\ |
52 | (1 << IEEE80211_RADIOTAP_RX_FLAGS) | \ | ||
53 | 0) | 43 | 0) |
54 | 44 | ||
diff --git a/drivers/net/wireless/libertas/rx.c b/drivers/net/wireless/libertas/rx.c index 4f60948dde9c..63d7e19ce9bd 100644 --- a/drivers/net/wireless/libertas/rx.c +++ b/drivers/net/wireless/libertas/rx.c | |||
@@ -351,19 +351,11 @@ static int process_rxed_802_11_packet(struct lbs_private *priv, | |||
351 | radiotap_hdr.hdr.it_pad = 0; | 351 | radiotap_hdr.hdr.it_pad = 0; |
352 | radiotap_hdr.hdr.it_len = cpu_to_le16 (sizeof(struct rx_radiotap_hdr)); | 352 | radiotap_hdr.hdr.it_len = cpu_to_le16 (sizeof(struct rx_radiotap_hdr)); |
353 | radiotap_hdr.hdr.it_present = cpu_to_le32 (RX_RADIOTAP_PRESENT); | 353 | radiotap_hdr.hdr.it_present = cpu_to_le32 (RX_RADIOTAP_PRESENT); |
354 | /* unknown values */ | 354 | if (!(prxpd->status & cpu_to_le16(MRVDRV_RXPD_STATUS_OK))) |
355 | radiotap_hdr.flags = 0; | 355 | radiotap_hdr.flags |= IEEE80211_RADIOTAP_F_BADFCS; |
356 | radiotap_hdr.chan_freq = 0; | ||
357 | radiotap_hdr.chan_flags = 0; | ||
358 | radiotap_hdr.antenna = 0; | ||
359 | /* known values */ | ||
360 | radiotap_hdr.rate = convert_mv_rate_to_radiotap(prxpd->rx_rate); | 356 | radiotap_hdr.rate = convert_mv_rate_to_radiotap(prxpd->rx_rate); |
361 | /* XXX must check no carryout */ | 357 | /* XXX must check no carryout */ |
362 | radiotap_hdr.antsignal = prxpd->snr + prxpd->nf; | 358 | radiotap_hdr.antsignal = prxpd->snr + prxpd->nf; |
363 | radiotap_hdr.rx_flags = 0; | ||
364 | if (!(prxpd->status & cpu_to_le16(MRVDRV_RXPD_STATUS_OK))) | ||
365 | radiotap_hdr.rx_flags |= IEEE80211_RADIOTAP_F_RX_BADFCS; | ||
366 | //memset(radiotap_hdr.pad, 0x11, IEEE80211_RADIOTAP_HDRLEN - 18); | ||
367 | 359 | ||
368 | /* chop the rxpd */ | 360 | /* chop the rxpd */ |
369 | skb_pull(skb, sizeof(struct rxpd)); | 361 | skb_pull(skb, sizeof(struct rxpd)); |
diff --git a/include/net/ieee80211_radiotap.h b/include/net/ieee80211_radiotap.h index 384698cb773a..23c3f3d97779 100644 --- a/include/net/ieee80211_radiotap.h +++ b/include/net/ieee80211_radiotap.h | |||
@@ -230,8 +230,10 @@ enum ieee80211_radiotap_type { | |||
230 | * 802.11 header and payload | 230 | * 802.11 header and payload |
231 | * (to 32-bit boundary) | 231 | * (to 32-bit boundary) |
232 | */ | 232 | */ |
233 | #define IEEE80211_RADIOTAP_F_BADFCS 0x40 /* bad FCS */ | ||
234 | |||
233 | /* For IEEE80211_RADIOTAP_RX_FLAGS */ | 235 | /* For IEEE80211_RADIOTAP_RX_FLAGS */ |
234 | #define IEEE80211_RADIOTAP_F_RX_BADFCS 0x0001 /* frame failed crc check */ | 236 | #define IEEE80211_RADIOTAP_F_RX_BADPLCP 0x0002 /* frame has bad PLCP */ |
235 | 237 | ||
236 | /* For IEEE80211_RADIOTAP_TX_FLAGS */ | 238 | /* For IEEE80211_RADIOTAP_TX_FLAGS */ |
237 | #define IEEE80211_RADIOTAP_F_TX_FAIL 0x0001 /* failed due to excessive | 239 | #define IEEE80211_RADIOTAP_F_TX_FAIL 0x0001 /* failed due to excessive |
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index 66f7ecf51b92..fcc0a5995791 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -142,6 +142,8 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local, | |||
142 | /* IEEE80211_RADIOTAP_FLAGS */ | 142 | /* IEEE80211_RADIOTAP_FLAGS */ |
143 | if (local->hw.flags & IEEE80211_HW_RX_INCLUDES_FCS) | 143 | if (local->hw.flags & IEEE80211_HW_RX_INCLUDES_FCS) |
144 | *pos |= IEEE80211_RADIOTAP_F_FCS; | 144 | *pos |= IEEE80211_RADIOTAP_F_FCS; |
145 | if (status->flag & (RX_FLAG_FAILED_FCS_CRC | RX_FLAG_FAILED_PLCP_CRC)) | ||
146 | *pos |= IEEE80211_RADIOTAP_F_BADFCS; | ||
145 | if (status->flag & RX_FLAG_SHORTPRE) | 147 | if (status->flag & RX_FLAG_SHORTPRE) |
146 | *pos |= IEEE80211_RADIOTAP_F_SHORTPRE; | 148 | *pos |= IEEE80211_RADIOTAP_F_SHORTPRE; |
147 | pos++; | 149 | pos++; |
@@ -204,9 +206,8 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local, | |||
204 | /* ensure 2 byte alignment for the 2 byte field as required */ | 206 | /* ensure 2 byte alignment for the 2 byte field as required */ |
205 | if ((pos - (unsigned char *)rthdr) & 1) | 207 | if ((pos - (unsigned char *)rthdr) & 1) |
206 | pos++; | 208 | pos++; |
207 | /* FIXME: when radiotap gets a 'bad PLCP' flag use it here */ | 209 | if (status->flag & RX_FLAG_FAILED_PLCP_CRC) |
208 | if (status->flag & (RX_FLAG_FAILED_FCS_CRC | RX_FLAG_FAILED_PLCP_CRC)) | 210 | *(__le16 *)pos |= cpu_to_le16(IEEE80211_RADIOTAP_F_RX_BADPLCP); |
209 | *(__le16 *)pos |= cpu_to_le16(IEEE80211_RADIOTAP_F_RX_BADFCS); | ||
210 | pos += 2; | 211 | pos += 2; |
211 | } | 212 | } |
212 | 213 | ||