Skip to content

Commit

Permalink
docs: networking: convert radiotap-headers.txt to ReST
Browse files Browse the repository at this point in the history
- add SPDX header;
- adjust title markup;
- mark code blocks and literals as such;
- adjust identation, whitespaces and blank lines where needed;
- add to networking/index.rst.

Signed-off-by: Mauro Carvalho Chehab <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
mchehab authored and davem330 committed Apr 30, 2020
1 parent 8326190 commit 66d495d
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 49 deletions.
1 change: 1 addition & 0 deletions Documentation/networking/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ Contents:
plip
ppp_generic
proc_net_tcp
radiotap-headers

.. only:: subproject and html

Expand Down
2 changes: 1 addition & 1 deletion Documentation/networking/mac80211-injection.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ following format::
[ payload ]

The radiotap format is discussed in
./Documentation/networking/radiotap-headers.txt.
./Documentation/networking/radiotap-headers.rst.

Despite many radiotap parameters being currently defined, most only make sense
to appear on received packets. The following information is parsed from the
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
.. SPDX-License-Identifier: GPL-2.0
===========================
How to use radiotap headers
===========================

Pointer to the radiotap include file
------------------------------------

Radiotap headers are variable-length and extensible, you can get most of the
information you need to know on them from:
information you need to know on them from::

./include/net/ieee80211_radiotap.h
./include/net/ieee80211_radiotap.h

This document gives an overview and warns on some corner cases.

Expand All @@ -21,6 +24,8 @@ of the it_present member of ieee80211_radiotap_header is set, it means that
the header for argument index 0 (IEEE80211_RADIOTAP_TSFT) is present in the
argument area.

::

< 8-byte ieee80211_radiotap_header >
[ <possible argument bitmap extensions ... > ]
[ <argument> ... ]
Expand Down Expand Up @@ -76,6 +81,8 @@ ieee80211_radiotap_header.
Example valid radiotap header
-----------------------------

::

0x00, 0x00, // <-- radiotap version + pad byte
0x0b, 0x00, // <- radiotap header length
0x04, 0x0c, 0x00, 0x00, // <-- bitmap
Expand All @@ -89,64 +96,64 @@ Using the Radiotap Parser

If you are having to parse a radiotap struct, you can radically simplify the
job by using the radiotap parser that lives in net/wireless/radiotap.c and has
its prototypes available in include/net/cfg80211.h. You use it like this:
its prototypes available in include/net/cfg80211.h. You use it like this::

#include <net/cfg80211.h>
#include <net/cfg80211.h>

/* buf points to the start of the radiotap header part */
/* buf points to the start of the radiotap header part */

int MyFunction(u8 * buf, int buflen)
{
int pkt_rate_100kHz = 0, antenna = 0, pwr = 0;
struct ieee80211_radiotap_iterator iterator;
int ret = ieee80211_radiotap_iterator_init(&iterator, buf, buflen);
int MyFunction(u8 * buf, int buflen)
{
int pkt_rate_100kHz = 0, antenna = 0, pwr = 0;
struct ieee80211_radiotap_iterator iterator;
int ret = ieee80211_radiotap_iterator_init(&iterator, buf, buflen);

while (!ret) {
while (!ret) {

ret = ieee80211_radiotap_iterator_next(&iterator);
ret = ieee80211_radiotap_iterator_next(&iterator);

if (ret)
continue;
if (ret)
continue;

/* see if this argument is something we can use */
/* see if this argument is something we can use */

switch (iterator.this_arg_index) {
/*
* You must take care when dereferencing iterator.this_arg
* for multibyte types... the pointer is not aligned. Use
* get_unaligned((type *)iterator.this_arg) to dereference
* iterator.this_arg for type "type" safely on all arches.
*/
case IEEE80211_RADIOTAP_RATE:
/* radiotap "rate" u8 is in
* 500kbps units, eg, 0x02=1Mbps
*/
pkt_rate_100kHz = (*iterator.this_arg) * 5;
break;
switch (iterator.this_arg_index) {
/*
* You must take care when dereferencing iterator.this_arg
* for multibyte types... the pointer is not aligned. Use
* get_unaligned((type *)iterator.this_arg) to dereference
* iterator.this_arg for type "type" safely on all arches.
*/
case IEEE80211_RADIOTAP_RATE:
/* radiotap "rate" u8 is in
* 500kbps units, eg, 0x02=1Mbps
*/
pkt_rate_100kHz = (*iterator.this_arg) * 5;
break;

case IEEE80211_RADIOTAP_ANTENNA:
/* radiotap uses 0 for 1st ant */
antenna = *iterator.this_arg);
break;
case IEEE80211_RADIOTAP_ANTENNA:
/* radiotap uses 0 for 1st ant */
antenna = *iterator.this_arg);
break;

case IEEE80211_RADIOTAP_DBM_TX_POWER:
pwr = *iterator.this_arg;
break;
case IEEE80211_RADIOTAP_DBM_TX_POWER:
pwr = *iterator.this_arg;
break;

default:
break;
}
} /* while more rt headers */
default:
break;
}
} /* while more rt headers */

if (ret != -ENOENT)
return TXRX_DROP;
if (ret != -ENOENT)
return TXRX_DROP;

/* discard the radiotap header part */
buf += iterator.max_length;
buflen -= iterator.max_length;
/* discard the radiotap header part */
buf += iterator.max_length;
buflen -= iterator.max_length;

...
...

}
}

Andy Green <[email protected]>
2 changes: 1 addition & 1 deletion include/net/cfg80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -5211,7 +5211,7 @@ u32 ieee80211_mandatory_rates(struct ieee80211_supported_band *sband,
* Radiotap parsing functions -- for controlled injection support
*
* Implemented in net/wireless/radiotap.c
* Documentation in Documentation/networking/radiotap-headers.txt
* Documentation in Documentation/networking/radiotap-headers.rst
*/

struct radiotap_align_size {
Expand Down
2 changes: 1 addition & 1 deletion net/wireless/radiotap.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ static const struct ieee80211_radiotap_namespace radiotap_ns = {
* iterator.this_arg for type "type" safely on all arches.
*
* Example code:
* See Documentation/networking/radiotap-headers.txt
* See Documentation/networking/radiotap-headers.rst
*/

int ieee80211_radiotap_iterator_init(
Expand Down

0 comments on commit 66d495d

Please sign in to comment.