root/net80211/ieee80211_radiotap.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    1 /* $OpenBSD: ieee80211_radiotap.h,v 1.8 2006/06/23 21:34:15 reyk Exp $ */
    2 /* $FreeBSD: src/sys/net80211/ieee80211_radiotap.h,v 1.3 2004/04/05 22:13:21 sam Exp $ */
    3 /* $NetBSD: ieee80211_radiotap.h,v 1.9 2004/06/06 04:13:28 dyoung Exp $ */
    4 
    5 /*-
    6  * Copyright (c) 2003, 2004 David Young.  All rights reserved.
    7  *
    8  * Redistribution and use in source and binary forms, with or without
    9  * modification, are permitted provided that the following conditions
   10  * are met:
   11  * 1. Redistributions of source code must retain the above copyright
   12  *    notice, this list of conditions and the following disclaimer.
   13  * 2. Redistributions in binary form must reproduce the above copyright
   14  *    notice, this list of conditions and the following disclaimer in the
   15  *    documentation and/or other materials provided with the distribution.
   16  * 3. The name of David Young may not be used to endorse or promote
   17  *    products derived from this software without specific prior
   18  *    written permission.
   19  *
   20  * THIS SOFTWARE IS PROVIDED BY DAVID YOUNG ``AS IS'' AND ANY
   21  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
   22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
   23  * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL DAVID
   24  * YOUNG BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
   25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
   26  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   28  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   29  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
   31  * OF SUCH DAMAGE.
   32  */
   33 #ifndef _NET_IF_IEEE80211RADIOTAP_H_
   34 #define _NET_IF_IEEE80211RADIOTAP_H_
   35 
   36 /* A generic radio capture format is desirable. There is one for
   37  * Linux, but it is neither rigidly defined (there were not even
   38  * units given for some fields) nor easily extensible.
   39  *
   40  * I suggest the following extensible radio capture format. It is
   41  * based on a bitmap indicating which fields are present.
   42  *
   43  * I am trying to describe precisely what the application programmer
   44  * should expect in the following, and for that reason I tell the
   45  * units and origin of each measurement (where it applies), or else I
   46  * use sufficiently weaselly language ("is a monotonically nondecreasing
   47  * function of...") that I cannot set false expectations for lawyerly
   48  * readers.
   49  */
   50 
   51 /* XXX tcpdump/libpcap do not tolerate variable-length headers,
   52  * yet, so we pad every radiotap header to 64 bytes. Ugh.
   53  */
   54 #define IEEE80211_RADIOTAP_HDRLEN       64
   55 
   56 /* The radio capture header precedes the 802.11 header. */
   57 struct ieee80211_radiotap_header {
   58         u_int8_t        it_version;     /* Version 0. Only increases
   59                                          * for drastic changes,
   60                                          * introduction of compatible
   61                                          * new fields does not count.
   62                                          */
   63         u_int8_t        it_pad;
   64         u_int16_t       it_len;         /* length of the whole
   65                                          * header in bytes, including
   66                                          * it_version, it_pad,
   67                                          * it_len, and data fields.
   68                                          */
   69         u_int32_t       it_present;     /* A bitmap telling which
   70                                          * fields are present. Set bit 31
   71                                          * (0x80000000) to extend the
   72                                          * bitmap by another 32 bits.
   73                                          * Additional extensions are made
   74                                          * by setting bit 31.
   75                                          */
   76 } __packed;
   77 
   78 /* Name                                 Data type       Units
   79  * ----                                 ---------       -----
   80  *
   81  * IEEE80211_RADIOTAP_TSFT              u_int64_t       microseconds
   82  *
   83  *      Value in microseconds of the MAC's 64-bit 802.11 Time
   84  *      Synchronization Function timer when the first bit of the
   85  *      MPDU arrived at the MAC. For received frames, only.
   86  *
   87  * IEEE80211_RADIOTAP_CHANNEL           2 x u_int16_t   MHz, bitmap
   88  *
   89  *      Tx/Rx frequency in MHz, followed by flags (see below).
   90  *
   91  * IEEE80211_RADIOTAP_FHSS              u_int16_t       see below
   92  *
   93  *      For frequency-hopping radios, the hop set (first byte)
   94  *      and pattern (second byte).
   95  *
   96  * IEEE80211_RADIOTAP_RATE              u_int8_t        500kb/s
   97  *
   98  *      Tx/Rx data rate
   99  *
  100  * IEEE80211_RADIOTAP_DBM_ANTSIGNAL     int8_t          decibels from
  101  *                                                      one milliwatt (dBm)
  102  *
  103  *      RF signal power at the antenna, decibel difference from
  104  *      one milliwatt.
  105  *
  106  * IEEE80211_RADIOTAP_DBM_ANTNOISE      int8_t          decibels from
  107  *                                                      one milliwatt (dBm)
  108  *
  109  *      RF noise power at the antenna, decibel difference from one
  110  *      milliwatt.
  111  *
  112  * IEEE80211_RADIOTAP_DB_ANTSIGNAL      u_int8_t        decibel (dB)
  113  *
  114  *      RF signal power at the antenna, decibel difference from an
  115  *      arbitrary, fixed reference.
  116  *
  117  * IEEE80211_RADIOTAP_DB_ANTNOISE       u_int8_t        decibel (dB)
  118  *
  119  *      RF noise power at the antenna, decibel difference from an
  120  *      arbitrary, fixed reference point.
  121  *
  122  * IEEE80211_RADIOTAP_BARKER_CODE_LOCK  u_int16_t       unitless
  123  *
  124  *      Quality of Barker code lock. Unitless. Monotonically
  125  *      nondecreasing with "better" lock strength. Called "Signal
  126  *      Quality" in datasheets.  (Is there a standard way to measure
  127  *      this?)
  128  *
  129  * IEEE80211_RADIOTAP_TX_ATTENUATION    u_int16_t       unitless
  130  *
  131  *      Transmit power expressed as unitless distance from max
  132  *      power set at factory calibration.  0 is max power.
  133  *      Monotonically nondecreasing with lower power levels.
  134  *
  135  * IEEE80211_RADIOTAP_DB_TX_ATTENUATION u_int16_t       decibels (dB)
  136  *
  137  *      Transmit power expressed as decibel distance from max power
  138  *      set at factory calibration.  0 is max power.  Monotonically
  139  *      nondecreasing with lower power levels.
  140  *
  141  * IEEE80211_RADIOTAP_DBM_TX_POWER      int8_t          decibels from
  142  *                                                      one milliwatt (dBm)
  143  *
  144  *      Transmit power expressed as dBm (decibels from a 1 milliwatt
  145  *      reference). This is the absolute power level measured at
  146  *      the antenna port.
  147  *
  148  * IEEE80211_RADIOTAP_FLAGS             u_int8_t        bitmap
  149  *
  150  *      Properties of transmitted and received frames. See flags
  151  *      defined below.
  152  *
  153  * IEEE80211_RADIOTAP_ANTENNA           u_int8_t        antenna index
  154  *
  155  *      Unitless indication of the Rx/Tx antenna for this packet.
  156  *      The first antenna is antenna 0.
  157  *
  158  * IEEE80211_RADIOTAP_FCS               u_int32_t       data
  159  *
  160  *      FCS from frame in network byte order.
  161  *
  162  * IEEE80211_RADIOTAP_HWQUEUE           u_int8_t       data
  163  *
  164  *      A specific hardware queue (used by WME)
  165  *
  166  * IEEE80211_RADIOTAP_RSSI              2x u_int8_t    RSSI, max RSSI
  167  *
  168  *      A relative Received Signal Strength Index
  169  */
  170 enum ieee80211_radiotap_type {
  171         IEEE80211_RADIOTAP_TSFT = 0,
  172         IEEE80211_RADIOTAP_FLAGS = 1,
  173         IEEE80211_RADIOTAP_RATE = 2,
  174         IEEE80211_RADIOTAP_CHANNEL = 3,
  175         IEEE80211_RADIOTAP_FHSS = 4,
  176         IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
  177         IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
  178         IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
  179         IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
  180         IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
  181         IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
  182         IEEE80211_RADIOTAP_ANTENNA = 11,
  183         IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
  184         IEEE80211_RADIOTAP_DB_ANTNOISE = 13,
  185         IEEE80211_RADIOTAP_FCS = 14,
  186         IEEE80211_RADIOTAP_HWQUEUE = 15,
  187         IEEE80211_RADIOTAP_RSSI = 16,
  188         IEEE80211_RADIOTAP_EXT = 31
  189 };
  190 
  191 /* For IEEE80211_RADIOTAP_FLAGS */
  192 #define IEEE80211_RADIOTAP_F_CFP        0x01    /* sent/received
  193                                                  * during CFP
  194                                                  */
  195 #define IEEE80211_RADIOTAP_F_SHORTPRE   0x02    /* sent/received
  196                                                  * with short
  197                                                  * preamble
  198                                                  */
  199 #define IEEE80211_RADIOTAP_F_WEP        0x04    /* sent/received
  200                                                  * with WEP encryption
  201                                                  */
  202 #define IEEE80211_RADIOTAP_F_FRAG       0x08    /* sent/received
  203                                                  * with fragmentation
  204                                                  */
  205 
  206 #endif /* _NET_IF_IEEE80211RADIOTAP_H_ */

/* [<][>][^][v][top][bottom][index][help] */