From: Mauro Carvalho Chehab Date: Thu, 30 Apr 2020 16:03:59 +0000 (+0200) Subject: docs: networking: convert mac80211-injection.txt to ReST X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=429ff87bcac75b929d9ffec8d4d24be2616f8052;p=linux.git docs: networking: convert mac80211-injection.txt to ReST - add SPDX header; - adjust title markup; - mark code blocks and literals as such; - mark tables as such; - adjust identation, whitespaces and blank lines; - add to networking/index.rst. Signed-off-by: Mauro Carvalho Chehab Signed-off-by: David S. Miller --- diff --git a/Documentation/networking/index.rst b/Documentation/networking/index.rst index b3608b177a8ba..81c1834bfb574 100644 --- a/Documentation/networking/index.rst +++ b/Documentation/networking/index.rst @@ -77,6 +77,7 @@ Contents: l2tp lapb-module ltpc + mac80211-injection .. only:: subproject and html diff --git a/Documentation/networking/mac80211-injection.rst b/Documentation/networking/mac80211-injection.rst new file mode 100644 index 0000000000000..75d4edcae8526 --- /dev/null +++ b/Documentation/networking/mac80211-injection.rst @@ -0,0 +1,106 @@ +.. SPDX-License-Identifier: GPL-2.0 + +========================================= +How to use packet injection with mac80211 +========================================= + +mac80211 now allows arbitrary packets to be injected down any Monitor Mode +interface from userland. The packet you inject needs to be composed in the +following format:: + + [ radiotap header ] + [ ieee80211 header ] + [ payload ] + +The radiotap format is discussed in +./Documentation/networking/radiotap-headers.txt. + +Despite many radiotap parameters being currently defined, most only make sense +to appear on received packets. The following information is parsed from the +radiotap headers and used to control injection: + + * IEEE80211_RADIOTAP_FLAGS + + ========================= =========================================== + IEEE80211_RADIOTAP_F_FCS FCS will be removed and recalculated + IEEE80211_RADIOTAP_F_WEP frame will be encrypted if key available + IEEE80211_RADIOTAP_F_FRAG frame will be fragmented if longer than the + current fragmentation threshold. + ========================= =========================================== + + * IEEE80211_RADIOTAP_TX_FLAGS + + ============================= ======================================== + IEEE80211_RADIOTAP_F_TX_NOACK frame should be sent without waiting for + an ACK even if it is a unicast frame + ============================= ======================================== + + * IEEE80211_RADIOTAP_RATE + + legacy rate for the transmission (only for devices without own rate control) + + * IEEE80211_RADIOTAP_MCS + + HT rate for the transmission (only for devices without own rate control). + Also some flags are parsed + + ============================ ======================== + IEEE80211_RADIOTAP_MCS_SGI use short guard interval + IEEE80211_RADIOTAP_MCS_BW_40 send in HT40 mode + ============================ ======================== + + * IEEE80211_RADIOTAP_DATA_RETRIES + + number of retries when either IEEE80211_RADIOTAP_RATE or + IEEE80211_RADIOTAP_MCS was used + + * IEEE80211_RADIOTAP_VHT + + VHT mcs and number of streams used in the transmission (only for devices + without own rate control). Also other fields are parsed + + flags field + IEEE80211_RADIOTAP_VHT_FLAG_SGI: use short guard interval + + bandwidth field + * 1: send using 40MHz channel width + * 4: send using 80MHz channel width + * 11: send using 160MHz channel width + +The injection code can also skip all other currently defined radiotap fields +facilitating replay of captured radiotap headers directly. + +Here is an example valid radiotap header defining some parameters:: + + 0x00, 0x00, // <-- radiotap version + 0x0b, 0x00, // <- radiotap header length + 0x04, 0x0c, 0x00, 0x00, // <-- bitmap + 0x6c, // <-- rate + 0x0c, //<-- tx power + 0x01 //<-- antenna + +The ieee80211 header follows immediately afterwards, looking for example like +this:: + + 0x08, 0x01, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x13, 0x22, 0x33, 0x44, 0x55, 0x66, + 0x13, 0x22, 0x33, 0x44, 0x55, 0x66, + 0x10, 0x86 + +Then lastly there is the payload. + +After composing the packet contents, it is sent by send()-ing it to a logical +mac80211 interface that is in Monitor mode. Libpcap can also be used, +(which is easier than doing the work to bind the socket to the right +interface), along the following lines::: + + ppcap = pcap_open_live(szInterfaceName, 800, 1, 20, szErrbuf); + ... + r = pcap_inject(ppcap, u8aSendBuffer, nLength); + +You can also find a link to a complete inject application here: + +http://wireless.kernel.org/en/users/Documentation/packetspammer + +Andy Green diff --git a/Documentation/networking/mac80211-injection.txt b/Documentation/networking/mac80211-injection.txt deleted file mode 100644 index d58d78df9ca2d..0000000000000 --- a/Documentation/networking/mac80211-injection.txt +++ /dev/null @@ -1,97 +0,0 @@ -How to use packet injection with mac80211 -========================================= - -mac80211 now allows arbitrary packets to be injected down any Monitor Mode -interface from userland. The packet you inject needs to be composed in the -following format: - - [ radiotap header ] - [ ieee80211 header ] - [ payload ] - -The radiotap format is discussed in -./Documentation/networking/radiotap-headers.txt. - -Despite many radiotap parameters being currently defined, most only make sense -to appear on received packets. The following information is parsed from the -radiotap headers and used to control injection: - - * IEEE80211_RADIOTAP_FLAGS - - IEEE80211_RADIOTAP_F_FCS: FCS will be removed and recalculated - IEEE80211_RADIOTAP_F_WEP: frame will be encrypted if key available - IEEE80211_RADIOTAP_F_FRAG: frame will be fragmented if longer than the - current fragmentation threshold. - - * IEEE80211_RADIOTAP_TX_FLAGS - - IEEE80211_RADIOTAP_F_TX_NOACK: frame should be sent without waiting for - an ACK even if it is a unicast frame - - * IEEE80211_RADIOTAP_RATE - - legacy rate for the transmission (only for devices without own rate control) - - * IEEE80211_RADIOTAP_MCS - - HT rate for the transmission (only for devices without own rate control). - Also some flags are parsed - - IEEE80211_RADIOTAP_MCS_SGI: use short guard interval - IEEE80211_RADIOTAP_MCS_BW_40: send in HT40 mode - - * IEEE80211_RADIOTAP_DATA_RETRIES - - number of retries when either IEEE80211_RADIOTAP_RATE or - IEEE80211_RADIOTAP_MCS was used - - * IEEE80211_RADIOTAP_VHT - - VHT mcs and number of streams used in the transmission (only for devices - without own rate control). Also other fields are parsed - - flags field - IEEE80211_RADIOTAP_VHT_FLAG_SGI: use short guard interval - - bandwidth field - 1: send using 40MHz channel width - 4: send using 80MHz channel width - 11: send using 160MHz channel width - -The injection code can also skip all other currently defined radiotap fields -facilitating replay of captured radiotap headers directly. - -Here is an example valid radiotap header defining some parameters - - 0x00, 0x00, // <-- radiotap version - 0x0b, 0x00, // <- radiotap header length - 0x04, 0x0c, 0x00, 0x00, // <-- bitmap - 0x6c, // <-- rate - 0x0c, //<-- tx power - 0x01 //<-- antenna - -The ieee80211 header follows immediately afterwards, looking for example like -this: - - 0x08, 0x01, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x13, 0x22, 0x33, 0x44, 0x55, 0x66, - 0x13, 0x22, 0x33, 0x44, 0x55, 0x66, - 0x10, 0x86 - -Then lastly there is the payload. - -After composing the packet contents, it is sent by send()-ing it to a logical -mac80211 interface that is in Monitor mode. Libpcap can also be used, -(which is easier than doing the work to bind the socket to the right -interface), along the following lines: - - ppcap = pcap_open_live(szInterfaceName, 800, 1, 20, szErrbuf); -... - r = pcap_inject(ppcap, u8aSendBuffer, nLength); - -You can also find a link to a complete inject application here: - -http://wireless.kernel.org/en/users/Documentation/packetspammer - -Andy Green diff --git a/MAINTAINERS b/MAINTAINERS index 956999d2d979d..33bfc9e4aeade 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -10079,7 +10079,7 @@ S: Maintained W: https://wireless.wiki.kernel.org/ T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git -F: Documentation/networking/mac80211-injection.txt +F: Documentation/networking/mac80211-injection.rst F: Documentation/networking/mac80211_hwsim/mac80211_hwsim.rst F: drivers/net/wireless/mac80211_hwsim.[ch] F: include/net/mac80211.h diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index 82846aca86d96..9849c14694dbc 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c @@ -2144,7 +2144,7 @@ static bool ieee80211_parse_tx_radiotap(struct ieee80211_local *local, /* * Please update the file - * Documentation/networking/mac80211-injection.txt + * Documentation/networking/mac80211-injection.rst * when parsing new fields here. */