xref: /openwifi/doc/app_notes/inject_80211.md (revision fdbf6a5a6fd813ddbe71687c7b8fbdc230c21edb)
1a6085186SLina Ceballos<!--
2ea75aaf6SJiao XianjunAuthor: Michael Mehari
3ea75aaf6SJiao XianjunSPDX-FileCopyrightText: 2019 UGent
4a6085186SLina CeballosSPDX-License-Identifier: AGPL-3.0-or-later
5a6085186SLina Ceballos-->
67273ec43Smmehari
77273ec43Smmehari## 802.11 packet injection
87273ec43Smmehari
97273ec43SmmehariThe Linux wireless networking stack (i.e. driver, mac80211, cfg80211, net_dev, user app) is a robust implementation supporting a plethora of wireless devices. As robust as it is, it also has a drawback when it comes to single-layer testing.
107273ec43Smmehari
117273ec43SmmehariPing and Iperf are well established performance measurement tools. However, using such tools to measure 802.11 PHY performance can be misleading, simply because they touch multiple layers in the network stack.
127273ec43Smmehari
137273ec43SmmehariLuckily, the mac80211 Linux subsystem provides packet injection functionality and it allows us to have finer control over physical layer testing.
147273ec43Smmehari
157273ec43SmmehariTo this end, we have adapted a [packetspammer](https://github.com/gnychis/packetspammer) application originally written by Andy Green <[email protected]> and maintained by George Nychis <[email protected]>.
167273ec43Smmehari
17*fdbf6a5aSJiao Xianjun### Build inject_80211 on board
187273ec43SmmehariUserspace program to inject 802.11 packets through mac80211 supported (softmac) wireless devices.
197273ec43Smmehari
20*fdbf6a5aSJiao XianjunLogin/ssh to the board, then
21*fdbf6a5aSJiao Xianjun```
22*fdbf6a5aSJiao Xianjuncd openwifi/inject_80211
23*fdbf6a5aSJiao Xianjunmake
24*fdbf6a5aSJiao Xianjun```
25*fdbf6a5aSJiao Xianjun
267273ec43Smmehari### Options
277273ec43Smmehari  ```
287273ec43Smmehari-m/--hw_mode <hardware operation mode> (a,g,n)
297273ec43Smmehari-r/--rate_index <rate/MCS index> (0,1,2,3,4,5,6,7)
307273ec43Smmehari-i/--sgi_flag (0,1)
317273ec43Smmehari-n/--num_packets <number of packets>
327273ec43Smmehari-s/--payload_size <payload size in bytes>
337273ec43Smmehari-d/--delay <delay between packets in usec>
347273ec43Smmehari-h   this menu
357273ec43Smmehari  ```
367273ec43Smmehari
377273ec43Smmehari### Example:
387273ec43Smmehari```
397273ec43Smmehariiw dev wlan0 interface add mon0 type monitor && ifconfig mon0 up
407273ec43Smmehariinject_80211 -m n -r 0  -n 64 -s 100 mon0     # Inject 10 802.11n packets at 6.5Mbps bitrate and 64bytes size
417273ec43Smmehari```
427273ec43Smmehari
437273ec43Smmehari### Link performance test
447273ec43Smmehari
457273ec43SmmehariTo make a profound experimental analysis on the physical layer performance, we can rely on automation scripts.
467273ec43Smmehari
477273ec43SmmehariThe following script will inject 100 802.11n packets at different bitrates and payload sizes.
487273ec43Smmehari
497273ec43Smmehari```
507273ec43Smmehari#!/bin/bash
517273ec43Smmehari
527273ec43SmmehariHW_MODE='n'
537273ec43SmmehariCOUNT=100
547273ec43SmmehariDELAY=1000
557273ec43SmmehariRATE=( 0 1 2 3 4 5 6 7 )
567273ec43SmmehariSIZE=( $(seq -s' ' 50 100 1450) ) # paload size in bytes
577273ec43SmmehariIF="mon0"
587273ec43Smmehari
597273ec43Smmeharifor (( i = 0 ; i < ${#PAYLOAD[@]} ; i++ )) do
607273ec43Smmehari	for (( j = 0 ; j < ${#RATE[@]} ; j++ )) do
617273ec43Smmehari		inject_80211 -m $HW_MODE -n $COUNT -d $DELAY -r ${RATE[$j]} -s ${SIZE[$i]} $IF
627273ec43Smmehari		sleep 1
637273ec43Smmehari	done
647273ec43Smmeharidone
657273ec43Smmehari
667273ec43Smmehari```
677273ec43Smmehari
687273ec43SmmehariOn the receiver side, we can use tcpdump to collect the pcap traces.
697273ec43Smmehari
707273ec43Smmehari```
717273ec43Smmehariiw dev wlan0 interface add mon0 type monitor && ifconfig mon0 up
727273ec43Smmeharitcpdump -i mon0 -w trace.pcap 'wlan addr1 ff:ff:ff:ff:ff:ff and wlan addr2 66:55:44:33:22:11'
737273ec43Smmehari```
747273ec43Smmehari
757273ec43SmmehariWlan addresses *ff:ff:ff:ff:ff:ff* and *66:55:44:33:22:11* are specific to our injector application.
767273ec43Smmehari
777273ec43SmmehariNext, we analyze the collected pcap traces using the analysis tool provided.
787273ec43Smmehari
797273ec43Smmehari```
807273ec43Smmeharianalyze_80211 trace.pcap
817273ec43Smmehari```
827273ec43Smmehari
837273ec43SmmehariAn excerpt from a sample analysis looks the following
847273ec43Smmehari
857273ec43Smmehari```
867273ec43SmmehariHW MODE	RATE(Mbps)	SGI	SIZE(bytes)	COUNT	Duration(sec)
877273ec43Smmehari=======	==========	===	===========	=====	=============
887273ec43Smmehari802.11n	6.5           	OFF	54		100	0.11159
897273ec43Smmehari802.11n	13.0		OFF	54		100	0.11264
907273ec43Smmehari802.11n	19.5		OFF	54		100	0.11156
917273ec43Smmehari802.11n	26.0		OFF	54	    	100	0.11268
927273ec43Smmehari802.11n	39.0		OFF	54	    	100	0.11333
937273ec43Smmehari802.11n	52.0		OFF	54	    	100	0.11149
947273ec43Smmehari802.11n	58.5		OFF	54	    	100	0.11469
957273ec43Smmehari802.11n	65.0		OFF	54	    	100	0.11408
967273ec43Smmehari```
977273ec43Smmehari
98