Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
net
ieee80211_radiotap.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2003, 2004 David Young. All rights reserved.
3
*
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions
6
* are met:
7
* 1. Redistributions of source code must retain the above copyright
8
* notice, this list of conditions and the following disclaimer.
9
* 2. Redistributions in binary form must reproduce the above copyright
10
* notice, this list of conditions and the following disclaimer in the
11
* documentation and/or other materials provided with the distribution.
12
* 3. The name of David Young may not be used to endorse or promote
13
* products derived from this software without specific prior
14
* written permission.
15
*
16
* THIS SOFTWARE IS PROVIDED BY DAVID YOUNG ``AS IS'' AND ANY
17
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
18
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
19
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DAVID
20
* YOUNG BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
22
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
27
* OF SUCH DAMAGE.
28
*/
29
30
/*
31
* Modifications to fit into the linux IEEE 802.11 stack,
32
* Mike Kershaw (
[email protected]
)
33
*/
34
35
#ifndef IEEE80211RADIOTAP_H
36
#define IEEE80211RADIOTAP_H
37
38
#include <linux/if_ether.h>
39
#include <linux/kernel.h>
40
#include <asm/unaligned.h>
41
42
/* Base version of the radiotap packet header data */
43
#define PKTHDR_RADIOTAP_VERSION 0
44
45
/* A generic radio capture format is desirable. There is one for
46
* Linux, but it is neither rigidly defined (there were not even
47
* units given for some fields) nor easily extensible.
48
*
49
* I suggest the following extensible radio capture format. It is
50
* based on a bitmap indicating which fields are present.
51
*
52
* I am trying to describe precisely what the application programmer
53
* should expect in the following, and for that reason I tell the
54
* units and origin of each measurement (where it applies), or else I
55
* use sufficiently weaselly language ("is a monotonically nondecreasing
56
* function of...") that I cannot set false expectations for lawyerly
57
* readers.
58
*/
59
60
/*
61
* The radio capture header precedes the 802.11 header.
62
* All data in the header is little endian on all platforms.
63
*/
64
struct
ieee80211_radiotap_header
{
65
u8
it_version
;
/* Version 0. Only increases
66
* for drastic changes,
67
* introduction of compatible
68
* new fields does not count.
69
*/
70
u8
it_pad
;
71
__le16
it_len
;
/* length of the whole
72
* header in bytes, including
73
* it_version, it_pad,
74
* it_len, and data fields.
75
*/
76
__le32
it_present
;
/* A bitmap telling which
77
* fields are present. Set bit 31
78
* (0x80000000) to extend the
79
* bitmap by another 32 bits.
80
* Additional extensions are made
81
* by setting bit 31.
82
*/
83
}
__packed
;
84
85
/* Name Data type Units
86
* ---- --------- -----
87
*
88
* IEEE80211_RADIOTAP_TSFT __le64 microseconds
89
*
90
* Value in microseconds of the MAC's 64-bit 802.11 Time
91
* Synchronization Function timer when the first bit of the
92
* MPDU arrived at the MAC. For received frames, only.
93
*
94
* IEEE80211_RADIOTAP_CHANNEL 2 x __le16 MHz, bitmap
95
*
96
* Tx/Rx frequency in MHz, followed by flags (see below).
97
*
98
* IEEE80211_RADIOTAP_FHSS __le16 see below
99
*
100
* For frequency-hopping radios, the hop set (first byte)
101
* and pattern (second byte).
102
*
103
* IEEE80211_RADIOTAP_RATE u8 500kb/s
104
*
105
* Tx/Rx data rate
106
*
107
* IEEE80211_RADIOTAP_DBM_ANTSIGNAL s8 decibels from
108
* one milliwatt (dBm)
109
*
110
* RF signal power at the antenna, decibel difference from
111
* one milliwatt.
112
*
113
* IEEE80211_RADIOTAP_DBM_ANTNOISE s8 decibels from
114
* one milliwatt (dBm)
115
*
116
* RF noise power at the antenna, decibel difference from one
117
* milliwatt.
118
*
119
* IEEE80211_RADIOTAP_DB_ANTSIGNAL u8 decibel (dB)
120
*
121
* RF signal power at the antenna, decibel difference from an
122
* arbitrary, fixed reference.
123
*
124
* IEEE80211_RADIOTAP_DB_ANTNOISE u8 decibel (dB)
125
*
126
* RF noise power at the antenna, decibel difference from an
127
* arbitrary, fixed reference point.
128
*
129
* IEEE80211_RADIOTAP_LOCK_QUALITY __le16 unitless
130
*
131
* Quality of Barker code lock. Unitless. Monotonically
132
* nondecreasing with "better" lock strength. Called "Signal
133
* Quality" in datasheets. (Is there a standard way to measure
134
* this?)
135
*
136
* IEEE80211_RADIOTAP_TX_ATTENUATION __le16 unitless
137
*
138
* Transmit power expressed as unitless distance from max
139
* power set at factory calibration. 0 is max power.
140
* Monotonically nondecreasing with lower power levels.
141
*
142
* IEEE80211_RADIOTAP_DB_TX_ATTENUATION __le16 decibels (dB)
143
*
144
* Transmit power expressed as decibel distance from max power
145
* set at factory calibration. 0 is max power. Monotonically
146
* nondecreasing with lower power levels.
147
*
148
* IEEE80211_RADIOTAP_DBM_TX_POWER s8 decibels from
149
* one milliwatt (dBm)
150
*
151
* Transmit power expressed as dBm (decibels from a 1 milliwatt
152
* reference). This is the absolute power level measured at
153
* the antenna port.
154
*
155
* IEEE80211_RADIOTAP_FLAGS u8 bitmap
156
*
157
* Properties of transmitted and received frames. See flags
158
* defined below.
159
*
160
* IEEE80211_RADIOTAP_ANTENNA u8 antenna index
161
*
162
* Unitless indication of the Rx/Tx antenna for this packet.
163
* The first antenna is antenna 0.
164
*
165
* IEEE80211_RADIOTAP_RX_FLAGS __le16 bitmap
166
*
167
* Properties of received frames. See flags defined below.
168
*
169
* IEEE80211_RADIOTAP_TX_FLAGS __le16 bitmap
170
*
171
* Properties of transmitted frames. See flags defined below.
172
*
173
* IEEE80211_RADIOTAP_RTS_RETRIES u8 data
174
*
175
* Number of rts retries a transmitted frame used.
176
*
177
* IEEE80211_RADIOTAP_DATA_RETRIES u8 data
178
*
179
* Number of unicast retries a transmitted frame used.
180
*
181
* IEEE80211_RADIOTAP_MCS u8, u8, u8 unitless
182
*
183
* Contains a bitmap of known fields/flags, the flags, and
184
* the MCS index.
185
*
186
* IEEE80211_RADIOTAP_AMPDU_STATUS u32, u16, u8, u8 unitless
187
*
188
* Contains the AMPDU information for the subframe.
189
*/
190
enum
ieee80211_radiotap_type
{
191
IEEE80211_RADIOTAP_TSFT
= 0,
192
IEEE80211_RADIOTAP_FLAGS
= 1,
193
IEEE80211_RADIOTAP_RATE
= 2,
194
IEEE80211_RADIOTAP_CHANNEL
= 3,
195
IEEE80211_RADIOTAP_FHSS
= 4,
196
IEEE80211_RADIOTAP_DBM_ANTSIGNAL
= 5,
197
IEEE80211_RADIOTAP_DBM_ANTNOISE
= 6,
198
IEEE80211_RADIOTAP_LOCK_QUALITY
= 7,
199
IEEE80211_RADIOTAP_TX_ATTENUATION
= 8,
200
IEEE80211_RADIOTAP_DB_TX_ATTENUATION
= 9,
201
IEEE80211_RADIOTAP_DBM_TX_POWER
= 10,
202
IEEE80211_RADIOTAP_ANTENNA
= 11,
203
IEEE80211_RADIOTAP_DB_ANTSIGNAL
= 12,
204
IEEE80211_RADIOTAP_DB_ANTNOISE
= 13,
205
IEEE80211_RADIOTAP_RX_FLAGS
= 14,
206
IEEE80211_RADIOTAP_TX_FLAGS
= 15,
207
IEEE80211_RADIOTAP_RTS_RETRIES
= 16,
208
IEEE80211_RADIOTAP_DATA_RETRIES
= 17,
209
210
IEEE80211_RADIOTAP_MCS
= 19,
211
IEEE80211_RADIOTAP_AMPDU_STATUS
= 20,
212
213
/* valid in every it_present bitmap, even vendor namespaces */
214
IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE
= 29,
215
IEEE80211_RADIOTAP_VENDOR_NAMESPACE
= 30,
216
IEEE80211_RADIOTAP_EXT
= 31
217
};
218
219
/* Channel flags. */
220
#define IEEE80211_CHAN_TURBO 0x0010
/* Turbo channel */
221
#define IEEE80211_CHAN_CCK 0x0020
/* CCK channel */
222
#define IEEE80211_CHAN_OFDM 0x0040
/* OFDM channel */
223
#define IEEE80211_CHAN_2GHZ 0x0080
/* 2 GHz spectrum channel. */
224
#define IEEE80211_CHAN_5GHZ 0x0100
/* 5 GHz spectrum channel */
225
#define IEEE80211_CHAN_PASSIVE 0x0200
/* Only passive scan allowed */
226
#define IEEE80211_CHAN_DYN 0x0400
/* Dynamic CCK-OFDM channel */
227
#define IEEE80211_CHAN_GFSK 0x0800
/* GFSK channel (FHSS PHY) */
228
229
/* For IEEE80211_RADIOTAP_FLAGS */
230
#define IEEE80211_RADIOTAP_F_CFP 0x01
/* sent/received
231
* during CFP
232
*/
233
#define IEEE80211_RADIOTAP_F_SHORTPRE 0x02
/* sent/received
234
* with short
235
* preamble
236
*/
237
#define IEEE80211_RADIOTAP_F_WEP 0x04
/* sent/received
238
* with WEP encryption
239
*/
240
#define IEEE80211_RADIOTAP_F_FRAG 0x08
/* sent/received
241
* with fragmentation
242
*/
243
#define IEEE80211_RADIOTAP_F_FCS 0x10
/* frame includes FCS */
244
#define IEEE80211_RADIOTAP_F_DATAPAD 0x20
/* frame has padding between
245
* 802.11 header and payload
246
* (to 32-bit boundary)
247
*/
248
#define IEEE80211_RADIOTAP_F_BADFCS 0x40
/* bad FCS */
249
250
/* For IEEE80211_RADIOTAP_RX_FLAGS */
251
#define IEEE80211_RADIOTAP_F_RX_BADPLCP 0x0002
/* frame has bad PLCP */
252
253
/* For IEEE80211_RADIOTAP_TX_FLAGS */
254
#define IEEE80211_RADIOTAP_F_TX_FAIL 0x0001
/* failed due to excessive
255
* retries */
256
#define IEEE80211_RADIOTAP_F_TX_CTS 0x0002
/* used cts 'protection' */
257
#define IEEE80211_RADIOTAP_F_TX_RTS 0x0004
/* used rts/cts handshake */
258
#define IEEE80211_RADIOTAP_F_TX_NOACK 0x0008
/* don't expect an ack */
259
260
261
/* For IEEE80211_RADIOTAP_MCS */
262
#define IEEE80211_RADIOTAP_MCS_HAVE_BW 0x01
263
#define IEEE80211_RADIOTAP_MCS_HAVE_MCS 0x02
264
#define IEEE80211_RADIOTAP_MCS_HAVE_GI 0x04
265
#define IEEE80211_RADIOTAP_MCS_HAVE_FMT 0x08
266
#define IEEE80211_RADIOTAP_MCS_HAVE_FEC 0x10
267
268
#define IEEE80211_RADIOTAP_MCS_BW_MASK 0x03
269
#define IEEE80211_RADIOTAP_MCS_BW_20 0
270
#define IEEE80211_RADIOTAP_MCS_BW_40 1
271
#define IEEE80211_RADIOTAP_MCS_BW_20L 2
272
#define IEEE80211_RADIOTAP_MCS_BW_20U 3
273
#define IEEE80211_RADIOTAP_MCS_SGI 0x04
274
#define IEEE80211_RADIOTAP_MCS_FMT_GF 0x08
275
#define IEEE80211_RADIOTAP_MCS_FEC_LDPC 0x10
276
277
/* For IEEE80211_RADIOTAP_AMPDU_STATUS */
278
#define IEEE80211_RADIOTAP_AMPDU_REPORT_ZEROLEN 0x0001
279
#define IEEE80211_RADIOTAP_AMPDU_IS_ZEROLEN 0x0002
280
#define IEEE80211_RADIOTAP_AMPDU_LAST_KNOWN 0x0004
281
#define IEEE80211_RADIOTAP_AMPDU_IS_LAST 0x0008
282
#define IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_ERR 0x0010
283
#define IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_KNOWN 0x0020
284
285
/* helpers */
286
static
inline
int
ieee80211_get_radiotap_len(
unsigned
char
*
data
)
287
{
288
struct
ieee80211_radiotap_header
*
hdr
=
289
(
struct
ieee80211_radiotap_header
*)data;
290
291
return
get_unaligned_le16(&hdr->
it_len
);
292
}
293
294
#endif
/* IEEE80211_RADIOTAP_H */
Generated on Thu Jan 10 2013 14:53:04 for Linux Kernel by
1.8.2