docs: networking: convert radiotap-headers.txt to ReST

- 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 <mchehab+huawei@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Mauro Carvalho Chehab 2020-04-30 18:04:17 +02:00 committed by David S. Miller
parent 832619012c
commit 66d495d0a5
5 changed files with 57 additions and 49 deletions

View File

@ -95,6 +95,7 @@ Contents:
plip plip
ppp_generic ppp_generic
proc_net_tcp proc_net_tcp
radiotap-headers
.. only:: subproject and html .. only:: subproject and html

View File

@ -13,7 +13,7 @@ following format::
[ payload ] [ payload ]
The radiotap format is discussed in 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 Despite many radiotap parameters being currently defined, most only make sense
to appear on received packets. The following information is parsed from the to appear on received packets. The following information is parsed from the

View File

@ -1,3 +1,6 @@
.. SPDX-License-Identifier: GPL-2.0
===========================
How to use radiotap headers How to use radiotap headers
=========================== ===========================
@ -5,9 +8,9 @@ Pointer to the radiotap include file
------------------------------------ ------------------------------------
Radiotap headers are variable-length and extensible, you can get most of the 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. This document gives an overview and warns on some corner cases.
@ -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 the header for argument index 0 (IEEE80211_RADIOTAP_TSFT) is present in the
argument area. argument area.
::
< 8-byte ieee80211_radiotap_header > < 8-byte ieee80211_radiotap_header >
[ <possible argument bitmap extensions ... > ] [ <possible argument bitmap extensions ... > ]
[ <argument> ... ] [ <argument> ... ]
@ -76,6 +81,8 @@ ieee80211_radiotap_header.
Example valid radiotap header Example valid radiotap header
----------------------------- -----------------------------
::
0x00, 0x00, // <-- radiotap version + pad byte 0x00, 0x00, // <-- radiotap version + pad byte
0x0b, 0x00, // <- radiotap header length 0x0b, 0x00, // <- radiotap header length
0x04, 0x0c, 0x00, 0x00, // <-- bitmap 0x04, 0x0c, 0x00, 0x00, // <-- bitmap
@ -89,64 +96,64 @@ Using the Radiotap Parser
If you are having to parse a radiotap struct, you can radically simplify the 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 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 MyFunction(u8 * buf, int buflen)
{ {
int pkt_rate_100kHz = 0, antenna = 0, pwr = 0; int pkt_rate_100kHz = 0, antenna = 0, pwr = 0;
struct ieee80211_radiotap_iterator iterator; struct ieee80211_radiotap_iterator iterator;
int ret = ieee80211_radiotap_iterator_init(&iterator, buf, buflen); 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) if (ret)
continue; continue;
/* see if this argument is something we can use */ /* see if this argument is something we can use */
switch (iterator.this_arg_index) { switch (iterator.this_arg_index) {
/* /*
* You must take care when dereferencing iterator.this_arg * You must take care when dereferencing iterator.this_arg
* for multibyte types... the pointer is not aligned. Use * for multibyte types... the pointer is not aligned. Use
* get_unaligned((type *)iterator.this_arg) to dereference * get_unaligned((type *)iterator.this_arg) to dereference
* iterator.this_arg for type "type" safely on all arches. * iterator.this_arg for type "type" safely on all arches.
*/ */
case IEEE80211_RADIOTAP_RATE: case IEEE80211_RADIOTAP_RATE:
/* radiotap "rate" u8 is in /* radiotap "rate" u8 is in
* 500kbps units, eg, 0x02=1Mbps * 500kbps units, eg, 0x02=1Mbps
*/ */
pkt_rate_100kHz = (*iterator.this_arg) * 5; pkt_rate_100kHz = (*iterator.this_arg) * 5;
break; break;
case IEEE80211_RADIOTAP_ANTENNA: case IEEE80211_RADIOTAP_ANTENNA:
/* radiotap uses 0 for 1st ant */ /* radiotap uses 0 for 1st ant */
antenna = *iterator.this_arg); antenna = *iterator.this_arg);
break; break;
case IEEE80211_RADIOTAP_DBM_TX_POWER: case IEEE80211_RADIOTAP_DBM_TX_POWER:
pwr = *iterator.this_arg; pwr = *iterator.this_arg;
break; break;
default: default:
break; break;
} }
} /* while more rt headers */ } /* while more rt headers */
if (ret != -ENOENT) if (ret != -ENOENT)
return TXRX_DROP; return TXRX_DROP;
/* discard the radiotap header part */ /* discard the radiotap header part */
buf += iterator.max_length; buf += iterator.max_length;
buflen -= iterator.max_length; buflen -= iterator.max_length;
... ...
} }
Andy Green <andy@warmcat.com> Andy Green <andy@warmcat.com>

View File

@ -5211,7 +5211,7 @@ u32 ieee80211_mandatory_rates(struct ieee80211_supported_band *sband,
* Radiotap parsing functions -- for controlled injection support * Radiotap parsing functions -- for controlled injection support
* *
* Implemented in net/wireless/radiotap.c * Implemented in net/wireless/radiotap.c
* Documentation in Documentation/networking/radiotap-headers.txt * Documentation in Documentation/networking/radiotap-headers.rst
*/ */
struct radiotap_align_size { struct radiotap_align_size {

View File

@ -90,7 +90,7 @@ static const struct ieee80211_radiotap_namespace radiotap_ns = {
* iterator.this_arg for type "type" safely on all arches. * iterator.this_arg for type "type" safely on all arches.
* *
* Example code: * Example code:
* See Documentation/networking/radiotap-headers.txt * See Documentation/networking/radiotap-headers.rst
*/ */
int ieee80211_radiotap_iterator_init( int ieee80211_radiotap_iterator_init(